On Tue, 5 Aug 2014 15:22:04 +0800 Boyan Ding <stu_...@126.com> wrote:
> Previously geometry was changed to leave space for titlebar if a frame > has only buttons but no title. This patch fixes theme_render_frame to > avoid transparent titlebar. > > Signed-off-by: Boyan Ding <stu_...@126.com> > --- > shared/cairo-util.c | 8 +++++--- > shared/cairo-util.h | 5 ++++- > shared/frame.c | 2 +- > 3 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/shared/cairo-util.c b/shared/cairo-util.c > index 2a33249..26286c5 100644 > --- a/shared/cairo-util.c > +++ b/shared/cairo-util.c > @@ -28,6 +28,7 @@ > #include <string.h> > #include <stdio.h> > #include <math.h> > +#include <wayland-util.h> > #include <cairo.h> > #include "cairo-util.h" > > @@ -413,7 +414,8 @@ theme_destroy(struct theme *t) > void > theme_render_frame(struct theme *t, > cairo_t *cr, int width, int height, > - const char *title, uint32_t flags) > + const char *title, struct wl_list *buttons, > + uint32_t flags) > { > cairo_text_extents_t extents; > cairo_font_extents_t font_extents; > @@ -439,7 +441,7 @@ theme_render_frame(struct theme *t, > else > source = t->inactive_frame; > > - if (title) > + if (title || !wl_list_empty(buttons)) > top_margin = t->titlebar_height; > else > top_margin = t->width; > @@ -449,7 +451,7 @@ theme_render_frame(struct theme *t, > width - margin * 2, height - margin * 2, > t->width, top_margin); > > - if (title) { > + if (title || !wl_list_empty(buttons)) { > cairo_rectangle (cr, margin + t->width, margin, > width - (margin + t->width) * 2, > t->titlebar_height - t->width); > diff --git a/shared/cairo-util.h b/shared/cairo-util.h > index 4493b0d..fb25c34 100644 > --- a/shared/cairo-util.h > +++ b/shared/cairo-util.h > @@ -26,6 +26,8 @@ > #include <stdint.h> > #include <cairo.h> > > +#include <wayland-util.h> > + > void > surface_flush_device(cairo_surface_t *surface); > > @@ -69,7 +71,8 @@ theme_set_background_source(struct theme *t, cairo_t *cr, > uint32_t flags); > void > theme_render_frame(struct theme *t, > cairo_t *cr, int width, int height, > - const char *title, uint32_t flags); > + const char *title, struct wl_list *buttons, > + uint32_t flags); > > enum theme_location { > THEME_LOCATION_INTERIOR = 0, > diff --git a/shared/frame.c b/shared/frame.c > index 53f3f5f..5ea0e12 100644 > --- a/shared/frame.c > +++ b/shared/frame.c > @@ -853,7 +853,7 @@ frame_repaint(struct frame *frame, cairo_t *cr) > > cairo_save(cr); > theme_render_frame(frame->theme, cr, frame->width, frame->height, > - frame->title, flags); > + frame->title, &frame->buttons, flags); > cairo_restore(cr); > > wl_list_for_each(button, &frame->buttons, link) Not sure how I'd test it, but it looks okay to me... pushed. Thanks, pq _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel