#include <wayland-server.h>
+#include "../shared/cairo-util.h"
#include "compositor.h"
#include "xserver-server-protocol.h"
#include "hash.h"
struct hash_table *window_hash;
struct weston_xserver *server;
xcb_window_t wm_window;
- int border_width, title_height;
struct weston_wm_window *focus_window;
+ struct theme *theme;
xcb_window_t selection_window;
int incr;
xcb_map_request_event_t *map_request =
(xcb_map_request_event_t *) event;
struct weston_wm_window *window;
+ struct theme *t = wm->theme;
uint32_t values[1];
if (our_resource(wm, map_request->window)) {
window->frame_id,
wm->screen->root,
0, 0,
- window->width + wm->border_width * 2,
- window->height + wm->border_width * 2 + wm->title_height,
+ window->width + (t->margin + t->width) * 2,
+ window->height + t->margin * 2 + t->width + t->titlebar_height,
0,
XCB_WINDOW_CLASS_INPUT_OUTPUT,
wm->screen->root_visual,
XCB_CW_EVENT_MASK, values);
xcb_reparent_window(wm->conn, window->id, window->frame_id,
- wm->border_width,
- wm->border_width + wm->title_height);
+ t->margin + t->width,
+ t->margin + t->titlebar_height);
fprintf(stderr, "XCB_MAP_REQUEST (window %d, %p, frame %d)\n",
window->id, window, window->frame_id);
{
struct weston_wm_window *window = data;
struct weston_wm *wm = window->wm;
+ struct theme *t = wm->theme;
cairo_surface_t *surface;
cairo_t *cr;
- cairo_text_extents_t text_extents;
- cairo_font_extents_t font_extents;
xcb_render_pictforminfo_t *render_format;
- int x, y, width, height;
+ int width, height;
const char *title;
+ uint32_t flags = 0;
weston_wm_window_read_properties(window);
window->repaint_source = NULL;
- width = window->width + wm->border_width * 2;
- height = window->height + wm->border_width * 2 + wm->title_height;
+ width = window->width + (t->margin + t->width) * 2;
+ height = window->height +
+ t->margin * 2 + t->titlebar_height + t->width;
render_format = find_depth(wm->conn, 24);
surface = cairo_xcb_surface_create_with_xrender_format(wm->conn,
width,
height);
cr = cairo_create(surface);
- cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
if (wm->focus_window == window)
- cairo_set_source_rgba(cr, 1, 0, 0, 0.8);
- else
- cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-
- cairo_paint(cr);
+ flags |= THEME_FRAME_ACTIVE;
if (window->name)
title = window->name;
else
title = "untitled";
- 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_font_extents (cr, &font_extents);
- cairo_text_extents(cr, title, &text_extents);
- x = (width - text_extents.width) / 2;
- y = (wm->border_width + wm->title_height -
- font_extents.ascent - font_extents.descent) / 2 +
- font_extents.ascent;
-
- cairo_move_to(cr, x, y);
- if (wm->focus_window == window)
- cairo_set_source_rgb(cr, 1, 1, 1);
- else
- cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
-
- cairo_show_text(cr, title);
+ theme_render_frame(t, cr, width, height, title, flags);
cairo_destroy(cr);
cairo_surface_destroy(surface);
XCB_EVENT_MASK_PROPERTY_CHANGE;
xcb_change_window_attributes(wm->conn, wm->screen->root,
XCB_CW_EVENT_MASK, values);
- wm->border_width = 2;
- wm->title_height = 24;
+ wm->theme = theme_create();
weston_wm_create_wm_window(wm);