CImageList* CReBarCtrl::GetImageList() const { REBARINFO rbi; rbi.cbSize = sizeof(rbi); rbi.fMask = RBIM_IMAGELIST; return GetBarInfo(&rbi) ? CImageList::FromHandle(rbi.himl) : NULL; }
void VScroller::Redraw(IntCoord x1, IntCoord y1, IntCoord x2, IntCoord y2) { IntCoord bot; int height; Background(x1, y1, x2, y2); GetBarInfo(shown, bot, height); Bar(bot, height); Outline(bot, height); }
void HScroller::Redraw(IntCoord x1, IntCoord y1, IntCoord x2, IntCoord y2) { IntCoord left; int width; Background(x1, y1, x2, y2); GetBarInfo(shown, left, width); Bar(left, width); Outline(left, width); }
IntCoord VScroller::Slide(register Event& e) { IntCoord x1, y1, x2, y2; IntCoord oldy, miny, maxy; int height, h; Perspective s; s = *view; GetBarInfo(shown, oldy, height); if (e.y < oldy) { y1 = Math::max(0, e.y - height/2); } else if (e.y > oldy + height) { y1 = Math::min(e.y - height/2, ymax - height + 1); } else { y1 = oldy; } y2 = y1 + height - 1; miny = Math::min(oldy, 0); maxy = Math::max(ymax + 1, oldy + height) - height; h = e.y - y1; boolean syncing = (syncScroll && !e.control) || (!syncScroll && e.control); SlidingRect r(output, canvas, inset+1, y1+1, xmax-inset-1, y2-1, 0, e.y ); r.Draw(); for (;;) { switch (e.eventType) { case UpEvent: case DownEvent: case MotionEvent: if (e.target != this) { e.target->GetRelative(e.x, e.y, this); } r.Track(0, Math::max(miny + h, Math::min(maxy + h, e.y))); if (syncing) { r.Erase(); r.GetCurrent(x1, y1, x2, y2); s.cury = shown->y0 + Math::round(double(y1-1) / scale); interactor->Adjust(s); } break; } if (e.eventType == UpEvent) { break; } Read(e); } r.GetCurrent(x1, y1, x2, y2); r.Erase(); return shown->y0 + Math::round(double(y1-1) / scale); }
IntCoord HScroller::Slide(register Event& e) { IntCoord x1, y1, x2, y2; IntCoord oldx, minx, maxx; int width, w; Perspective s; s = *view; GetBarInfo(shown, oldx, width); if (e.x < oldx) { x1 = Math::max(0, e.x - width/2); } else if (e.x > oldx + width) { x1 = Math::min(e.x - width/2, xmax - width + 1); } else { x1 = oldx; } x2 = x1 + width - 1; minx = Math::min(oldx, 0); maxx = Math::max(xmax + 1, oldx + width) - width; w = e.x - x1; boolean syncing = (syncScroll && !e.control) || (!syncScroll && e.control); SlidingRect r(output, canvas, x1+1, inset+1, x2-1, ymax-inset-1, e.x, 0); r.Draw(); for (;;) { switch (e.eventType) { case UpEvent: case DownEvent: case MotionEvent: if (e.target != this) { e.target->GetRelative(e.x, e.y, this); } r.Track(Math::max(minx + w, Math::min(maxx + w, e.x)), 0); if (syncing) { r.Erase(); r.GetCurrent(x1, y1, x2, y2); s.curx = shown->x0 + Math::round(double(x1-1) / scale); interactor->Adjust(s); } break; } if (e.eventType == UpEvent) { break; } Read(e); } r.GetCurrent(x1, y1, x2, y2); r.Erase(); return shown->x0 + Math::round(double(x1-1) / scale); }
void VScroller::Update() { IntCoord oldbottom, oldtop, newbottom, newtop; int oldheight, newheight; Perspective* p; if (canvas == nil) { return; } p = view; GetBarInfo(shown, oldbottom, oldheight); GetBarInfo(p, newbottom, newheight); if (oldbottom != newbottom || oldheight != newheight) { oldtop = oldbottom+oldheight-1; newtop = newbottom+newheight-1; if (oldtop >= newbottom && newtop >= oldbottom) { if (oldtop > newtop) { Background(inset, newtop+1, xmax-inset, oldtop); Border(newtop); } else if (oldtop < newtop) { Bar(oldtop, newtop-oldtop); Sides(oldtop, newtop); Border(newtop); } if (oldbottom > newbottom) { Bar(newbottom+1, oldbottom-newbottom); Sides(newbottom, oldbottom); Border(newbottom); } else if (oldbottom < newbottom) { Background(inset, oldbottom, xmax-inset, newbottom-1); Border(newbottom); } } else { Background(inset, oldbottom, xmax-inset, oldtop); Bar(newbottom, newheight); Outline(newbottom, newheight); } } *shown = *p; }
void HScroller::Update() { IntCoord oldleft, oldright, newleft, newright; int oldwidth, newwidth; Perspective* p; if (canvas == nil) { return; } p = view; GetBarInfo(shown, oldleft, oldwidth); GetBarInfo(p, newleft, newwidth); if (oldleft != newleft || oldwidth != newwidth) { oldright = oldleft+oldwidth-1; newright = newleft+newwidth-1; if (oldright >= newleft && newright >= oldleft) { if (oldright > newright) { Background(newright+1, inset, oldright, ymax-inset); Border(newright); } else if (oldright < newright) { Bar(oldright, newright-oldright); Sides(oldright, newright); Border(newright); } if (oldleft > newleft) { Bar(newleft+1, oldleft-newleft); Sides(newleft, oldleft); Border(newleft); } else if (oldleft < newleft) { Background(oldleft, inset, newleft-1, ymax-inset); Border(newleft); } } else { Background(oldleft, inset, oldright, ymax-inset); Bar(newleft, newwidth); Outline(newleft, newwidth); } } *shown = *p; }