// normally we would only draw stuff in subitem stages // this broke when we tried drawing focus rects in postpaint; the drawing either kept getting wiped or overdrawn, mouse hovering had something to do with it, and none of the "solutions" to this or similar problems on the internet worked // so now we do everything in the item prepaint stage // TODO consider switching to full-on owner draw // TODO only compute the background brushes once? HRESULT uiprivTableHandleNM_CUSTOMDRAW(uiTable *t, NMLVCUSTOMDRAW *nm, LRESULT *lResult) { struct drawState s; uiprivTableColumnParams *p; NMLVCUSTOMDRAW b; size_t i, n; RECT focus; bool focusFirst; HRESULT hr; switch (nm->nmcd.dwDrawStage) { case CDDS_PREPAINT: *lResult = CDRF_NOTIFYITEMDRAW; return S_OK; case CDDS_ITEMPREPAINT: break; default: *lResult = CDRF_DODEFAULT; return S_OK; } n = t->columns->size(); b = *nm; focusFirst = true; for (i = 0; i < n; i++) { b.iSubItem = i; p = (*(t->columns))[i]; hr = fillDrawState(&s, t, &b, p); if (hr != S_OK) return hr; hr = drawBackgrounds(S_OK, &s); hr = drawImagePart(hr, &s); hr = drawCheckboxPart(hr, &s); hr = drawTextPart(hr, &s); hr = drawProgressBarPart(hr, &s); hr = drawButtonPart(hr, &s); hr = updateAndDrawFocusRects(hr, s.t, s.dc, nm->nmcd.dwItemSpec, &(s.m->realTextBackground), &focus, &focusFirst); if (hr != S_OK) goto fail; hr = freeDrawState(&s); if (hr != S_OK) // TODO really error out here? return hr; } // and draw the last focus rect hr = updateAndDrawFocusRects(hr, t, nm->nmcd.hdc, nm->nmcd.dwItemSpec, NULL, &focus, &focusFirst); if (hr != S_OK) return hr; *lResult = CDRF_SKIPDEFAULT; return S_OK; fail: // ignore error here // TODO this is awkward cleanup placement for something that only really exists in a for loop freeDrawState(&s); return hr; }
//-------------------------------------------------------------- void ofApp::draw(){ //translate canvas if(transPosY <= 3000){ transPosY += 3; } else { transPosY = 3001; } ofTranslate(transPosX, transPosY); //draw backgrounds for movement drawBackgrounds(); //branch1.draw(); //recursive class called branch1.setup(x, y, 9, ofColor(200,0,0, 150), ofDegToRad(300), 7); // branch2.setup(x1, y, 7, ofColor(0,0,200, 150), ofDegToRad(250), 8); // branch3.setup(x2, y, 5, ofColor(0,200,0, 150), ofDegToRad(100), 7.5); }