cairo-util: Draw solid titlebar for frames with only buttons
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_dby@126.com>
This commit is contained in:
parent
c06a180dd5
commit
850a514137
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue