Split iconbox scrollbar update into layout and paint.
SVN revision: 42575
This commit is contained in:
parent
f603b5c320
commit
92c38850a2
160
src/container.c
160
src/container.c
|
@ -513,13 +513,12 @@ ContainerLayoutImageWin(Container * ct)
|
|||
}
|
||||
|
||||
static void
|
||||
ContainerDrawScroll(Container * ct)
|
||||
ContainerLayoutScroll(Container * ct)
|
||||
{
|
||||
ImageClass *ic, *ic_sbb;
|
||||
EImageBorder *pad;
|
||||
int arrow_mode = ct->arrow_side;
|
||||
int bs, bw, bx;
|
||||
int state;
|
||||
|
||||
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,
|
||||
(ct->scroll_thickness - ct->bar_thickness) / 2, bx,
|
||||
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);
|
||||
if ((ic) && (bw > ct->knob_length))
|
||||
{
|
||||
|
@ -694,44 +680,11 @@ ContainerDrawScroll(Container * ct)
|
|||
EMoveResizeWindow(ct->scrollbarknob_win, 0,
|
||||
(bw - ct->knob_length) / 2, ct->bar_thickness,
|
||||
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
|
||||
{
|
||||
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;
|
||||
|
||||
case 0:
|
||||
|
@ -884,7 +837,97 @@ ContainerDrawScroll(Container * ct)
|
|||
(ct->scroll_thickness - ct->bar_thickness) / 2, bw,
|
||||
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);
|
||||
if (ic)
|
||||
|
@ -898,13 +941,8 @@ ContainerDrawScroll(Container * ct)
|
|||
}
|
||||
|
||||
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;
|
||||
if (ct->scrollbar_hilited)
|
||||
state = STATE_HILITED;
|
||||
|
@ -913,12 +951,8 @@ ContainerDrawScroll(Container * ct)
|
|||
ImageclassApply(ic, ct->scrollbarknob_win, 0, 0, state,
|
||||
ST_ICONBOX);
|
||||
}
|
||||
else
|
||||
{
|
||||
EUnmapWindow(ct->scrollbarknob_win);
|
||||
}
|
||||
|
||||
if (arrow_mode < 3)
|
||||
if (WinIsMapped(ct->arrow1_win))
|
||||
{
|
||||
ic = ImageclassFind("ICONBOX_ARROW_LEFT", 1);
|
||||
if (ic)
|
||||
|
@ -943,12 +977,6 @@ ContainerDrawScroll(Container * ct)
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
do_hide_sb:
|
||||
EUnmapWindow(ct->scroll_win);
|
||||
EUnmapWindow(ct->arrow1_win);
|
||||
EUnmapWindow(ct->arrow2_win);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -125,6 +125,7 @@ Win ELookupXwin(Window xwin);
|
|||
#define WinGetDepth(win) ((win)->depth)
|
||||
#define WinGetVisual(win) ((win)->visual)
|
||||
#define WinGetCmap(win) ((win)->cmap)
|
||||
#define WinIsMapped(win) ((win)->mapped != 0)
|
||||
#define WinIsShaped(win) ((win)->num_rect != 0)
|
||||
|
||||
Win ECreateWinFromXwin(Window xwin);
|
||||
|
|
Loading…
Reference in New Issue