summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clients/window.c2
-rw-r--r--shared/cairo-util.c80
-rw-r--r--shared/cairo-util.h3
-rw-r--r--shared/frame.c40
4 files changed, 75 insertions, 50 deletions
diff --git a/clients/window.c b/clients/window.c
index 3502a95f..17d16ed4 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -4456,7 +4456,7 @@ window_show_menu(struct display *display,
window_set_buffer_scale (menu->window, window_get_buffer_scale (parent));
window_set_buffer_transform (menu->window, window_get_buffer_transform (parent));
menu->frame = frame_create(window->display->theme, 0, 0,
- FRAME_BUTTON_NONE, "Menu");
+ FRAME_BUTTON_NONE, NULL);
menu->entries = entries;
menu->count = count;
menu->release_count = 0;
diff --git a/shared/cairo-util.c b/shared/cairo-util.c
index 5b4b0ff3..39485729 100644
--- a/shared/cairo-util.c
+++ b/shared/cairo-util.c
@@ -418,7 +418,7 @@ theme_render_frame(struct theme *t,
cairo_text_extents_t extents;
cairo_font_extents_t font_extents;
cairo_surface_t *source;
- int x, y, margin;
+ int x, y, margin, top_margin;
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
cairo_set_source_rgba(cr, 0, 0, 0, 0);
@@ -439,40 +439,47 @@ theme_render_frame(struct theme *t,
else
source = t->inactive_frame;
+ if (title)
+ top_margin = t->titlebar_height;
+ else
+ top_margin = t->width;
+
tile_source(cr, source,
margin, margin,
width - margin * 2, height - margin * 2,
- t->width, t->titlebar_height);
-
- cairo_rectangle (cr, margin + t->width, margin,
- width - (margin + t->width) * 2,
- t->titlebar_height - t->width);
- cairo_clip(cr);
-
- cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
- cairo_select_font_face(cr, "sans",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_BOLD);
- cairo_set_font_size(cr, 14);
- cairo_text_extents(cr, title, &extents);
- cairo_font_extents (cr, &font_extents);
- x = (width - extents.width) / 2;
- y = margin +
- (t->titlebar_height -
- font_extents.ascent - font_extents.descent) / 2 +
- font_extents.ascent;
-
- if (flags & THEME_FRAME_ACTIVE) {
- cairo_move_to(cr, x + 1, y + 1);
- cairo_set_source_rgb(cr, 1, 1, 1);
- cairo_show_text(cr, title);
- cairo_move_to(cr, x, y);
- cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_show_text(cr, title);
- } else {
- cairo_move_to(cr, x, y);
- cairo_set_source_rgb(cr, 0.4, 0.4, 0.4);
- cairo_show_text(cr, title);
+ t->width, top_margin);
+
+ if (title) {
+ cairo_rectangle (cr, margin + t->width, margin,
+ width - (margin + t->width) * 2,
+ t->titlebar_height - t->width);
+ cairo_clip(cr);
+
+ cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+ cairo_select_font_face(cr, "sans",
+ CAIRO_FONT_SLANT_NORMAL,
+ CAIRO_FONT_WEIGHT_BOLD);
+ cairo_set_font_size(cr, 14);
+ cairo_text_extents(cr, title, &extents);
+ cairo_font_extents (cr, &font_extents);
+ x = (width - extents.width) / 2;
+ y = margin +
+ (t->titlebar_height -
+ font_extents.ascent - font_extents.descent) / 2 +
+ font_extents.ascent;
+
+ if (flags & THEME_FRAME_ACTIVE) {
+ cairo_move_to(cr, x + 1, y + 1);
+ cairo_set_source_rgb(cr, 1, 1, 1);
+ cairo_show_text(cr, title);
+ cairo_move_to(cr, x, y);
+ cairo_set_source_rgb(cr, 0, 0, 0);
+ cairo_show_text(cr, title);
+ } else {
+ cairo_move_to(cr, x, y);
+ cairo_set_source_rgb(cr, 0.4, 0.4, 0.4);
+ cairo_show_text(cr, title);
+ }
}
}
@@ -482,10 +489,15 @@ theme_get_location(struct theme *t, int x, int y,
{
int vlocation, hlocation, location;
const int grip_size = 8;
- int margin;
+ int margin, top_margin;
margin = (flags & THEME_FRAME_MAXIMIZED) ? 0 : t->margin;
+ if (flags & THEME_FRAME_NO_TITLE)
+ top_margin = t->width;
+ else
+ top_margin = t->titlebar_height;
+
if (x < margin)
hlocation = THEME_LOCATION_EXTERIOR;
else if (margin <= x && x < margin + grip_size)
@@ -512,7 +524,7 @@ theme_get_location(struct theme *t, int x, int y,
if (location & THEME_LOCATION_EXTERIOR)
location = THEME_LOCATION_EXTERIOR;
if (location == THEME_LOCATION_INTERIOR &&
- y < margin + t->titlebar_height)
+ y < margin + top_margin)
location = THEME_LOCATION_TITLEBAR;
else if (location == THEME_LOCATION_INTERIOR)
location = THEME_LOCATION_CLIENT_AREA;
diff --git a/shared/cairo-util.h b/shared/cairo-util.h
index a8eb8741..cce76710 100644
--- a/shared/cairo-util.h
+++ b/shared/cairo-util.h
@@ -60,7 +60,8 @@ theme_destroy(struct theme *t);
enum {
THEME_FRAME_ACTIVE = 1,
- THEME_FRAME_MAXIMIZED,
+ THEME_FRAME_MAXIMIZED = 2,
+ THEME_FRAME_NO_TITLE = 4
};
void
diff --git a/shared/frame.c b/shared/frame.c
index fc859507..956e104e 100644
--- a/shared/frame.c
+++ b/shared/frame.c
@@ -291,11 +291,14 @@ frame_create(struct theme *t, int32_t width, int32_t height, uint32_t buttons,
wl_list_init(&frame->pointers);
wl_list_init(&frame->touches);
- button = frame_button_create(frame, DATADIR "/weston/icon_window.png",
- FRAME_STATUS_MENU,
- FRAME_BUTTON_CLICK_DOWN);
- if (!button)
- goto free_frame;
+ if (title) {
+ button = frame_button_create(frame,
+ DATADIR "/weston/icon_window.png",
+ FRAME_STATUS_MENU,
+ FRAME_BUTTON_CLICK_DOWN);
+ if (!button)
+ goto free_frame;
+ }
if (buttons & FRAME_BUTTON_CLOSE) {
button = frame_button_create(frame,
@@ -400,15 +403,20 @@ void
frame_resize_inside(struct frame *frame, int32_t width, int32_t height)
{
struct theme *t = frame->theme;
- int decoration_width, decoration_height;
+ int decoration_width, decoration_height, titlebar_height;
+
+ if (frame->title)
+ titlebar_height = t->titlebar_height;
+ else
+ titlebar_height = t->width;
if (frame->flags & FRAME_FLAG_MAXIMIZED) {
decoration_width = t->width * 2;
- decoration_height = t->width + t->titlebar_height;
+ decoration_height = t->width + titlebar_height;
} else {
decoration_width = (t->width + t->margin) * 2;
decoration_height = t->width +
- t->titlebar_height + t->margin * 2;
+ titlebar_height + t->margin * 2;
}
frame_resize(frame, width + decoration_width,
@@ -432,18 +440,23 @@ frame_refresh_geometry(struct frame *frame)
{
struct frame_button *button;
struct theme *t = frame->theme;
- int x_l, x_r, y, w, h;
+ int x_l, x_r, y, w, h, titlebar_height;
int32_t decoration_width, decoration_height;
if (!frame->geometry_dirty)
return;
+ if (frame->title)
+ titlebar_height = t->titlebar_height;
+ else
+ titlebar_height = t->width;
+
if (frame->flags & FRAME_FLAG_MAXIMIZED) {
decoration_width = t->width * 2;
- decoration_height = t->width + t->titlebar_height;
+ decoration_height = t->width + titlebar_height;
frame->interior.x = t->width;
- frame->interior.y = t->titlebar_height;
+ frame->interior.y = titlebar_height;
frame->interior.width = frame->width - decoration_width;
frame->interior.height = frame->height - decoration_height;
@@ -451,11 +464,10 @@ frame_refresh_geometry(struct frame *frame)
frame->shadow_margin = 0;
} else {
decoration_width = (t->width + t->margin) * 2;
- decoration_height = t->width +
- t->titlebar_height + t->margin * 2;
+ decoration_height = t->width + titlebar_height + t->margin * 2;
frame->interior.x = t->width + t->margin;
- frame->interior.y = t->titlebar_height + t->margin;
+ frame->interior.y = titlebar_height + t->margin;
frame->interior.width = frame->width - decoration_width;
frame->interior.height = frame->height - decoration_height;