Hi,
I'm working on alpha blending style, only for openGL mode. For this I
will rewrite primitive functions that will apply RGBA color (instead RGB
like it in current), this way make possible use other style w/o
rewriting style code. Al work good, but. I want to fade unfocudes
window, but its seems no good fast way to find parent window for
widget. Currently I use *AG_WidgetParentWindow* for this, but this hard
and FPS decreased. Is it possible to have _cashed_ ->win field for all
widget like it's in titlebar->win? Or other fast way for finding
window?
Some code:
--8<---------------cut here---------------start------------->8---
Uint8 alphaFadeUnfocusedWin = 100;
// fade unfocused window
inline Uint8 ComputeAlpha(AG_Widget *wid, Uint8 alpha)
{
if (AG_WindowIsFocused(AG_WidgetParentWindow(wid)))
return alpha;
else
{
int v = alpha;
v -= alphaFadeUnfocusedWin;
if (v < 0)
return 0;
else
return (Uint8) v;
}
}
static void
_rectGL(void *p, AG_Rect r, Uint32 color)
{
AG_Widget *wid = (AG_Widget *)p;
Uint8 red, green, blue, alpha;
int x1 = wid->rView.x1 + r.x;
int y1 = wid->rView.y1 + r.y;
int x2 = x1 + r.w - 1;
int y2 = y1 + r.h - 1;
BeginBlending();
AG_GetRGBA(color, agVideoFmt, &red,&green,&blue,&alpha);
glBegin(GL_POLYGON);
glColor4ub(red, green, blue, ComputeAlpha(wid, alpha));
glVertex2i(x1, y1);
glVertex2i(x2, y1);
glVertex2i(x2, y2);
glVertex2i(x1, y2);
glEnd();
EndBlending();
}
--8<---------------cut here---------------end--------------->8---
--
Olexandr
_______________________________________________
Agar mailing list
[email protected]
http://libagar.org/lists.html