modifications to keep up with libobrender2
authorDana Jansens <danakj@orodu.net>
Tue, 3 Jun 2003 20:31:34 +0000 (20:31 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 3 Jun 2003 20:31:34 +0000 (20:31 +0000)
openbox/event.c
openbox/frame.c
openbox/frame.h
openbox/framerender.c
openbox/popup.c

index cef0ae08e06a7432d478461cff3d70116a36ff21..038ff08b9e110ce9d841652abaf26192a5227ee3 100644 (file)
@@ -576,22 +576,27 @@ static void event_handle_client(Client *client, XEvent *e)
             case Context_Maximize:
                 client->frame->max_press = (e->type == ButtonPress);
                 framerender_frame(client->frame);
+                RrPaint(client->frame->s_max, 1);
                 break;
             case Context_Close:
                 client->frame->close_press = (e->type == ButtonPress);
                 framerender_frame(client->frame);
+                RrPaint(client->frame->s_close, 1);
                 break;
             case Context_Iconify:
                 client->frame->iconify_press = (e->type == ButtonPress);
                 framerender_frame(client->frame);
+                RrPaint(client->frame->s_iconify, 1);
                 break;
             case Context_AllDesktops:
                 client->frame->desk_press = (e->type == ButtonPress);
                 framerender_frame(client->frame);
-                break; 
+                RrPaint(client->frame->s_desk, 1);
+                break;
             case Context_Shade:
                 client->frame->shade_press = (e->type == ButtonPress);
                 framerender_frame(client->frame);
+                RrPaint(client->frame->s_shade, 1);
                 break;
             default:
                 /* nothing changes with clicks for any other contexts */
index ebd88d499737f99935c35d7998d798890da67ab2..b85b10894ab34e8035abf9753cad3727c3d07f2d 100644 (file)
@@ -4,7 +4,8 @@
 #include "framerender.h"
 #include "render2/theme.h"
 
-#define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask)
+#define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask | \
+                         ExposureMask)
 #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
                          ButtonPressMask | ButtonReleaseMask | ExposureMask)
 #define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
@@ -45,10 +46,8 @@ Frame *frame_new()
     attrib.override_redirect = TRUE;
     self->window = createWindow(ob_root, mask, &attrib);
 
-    mask = 0;
-    self->plate = createWindow(self->window, mask, &attrib);
-
     self->s_frame = RrSurfaceNew(ob_render_inst, 0, self->window, 0);
+    self->s_plate = RrSurfaceNewChild(0, self->s_frame, 0);
     self->s_title = RrSurfaceNewChild(0, self->s_frame, 0);
     self->s_label = RrSurfaceNewChild(0, self->s_title, 0);
     self->s_max = RrSurfaceNewChild(0, self->s_title, 0);
@@ -61,6 +60,7 @@ Frame *frame_new()
     self->s_lgrip = RrSurfaceNewChild(0, self->s_handle, 0);
     self->s_rgrip = RrSurfaceNewChild(0, self->s_handle, 0);
 
+    self->plate = RrSurfaceWindow(self->s_plate);
     self->w_title = RrSurfaceWindow(self->s_title);
     self->w_label = RrSurfaceWindow(self->s_label);
     self->w_max = RrSurfaceWindow(self->s_max);
@@ -91,7 +91,7 @@ Frame *frame_new()
     self->focused = FALSE;
 
     /* the other stuff is shown based on decor settings */
-    XMapWindow(ob_display, self->plate);
+    RrSurfaceShow(self->s_plate);
     RrSurfaceShow(self->s_label);
     RrSurfaceShow(self->s_lgrip);
     RrSurfaceShow(self->s_rgrip);
@@ -115,9 +115,9 @@ static void frame_free(Frame *self)
     RrSurfaceFree(self->s_max);
     RrSurfaceFree(self->s_label);
     RrSurfaceFree(self->s_title);
+    RrSurfaceFree(self->s_plate);
     RrSurfaceFree(self->s_frame);
 
-    XDestroyWindow(ob_display, self->plate);
     XDestroyWindow(ob_display, self->window);
 
     g_free(self);
@@ -242,12 +242,14 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized)
 
     if (resized) {
         /* move and resize the plate */
-        XMoveResizeWindow(ob_display, self->plate,
-                          self->size.left, self->size.top,
-                          self->client->area.width,
-                          self->client->area.height);
+        RrSurfaceSetArea(self->s_plate,
+                         self->size.left - self->cbwidth,
+                         self->size.top - self->cbwidth,
+                         self->client->area.width - self->cbwidth * 2,
+                         self->client->area.height - self->cbwidth * 2);
         /* when the client has StaticGravity, it likes to move around. */
-        XMoveWindow(ob_display, self->client->window, 0, 0);
+        XMoveWindow(ob_display, self->client->window,
+                    self->cbwidth, self->cbwidth);
     }
 
     /* shading can change without being moved or resized */
@@ -282,22 +284,26 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized)
 void frame_adjust_state(Frame *self)
 {
     framerender_frame(self);
+    RrPaint(self->s_frame, 1);
 }
 
 void frame_adjust_focus(Frame *self, gboolean hilite)
 {
     self->focused = hilite;
     framerender_frame(self);
+    RrPaint(self->s_frame, 1);
 }
 
 void frame_adjust_title(Frame *self)
 {
     framerender_frame(self);
+    RrPaint(self->s_label, 1);
 }
 
 void frame_adjust_icon(Frame *self)
 {
     framerender_frame(self);
+    RrPaint(self->s_icon, 1);
 }
 
 void frame_grab_client(Frame *self, Client *client)
index ccc799ec74cd5a4aff2dfd5ad92f5d826bc485ac..2201daec323f258fbd32c3aa906b39d6b27ee1f7 100644 (file)
@@ -38,6 +38,7 @@ typedef struct Frame {
     Rect   area;
     gboolean visible;
 
+    struct RrSurface *s_plate;
     struct RrSurface *s_frame;
     struct RrSurface *s_title;
     struct RrSurface *s_label;
index 9df97782a15e98f0a8b749a580afceb1b861602c..5d22622a314fbdc002c070bf3934b6a541db8911 100644 (file)
@@ -9,12 +9,14 @@ void framerender_frame(Frame *self)
     /* XXX plate, client border */
 
     if (self->client->decorations & Decor_Titlebar) {
-        struct RrSurface *t, *l, *m, *n, *i, *d, *s, *c;
+        struct RrSurface *t, *l, *p, *m, *n, *i, *d, *s, *c;
 
         t = (self->focused ?
              ob_theme->title_f : ob_theme->title);
         l = (self->focused ?
              ob_theme->label_f : ob_theme->label);
+        p = (self->focused ?
+             ob_theme->plate_f : ob_theme->plate);
         m = (self->focused ?
              (self->client->max_vert || self->client->max_horz ?
               ob_theme->max_p_f : (self->max_press ?
@@ -50,6 +52,7 @@ void framerender_frame(Frame *self)
 
         RrSurfaceCopy(self->s_title, t);
         RrSurfaceCopy(self->s_label, l);
+        RrSurfaceCopy(self->s_plate, p);
 
         RrTextureSetText(self->s_label, 0, ob_theme->title_font,
                          ob_theme->title_justify,
@@ -96,6 +99,4 @@ void framerender_frame(Frame *self)
         RrSurfaceCopy(self->s_lgrip, g);
         RrSurfaceCopy(self->s_rgrip, g);
     }
-    /* XXX this could be more efficient */
-    RrPaint(self->s_frame);
 }
index 7b3edafeb3fe3abf6dd9ede1c9e3cdd96aebe5aa..6dab1082ee451bc5d201be560c9041cb9223bc69 100644 (file)
@@ -91,7 +91,7 @@ void popup_size_to_string(Popup *self, char *text)
     int textw, texth;
     int iconw;
 
-    RrTextureSetText(self->s_text, 0, NULL, RR_LEFT,
+    RrTextureSetText(self->s_text, 0, ob_theme->title_font, RR_LEFT,
                      &ob_theme->app_label_color_h, text);
     RrSurfaceMinSize(self->s_text, &textw, &texth);
     textw += ob_theme->bevel * 2;
@@ -193,8 +193,11 @@ void popup_show(Popup *self, char *text, Icon *icon)
     if (!RrSurfaceVisible(self->s_bg)) {
         RrSurfaceShow(self->s_bg);
         stacking_raise(INTERNAL_AS_WINDOW(self));
-    } else
-        RrPaint(self->s_bg);
+    } else {
+        RrPaint(self->s_text, 1);
+        if (self->hasicon)
+            RrPaint(self->s_icon, 1);
+    }
 }
 
 void popup_hide(Popup *self)