Home » U++ Library support » TreeCtrl » TreeCtrl Scroll triggers Parent Refresh
Re: TreeCtrl Scroll triggers Parent Refresh [message #11314 is a reply to message #11313] |
Mon, 03 September 2007 20:38 |
|
mirek
Messages: 13980 Registered: November 2005
|
Ultimate Member |
|
|
Ooops, a bug. U++ default behaviour for Display is to Clip.
Quick fix:
void TreeCtrl::Paint(Draw& w)
{
SyncTree();
Size sz = GetSize();
Point org = sb;
scroller.Set(org);
if(!nobg)
w.DrawRect(sz, SColorPaper);
int levelcx2 = levelcx >> 1;
for(int i = 0; i < line.GetCount(); i++) {
Line& l = line[i];
if(l.ll >= 0) {
int yl = line[i].y + item[l.itemi].GetSize().cy - org.y;
int yh = line[l.ll].y + item[line[l.ll].itemi].GetSize().cy / 2 - org.y;
if(yh >= 0 && yl < sz.cy) {
int x = levelcx + levelcx * l.level + levelcx2 - org.x;
w.DrawRect(x, yl, 1, yh - yl, SColorShadow);
}
}
}
Rect dri;
for(int i = FindLine(org.y); i < line.GetCount(); i++) {
Line& l = line[i];
const Item& m = item[l.itemi];
Size msz = m.GetSize();
Size isz = m.image.GetSize();
Size vsz = m.GetValueSize();
int y = l.y - org.y;
if(y > sz.cy)
break;
int x = 0;
x = levelcx + l.level * levelcx - org.x;
Point op = Point(x - levelcx2, y + msz.cy / 2);
Rect r = RectC(x, y, vsz.cx + 2 * m.margin, msz.cy);
if(l.itemi == dropitem) {
dri = r;
if(i == 0)
dri.top++;
}
if(w.IsPainting(0, y, sz.cx, msz.cy)) {
w.DrawRect(op.x, op.y, levelcx2, 1, SColorShadow);
if(m.canopen || m.child.GetCount()) {
Image im = m.isopen ? CtrlImg::treeminus() : CtrlImg::treeplus();
op -= im.GetSize() / 2;
w.DrawImage(op.x, op.y, im);
}
w.DrawImage(x, y + (msz.cy - isz.cy) / 2, m.image);
x += isz.cx;
Color fg, bg;
dword st;
const Display *d = GetStyle(i, fg, bg, st);
if(!(m.ctrl && m.ctrl->IsWantFocus())) {
w.DrawRect(x, y, vsz.cx + 2 * m.margin, msz.cy, bg);
Rect r = RectC(x + m.margin, y + (msz.cy - vsz.cy) / 2, vsz.cx, vsz.cy);
w.Clip(r);
d->Paint(w, r, m.value, fg, bg, st);
w.End();
if(i == cursor && !nocursor && multiselect && GetSelectCount() != 1 && HasFocus()
&& !IsDragAndDropTarget())
DrawFocus(w, r, st & Display::SELECT ? SColorPaper() : SColorText());
}
}
}
if(dropitem >= 0 && dropinsert)
DrawHorzDrop(w, dri.left - 2, dropinsert < 0 ? dri.top : dri.bottom - 1,
sz.cx - dri.left + 2);
}
Mirek
|
|
|
Goto Forum:
Current Time: Tue May 14 05:21:19 CEST 2024
Total time taken to generate the page: 0.03107 seconds
|