forked from e16/e16
1
0
Fork 0

Split iconbox scrollbar update into layout and paint.

SVN revision: 42575
This commit is contained in:
Kim Woelders 2009-09-20 08:16:00 +00:00
parent f603b5c320
commit 92c38850a2
2 changed files with 95 additions and 66 deletions

View File

@ -513,13 +513,12 @@ ContainerLayoutImageWin(Container * ct)
} }
static void static void
ContainerDrawScroll(Container * ct) ContainerLayoutScroll(Container * ct)
{ {
ImageClass *ic, *ic_sbb; ImageClass *ic, *ic_sbb;
EImageBorder *pad; EImageBorder *pad;
int arrow_mode = ct->arrow_side; int arrow_mode = ct->arrow_side;
int bs, bw, bx; int bs, bw, bx;
int state;
switch (ct->orientation) switch (ct->orientation)
{ {
@ -670,23 +669,10 @@ ContainerDrawScroll(Container * ct)
} }
} }
ImageclassApply(ic_sbb, ct->scroll_win, 0, 0, STATE_NORMAL, ST_ICONBOX);
EMoveResizeWindow(ct->scrollbar_win, EMoveResizeWindow(ct->scrollbar_win,
(ct->scroll_thickness - ct->bar_thickness) / 2, bx, (ct->scroll_thickness - ct->bar_thickness) / 2, bx,
ct->bar_thickness, bw); ct->bar_thickness, bw);
ic = ImageclassFind("ICONBOX_SCROLLBAR_KNOB_VERTICAL", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->scrollbar_hilited)
state = STATE_HILITED;
if (ct->scrollbar_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->scrollbar_win, 0, 0, state, ST_ICONBOX);
}
ic = ImageclassFind("ICONBOX_SCROLLKNOB_VERTICAL", 0); ic = ImageclassFind("ICONBOX_SCROLLKNOB_VERTICAL", 0);
if ((ic) && (bw > ct->knob_length)) if ((ic) && (bw > ct->knob_length))
{ {
@ -694,44 +680,11 @@ ContainerDrawScroll(Container * ct)
EMoveResizeWindow(ct->scrollbarknob_win, 0, EMoveResizeWindow(ct->scrollbarknob_win, 0,
(bw - ct->knob_length) / 2, ct->bar_thickness, (bw - ct->knob_length) / 2, ct->bar_thickness,
ct->knob_length); ct->knob_length);
state = STATE_NORMAL;
if (ct->scrollbar_hilited)
state = STATE_HILITED;
if (ct->scrollbar_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->scrollbarknob_win, 0, 0, state,
ST_ICONBOX);
} }
else else
{ {
EUnmapWindow(ct->scrollbarknob_win); EUnmapWindow(ct->scrollbarknob_win);
} }
if (arrow_mode < 3)
{
ic = ImageclassFind("ICONBOX_ARROW_UP", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->arrow1_hilited)
state = STATE_HILITED;
if (ct->arrow1_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->arrow1_win, 0, 0, state, ST_ICONBOX);
}
ic = ImageclassFind("ICONBOX_ARROW_DOWN", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->arrow2_hilited)
state = STATE_HILITED;
if (ct->arrow2_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->arrow2_win, 0, 0, state, ST_ICONBOX);
}
}
break; break;
case 0: case 0:
@ -884,7 +837,97 @@ ContainerDrawScroll(Container * ct)
(ct->scroll_thickness - ct->bar_thickness) / 2, bw, (ct->scroll_thickness - ct->bar_thickness) / 2, bw,
ct->bar_thickness); ct->bar_thickness);
ImageclassApply(ic_sbb, ct->scroll_win, 0, 0, STATE_NORMAL, ST_ICONBOX); ic = ImageclassFind("ICONBOX_SCROLLKNOB_HORIZONTAL", 0);
if ((ic) && (bw > ct->knob_length))
{
EMapWindow(ct->scrollbarknob_win);
EMoveResizeWindow(ct->scrollbarknob_win,
(bw - ct->knob_length) / 2, 0, ct->knob_length,
ct->bar_thickness);
}
else
{
EUnmapWindow(ct->scrollbarknob_win);
}
break;
do_hide_sb:
EUnmapWindow(ct->scroll_win);
EUnmapWindow(ct->arrow1_win);
EUnmapWindow(ct->arrow2_win);
break;
}
}
static void
ContainerDrawScroll(Container * ct)
{
ImageClass *ic;
int state;
ContainerLayoutScroll(ct);
if (!WinIsMapped(ct->scroll_win))
return;
switch (ct->orientation)
{
default:
ic = ImageclassFind("ICONBOX_SCROLLBAR_BASE_VERTICAL", 1);
ImageclassApply(ic, ct->scroll_win, 0, 0, STATE_NORMAL, ST_ICONBOX);
ic = ImageclassFind("ICONBOX_SCROLLBAR_KNOB_VERTICAL", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->scrollbar_hilited)
state = STATE_HILITED;
if (ct->scrollbar_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->scrollbar_win, 0, 0, state, ST_ICONBOX);
}
ic = ImageclassFind("ICONBOX_SCROLLKNOB_VERTICAL", 0);
if (ic && WinIsMapped(ct->scrollbarknob_win))
{
state = STATE_NORMAL;
if (ct->scrollbar_hilited)
state = STATE_HILITED;
if (ct->scrollbar_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->scrollbarknob_win, 0, 0, state,
ST_ICONBOX);
}
if (WinIsMapped(ct->arrow1_win))
{
ic = ImageclassFind("ICONBOX_ARROW_UP", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->arrow1_hilited)
state = STATE_HILITED;
if (ct->arrow1_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->arrow1_win, 0, 0, state, ST_ICONBOX);
}
ic = ImageclassFind("ICONBOX_ARROW_DOWN", 1);
if (ic)
{
state = STATE_NORMAL;
if (ct->arrow2_hilited)
state = STATE_HILITED;
if (ct->arrow2_clicked)
state = STATE_CLICKED;
ImageclassApply(ic, ct->arrow2_win, 0, 0, state, ST_ICONBOX);
}
}
break;
case 0:
ic = ImageclassFind("ICONBOX_SCROLLBAR_BASE_HORIZONTAL", 1);
ImageclassApply(ic, ct->scroll_win, 0, 0, STATE_NORMAL, ST_ICONBOX);
ic = ImageclassFind("ICONBOX_SCROLLBAR_KNOB_HORIZONTAL", 1); ic = ImageclassFind("ICONBOX_SCROLLBAR_KNOB_HORIZONTAL", 1);
if (ic) if (ic)
@ -898,13 +941,8 @@ ContainerDrawScroll(Container * ct)
} }
ic = ImageclassFind("ICONBOX_SCROLLKNOB_HORIZONTAL", 0); ic = ImageclassFind("ICONBOX_SCROLLKNOB_HORIZONTAL", 0);
if ((ic) && (bw > ct->knob_length)) if (ic && WinIsMapped(ct->scrollbarknob_win))
{ {
EMapWindow(ct->scrollbarknob_win);
EMoveResizeWindow(ct->scrollbarknob_win,
(bw - ct->knob_length) / 2, 0, ct->knob_length,
ct->bar_thickness);
state = STATE_NORMAL; state = STATE_NORMAL;
if (ct->scrollbar_hilited) if (ct->scrollbar_hilited)
state = STATE_HILITED; state = STATE_HILITED;
@ -913,12 +951,8 @@ ContainerDrawScroll(Container * ct)
ImageclassApply(ic, ct->scrollbarknob_win, 0, 0, state, ImageclassApply(ic, ct->scrollbarknob_win, 0, 0, state,
ST_ICONBOX); ST_ICONBOX);
} }
else
{
EUnmapWindow(ct->scrollbarknob_win);
}
if (arrow_mode < 3) if (WinIsMapped(ct->arrow1_win))
{ {
ic = ImageclassFind("ICONBOX_ARROW_LEFT", 1); ic = ImageclassFind("ICONBOX_ARROW_LEFT", 1);
if (ic) if (ic)
@ -943,12 +977,6 @@ ContainerDrawScroll(Container * ct)
} }
} }
break; break;
do_hide_sb:
EUnmapWindow(ct->scroll_win);
EUnmapWindow(ct->arrow1_win);
EUnmapWindow(ct->arrow2_win);
break;
} }
} }

View File

@ -125,6 +125,7 @@ Win ELookupXwin(Window xwin);
#define WinGetDepth(win) ((win)->depth) #define WinGetDepth(win) ((win)->depth)
#define WinGetVisual(win) ((win)->visual) #define WinGetVisual(win) ((win)->visual)
#define WinGetCmap(win) ((win)->cmap) #define WinGetCmap(win) ((win)->cmap)
#define WinIsMapped(win) ((win)->mapped != 0)
#define WinIsShaped(win) ((win)->num_rect != 0) #define WinIsShaped(win) ((win)->num_rect != 0)
Win ECreateWinFromXwin(Window xwin); Win ECreateWinFromXwin(Window xwin);