#define __frame_h
#include "geom.h"
-#include "render/render.h"
+#include "obrender/render.h"
typedef struct _ObFrame ObFrame;
OB_FRAME_NUM_CONTEXTS
} ObFrameContext;
+#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \
+ co == OB_FRAME_CONTEXT_FRAME : FALSE)
+#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \
+ co == OB_FRAME_CONTEXT_DESKTOP : \
+ co == OB_FRAME_CONTEXT_CLIENT)
+
/*! The decorations the client window wants to be displayed on it */
typedef enum {
OB_FRAME_DECOR_TITLEBAR = 1 << 0, /*!< Display a titlebar */
/*! Display a button to toggle the window's placement on
all desktops */
OB_FRAME_DECOR_ALLDESKTOPS = 1 << 7,
- OB_FRAME_DECOR_SHADE = 1 << 8, /*!< Displays a shade button */
+ OB_FRAME_DECOR_SHADE = 1 << 8, /*!< Display a shade button */
OB_FRAME_DECOR_CLOSE = 1 << 9 /*!< Display a close button */
} ObFrameDecorations;
struct _ObClient *client;
Window window;
- Window plate;
Strut size;
Rect area;
guint functions;
guint decorations;
- gboolean max_horz;
- Window inner; /*!< The window for drawing the inner client border */
Window title;
Window label;
Window max;
Window lgrip;
Window rgrip;
+ /* These are borders of the frame and its elements */
+ Window titleleft;
+ Window titletop;
+ Window titletopleft;
+ Window titletopright;
+ Window titleright;
+ Window titlebottom;
+ Window left;
+ Window right;
+ Window handleleft;
+ Window handletop;
+ Window handleright;
+ Window handlebottom;
+ Window lgriptop;
+ Window lgripleft;
+ Window lgripbottom;
+ Window rgriptop;
+ Window rgripright;
+ Window rgripbottom;
+ Window innerleft; /*!< For drawing the inner client border */
+ Window innertop; /*!< For drawing the inner client border */
+ Window innerright; /*!< For drawing the inner client border */
+ Window innerbottom; /*!< For drawing the inner client border */
+ Window innerblb;
+ Window innerbll;
+ Window innerbrb;
+ Window innerbrr;
+ Window backback; /*!< A colored window shown while resizing */
+ Window backfront; /*!< An undrawn-in window, to prevent flashing on
+ unmap */
+
+ /* These are resize handles inside the titlebar */
Window topresize;
Window tltresize;
Window tllresize;
Window trtresize;
Window trrresize;
- Window leftresize;
- Window rightresize;
Colormap colormap;
- RrAppearance *a_unfocused_title;
- RrAppearance *a_focused_title;
- RrAppearance *a_unfocused_label;
- RrAppearance *a_focused_label;
- RrAppearance *a_icon;
- RrAppearance *a_unfocused_handle;
- RrAppearance *a_focused_handle;
-
- GSList *clients;
-
gint icon_on; /* if the window icon button is on */
gint label_on; /* if the window title is on */
gint iconify_on; /* if the window iconify button is on */
gint max_x; /* x-position of the window maximize button */
gint close_x; /* x-position of the window close button */
gint bwidth; /* border width */
- gint rbwidth; /* title border width */
- gint cbwidth_x; /* client border width */
- gint cbwidth_y; /* client border width */
+ gint cbwidth_l; /* client border width */
+ gint cbwidth_t; /* client border width */
+ gint cbwidth_r; /* client border width */
+ gint cbwidth_b; /* client border width */
+ gboolean max_horz; /* when maxed some decorations are hidden */
+ gboolean max_vert; /* when maxed some decorations are hidden */
+ gboolean shaded; /* decorations adjust when shaded */
/* the leftmost and rightmost elements in the titlebar */
ObFrameContext leftmost;
gboolean iconify_hover;
gboolean focused;
+ gboolean need_render;
gboolean flashing;
gboolean flash_on;
void frame_show(ObFrame *self);
void frame_hide(ObFrame *self);
void frame_adjust_theme(ObFrame *self);
+#ifdef SHAPE
+void frame_adjust_shape_kind(ObFrame *self, int kind);
+#endif
void frame_adjust_shape(ObFrame *self);
void frame_adjust_area(ObFrame *self, gboolean moved,
gboolean resized, gboolean fake);
be positioned.
@return The proper coordinates for the frame, based on the client.
*/
-void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h);
+void frame_client_gravity(ObFrame *self, gint *x, gint *y);
/*! Reversly applies gravity to the frame's position to find where the client
should be positioned.
@return The proper coordinates for the client, based on the frame.
*/
-void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h);
+void frame_frame_gravity(ObFrame *self, gint *x, gint *y);
+
+/*! Convert a rectangle in client coordinates/sizes to what it would be
+ for the frame, given its current decorations sizes */
+void frame_rect_to_frame(ObFrame *self, Rect *r);
+
+/*! Convert a rectangle in frame coordinates/sizes to what it would be for the
+ client, given its current decorations sizes */
+void frame_rect_to_client(ObFrame *self, Rect *r);
void frame_flash_start(ObFrame *self);
void frame_flash_stop(ObFrame *self);