put an alpha channel in the rgba texture

This commit is contained in:
Dana Jansens 2007-05-29 03:22:55 +00:00
parent 6e06e45fb6
commit c4eaa94385
5 changed files with 9 additions and 19 deletions

View file

@ -321,6 +321,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
/* set up the hilite texture for the background */
p->a_bg->texture[0].data.rgba.width = rgbaw;
p->a_bg->texture[0].data.rgba.height = rgbah;
p->a_bg->texture[0].data.rgba.alpha = 0xff;
p->hilite_rgba = g_new(RrPixel32, rgbaw * rgbah);
p->a_bg->texture[0].data.rgba.data = p->hilite_rgba;
@ -421,25 +422,9 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
icon = client_icon(target->client, innerw, innerh);
p->a_icon->texture[0].data.rgba.width = icon->width;
p->a_icon->texture[0].data.rgba.height = icon->height;
if (target->client->iconic) {
/* fade iconic windows */
gint i;
RrPixel32 *d, *s;
icon_data = g_new(RrPixel32, icon->width * icon->height);
s = icon->data;
d = icon_data;
for (i = 0; i < icon->width * icon->height; ++i, ++d, ++s) {
/* 7/16 opacity */
gint a = ((*s >> RrDefaultAlphaOffset) & 0xff);
*d = *s - (a << RrDefaultAlphaOffset) +
(((a>>1) - (a>>4)) << RrDefaultAlphaOffset);
}
} else
icon_data = icon->data;
p->a_icon->texture[0].data.rgba.data = icon_data;
/* 7/16 alpha */
p->a_icon->texture[0].data.rgba.alpha = (0xff>>1 - 0xff>>4);
p->a_icon->texture[0].data.rgba.data = icon->data;
/* draw the icon */
p->a_icon->surface.parentx = innerx;

View file

@ -344,6 +344,7 @@ static void framerender_icon(ObFrame *self, RrAppearance *a)
a->texture[0].type = RR_TEXTURE_RGBA;
a->texture[0].data.rgba.width = icon->width;
a->texture[0].data.rgba.height = icon->height;
a->texture[0].data.rgba.alpha = 0xff;
a->texture[0].data.rgba.data = icon->data;
} else
a->texture[0].type = RR_TEXTURE_NONE;

View file

@ -499,6 +499,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
self->entry->data.normal.icon_width;
self->a_icon->texture[0].data.rgba.height =
self->entry->data.normal.icon_height;
/* XXX determine this from iconic window */
self->a_icon->texture[0].data.rgba.width = 0xff;
self->a_icon->texture[0].data.rgba.data =
self->entry->data.normal.icon_data;
self->a_icon->surface.parent = item_a;

View file

@ -324,6 +324,7 @@ void icon_popup_delay_show(ObIconPopup *self, gulong usec,
self->a_icon->texture[0].type = RR_TEXTURE_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.alpha = 0xff;
self->a_icon->texture[0].data.rgba.data = icon->data;
} else
self->a_icon->texture[0].type = RR_TEXTURE_NONE;

View file

@ -146,6 +146,7 @@ struct _RrTextureMask {
struct _RrTextureRGBA {
gint width;
gint height;
gint alpha;
RrPixel32 *data;
/* cached scaled so we don't have to scale often */
gint cwidth;