port to the new render stuff.. but this isnt complte since we don't have themes yet.
authorDana Jansens <danakj@orodu.net>
Tue, 27 May 2003 03:20:27 +0000 (03:20 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 27 May 2003 03:20:27 +0000 (03:20 +0000)
17 files changed:
openbox/client.c
openbox/client.h
openbox/dock.c
openbox/dock.h
openbox/frame.c
openbox/frame.h
openbox/framerender.c
openbox/menu.c
openbox/menu.h
openbox/menu_render.c
openbox/moveresize.c
openbox/openbox.c
openbox/openbox.h
openbox/popup.c
openbox/screen.c
openbox/window.c
plugins/menu/client_menu.c

index ade1a1093cb59abf9fea2a7acf79d2c311179086..d4f62845d06661f9812547db832931051745c7f3 100644 (file)
@@ -15,7 +15,7 @@
 #include "group.h"
 #include "config.h"
 #include "menu.h"
-#include "render/render.h"
+#include "render2/render.h"
 
 #include <glib.h>
 #include <X11/Xutil.h>
@@ -1337,23 +1337,25 @@ void client_update_icons(Client *self)
            w = self->icons[j].width = data[i++];
            h = self->icons[j].height = data[i++];
 
-           self->icons[j].data = g_new(pixel32, w * h);
+           self->icons[j].data = g_new(RrData32, w * h);
             for (x = 0, y = 0, t = 0; t < w * h; ++t, ++x, ++i) {
                 if (x >= w) {
                     x = 0;
                     ++y;
                 }
+                /* XXX optimize me, less shifts pls */
                 self->icons[j].data[t] =
-                    (((data[i] >> 24) & 0xff) << default_alpha_offset) +
-                    (((data[i] >> 16) & 0xff) << default_red_offset) +
-                    (((data[i] >> 8) & 0xff) << default_green_offset) +
-                    (((data[i] >> 0) & 0xff) << default_blue_offset);
+                    (((data[i] >> 24) & 0xff) << 0) +
+                    (((data[i] >> 16) & 0xff) << 24) +
+                    (((data[i] >> 8) & 0xff) << 16) +
+                    (((data[i] >> 0) & 0xff) << 8);
             }
            g_assert(i <= num);
        }
 
        g_free(data);
-    } else if (PROP_GETA32(self->window, kwm_win_icon,
+    }/* XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
+       else if (PROP_GETA32(self->window, kwm_win_icon,
                            kwm_win_icon, &data, &num)) {
         if (num == 2) {
             self->nicons++;
@@ -1387,6 +1389,7 @@ void client_update_icons(Client *self)
             XFree(hints);
         }
     }
+*/
 
     if (self->frame)
        frame_adjust_icon(self->frame);
index 5d84df0b3a26777c940f961b4969c6f4fe3c69f2..a335c36ef3094b519fd471fc778eda91f3754822 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "geom.h"
 #include "stacking.h"
-#include "render/color.h"
+#include "render2/render.h"
 
 #include <glib.h>
 #include <X11/Xlib.h>
@@ -18,7 +18,7 @@ struct Group;
 /*! Holds an icon in ARGB format */
 typedef struct Icon {
     int width, height;
-    pixel32 *data;
+    RrData32 *data;
 } Icon;
      
 /*! The MWM Hints as retrieved from the window property
index aaae5b6eb0cd27282d8a75a06376aaccd36f3f9c..63fe29481328f57e04a0152aa4f54d0eb8546260 100644 (file)
@@ -4,7 +4,9 @@
 #include "config.h"
 #include "grab.h"
 #include "openbox.h"
-#include "render/theme.h"
+
+/* XXX temp */
+static int theme_bwidth = 3;
 
 #define DOCK_EVENT_MASK (ButtonPressMask | ButtonReleaseMask | \
                          EnterWindowMask | LeaveWindowMask)
@@ -28,11 +30,15 @@ void dock_startup()
     attrib.event_mask = DOCK_EVENT_MASK;
     attrib.override_redirect = True;
     dock->frame = XCreateWindow(ob_display, ob_root, 0, 0, 1, 1, 0,
-                                render_depth, InputOutput, render_visual,
+                                RrInstanceDepth(ob_render_inst), InputOutput,
+                                RrInstanceVisual(ob_render_inst),
                                 CWOverrideRedirect | CWEventMask,
                                 &attrib);
+    dock->s_frame = RrSurfaceNew(ob_render_inst, RR_SURFACE_PLANAR,
+                                 dock->frame, 0);
+    /* XXX COPY THE APPEARANCE FROM THE THEME !#&*(# LIKE THIS SORTA...
     dock->a_frame = appearance_copy(theme_a_unfocused_title);
-    XSetWindowBorderWidth(ob_display, dock->frame, theme_bwidth);
+    */
 
     g_hash_table_insert(window_map, &dock->frame, dock);
     stacking_add(DOCK_AS_WINDOW(dock));
@@ -41,8 +47,8 @@ void dock_startup()
 
 void dock_shutdown()
 {
+    RrSurfaceFree(dock->s_frame);
     XDestroyWindow(ob_display, dock->frame);
-    appearance_free(dock->a_frame);
     g_hash_table_remove(window_map, &dock->frame);
     stacking_remove(dock);
 }
@@ -163,6 +169,9 @@ void dock_configure()
         }
     }
 
+    dock->w += theme_bwidth * 2;
+    dock->h += theme_bwidth * 2;
+
     /* position the apps */
     for (it = dock->dock_apps; it; it = it->next) {
         struct DockApp *app = it->data;
@@ -179,10 +188,6 @@ void dock_configure()
         XMoveWindow(ob_display, app->icon_win, app->x, app->y);
     }
 
-    /* used for calculating offsets */
-    dock->w += theme_bwidth * 2;
-    dock->h += theme_bwidth * 2;
-
     /* calculate position */
     switch (config_dock_pos) {
     case DockPos_Floating:
@@ -343,23 +348,11 @@ void dock_configure()
         break;
     }
 
-    /* not used for actually sizing shit */
-    dock->w -= theme_bwidth * 2;
-    dock->h -= theme_bwidth * 2;
-
     if (dock->w > 0 && dock->h > 0) {
-        RECT_SET(dock->a_frame->area, 0, 0, dock->w, dock->h);
-        XMoveResizeWindow(ob_display, dock->frame,
-                          dock->x, dock->y, dock->w, dock->h);
-
-        paint(dock->frame, dock->a_frame);
-        XMapWindow(ob_display, dock->frame);
+        RrSurfaceSetArea(dock->s_frame, dock->x, dock->y, dock->w, dock->h);
+        RrSurfaceShow(dock->s_frame);
     } else
-        XUnmapWindow(ob_display, dock->frame);
-
-    /* but they are useful outside of this function! */
-    dock->w += theme_bwidth * 2;
-    dock->h += theme_bwidth * 2;
+        RrSurfaceHide(dock->s_frame);
 
     screen_update_struts();
 }
index 2b6dc4d2fdf28202ba2241aedfff7b98145acb76..c88320d8ffc291136e0854761336426c75005866 100644 (file)
@@ -5,7 +5,7 @@
 #include "window.h"
 #include "stacking.h"
 #include "geom.h"
-#include "render/render.h"
+#include "render2/render.h"
 
 #include <glib.h>
 #include <X11/Xlib.h>
@@ -27,7 +27,7 @@ typedef struct Dock {
     ObWindow obwin;
 
     Window frame;
-    Appearance *a_frame;
+    struct RrSurface *s_frame;
 
     /* actual position (when not auto-hidden) */
     int x, y;
index c6395ae63b15c4c442756795f3305d63d9f38f7a..d932fcf3c7e6e757b218b60086fd4281d0d3f9a3 100644 (file)
@@ -2,7 +2,6 @@
 #include "openbox.h"
 #include "extensions.h"
 #include "framerender.h"
-#include "render/theme.h"
 
 #define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask)
 #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
@@ -10,6 +9,11 @@
 #define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
                            ButtonMotionMask | ExposureMask)
 
+/* XXX temp */
+static int theme_bwidth = 3;
+static int theme_cbwidth = 3;
+static int theme_title_height = 8;
+
 void frame_startup()
 {
 }
@@ -22,7 +26,8 @@ static Window createWindow(Window parent, unsigned long mask,
                           XSetWindowAttributes *attrib)
 {
     return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
-                        render_depth, InputOutput, render_visual,
+                        RrInstanceDepth(ob_render_inst),
+                         InputOutput, RrInstanceVisual(ob_render_inst),
                         mask, attrib);
                        
 }
@@ -294,12 +299,12 @@ Context frame_context(Client *client, Window win)
     g_assert(obwin);
 
     if (client->frame->window == win) {
-printf("frame context\n");
+g_print("frame context\n");
         return Context_Frame;
     }
     if (client->frame->plate == win)
         return Context_Client;
-printf("decoration clicked\n");
+g_print("decoration clicked\n");
     g_assert(WINDOW_IS_DECORATION(obwin));
     return WINDOW_AS_DECORATION(obwin)->context;
 }
@@ -430,7 +435,7 @@ void decor_calculate_size(FrameDecor *d, Rect *r)
        r->height = d->frame->client->area.height * d->area.height / 100;
     break;
     }
-printf("area of decoration is %d, %d, %d, %d\n", r->x, r->y, r->width, 
+g_print("area of decoration is %d, %d, %d, %d\n", r->x, r->y, r->width, 
 r->height);
 }
 
index e021ce1a48b407b5977e4cf34b9a69a16959a13f..163c4be289f996c2aedbbca2481994fe1bb43b40 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "geom.h"
 #include "client.h"
-#include "render/render.h"
+/*#include "render2/render.h"*/
 #include "window.h"
 
 typedef enum {
index 36030d4a8cbd88cb83cc9894f323a60ad571a43c..e2f1b08b9f68654b114d5b3ff3d7992387e0c337 100644 (file)
@@ -2,7 +2,6 @@
 #include "openbox.h"
 #include "screen.h"
 #include "framerender.h"
-#include "render/theme.h"
 
 void framerender_frame(Frame *self)
 {
index b67f92c3607ecafbbb121989ed8c05afcc1537fa..41b0d749b9dbe6b0a7d30e85b5862da3d56b92a6 100644 (file)
@@ -2,7 +2,6 @@
 #include "openbox.h"
 #include "stacking.h"
 #include "grab.h"
-#include "render/theme.h"
 #include "screen.h"
 #include "geom.h"
 #include "plugin.h"
@@ -33,16 +32,17 @@ void menu_destroy_hash_value(Menu *self)
     g_free(self->label);
     g_free(self->name);
 
-    g_hash_table_remove(window_map, &self->title);
-    g_hash_table_remove(window_map, &self->frame);
-    g_hash_table_remove(window_map, &self->items);
+    g_hash_table_remove(window_map, &self->w_title);
+    g_hash_table_remove(window_map, &self->w_frame);
+    g_hash_table_remove(window_map, &self->w_items);
 
     stacking_remove(self);
 
-    appearance_free(self->a_title);
-    XDestroyWindow(ob_display, self->title);
-    XDestroyWindow(ob_display, self->frame);
-    XDestroyWindow(ob_display, self->items);
+    RrSurfaceFree(self->s_title);
+    RrSurfaceFree(self->s_items);
+    RrSurfaceFree(self->s_frame);
+
+    XDestroyWindow(ob_display, self->w_frame);
 
     g_free(self);
 }
@@ -52,12 +52,13 @@ void menu_entry_free(MenuEntry *self)
     g_free(self->label);
     action_free(self->action);
 
-    g_hash_table_remove(window_map, &self->item);
+    g_hash_table_remove(window_map, &self->w_item);
+    g_hash_table_remove(window_map, &self->w_disabled);
+    g_hash_table_remove(window_map, &self->w_hilite);
 
-    appearance_free(self->a_item);
-    appearance_free(self->a_disabled);
-    appearance_free(self->a_hilite);
-    XDestroyWindow(ob_display, self->item);
+    RrSurfaceFree(self->s_item);
+    RrSurfaceFree(self->s_disabled);
+    RrSurfaceFree(self->s_hilite);
 
     g_free(self);
 }
@@ -65,12 +66,14 @@ void menu_entry_free(MenuEntry *self)
 void menu_startup()
 {
     Menu *m;
+/*
     Menu *s;
     Menu *t;
+*/
     Action *a;
 
     menu_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
-                                      menu_destroy_hash_key,
+                                      (GDestroyNotify)menu_destroy_hash_key,
                                       (GDestroyNotify)menu_destroy_hash_value);
 
     m = menu_new("sex menu", "root", NULL);
@@ -125,7 +128,8 @@ static Window createWindow(Window parent, unsigned long mask,
                           XSetWindowAttributes *attrib)
 {
     return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
-                        render_depth, InputOutput, render_visual,
+                        RrInstanceDepth(ob_render_inst), InputOutput,
+                         RrInstanceVisual(ob_render_inst),
                         mask, attrib);
                        
 }
@@ -159,26 +163,27 @@ Menu *menu_new_full(char *label, char *name, Menu *parent,
 
     attrib.override_redirect = TRUE;
     attrib.event_mask = FRAME_EVENTMASK;
-    self->frame = createWindow(ob_root, CWOverrideRedirect|CWEventMask, &attrib);
-    attrib.event_mask = TITLE_EVENTMASK;
-    self->title = createWindow(self->frame, CWEventMask, &attrib);
-    self->items = createWindow(self->frame, 0, &attrib);
-/*
-    XSetWindowBorderWidth(ob_display, self->frame, theme_bwidth);
-    XSetWindowBackground(ob_display, self->frame, theme_b_color->pixel);
-    XSetWindowBorderWidth(ob_display, self->title, theme_bwidth);
-    XSetWindowBorder(ob_display, self->frame, theme_b_color->pixel);
-    XSetWindowBorder(ob_display, self->title, theme_b_color->pixel);
-*/
-    XMapWindow(ob_display, self->title);
-    XMapWindow(ob_display, self->items);
-
+    self->w_frame = createWindow(ob_root, CWOverrideRedirect|CWEventMask,
+                                 &attrib),
+    self->s_frame = RrSurfaceNew(ob_render_inst, RR_SURFACE_PLANAR,
+                                 self->w_frame, 0);
+                                 
+    /* XXX COPY THESE FROM THE THEME@&#*(&!# */
+    self->s_title = RrSurfaceNewChild(RR_SURFACE_PLANAR, self->s_frame, 1);
+    self->w_title = RrSurfaceWindow(self->s_title);
+    self->s_items = RrSurfaceNewChild(RR_SURFACE_PLANAR, self->s_frame, 0);
+    self->w_items = RrSurfaceWindow(self->s_items);
+    /* XXX LIKE THIS SORTA... 
     self->a_title = appearance_copy(theme_a_menu_title);
     self->a_items = appearance_copy(theme_a_menu);
+    */
 
-    g_hash_table_insert(window_map, &self->frame, self);
-    g_hash_table_insert(window_map, &self->title, self);
-    g_hash_table_insert(window_map, &self->items, self);
+    /* event masks */
+    XSelectInput(ob_display, self->w_title, TITLE_EVENTMASK);
+
+    g_hash_table_insert(window_map, &self->w_frame, self);
+    g_hash_table_insert(window_map, &self->w_title, self);
+    g_hash_table_insert(window_map, &self->w_items, self);
     g_hash_table_insert(menu_hash, g_strdup(name), self);
 
     stacking_add(MENU_AS_WINDOW(self));
@@ -226,21 +231,35 @@ void menu_add_entry(Menu *menu, MenuEntry *entry)
 
     g_assert(menu != NULL);
     g_assert(entry != NULL);
-    g_assert(entry->item == None);
+    g_assert(entry->s_item == NULL);
 
     menu->entries = g_list_append(menu->entries, entry);
     entry->parent = menu;
 
     attrib.event_mask = ENTRY_EVENTMASK;
-    entry->item = createWindow(menu->items, CWEventMask, &attrib);
-    XMapWindow(ob_display, entry->item);
+    /* XXX COPY FROM THEME SURFACES @#&!#&*!@ */
+    entry->s_item = RrSurfaceNewChild(RR_SURFACE_PLANAR, menu->s_items, 1);
+    entry->w_item = RrSurfaceWindow(entry->s_item);
+    entry->s_disabled = RrSurfaceNewChild(RR_SURFACE_PLANAR, menu->s_items,1);
+    entry->w_disabled = RrSurfaceWindow(entry->s_disabled);
+    entry->s_hilite = RrSurfaceNewChild(RR_SURFACE_PLANAR, menu->s_items, 1);
+    entry->w_hilite = RrSurfaceWindow(entry->s_hilite);
+    /* XXX LIKE THIS SORTA....
     entry->a_item = appearance_copy(theme_a_menu_item);
     entry->a_disabled = appearance_copy(theme_a_menu_disabled);
     entry->a_hilite = appearance_copy(theme_a_menu_hilite);
+    */
+
+    /* event masks */
+    XSelectInput(ob_display, entry->w_item, ENTRY_EVENTMASK);
+    XSelectInput(ob_display, entry->w_disabled, ENTRY_EVENTMASK);
+    XSelectInput(ob_display, entry->w_hilite, ENTRY_EVENTMASK);
 
     menu->invalid = TRUE;
 
-    g_hash_table_insert(window_map, &entry->item, menu);
+    g_hash_table_insert(window_map, &entry->w_item, menu);
+    g_hash_table_insert(window_map, &entry->w_disabled, menu);
+    g_hash_table_insert(window_map, &entry->w_hilite, menu);
 }
 
 void menu_show(char *name, int x, int y, Client *client)
@@ -274,7 +293,7 @@ void menu_show_full(Menu *self, int x, int y, Client *client)
 
 void menu_hide(Menu *self) {
     if (self->shown) {
-        XUnmapWindow(ob_display, self->frame);
+        RrSurfaceHide(self->s_frame);
         self->shown = FALSE;
        if (self->open_submenu)
            menu_hide(self->open_submenu);
@@ -302,7 +321,9 @@ MenuEntry *menu_find_entry(Menu *menu, Window win)
 
     for (it = menu->entries; it; it = it->next) {
         MenuEntry *entry = it->data;
-        if (entry->item == win)
+        if (entry->w_item == win ||
+            entry->w_disabled == win ||
+            entry->w_hilite == win)
             return entry;
     }
     return NULL;
@@ -329,16 +350,12 @@ void menu_entry_fire(MenuEntry *self)
 
 void menu_control_show(Menu *self, int x, int y, Client *client) {
     g_assert(!self->invalid);
-    
-    XMoveWindow(ob_display, self->frame, 
-               MIN(x, screen_physical_size.width - self->size.width), 
-               MIN(y, screen_physical_size.height - self->size.height));
-    POINT_SET(self->location, 
-             MIN(x, screen_physical_size.width - self->size.width), 
-             MIN(y, screen_physical_size.height - self->size.height));
+
+    POINT_SET(self->location, x, y);
+    menu_render(self);
 
     if (!self->shown) {
-       XMapWindow(ob_display, self->frame);
+        RrSurfaceShow(self->s_frame);
         stacking_raise(MENU_AS_WINDOW(self));
        self->shown = TRUE;
     } else if (self->shown && self->open_submenu) {
@@ -362,15 +379,13 @@ void menu_control_mouseover(MenuEntry *self, gboolean enter) {
            g_assert(!self->parent->invalid);
            /* TODO: I don't understand why these bevels should be here.
               Something must be wrong in the width calculation */
-           x = self->parent->location.x + self->parent->size.width + 
-               theme_bevel;
+           x = self->parent->location.x + self->parent->size.width;
 
            /* need to get the width. is this bad?*/
            menu_render(self->submenu);
 
            if (self->submenu->size.width + x > screen_physical_size.width)
-               x = self->parent->location.x - self->submenu->size.width - 
-                   theme_bevel;
+               x = self->parent->location.x - self->submenu->size.width;
            
            menu_show_full(self->submenu, x,
                           self->parent->location.y + self->y,
index 49a79fb4d266ccd2bc8cb126201375372d1882d9..fc16e4e1b1e1faa8ed81ecc3cb6bcaffac85db5d 100644 (file)
@@ -2,8 +2,8 @@
 #define __menu_h
 
 #include "action.h"
-#include "render/render.h"
 #include "geom.h"
+#include "render2/render.h"
 
 #include <glib.h>
 
@@ -44,12 +44,13 @@ typedef struct Menu {
 
     /* render stuff */
     Client *client;
-    Window frame;
-    Window title;
-    Appearance *a_title;
+    struct RrSurface *s_frame;
+    Window w_frame;
+    struct RrSurface *s_title;
+    Window w_title;
+    struct RrSurface *s_items;
+    Window w_items;
     int title_min_w, title_h;
-    Window items;
-    Appearance *a_items;
     int bullet_w;
     int item_h;
     Point location;
@@ -69,7 +70,7 @@ typedef enum MenuEntryRenderType {
     MenuEntryRenderType_Other = 1 << 7
 } MenuEntryRenderType;
 
-typedef struct {
+typedef struct MenuEntry {
     char *label;
     Menu *parent;
 
@@ -83,10 +84,12 @@ typedef struct {
     Menu *submenu;
 
     /* render stuff */
-    Window item;
-    Appearance *a_item;
-    Appearance *a_disabled;
-    Appearance *a_hilite;
+    struct RrSurface *s_item;
+    Window w_item;
+    struct RrSurface *s_disabled;
+    Window w_disabled;
+    struct RrSurface *s_hilite;
+    Window w_hilite;
     int y;
     int min_w;
 } MenuEntry;
index 4df4e413d7e3a193a578698b86faa8833ff259e9..fbdff17dd5abe0022fd9d0f7be22b60a026f7e76 100644 (file)
@@ -2,7 +2,12 @@
 
 #include "menu.h"
 #include "openbox.h"
-#include "render/theme.h"
+#include "screen.h"
+#include "render2/render.h"
+
+/* XXX temp */
+static int theme_bevel = 1;
+static int theme_bwidth = 0;
 
 void menu_render_full(Menu *self);
 
@@ -24,32 +29,36 @@ void menu_render_full(Menu *self) {
     int item_y;
 
     self->size.width = 1;
+    self->size.height = 1;
     self->item_h = 1;
 
     /* set texture data and size them mofos out */
     if (self->label) {
-       self->a_title->texture[0].data.text.string = self->label;
-       appearance_minsize(self->a_title, &self->title_min_w, &self->title_h);
+        RrTextureSetText(self->s_title, 0, NULL, RR_CENTER,
+                         self->label);
+        RrSurfaceMinSize(self->s_title, &self->title_min_w, &self->title_h);
        self->title_min_w += theme_bevel * 2;
        self->title_h += theme_bevel * 2;
        self->size.width = MAX(self->size.width, self->title_min_w);
+        self->size.height = MAX(self->size.height,
+                                self->title_h + theme_bwidth);
     }
 
     for (it = self->entries; it; it = it->next) {
         MenuEntry *e = it->data;
         int h;
 
-        e->a_item->texture[0].data.text.string = e->label;
-        appearance_minsize(e->a_item, &e->min_w, &self->item_h);
+        RrTextureSetText(e->s_item, 0, NULL, RR_LEFT, e->label);
+        RrSurfaceMinSize(e->s_item, &e->min_w, &self->item_h);
         self->size.width = MAX(self->size.width, e->min_w);
 
-        e->a_disabled->texture[0].data.text.string = e->label;
-        appearance_minsize(e->a_disabled, &e->min_w, &h);
+        RrTextureSetText(e->s_disabled, 0, NULL, RR_LEFT, e->label);
+        RrSurfaceMinSize(e->s_disabled, &e->min_w, &h);
         self->item_h = MAX(self->item_h, h);
         self->size.width = MAX(self->size.width, e->min_w);
        
-        e->a_hilite->texture[0].data.text.string = e->label;
-        appearance_minsize(e->a_hilite, &e->min_w, &h);
+        RrTextureSetText(e->s_hilite, 0, NULL, RR_LEFT, e->label);
+        RrSurfaceMinSize(e->s_hilite, &e->min_w, &h);
         self->item_h = MAX(self->item_h, h);
         self->size.width = MAX(self->size.width, e->min_w);
 
@@ -57,85 +66,102 @@ void menu_render_full(Menu *self) {
         ++nitems;
     }
     self->bullet_w = self->item_h + theme_bevel;
-    self->size.width += 2 * self->bullet_w + 2 * theme_bevel;
+    self->size.width += 2*self->bullet_w + 2*theme_bevel + 2*theme_bwidth;
     self->item_h += theme_bevel * 2;
     items_h = self->item_h * MAX(nitems, 1);
+    self->size.height += items_h + theme_bwidth * 2;
 
     if (self->label) {
-       RECT_SET(self->a_title->area, 0, 0, self->size.width, 
-                self->title_h);
-       RECT_SET(self->a_title->texture[0].position, 0, 0, self->size.width,
-                self->title_h);
+        RrSurfaceSetArea(self->s_title, theme_bwidth, theme_bwidth,
+                         self->size.width - theme_bwidth * 2,
+                         self->title_h);
     }
 
-    RECT_SET(self->a_items->area, 0, 0, self->size.width, items_h);
-
-    XResizeWindow(ob_display, self->frame, self->size.width,
-                 MAX(self->title_h + items_h, 1));
-    if (self->label)
-       XMoveResizeWindow(ob_display, self->title, -theme_bwidth,
-                         -theme_bwidth, self->size.width, self->title_h);
-
-    XMoveResizeWindow(ob_display, self->items, 0, 
-                     self->title_h + theme_bwidth, self->size.width, 
-                     items_h);
+    RrSurfaceSetArea(self->s_items, theme_bwidth,
+                     theme_bwidth * 2 + self->title_h,
+                     self->size.width - theme_bwidth * 2, items_h);
 
-    if (self->label)
-       paint(self->title, self->a_title);
-    paint(self->items, self->a_items);
+    
+    RrSurfaceSetArea(self->s_frame, 
+                     MIN(self->location.x,
+                         screen_physical_size.width - self->size.width), 
+                     MIN(self->location.y,
+                         screen_physical_size.height - self->size.height),
+                     self->size.width,
+                     self->size.height);
 
     item_y = 0;
     for (it = self->entries; it; it = it->next) {
-        ((MenuEntry*)it->data)->y = item_y;
+        MenuEntry *e = it->data;
+        RrSurfaceSetArea(e->s_item, self->bullet_w, item_y,
+                         self->size.width - 2*theme_bwidth - 2*self->bullet_w,
+                         self->item_h);
+        RrSurfaceSetArea(e->s_disabled, self->bullet_w, item_y,
+                         self->size.width - 2*theme_bwidth - 2*self->bullet_w,
+                         self->item_h);
+        RrSurfaceSetArea(e->s_hilite, self->bullet_w, item_y,
+                         self->size.width - 2*theme_bwidth - 2*self->bullet_w,
+                         self->item_h);
         menu_entry_render(it->data);
         item_y += self->item_h;
     }
     
-    self->size.height = item_y;
     self->invalid = FALSE;
 }
 
 void menu_entry_render(MenuEntry *self)
 {
-    Menu *menu = self->parent;
-    Appearance *a;
-    
     switch (self->render_type) {
     case MenuEntryRenderType_Submenu:
        /* TODO: submenu mask */
     case MenuEntryRenderType_Boolean:
-       /* TODO: boolean check */
-       a = self->enabled ? (self->hilite ? self->a_hilite : self->a_item) 
-           : self->a_disabled;
-       break;
     case MenuEntryRenderType_None:
-       a = self->enabled ? (self->hilite ? self->a_hilite : self->a_item )
-           : self->a_disabled;
+       /* TODO: boolean check */
+        if (self->enabled) {
+            if (self->hilite) {
+                RrSurfaceHide(self->s_disabled);
+                RrSurfaceHide(self->s_item);
+                RrSurfaceShow(self->s_hilite);
+            } else {
+                RrSurfaceHide(self->s_disabled);
+                RrSurfaceShow(self->s_item);
+                RrSurfaceHide(self->s_hilite);
+            }
+        } else {
+            RrSurfaceShow(self->s_disabled);
+            RrSurfaceHide(self->s_item);
+            RrSurfaceHide(self->s_hilite);
+        }
        break;
     case MenuEntryRenderType_Separator:
-       a = self->a_item;
+        RrSurfaceHide(self->s_disabled);
+        RrSurfaceShow(self->s_item);
+        RrSurfaceHide(self->s_hilite);
        break;
 
     default:
        g_message("unhandled render_type");
+        if (self->enabled) {
+            if (self->hilite) {
+                RrSurfaceHide(self->s_disabled);
+                RrSurfaceHide(self->s_item);
+                RrSurfaceShow(self->s_hilite);
+            } else {
+                RrSurfaceHide(self->s_disabled);
+                RrSurfaceShow(self->s_item);
+                RrSurfaceHide(self->s_hilite);
+            }
+        } else {
+            RrSurfaceShow(self->s_disabled);
+            RrSurfaceHide(self->s_item);
+            RrSurfaceHide(self->s_hilite);
+        }
+/* used to be this... looks repetative from above
        a = !self->enabled ? self->a_disabled :
         (self->hilite && 
          (self->action || self->render_type == MenuEntryRenderType_Submenu) ? 
          self->a_hilite : self->a_item);
+*/
        break;
     }
-
-    RECT_SET(a->area, 0, 0, menu->size.width,
-             menu->item_h);
-    RECT_SET(a->texture[0].position, menu->bullet_w,
-             0, menu->size.width - 2 * menu->bullet_w,
-             menu->item_h);
-
-    XMoveResizeWindow(ob_display, self->item, 0, self->y,
-                      menu->size.width, menu->item_h);
-    a->surface.data.planar.parent = menu->a_items;
-    a->surface.data.planar.parentx = 0;
-    a->surface.data.planar.parenty = self->y;
-
-    paint(self->item, a);
 }
index 871e96536f6e4867d8c850a0029560dbee69ab0f..69884c842b92a90c33055f7586871b702a13f5d6 100644 (file)
@@ -7,12 +7,14 @@
 #include "openbox.h"
 #include "popup.h"
 #include "config.h"
-#include "render/render.h"
-#include "render/theme.h"
+#include "render2/render.h"
 
 #include <X11/Xlib.h>
 #include <glib.h>
 
+/* XXX temp */
+static int theme_bwidth = 1;
+
 gboolean moveresize_in_progress = FALSE;
 Client *moveresize_client = NULL;
 
@@ -53,7 +55,9 @@ void moveresize_startup()
 
     attrib.save_under = True;
     opaque_window.win = XCreateWindow(ob_display, ob_root, 0, 0, 1, 1, 0,
-                                      render_depth, InputOutput, render_visual,
+                                      RrInstanceDepth(ob_render_inst),
+                                      InputOutput,
+                                      RrInstanceVisual(ob_render_inst),
                                       CWSaveUnder, &attrib);
     stacking_add(INTERNAL_AS_WINDOW(&opaque_window));
     stacking_raise(INTERNAL_AS_WINDOW(&opaque_window));
index 0455e88c523406e929a1aba28a4745d89550b72a..419fc499ae985bd1595554eee22f28610a43eb8f 100644 (file)
@@ -19,9 +19,7 @@
 #include "config.h"
 #include "gettext.h"
 #include "parser/parse.h"
-#include "render/render.h"
-#include "render/font.h"
-#include "render/theme.h"
+#include "render2/render.h"
 
 #ifdef HAVE_FCNTL_H
 #  include <fcntl.h>
@@ -48,6 +46,7 @@
 Display *ob_display  = NULL;
 int      ob_screen;
 Window   ob_root;
+struct RrInstance *ob_render_inst = NULL;
 State    ob_state;
 gboolean ob_shutdown = FALSE;
 gboolean ob_restart  = FALSE;
@@ -164,15 +163,14 @@ int main(int argc, char **argv)
     startup_save();
 
     if (screen_annex()) { /* it will be ours! */
+        ob_render_inst = RrInstanceNew(ob_display, ob_screen);
+
         /* startup the parsing so everything can register sections of the rc */
         parse_startup();
 
         /* anything that is going to read data from the rc file needs to be 
            in this group */
        timer_startup();
-       render_startup();
-       font_startup();
-        theme_startup();
        event_startup();
         grab_startup();
         plugin_startup();
@@ -188,9 +186,11 @@ int main(int argc, char **argv)
         parse_shutdown();
 
         /* load the theme specified in the rc file */
+/*
         theme = theme_load(config_theme);
         g_free(theme);
         if (!theme) return 1;
+*/
 
         window_startup();
         menu_startup();
@@ -228,10 +228,10 @@ int main(int argc, char **argv)
         window_shutdown();
         grab_shutdown();
        event_shutdown();
-        theme_shutdown();
-       render_shutdown();
        timer_shutdown();
         config_shutdown();
+
+        RrInstanceFree(ob_render_inst);
     }
 
     dispatch_shutdown();
index 51f620793d6ee7c3043d20a42052ce3a41b2ff3b..073482efcea244268dc8c60d9eb6fc0d4f3938e6 100644 (file)
@@ -21,6 +21,9 @@ extern int      ob_screen;
 /*! The root window */
 extern Window   ob_root;
 
+struct RrInstance;
+extern struct RrInstance *ob_render_inst;
+
 /*! States of execution for Openbox */
 typedef enum {
     State_Starting,
index 6f2cd240b443bdd804ec2e6fc28f79c6def75444..07331e5edb5b5ebe1a6f50d2b9e93082258841f3 100644 (file)
@@ -2,8 +2,11 @@
 #include "frame.h"
 #include "window.h"
 #include "stacking.h"
-#include "render/render.h"
-#include "render/theme.h"
+#include "render2/render.h"
+
+/* XXX temp */
+static int theme_bevel = 1;
+static int theme_bwidth = 3;
 
 typedef struct Popup {
     ObWindow obwin;
@@ -13,44 +16,58 @@ typedef struct Popup {
     Window text;
 
     gboolean hasicon;
-    Appearance *a_bg;
-    Appearance *a_icon;
-    Appearance *a_text;
+    struct RrSurface *s_bg;
+    struct RrSurface *s_icon;
+    struct RrSurface *s_text;
     int gravity;
     int x;
     int y;
     int w;
     int h;
-    gboolean mapped;
 } Popup;
 
 Popup *popup_new(gboolean hasicon)
 {
-    Popup *self = g_new(Popup, 1);
+    XSetWindowAttributes attrib;
+    Popup *self;
+
+    self = g_new(Popup, 1);
     self->obwin.type = Window_Internal;
     self->hasicon = hasicon;
-    self->bg = None;
-    self->a_text = NULL;
     self->gravity = NorthWestGravity;
     self->x = self->y = self->w = self->h = 0;
-    self->mapped = FALSE;
     stacking_add(INTERNAL_AS_WINDOW(self));
     stacking_raise(INTERNAL_AS_WINDOW(self));
+
+    attrib.override_redirect = True;
+    self->bg = XCreateWindow(ob_display, ob_root,
+                             0, 0, 1, 1, 0, RrInstanceDepth(ob_render_inst),
+                             InputOutput, RrInstanceVisual(ob_render_inst),
+                             CWOverrideRedirect, &attrib);
+    self->s_bg = RrSurfaceNew(ob_render_inst, RR_SURFACE_PLANAR, self->bg, 0);
+    self->s_text = RrSurfaceNewChild(RR_SURFACE_PLANAR, self->s_bg, 1);
+    self->text = RrSurfaceWindow(self->s_text);
+    if (self->hasicon) {
+        self->s_icon = RrSurfaceNewChild(RR_SURFACE_PLANAR, self->s_bg, 1);
+        self->icon = RrSurfaceWindow(self->s_icon);
+    } else {
+        self->s_icon = NULL;
+        self->icon = None;
+    }
+
+    /* XXX COPY THE APPEARANCES FROM THE THEME...... LIKE THIS SORTA!
+    self->a_text = appearance_copy(theme_app_hilite_label);
+    */
+
     return self;
 }
 
 void popup_free(Popup *self)
 {
-    if (self->bg) {
-        XDestroyWindow(ob_display, self->bg);
-        XDestroyWindow(ob_display, self->text);
-        XDestroyWindow(ob_display, self->icon);
-        appearance_free(self->a_bg);
-        if (self->hasicon)
-            appearance_free(self->a_icon);
-    }
-    if (self->a_text)
-        appearance_free(self->a_text);
+    RrSurfaceFree(self->s_bg);
+    RrSurfaceFree(self->s_icon);
+    RrSurfaceFree(self->s_text);
+    XDestroyWindow(ob_display, self->bg);
     stacking_remove(self);
     g_free(self);
 }
@@ -73,69 +90,27 @@ void popup_size_to_string(Popup *self, char *text)
     int textw, texth;
     int iconw;
 
-    if (!self->a_text)
-        self->a_text = appearance_copy(theme_app_hilite_label);
-
-    self->a_text->texture[0].data.text.string = text;
-    appearance_minsize(self->a_text, &textw, &texth);
+    RrTextureSetText(self->s_text, 0, NULL, RR_LEFT, text);
+    RrSurfaceMinSize(self->s_text, &textw, &texth);
     textw += theme_bevel * 2;
     texth += theme_bevel * 2;
 
-    self->h = texth + theme_bevel * 2;
-    iconw = (self->hasicon ? texth : 0);
-    self->w = textw + iconw + theme_bevel * 3;
+    self->h = texth + theme_bevel * 2 + theme_bwidth * 2;
+    iconw = (self->hasicon ? texth + theme_bevel : 0);
+    self->w = textw + iconw + theme_bevel * 2 + theme_bwidth * 2;
 }
 
 void popup_show(Popup *self, char *text, Icon *icon)
 {
-    XSetWindowAttributes attrib;
     int x, y, w, h;
     int textw, texth;
     int iconw;
 
-    /* create the shit if needed */
-    if (!self->bg) {
-        attrib.override_redirect = True;
-        self->bg = XCreateWindow(ob_display, ob_root,
-                                 0, 0, 1, 1, 0, render_depth, InputOutput,
-                                 render_visual, CWOverrideRedirect, &attrib);
-/*
-        XSetWindowBorderWidth(ob_display, self->bg, theme_bwidth);
-        XSetWindowBorder(ob_display, self->bg, theme_b_color->pixel);
-*/
-        self->text = XCreateWindow(ob_display, self->bg,
-                                   0, 0, 1, 1, 0, render_depth, InputOutput,
-                                   render_visual, 0, NULL);
-        if (self->hasicon)
-            self->icon = XCreateWindow(ob_display, self->bg,
-                                       0, 0, 1, 1, 0,
-                                       render_depth, InputOutput,
-                                       render_visual, 0, NULL);
-
-        XMapWindow(ob_display, self->text);
-        XMapWindow(ob_display, self->icon);
-
-        self->a_bg = appearance_copy(theme_app_hilite_bg);
-        if (self->hasicon)
-            self->a_icon = appearance_copy(theme_app_icon);
-    }
-    if (!self->a_text)
-        self->a_text = appearance_copy(theme_app_hilite_label);
-
     /* set up the textures */
-    self->a_text->texture[0].data.text.string = text;
-    if (self->hasicon) {
-        if (icon) {
-            self->a_icon->texture[0].type = RGBA;
-            self->a_icon->texture[0].data.rgba.width = icon->width;
-            self->a_icon->texture[0].data.rgba.height = icon->height;
-            self->a_icon->texture[0].data.rgba.data = icon->data;
-        } else
-            self->a_icon->texture[0].type = NoTexture;
-    }
+    RrTextureSetText(self->s_text, 0, NULL, RR_LEFT, text);
 
     /* measure the shit out */
-    appearance_minsize(self->a_text, &textw, &texth);
+    RrSurfaceMinSize(self->s_text, &textw, &texth);
     textw += theme_bevel * 2;
     texth += theme_bevel * 2;
 
@@ -149,9 +124,9 @@ void popup_show(Popup *self, char *text, Icon *icon)
     iconw = (self->hasicon ? texth : 0);
     if (self->w) {
         w = self->w;
-        textw = w - (iconw + theme_bevel * 3);
+        textw = w - (iconw + theme_bevel * (self->hasicon ? 3 : 2));
     } else
-        w = textw + iconw + theme_bevel * 3;
+        w = textw + iconw + theme_bevel * (self->hasicon ? 3 : 2);
     /* sanity checks to avoid crashes! */
     if (w < 1) w = 1;
     if (h < 1) h = 1;
@@ -188,46 +163,34 @@ void popup_show(Popup *self, char *text, Icon *icon)
         break;
     }
 
-    /* set the windows/appearances up */
-    RECT_SET(self->a_bg->area, 0, 0, w, h);
-    XMoveResizeWindow(ob_display, self->bg, x, y, w, h);
+    /* set the surfaces up */
+    RrSurfaceSetArea(self->s_bg, x, y, w, h);
 
-    RECT_SET(self->a_text->area, 0, 0, textw, texth); 
-    RECT_SET(self->a_text->texture[0].position, theme_bevel, theme_bevel,
-             textw - theme_bevel * 2, texth - theme_bevel * 2);
-    self->a_text->surface.data.planar.parent = self->a_bg;
-    self->a_text->surface.data.planar.parentx = iconw + theme_bevel * 2;
-    self->a_text->surface.data.planar.parenty = theme_bevel;
-    XMoveResizeWindow(ob_display, self->text,
-                      iconw + theme_bevel * 2, theme_bevel, textw, texth);
+    RrSurfaceSetArea(self->s_text,
+                     iconw + theme_bevel * (self->hasicon ? 3 : 2) +
+                     theme_bwidth,
+                     theme_bevel + theme_bwidth,
+                     textw, texth);
 
     if (self->hasicon) {
+        RrTextureSetRGBA(self->s_icon, 0, icon->data, 0, 0, icon->width,
+                         icon->height);
         if (iconw < 1) iconw = 1; /* sanity check for crashes */
-        RECT_SET(self->a_icon->area, 0, 0, iconw, texth);
-        RECT_SET(self->a_icon->texture[0].position, 0, 0, iconw, texth);
-        self->a_icon->surface.data.planar.parent = self->a_bg;
-        self->a_icon->surface.data.planar.parentx = theme_bevel;
-        self->a_icon->surface.data.planar.parenty = theme_bevel;
-        XMoveResizeWindow(ob_display, self->icon,
-                          theme_bevel, theme_bevel, iconw, texth);
+        RrSurfaceSetArea(self->s_icon,
+                         theme_bwidth + theme_bevel,
+                         theme_bwidth + theme_bevel,
+                         iconw, iconw);
     }
 
-    paint(self->bg, self->a_bg);
-    paint(self->text, self->a_text);
-    if (self->hasicon)
-        paint(self->icon, self->a_icon);
-
-    if (!self->mapped) {
-        XMapWindow(ob_display, self->bg);
+    if (!RrSurfaceVisible(self->s_bg)) {
+        RrSurfaceShow(self->s_bg);
         stacking_raise(INTERNAL_AS_WINDOW(self));
-        self->mapped = TRUE;
     }
 }
 
 void popup_hide(Popup *self)
 {
-    if (self->mapped) {
-        XUnmapWindow(ob_display, self->bg);
-        self->mapped = FALSE;
+    if (RrSurfaceVisible(self->s_bg)) {
+        RrSurfaceHide(self->s_bg);
     }
 }
index c65c23cd7a987734209c58b27ede68f0527a6579..63993995498d27b86715f7586396b26f33429a2c 100644 (file)
@@ -11,7 +11,6 @@
 #include "focus.h"
 #include "dispatch.h"
 #include "extensions.h"
-#include "../render/render.h"
 
 #ifdef USE_LIBSN
 #  define SN_API_NOT_YET_FROZEN
index 9b8b91b0cb124bee4ca41ff7d07dae7b9e62668a..c541c53a676eefb53ead5e65ce4e2c3bafd8c269 100644 (file)
@@ -21,7 +21,7 @@ Window window_top(ObWindow *self)
 {
     switch (self->type) {
     case Window_Menu:
-        return ((Menu*)self)->frame;
+        return ((Menu*)self)->w_frame;
     case Window_Dock:
         return ((Dock*)self)->frame;
     case Window_DockApp:
index 40774bfd060c84c827047acb9b908694fa90b009..3508f3920ecea842cc6371b3a881c3bd78a8b849 100644 (file)
@@ -7,8 +7,6 @@
 
 #include "kernel/frame.h"
 
-#include "render/theme.h"
-
 static char *PLUGIN_NAME = "client_menu";
 
 static Menu *send_to_menu;
@@ -47,25 +45,20 @@ void client_menu_show(Menu *self, int x, int y, Client *client)
     g_assert(!self->invalid);
     g_assert(client);
 
-/* XXX    
-    newy = MAX(client->frame->area.y +
-               client->frame->a_focused_title->area.height + theme_bwidth,
-               y - theme_bwidth);
-XXX */
-    
+    newy = MAX(client->frame->area.y + client->frame->size.top, y);
+
     POINT_SET(self->location, 
-             MIN(x, screen_physical_size.width - self->size.width -
-                  theme_bwidth * 2), 
-             MIN(newy, screen_physical_size.height - self->size.height -
-                  theme_bwidth * 2));
-    XMoveWindow(ob_display, self->frame, self->location.x, self->location.y);
+             MIN(x, screen_physical_size.width - self->size.width), 
+             MIN(newy, screen_physical_size.height - self->size.height));
+    menu_render(self);
 
     if (!self->shown) {
-       XMapWindow(ob_display, self->frame);
+        RrSurfaceShow(self->s_frame);
         stacking_raise(MENU_AS_WINDOW(self));
        self->shown = TRUE;
-    } else if (self->shown && self->open_submenu) {
-       menu_hide(self->open_submenu);
+    } else if (self->shown && self->open_submenu) { /* XXX is this right? */
+        RrSurfaceHide(self->s_frame);
+        self->shown = FALSE;
     }
 }