add the ability to render and size text labels for non-window-decorations

This commit is contained in:
Dana Jansens 2003-04-06 06:16:19 +00:00
parent af21cb131a
commit 6016ff8658
6 changed files with 108 additions and 12 deletions

View file

@ -82,6 +82,9 @@ Appearance *ob_a_icon; /* always parentrelative, so no focused/unfocused */
Appearance *ob_a_focused_handle;
Appearance *ob_a_unfocused_handle;
Appearance *ob_app_hilite_label;
Appearance *ob_app_unhilite_label;
static void layout_title(ObFrame *self);
static void mouse_event(const ObEvent *e, ObFrame *self);
@ -140,6 +143,8 @@ gboolean startup()
ob_a_icon = appearance_new(Surface_Planar, 1);
ob_a_focused_handle = appearance_new(Surface_Planar, 0);
ob_a_unfocused_handle = appearance_new(Surface_Planar, 0);
ob_app_hilite_label = appearance_new(Surface_Planar, 1);
ob_app_unhilite_label = appearance_new(Surface_Planar, 1);
if (obtheme_load()) {
RECT_SET(ob_a_focused_pressed_desk->area, 0, 0,
@ -284,6 +289,8 @@ void shutdown()
appearance_free(ob_a_icon);
appearance_free(ob_a_focused_handle);
appearance_free(ob_a_unfocused_handle);
appearance_free(ob_app_hilite_label);
appearance_free(ob_app_unhilite_label);
}
static Window createWindow(Window parent, unsigned long mask,

View file

@ -75,6 +75,9 @@ extern Appearance *ob_a_icon;
extern Appearance *ob_a_focused_handle;
extern Appearance *ob_a_unfocused_handle;
extern Appearance *ob_app_hilite_label;
extern Appearance *ob_app_unhilite_label;
typedef struct ObFrame {
Frame frame;

View file

@ -202,3 +202,33 @@ static void obrender_close(ObFrame *self, Appearance *a)
RECT_SET(a->texture[0].position, 0, 0, BUTTON_SIZE,BUTTON_SIZE);
paint(self->close, a);
}
void render_label(Window win, Rect *area, char *text,
gboolean hilight, gboolean toplevel)
{
Appearance *a;
a = hilight ? ob_app_hilite_label : ob_app_unhilite_label;
a->texture[0].data.text.string = text;
RECT_SET(a->area, 0, 0, area->width, area->height);
a->texture[0].position = a->area;
if (toplevel) {
XSetWindowBorderWidth(ob_display, win, ob_s_bwidth);
XSetWindowBorder(ob_display, win, ob_s_b_color->pixel);
}
paint(win, a);
}
void size_label(char *text, gboolean hilight, gboolean toplevel, Size *s)
{
Appearance *a;
a = hilight ? ob_app_hilite_label : ob_app_unhilite_label;
a->texture[0].data.text.string = text;
appearance_minsize(a, s);
s->width += ob_s_bevel * 2;
s->height += ob_s_bevel * 2;
}

View file

@ -401,6 +401,7 @@ gboolean obtheme_load()
ob_s_close_mask = pixmap_mask_new(7, 7, data);
}
/* read the decoration textures */
if (!read_appearance(db, "window.title.focus", ob_a_focused_title))
set_default_appearance(ob_a_focused_title);
if (!read_appearance(db, "window.title.unfocus", ob_a_unfocused_title))
@ -418,6 +419,26 @@ gboolean obtheme_load()
if (!read_appearance(db, "window.grip.unfocus", ob_a_unfocused_grip))
set_default_appearance(ob_a_unfocused_grip);
/* read the appearances for rendering non-decorations. these cannot be
parent-relative */
if (ob_a_focused_label->surface.data.planar.grad !=
Background_ParentRelative) {
if (!read_appearance(db, "window.label.focus", ob_app_hilite_label))
set_default_appearance(ob_app_hilite_label);
} else {
if (!read_appearance(db, "window.title.focus", ob_app_hilite_label))
set_default_appearance(ob_app_hilite_label);
}
if (ob_a_unfocused_label->surface.data.planar.grad !=
Background_ParentRelative) {
if (!read_appearance(db, "window.label.unfocus",ob_app_unhilite_label))
set_default_appearance(ob_app_unhilite_label);
} else {
if (!read_appearance(db, "window.title.unfocus",ob_app_unhilite_label))
set_default_appearance(ob_app_unhilite_label);
}
/* read buttons textures */
if (!read_appearance(db, "window.button.pressed.focus",
ob_a_focused_pressed_max))
if (!read_appearance(db, "window.button.pressed",
@ -477,6 +498,13 @@ gboolean obtheme_load()
ob_a_focused_label->texture[0].data.text.offset = engine_shadow_offset;
ob_a_focused_label->texture[0].data.text.tint = engine_shadow_tint;
ob_a_focused_label->texture[0].data.text.color = ob_s_title_focused_color;
ob_app_hilite_label->texture[0].type = Text;
ob_app_hilite_label->texture[0].data.text.justify = winjust;
ob_app_hilite_label->texture[0].data.text.font = ob_s_winfont;
ob_app_hilite_label->texture[0].data.text.shadow = engine_shadow;
ob_app_hilite_label->texture[0].data.text.offset = engine_shadow_offset;
ob_app_hilite_label->texture[0].data.text.tint = engine_shadow_tint;
ob_app_hilite_label->texture[0].data.text.color = ob_s_title_focused_color;
ob_a_unfocused_label->texture[0].type = Text;
ob_a_unfocused_label->texture[0].data.text.justify = winjust;
@ -486,6 +514,14 @@ gboolean obtheme_load()
ob_a_unfocused_label->texture[0].data.text.tint = engine_shadow_tint;
ob_a_unfocused_label->texture[0].data.text.color =
ob_s_title_unfocused_color;
ob_app_unhilite_label->texture[0].type = Text;
ob_app_unhilite_label->texture[0].data.text.justify = winjust;
ob_app_unhilite_label->texture[0].data.text.font = ob_s_winfont;
ob_app_unhilite_label->texture[0].data.text.shadow = engine_shadow;
ob_app_unhilite_label->texture[0].data.text.offset = engine_shadow_offset;
ob_app_unhilite_label->texture[0].data.text.tint = engine_shadow_tint;
ob_app_unhilite_label->texture[0].data.text.color =
ob_s_title_unfocused_color;
ob_a_focused_unpressed_max->texture[0].type =
ob_a_focused_pressed_max->texture[0].type =

View file

@ -15,6 +15,21 @@ gboolean engine_shadow;
int engine_shadow_offset;
int engine_shadow_tint;
EngineFrameNew *engine_frame_new;
EngineFrameGrabClient *engine_frame_grab_client;
EngineFrameReleaseClient *engine_frame_release_client;
EngineFrameAdjustArea *engine_frame_adjust_area;
EngineFrameAdjustShape *engine_frame_adjust_shape;
EngineFrameAdjustState *engine_frame_adjust_state;
EngineFrameAdjustFocus *engine_frame_adjust_focus;
EngineFrameAdjustTitle *engine_frame_adjust_title;
EngineFrameAdjustIcon *engine_frame_adjust_icon;
EngineFrameShow *engine_frame_show;
EngineFrameHide *engine_frame_hide;
EngineGetContext *engine_get_context;
EngineRenderLabel *engine_render_label;
EngineSizeLabel *engine_size_label;
static GModule *module = NULL;
static EngineStartup *estartup = NULL;
static EngineShutdown *eshutdown = NULL;
@ -60,6 +75,8 @@ static gboolean load(char *name)
LOADSYM(frame_show, engine_frame_show);
LOADSYM(frame_hide, engine_frame_hide);
LOADSYM(get_context, engine_get_context);
LOADSYM(render_label, engine_render_label);
LOADSYM(size_label, engine_size_label);
if (!estartup())
return FALSE;

View file

@ -22,21 +22,24 @@ void engine_startup();
void engine_load();
void engine_shutdown();
EngineFrameNew *engine_frame_new;
extern EngineFrameNew *engine_frame_new;
EngineFrameGrabClient *engine_frame_grab_client;
EngineFrameReleaseClient *engine_frame_release_client;
extern EngineFrameGrabClient *engine_frame_grab_client;
extern EngineFrameReleaseClient *engine_frame_release_client;
EngineFrameAdjustArea *engine_frame_adjust_area;
EngineFrameAdjustShape *engine_frame_adjust_shape;
EngineFrameAdjustState *engine_frame_adjust_state;
EngineFrameAdjustFocus *engine_frame_adjust_focus;
EngineFrameAdjustTitle *engine_frame_adjust_title;
EngineFrameAdjustIcon *engine_frame_adjust_icon;
extern EngineFrameAdjustArea *engine_frame_adjust_area;
extern EngineFrameAdjustShape *engine_frame_adjust_shape;
extern EngineFrameAdjustState *engine_frame_adjust_state;
extern EngineFrameAdjustFocus *engine_frame_adjust_focus;
extern EngineFrameAdjustTitle *engine_frame_adjust_title;
extern EngineFrameAdjustIcon *engine_frame_adjust_icon;
EngineFrameShow *engine_frame_show;
EngineFrameHide *engine_frame_hide;
extern EngineFrameShow *engine_frame_show;
extern EngineFrameHide *engine_frame_hide;
EngineGetContext *engine_get_context;
extern EngineGetContext *engine_get_context;
extern EngineRenderLabel *engine_render_label;
extern EngineSizeLabel *engine_size_label;
#endif