self->bwidth;
XMapWindow(ob_display, self->handle);
- if (theme_a_focused_grip->surface.data.planar.grad ==
+ if (theme_a_focused_grip->surface.grad ==
Background_ParentRelative)
RECT_SET(self->a_focused_handle->area, 0, 0,
self->width, theme_handle_height);
theme_grip_width + self->bwidth, 0,
self->width - (theme_grip_width + self->bwidth) * 2,
theme_handle_height);
- if (theme_a_unfocused_grip->surface.data.planar.grad ==
+ if (theme_a_unfocused_grip->surface.grad ==
Background_ParentRelative)
RECT_SET(self->a_unfocused_handle->area, 0, 0,
self->width, theme_handle_height);
paint(self->title, t);
/* set parents for any parent relative guys */
- l->surface.data.planar.parent = t;
- l->surface.data.planar.parentx = self->label_x;
- l->surface.data.planar.parenty = theme_bevel;
+ l->surface.parent = t;
+ l->surface.parentx = self->label_x;
+ l->surface.parenty = theme_bevel;
- m->surface.data.planar.parent = t;
- m->surface.data.planar.parentx = self->max_x;
- m->surface.data.planar.parenty = theme_bevel + 1;
+ m->surface.parent = t;
+ m->surface.parentx = self->max_x;
+ m->surface.parenty = theme_bevel + 1;
- n->surface.data.planar.parent = t;
- n->surface.data.planar.parentx = self->icon_x;
- n->surface.data.planar.parenty = theme_bevel;
+ n->surface.parent = t;
+ n->surface.parentx = self->icon_x;
+ n->surface.parenty = theme_bevel;
- i->surface.data.planar.parent = t;
- i->surface.data.planar.parentx = self->iconify_x;
- i->surface.data.planar.parenty = theme_bevel + 1;
+ i->surface.parent = t;
+ i->surface.parentx = self->iconify_x;
+ i->surface.parenty = theme_bevel + 1;
- d->surface.data.planar.parent = t;
- d->surface.data.planar.parentx = self->desk_x;
- d->surface.data.planar.parenty = theme_bevel + 1;
+ d->surface.parent = t;
+ d->surface.parentx = self->desk_x;
+ d->surface.parenty = theme_bevel + 1;
- s->surface.data.planar.parent = t;
- s->surface.data.planar.parentx = self->shade_x;
- s->surface.data.planar.parenty = theme_bevel + 1;
+ s->surface.parent = t;
+ s->surface.parentx = self->shade_x;
+ s->surface.parenty = theme_bevel + 1;
- c->surface.data.planar.parent = t;
- c->surface.data.planar.parentx = self->close_x;
- c->surface.data.planar.parenty = theme_bevel + 1;
+ c->surface.parent = t;
+ c->surface.parentx = self->close_x;
+ c->surface.parenty = theme_bevel + 1;
framerender_label(self, l);
framerender_max(self, m);
g = (self->focused ?
theme_a_focused_grip : theme_a_unfocused_grip);
- if (g->surface.data.planar.grad == Background_ParentRelative) {
- g->surface.data.planar.parent = h;
+ if (g->surface.grad == Background_ParentRelative) {
+ g->surface.parent = h;
paint(self->handle, h);
} else
paint(self->handle, h);
- g->surface.data.planar.parentx = 0;
- g->surface.data.planar.parenty = 0;
+ g->surface.parentx = 0;
+ g->surface.parenty = 0;
paint(self->lgrip, g);
- g->surface.data.planar.parentx = self->width - theme_grip_width;
- g->surface.data.planar.parenty = 0;
+ g->surface.parentx = self->width - theme_grip_width;
+ g->surface.parenty = 0;
paint(self->rgrip, g);
}
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;
+ a->surface.parent = menu->a_items;
+ a->surface.parentx = 0;
+ a->surface.parenty = self->y;
paint(self->item, a);
}
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 +
+ self->a_text->surface.parent = self->a_bg;
+ self->a_text->surface.parentx = iconw +
theme_bevel * (self->hasicon ? 2 : 1);
- self->a_text->surface.data.planar.parenty = theme_bevel;
+ self->a_text->surface.parenty = theme_bevel;
XMoveResizeWindow(ob_display, self->text,
iconw + theme_bevel * (self->hasicon ? 2 : 1),
theme_bevel, textw, texth);
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;
+ self->a_icon->surface.parent = self->a_bg;
+ self->a_icon->surface.parentx = theme_bevel;
+ self->a_icon->surface.parenty = theme_bevel;
XMoveResizeWindow(ob_display, self->icon,
theme_bevel, theme_bevel, iconw, texth);
}
/* focus the last focused window on the desktop, and ignore enter events
from the switch so it doesnt mess with the focus */
while (XCheckTypedEvent(ob_display, EnterNotify, &e));
+ g_message("switch fallback");
focus_fallback(Fallback_Desktop);
+ g_message("/switch fallback");
dispatch_ob(Event_Ob_Desktop, num, old);
}
void gradient_render(Surface *sf, int w, int h)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 current;
unsigned int r,g,b;
int off, x;
- switch (sf->data.planar.grad) {
+ switch (sf->grad) {
case Background_Solid: /* already handled */
return;
case Background_Vertical:
return;
}
- if (sf->data.planar.relief == Flat && sf->data.planar.border) {
- r = sf->data.planar.border_color->r;
- g = sf->data.planar.border_color->g;
- b = sf->data.planar.border_color->b;
+ if (sf->relief == Flat && sf->border) {
+ r = sf->border_color->r;
+ g = sf->border_color->g;
+ b = sf->border_color->b;
current = (r << default_red_offset)
+ (g << default_green_offset)
+ (b << default_blue_offset);
}
}
- if (sf->data.planar.relief != Flat) {
- if (sf->data.planar.bevel == Bevel1) {
+ if (sf->relief != Flat) {
+ if (sf->bevel == Bevel1) {
for (off = 1, x = 1; x < w - 1; ++x, off++)
highlight(data + off,
data + off + (h-1) * w,
- sf->data.planar.relief==Raised);
+ sf->relief==Raised);
for (off = 0, x = 0; x < h; ++x, off++)
highlight(data + off * w,
data + off * w + w - 1,
- sf->data.planar.relief==Raised);
+ sf->relief==Raised);
}
- if (sf->data.planar.bevel == Bevel2) {
+ if (sf->bevel == Bevel2) {
for (off = 2, x = 2; x < w - 2; ++x, off++)
highlight(data + off + w,
data + off + (h-2) * w,
- sf->data.planar.relief==Raised);
+ sf->relief==Raised);
for (off = 1, x = 1; x < h-1; ++x, off++)
highlight(data + off * w + 1,
data + off * w + w - 2,
- sf->data.planar.relief==Raised);
+ sf->relief==Raised);
}
}
}
void gradient_vertical(Surface *sf, int w, int h)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 current;
float dr, dg, db;
unsigned int r,g,b;
int x, y;
- dr = (float)(sf->data.planar.secondary->r - sf->data.planar.primary->r);
+ dr = (float)(sf->secondary->r - sf->primary->r);
dr/= (float)h;
- dg = (float)(sf->data.planar.secondary->g - sf->data.planar.primary->g);
+ dg = (float)(sf->secondary->g - sf->primary->g);
dg/= (float)h;
- db = (float)(sf->data.planar.secondary->b - sf->data.planar.primary->b);
+ db = (float)(sf->secondary->b - sf->primary->b);
db/= (float)h;
for (y = 0; y < h; ++y) {
- r = sf->data.planar.primary->r + (int)(dr * y);
- g = sf->data.planar.primary->g + (int)(dg * y);
- b = sf->data.planar.primary->b + (int)(db * y);
+ r = sf->primary->r + (int)(dr * y);
+ g = sf->primary->g + (int)(dg * y);
+ b = sf->primary->b + (int)(db * y);
current = (r << default_red_offset)
+ (g << default_green_offset)
+ (b << default_blue_offset);
void gradient_horizontal(Surface *sf, int w, int h)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 current;
float dr, dg, db;
unsigned int r,g,b;
int x, y;
- dr = (float)(sf->data.planar.secondary->r - sf->data.planar.primary->r);
+ dr = (float)(sf->secondary->r - sf->primary->r);
dr/= (float)w;
- dg = (float)(sf->data.planar.secondary->g - sf->data.planar.primary->g);
+ dg = (float)(sf->secondary->g - sf->primary->g);
dg/= (float)w;
- db = (float)(sf->data.planar.secondary->b - sf->data.planar.primary->b);
+ db = (float)(sf->secondary->b - sf->primary->b);
db/= (float)w;
for (x = 0; x < w; ++x, ++data) {
- r = sf->data.planar.primary->r + (int)(dr * x);
- g = sf->data.planar.primary->g + (int)(dg * x);
- b = sf->data.planar.primary->b + (int)(db * x);
+ r = sf->primary->r + (int)(dr * x);
+ g = sf->primary->g + (int)(dg * x);
+ b = sf->primary->b + (int)(db * x);
current = (r << default_red_offset)
+ (g << default_green_offset)
+ (b << default_blue_offset);
void gradient_diagonal(Surface *sf, int w, int h)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
int x, y;
for (y = 0; y < h; ++y) {
- drx = (float)(sf->data.planar.secondary->r -
- sf->data.planar.primary->r);
+ drx = (float)(sf->secondary->r -
+ sf->primary->r);
dry = drx/(float)h;
drx/= (float)w;
- dgx = (float)(sf->data.planar.secondary->g -
- sf->data.planar.primary->g);
+ dgx = (float)(sf->secondary->g -
+ sf->primary->g);
dgy = dgx/(float)h;
dgx/= (float)w;
- dbx = (float)(sf->data.planar.secondary->b -
- sf->data.planar.primary->b);
+ dbx = (float)(sf->secondary->b -
+ sf->primary->b);
dby = dbx/(float)h;
dbx/= (float)w;
for (x = 0; x < w; ++x, ++data) {
- r = sf->data.planar.primary->r +
+ r = sf->primary->r +
((int)(drx * x) + (int)(dry * y))/2;
- g = sf->data.planar.primary->g +
+ g = sf->primary->g +
((int)(dgx * x) + (int)(dgy * y))/2;
- b = sf->data.planar.primary->b +
+ b = sf->primary->b +
((int)(dbx * x) + (int)(dby * y))/2;
current = (r << default_red_offset)
+ (g << default_green_offset)
void gradient_crossdiagonal(Surface *sf, int w, int h)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
int x, y;
for (y = 0; y < h; ++y) {
- drx = (float)(sf->data.planar.secondary->r -
- sf->data.planar.primary->r);
+ drx = (float)(sf->secondary->r -
+ sf->primary->r);
dry = drx/(float)h;
drx/= (float)w;
- dgx = (float)(sf->data.planar.secondary->g -
- sf->data.planar.primary->g);
+ dgx = (float)(sf->secondary->g -
+ sf->primary->g);
dgy = dgx/(float)h;
dgx/= (float)w;
- dbx = (float)(sf->data.planar.secondary->b -
- sf->data.planar.primary->b);
+ dbx = (float)(sf->secondary->b -
+ sf->primary->b);
dby = dbx/(float)h;
dbx/= (float)w;
for (x = w; x > 0; --x, ++data) {
- r = sf->data.planar.primary->r +
+ r = sf->primary->r +
((int)(drx * (x-1)) + (int)(dry * y))/2;
- g = sf->data.planar.primary->g +
+ g = sf->primary->g +
((int)(dgx * (x-1)) + (int)(dgy * y))/2;
- b = sf->data.planar.primary->b +
+ b = sf->primary->b +
((int)(dbx * (x-1)) + (int)(dby * y))/2;
current = (r << default_red_offset)
+ (g << default_green_offset)
int r, g, b;
/* light color */
- r = l->surface.data.planar.primary->r;
+ r = l->surface.primary->r;
r += r >> 1;
- g = l->surface.data.planar.primary->g;
+ g = l->surface.primary->g;
g += g >> 1;
- b = l->surface.data.planar.primary->b;
+ b = l->surface.primary->b;
b += b >> 1;
if (r > 0xFF) r = 0xFF;
if (g > 0xFF) g = 0xFF;
if (b > 0xFF) b = 0xFF;
- g_assert(!l->surface.data.planar.bevel_light);
- l->surface.data.planar.bevel_light = color_new(r, g, b);
- color_allocate_gc(l->surface.data.planar.bevel_light);
+ g_assert(!l->surface.bevel_light);
+ l->surface.bevel_light = color_new(r, g, b);
+ color_allocate_gc(l->surface.bevel_light);
/* dark color */
- r = l->surface.data.planar.primary->r;
+ r = l->surface.primary->r;
r = (r >> 1) + (r >> 2);
- g = l->surface.data.planar.primary->g;
+ g = l->surface.primary->g;
g = (g >> 1) + (g >> 2);
- b = l->surface.data.planar.primary->b;
+ b = l->surface.primary->b;
b = (b >> 1) + (b >> 2);
- g_assert(!l->surface.data.planar.bevel_dark);
- l->surface.data.planar.bevel_dark = color_new(r, g, b);
- color_allocate_gc(l->surface.data.planar.bevel_dark);
+ g_assert(!l->surface.bevel_dark);
+ l->surface.bevel_dark = color_new(r, g, b);
+ color_allocate_gc(l->surface.bevel_dark);
}
void gradient_solid(Appearance *l, int x, int y, int w, int h)
{
pixel32 pix;
int i, a, b;
- PlanarSurface *sp = &l->surface.data.planar;
+ Surface *sp = &l->surface;
int left = x, top = y, right = x + w - 1, bottom = y + h - 1;
if (sp->primary->gc == None)
void gradient_pyramid(Surface *sf, int inw, int inh)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
unsigned int r,g,b;
int x, y, h=(inh/2) + 1, w=(inw/2) + 1;
for (y = 0; y < h; ++y) {
- drx = (float)(sf->data.planar.secondary->r -
- sf->data.planar.primary->r);
+ drx = (float)(sf->secondary->r -
+ sf->primary->r);
dry = drx/(float)h;
drx/= (float)w;
- dgx = (float)(sf->data.planar.secondary->g -
- sf->data.planar.primary->g);
+ dgx = (float)(sf->secondary->g -
+ sf->primary->g);
dgy = dgx/(float)h;
dgx/= (float)w;
- dbx = (float)(sf->data.planar.secondary->b -
- sf->data.planar.primary->b);
+ dbx = (float)(sf->secondary->b -
+ sf->primary->b);
dby = dbx/(float)h;
dbx/= (float)w;
for (x = 0; x < w; ++x, data) {
- r = sf->data.planar.primary->r +
+ r = sf->primary->r +
((int)(drx * x) + (int)(dry * y))/2;
- g = sf->data.planar.primary->g +
+ g = sf->primary->g +
((int)(dgx * x) + (int)(dgy * y))/2;
- b = sf->data.planar.primary->b +
+ b = sf->primary->b +
((int)(dbx * x) + (int)(dby * y))/2;
current = (r << default_red_offset)
+ (g << default_green_offset)
void gradient_rectangle(Surface *sf, int inw, int inh)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
int val;
for (y = 0; y < h; ++y) {
- drx = (float)(sf->data.planar.primary->r -
- sf->data.planar.secondary->r);
+ drx = (float)(sf->primary->r -
+ sf->secondary->r);
dry = drx/(float)h;
drx/= (float)w;
- dgx = (float)(sf->data.planar.primary->g -
- sf->data.planar.secondary->g);
+ dgx = (float)(sf->primary->g -
+ sf->secondary->g);
dgy = dgx/(float)h;
dgx/= (float)w;
- dbx = (float)(sf->data.planar.primary->b -
- sf->data.planar.secondary->b);
+ dbx = (float)(sf->primary->b -
+ sf->secondary->b);
dby = dbx/(float)h;
dbx/= (float)w;
for (x = 0; x < w; ++x, data) {
if ((float)x/(float)w < (float)y/(float)h) val = (int)(drx * x);
else val = (int)(dry * y);
- r = sf->data.planar.secondary->r + val;
- g = sf->data.planar.secondary->g + val;
- b = sf->data.planar.secondary->b + val;
+ r = sf->secondary->r + val;
+ g = sf->secondary->g + val;
+ b = sf->secondary->b + val;
current = (r << default_red_offset)
+ (g << default_green_offset)
+ (b << default_blue_offset);
void gradient_pipecross(Surface *sf, int inw, int inh)
{
- pixel32 *data = sf->data.planar.pixel_data;
+ pixel32 *data = sf->pixel_data;
pixel32 *end = data + inw*inh - 1;
pixel32 current;
float drx, dgx, dbx, dry, dgy, dby;
int val;
for (y = 0; y < h; ++y) {
- drx = (float)(sf->data.planar.secondary->r -
- sf->data.planar.primary->r);
+ drx = (float)(sf->secondary->r -
+ sf->primary->r);
dry = drx/(float)h;
drx/= (float)w;
- dgx = (float)(sf->data.planar.secondary->g -
- sf->data.planar.primary->g);
+ dgx = (float)(sf->secondary->g -
+ sf->primary->g);
dgy = dgx/(float)h;
dgx/= (float)w;
- dbx = (float)(sf->data.planar.secondary->b -
- sf->data.planar.primary->b);
+ dbx = (float)(sf->secondary->b -
+ sf->primary->b);
dby = dbx/(float)h;
dbx/= (float)w;
for (x = 0; x < w; ++x, data) {
if ((float)x/(float)w > (float)y/(float)h) val = (int)(drx * x);
else val = (int)(dry * y);
- r = sf->data.planar.primary->r + val;
- g = sf->data.planar.primary->g + val;
- b = sf->data.planar.primary->b + val;
+ r = sf->primary->r + val;
+ g = sf->primary->g + val;
+ b = sf->primary->b + val;
current = (r << default_red_offset)
+ (g << default_green_offset)
+ (b << default_blue_offset);
float sr, sg, sb;
float ar, ag, ab;
- pr = (float)sf->data.planar.primary->r/255.0;
- pg = (float)sf->data.planar.primary->g/255.0;
- pb = (float)sf->data.planar.primary->b/255.0;
- if (sf->data.planar.secondary) {
- sr = (float)sf->data.planar.secondary->r/255.0;
- sg = (float)sf->data.planar.secondary->g/255.0;
- sb = (float)sf->data.planar.secondary->b/255.0;
+ pr = (float)sf->primary->r/255.0;
+ pg = (float)sf->primary->g/255.0;
+ pb = (float)sf->primary->b/255.0;
+ if (sf->secondary) {
+ sr = (float)sf->secondary->r/255.0;
+ sg = (float)sf->secondary->g/255.0;
+ sb = (float)sf->secondary->b/255.0;
}
- switch (sf->data.planar.grad) {
+ switch (sf->grad) {
case Background_Solid: /* already handled */
glBegin(GL_TRIANGLES);
glColor3f(pr, pg, pb);
if (w <= 0 || h <= 0 || x+w <= 0 || y+h <= 0) return;
- g_assert(l->surface.type == Surface_Planar);
-
oldp = l->pixmap; /* save to free after changing the visible pixmap */
l->pixmap = XCreatePixmap(ob_display, ob_root, x+w, y+h, render_depth);
g_assert(l->pixmap != None);
render_colormap);
g_assert(l->xftdraw != NULL);
- g_free(l->surface.data.planar.pixel_data);
- l->surface.data.planar.pixel_data = g_new(pixel32, w * h);
+ g_free(l->surface.pixel_data);
+ l->surface.pixel_data = g_new(pixel32, w * h);
- if (l->surface.data.planar.grad == Background_ParentRelative) {
- sw = l->surface.data.planar.parent->area.width;
- source = l->surface.data.planar.parent->surface.data.planar.pixel_data
- + l->surface.data.planar.parentx
- + sw * l->surface.data.planar.parenty;
- dest = l->surface.data.planar.pixel_data;
+ if (l->surface.grad == Background_ParentRelative) {
+ sw = l->surface.parent->area.width;
+ source = l->surface.parent->surface.pixel_data
+ + l->surface.parentx
+ + sw * l->surface.parenty;
+ dest = l->surface.pixel_data;
for (i = 0; i < h; i++, source += sw, dest += w) {
memcpy(dest, source, w * sizeof(pixel32));
}
}
- else if (l->surface.data.planar.grad == Background_Solid)
+ else if (l->surface.grad == Background_Solid)
gradient_solid(l, x, y, w, h);
else gradient_render(&l->surface, w, h);
for (i = 0; i < l->textures; i++) {
tarea = l->texture[i].position;
- if (l->surface.data.planar.grad != Background_ParentRelative) {
- if (l->surface.data.planar.relief != Flat) {
- switch (l->surface.data.planar.bevel) {
+ if (l->surface.grad != Background_ParentRelative) {
+ if (l->surface.relief != Flat) {
+ switch (l->surface.bevel) {
case Bevel1:
tarea.x += 1; tarea.y += 1;
tarea.width -= 2; tarea.height -= 2;
tarea.width -= 4; tarea.height -= 4;
break;
}
- } else if (l->surface.data.planar.border) {
+ } else if (l->surface.border) {
tarea.x += 1; tarea.y += 1;
tarea.width -= 2; tarea.height -= 2;
}
case Text:
if (!transferred) {
transferred = 1;
- if (l->surface.data.planar.grad != Background_Solid)
- pixel32_to_pixmap(l->surface.data.planar.pixel_data,
+ if (l->surface.grad != Background_Solid)
+ pixel32_to_pixmap(l->surface.pixel_data,
l->pixmap,x,y,w,h);
}
if (l->xftdraw == NULL) {
case Bitmask:
if (!transferred) {
transferred = 1;
- if (l->surface.data.planar.grad != Background_Solid)
- pixel32_to_pixmap(l->surface.data.planar.pixel_data,
+ if (l->surface.grad != Background_Solid)
+ pixel32_to_pixmap(l->surface.pixel_data,
l->pixmap,x,y,w,h);
}
if (l->texture[i].data.mask.color->gc == None)
&tarea);
break;
case RGBA:
- image_draw(l->surface.data.planar.pixel_data,
+ image_draw(l->surface.pixel_data,
&l->texture[i].data.rgba,
&tarea, &l->area);
break;
if (!transferred) {
transferred = 1;
- if (l->surface.data.planar.grad != Background_Solid)
- pixel32_to_pixmap(l->surface.data.planar.pixel_data, l->pixmap
+ if (l->surface.grad != Background_Solid)
+ pixel32_to_pixmap(l->surface.pixel_data, l->pixmap
,x,y,w,h);
}
{
}
-Appearance *appearance_new(SurfaceType type, int numtex)
+Appearance *appearance_new(int numtex)
{
- PlanarSurface *p;
+ Surface *p;
Appearance *out;
out = g_new(Appearance, 1);
- out->surface.type = type;
out->textures = numtex;
out->xftdraw = NULL;
if (numtex) out->texture = g_new0(Texture, numtex);
else out->texture = NULL;
out->pixmap = None;
- switch (type) {
- case Surface_Planar:
- p = &out->surface.data.planar;
- p->primary = NULL;
- p->secondary = NULL;
- p->border_color = NULL;
- p->bevel_dark = NULL;
- p->bevel_light = NULL;
- p->pixel_data = NULL;
- break;
- }
+ p = &out->surface;
+ p->primary = NULL;
+ p->secondary = NULL;
+ p->border_color = NULL;
+ p->bevel_dark = NULL;
+ p->bevel_light = NULL;
+ p->pixel_data = NULL;
return out;
}
Appearance *appearance_copy(Appearance *orig)
{
- PlanarSurface *spo, *spc;
+ Surface *spo, *spc;
Appearance *copy = g_new(Appearance, 1);
- copy->surface.type = orig->surface.type;
- switch (orig->surface.type) {
- case Surface_Planar:
- spo = &(orig->surface.data.planar);
- spc = &(copy->surface.data.planar);
- spc->grad = spo->grad;
- spc->relief = spo->relief;
- spc->bevel = spo->bevel;
- if (spo->primary != NULL)
- spc->primary = color_new(spo->primary->r,
- spo->primary->g,
- spo->primary->b);
- else spc->primary = NULL;
-
- if (spo->secondary != NULL)
- spc->secondary = color_new(spo->secondary->r,
- spo->secondary->g,
- spo->secondary->b);
- else spc->secondary = NULL;
-
- if (spo->border_color != NULL)
- spc->border_color = color_new(spo->border_color->r,
- spo->border_color->g,
- spo->border_color->b);
- else spc->border_color = NULL;
-
- if (spo->bevel_dark != NULL)
- spc->bevel_dark = color_new(spo->bevel_dark->r,
- spo->bevel_dark->g,
- spo->bevel_dark->b);
- else spc->bevel_dark = NULL;
-
- if (spo->bevel_light != NULL)
- spc->bevel_light = color_new(spo->bevel_light->r,
- spo->bevel_light->g,
- spo->bevel_light->b);
- else spc->bevel_light = NULL;
-
- spc->interlaced = spo->interlaced;
- spc->border = spo->border;
- spc->pixel_data = NULL;
- break;
- }
+
+ spo = &(orig->surface);
+ spc = &(copy->surface);
+ spc->grad = spo->grad;
+ spc->relief = spo->relief;
+ spc->bevel = spo->bevel;
+ if (spo->primary != NULL)
+ spc->primary = color_new(spo->primary->r,
+ spo->primary->g,
+ spo->primary->b);
+ else spc->primary = NULL;
+
+ if (spo->secondary != NULL)
+ spc->secondary = color_new(spo->secondary->r,
+ spo->secondary->g,
+ spo->secondary->b);
+ else spc->secondary = NULL;
+
+ if (spo->border_color != NULL)
+ spc->border_color = color_new(spo->border_color->r,
+ spo->border_color->g,
+ spo->border_color->b);
+ else spc->border_color = NULL;
+
+ if (spo->bevel_dark != NULL)
+ spc->bevel_dark = color_new(spo->bevel_dark->r,
+ spo->bevel_dark->g,
+ spo->bevel_dark->b);
+ else spc->bevel_dark = NULL;
+
+ if (spo->bevel_light != NULL)
+ spc->bevel_light = color_new(spo->bevel_light->r,
+ spo->bevel_light->g,
+ spo->bevel_light->b);
+ else spc->bevel_light = NULL;
+
+ spc->interlaced = spo->interlaced;
+ spc->border = spo->border;
+ spc->pixel_data = NULL;
+
copy->textures = orig->textures;
copy->texture = g_memdup(orig->texture, orig->textures * sizeof(Texture));
copy->pixmap = None;
void appearance_free(Appearance *a)
{
if (a) {
- PlanarSurface *p;
+ Surface *p;
if (a->pixmap != None) XFreePixmap(ob_display, a->pixmap);
if (a->xftdraw != NULL) XftDrawDestroy(a->xftdraw);
if (a->textures)
g_free(a->texture);
- if (a->surface.type == Surface_Planar) {
- p = &a->surface.data.planar;
- color_free(p->primary);
- color_free(p->secondary);
- color_free(p->border_color);
- color_free(p->bevel_dark);
- color_free(p->bevel_light);
- g_free(p->pixel_data);
- }
+ p = &a->surface;
+ color_free(p->primary);
+ color_free(p->secondary);
+ color_free(p->border_color);
+ color_free(p->bevel_dark);
+ color_free(p->bevel_light);
+ g_free(p->pixel_data);
+
g_free(a);
}
}
int m;
*w = *h = 1;
- switch (l->surface.type) {
- case Surface_Planar:
- if (l->surface.data.planar.relief != Flat) {
- switch (l->surface.data.planar.bevel) {
- case Bevel1:
- *w = *h = 2;
- break;
- case Bevel2:
- *w = *h = 4;
- break;
- }
- } else if (l->surface.data.planar.border)
+ if (l->surface.relief != Flat) {
+ switch (l->surface.bevel) {
+ case Bevel1:
*w = *h = 2;
+ break;
+ case Bevel2:
+ *w = *h = 4;
+ break;
+ }
+ } else if (l->surface.border)
+ *w = *h = 2;
- for (i = 0; i < l->textures; ++i) {
- switch (l->texture[i].type) {
- case Bitmask:
- *w += l->texture[i].data.mask.mask->w;
- *h += l->texture[i].data.mask.mask->h;
- break;
- case Text:
- m = font_measure_string(l->texture[i].data.text.font,
- l->texture[i].data.text.string,
- l->texture[i].data.text.shadow,
- l->texture[i].data.text.offset);
- *w += m;
- m = font_height(l->texture[i].data.text.font,
- l->texture[i].data.text.shadow,
- l->texture[i].data.text.offset);
- *h += m;
- break;
- case RGBA:
- *w += l->texture[i].data.rgba.width;
- *h += l->texture[i].data.rgba.height;
- break;
- case NoTexture:
- break;
- }
+ for (i = 0; i < l->textures; ++i) {
+ switch (l->texture[i].type) {
+ case Bitmask:
+ *w += l->texture[i].data.mask.mask->w;
+ *h += l->texture[i].data.mask.mask->h;
+ break;
+ case Text:
+ m = font_measure_string(l->texture[i].data.text.font,
+ l->texture[i].data.text.string,
+ l->texture[i].data.text.shadow,
+ l->texture[i].data.text.offset);
+ *w += m;
+ m = font_height(l->texture[i].data.text.font,
+ l->texture[i].data.text.shadow,
+ l->texture[i].data.text.offset);
+ *h += m;
+ break;
+ case RGBA:
+ *w += l->texture[i].data.rgba.width;
+ *h += l->texture[i].data.rgba.height;
+ break;
+ case NoTexture:
+ break;
}
- break;
}
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- if (l->surface.data.planar.grad == Background_ParentRelative) {
+ if (l->surface.grad == Background_ParentRelative) {
printf("crap\n");
} else
render_gl_gradient(&l->surface, absx+x, absy+y, absw, absh);
#include "color.h"
#include "kernel/geom.h"
-typedef enum {
- Surface_Planar,
- Surface_Nonplanar
-} SurfaceType;
-
typedef enum {
Flat,
Raised,
struct Appearance;
-typedef struct PlanarSurface {
+typedef struct Surface {
SurfaceColorType grad;
ReliefType relief;
BevelType bevel;
int parentx;
int parenty;
pixel32 *pixel_data;
-} PlanarSurface;
-
-typedef struct NonplanarSurface {
- int poo;
-} NonplanarSurface;
-
-typedef union {
- PlanarSurface planar;
- NonplanarSurface nonplanar;
-} SurfaceData;
-
-typedef struct Surface {
- SurfaceType type;
- SurfaceColorType colortype;
- SurfaceData data;
} Surface;
typedef struct {
void x_paint(Window win, Appearance *l);
void gl_paint(Window win, Appearance *l);
void render_shutdown(void);
-Appearance *appearance_new(SurfaceType type, int numtex);
+Appearance *appearance_new(int numtex);
Appearance *appearance_copy(Appearance *a);
void appearance_free(Appearance *a);
void truecolor_startup(void);
root = RootWindow (ob_display, DefaultScreen (ob_display));
render_startup();
- look = appearance_new(Surface_Planar, 0);
- look->surface.data.planar.grad = Background_Pyramid;
- look->surface.data.planar.secondary = color_parse("Yellow");
- look->surface.data.planar.primary = color_parse("Blue");
- look->surface.data.planar.interlaced = FALSE;
+ look = appearance_new(0);
+ look->surface.grad = Background_Pyramid;
+ look->surface.secondary = color_parse("Yellow");
+ look->surface.primary = color_parse("Blue");
+ look->surface.interlaced = FALSE;
look->area.x = 0;
look->area.y = 0;
look->area.width = 500;
theme_shade_set_mask = theme_shade_unset_mask = NULL;
theme_iconify_mask = theme_close_mask = NULL;
- theme_a_focused_unpressed_max = appearance_new(Surface_Planar, 1);
- theme_a_focused_pressed_max = appearance_new(Surface_Planar, 1);
- theme_a_focused_pressed_set_max = appearance_new(Surface_Planar, 1);
- theme_a_unfocused_unpressed_max = appearance_new(Surface_Planar, 1);
- theme_a_unfocused_pressed_max = appearance_new(Surface_Planar, 1);
- theme_a_unfocused_pressed_set_max = appearance_new(Surface_Planar, 1);
+ theme_a_focused_unpressed_max = appearance_new(1);
+ theme_a_focused_pressed_max = appearance_new(1);
+ theme_a_focused_pressed_set_max = appearance_new(1);
+ theme_a_unfocused_unpressed_max = appearance_new(1);
+ theme_a_unfocused_pressed_max = appearance_new(1);
+ theme_a_unfocused_pressed_set_max = appearance_new(1);
theme_a_focused_unpressed_close = NULL;
theme_a_focused_pressed_close = NULL;
theme_a_unfocused_unpressed_close = NULL;
theme_a_focused_pressed_iconify = NULL;
theme_a_unfocused_unpressed_iconify = NULL;
theme_a_unfocused_pressed_iconify = NULL;
- theme_a_focused_grip = appearance_new(Surface_Planar, 0);
- theme_a_unfocused_grip = appearance_new(Surface_Planar, 0);
- theme_a_focused_title = appearance_new(Surface_Planar, 0);
- theme_a_unfocused_title = appearance_new(Surface_Planar, 0);
- theme_a_focused_label = appearance_new(Surface_Planar, 1);
- theme_a_unfocused_label = appearance_new(Surface_Planar, 1);
- theme_a_icon = appearance_new(Surface_Planar, 1);
- theme_a_focused_handle = appearance_new(Surface_Planar, 0);
- theme_a_unfocused_handle = appearance_new(Surface_Planar, 0);
- theme_a_menu = appearance_new(Surface_Planar, 0);
- theme_a_menu_title = appearance_new(Surface_Planar, 1);
- theme_a_menu_item = appearance_new(Surface_Planar, 1);
- theme_a_menu_disabled = appearance_new(Surface_Planar, 1);
- theme_a_menu_hilite = appearance_new(Surface_Planar, 1);
-
- theme_app_hilite_bg = appearance_new(Surface_Planar, 0);
- theme_app_unhilite_bg = appearance_new(Surface_Planar, 0);
- theme_app_hilite_label = appearance_new(Surface_Planar, 1);
- theme_app_unhilite_label = appearance_new(Surface_Planar, 1);
- theme_app_icon = appearance_new(Surface_Planar, 1);
+ theme_a_focused_grip = appearance_new(0);
+ theme_a_unfocused_grip = appearance_new(0);
+ theme_a_focused_title = appearance_new(0);
+ theme_a_unfocused_title = appearance_new(0);
+ theme_a_focused_label = appearance_new(1);
+ theme_a_unfocused_label = appearance_new(1);
+ theme_a_icon = appearance_new(1);
+ theme_a_focused_handle = appearance_new(0);
+ theme_a_unfocused_handle = appearance_new(0);
+ theme_a_menu = appearance_new(0);
+ theme_a_menu_title = appearance_new(1);
+ theme_a_menu_item = appearance_new(1);
+ theme_a_menu_disabled = appearance_new(1);
+ theme_a_menu_hilite = appearance_new(1);
+
+ theme_app_hilite_bg = appearance_new(0);
+ theme_app_unhilite_bg = appearance_new(0);
+ theme_app_hilite_label = appearance_new(1);
+ theme_app_unhilite_label = appearance_new(1);
+ theme_app_icon = appearance_new(1);
}
if (XrmGetResource(db, rname, rclass, &rettype, &retvalue) &&
retvalue.addr != NULL) {
parse_appearance(retvalue.addr,
- &value->surface.data.planar.grad,
- &value->surface.data.planar.relief,
- &value->surface.data.planar.bevel,
- &value->surface.data.planar.interlaced,
- &value->surface.data.planar.border);
- if (!read_color(db, cname, &value->surface.data.planar.primary))
- value->surface.data.planar.primary = color_new(0, 0, 0);
- if (!read_color(db, ctoname, &value->surface.data.planar.secondary))
- value->surface.data.planar.secondary = color_new(0, 0, 0);
- if (value->surface.data.planar.border)
+ &value->surface.grad,
+ &value->surface.relief,
+ &value->surface.bevel,
+ &value->surface.interlaced,
+ &value->surface.border);
+ if (!read_color(db, cname, &value->surface.primary))
+ value->surface.primary = color_new(0, 0, 0);
+ if (!read_color(db, ctoname, &value->surface.secondary))
+ value->surface.secondary = color_new(0, 0, 0);
+ if (value->surface.border)
if (!read_color(db, bcname,
- &value->surface.data.planar.border_color))
- value->surface.data.planar.border_color = color_new(0, 0, 0);
+ &value->surface.border_color))
+ value->surface.border_color = color_new(0, 0, 0);
ret = TRUE;
}
static void set_default_appearance(Appearance *a)
{
- a->surface.data.planar.grad = Background_Solid;
- a->surface.data.planar.relief = Flat;
- a->surface.data.planar.bevel = Bevel1;
- a->surface.data.planar.interlaced = FALSE;
- a->surface.data.planar.border = FALSE;
- a->surface.data.planar.primary = color_new(0, 0, 0);
- a->surface.data.planar.secondary = color_new(0, 0, 0);
+ a->surface.grad = Background_Solid;
+ a->surface.relief = Flat;
+ a->surface.bevel = Bevel1;
+ a->surface.interlaced = FALSE;
+ a->surface.border = FALSE;
+ a->surface.primary = color_new(0, 0, 0);
+ a->surface.secondary = color_new(0, 0, 0);
}
char *theme_load(char *theme)
}
/* load the font stuff */
- font_str = "arial-8:bold";
+ font_str = "arial:bold:pixelsize=10:minsize";
theme_winfont_shadow = FALSE;
if (read_string(db, "window.xft.flags", &str)) {
theme_a_focused_pressed_set_max =
appearance_copy(theme_a_focused_pressed_max);
- theme_a_icon->surface.data.planar.grad = Background_ParentRelative;
+ theme_a_icon->surface.grad = Background_ParentRelative;
/* set up the textures */
theme_a_focused_label->texture[0].type =
theme_mtitlefont_shadow_tint;
theme_a_menu_title->texture[0].data.text.color = theme_menu_title_color;
- theme_a_menu_item->surface.data.planar.grad =
- theme_a_menu_disabled->surface.data.planar.grad =
- theme_app_icon->surface.data.planar.grad =
- Background_ParentRelative;
+ theme_a_menu_item->surface.grad =
+ theme_a_menu_disabled->surface.grad =
+ theme_app_icon->surface.grad = Background_ParentRelative;
theme_a_menu_item->texture[0].type =
theme_a_menu_disabled->texture[0].type =