void GlPlanes::GetHsv(int32 pix, float* hue, float* s, float* v) const { ArpASSERT(HasColor()); ArpASSERT(pix >= 0 && pix < w * h); float fr = glTable256[r[pix]]; float fg = glTable256[g[pix]]; float fb = glTable256[b[pix]]; float min, max; min = gl_min_3(fr, fg, fb); max = gl_max_3(fr, fg, fb); *v = max; // v if (!hue || !s) return; float delta = max - min; if (max != 0) *s = delta / max; // s else { // r = g = b = 0 // s = 0, hue is undefined *s = 0; *hue = -1; return; } if (fr == max) *hue = (fg - fb) / delta; // between yellow & magenta else if (fg == max) *hue = 2 + (fb - fr) / delta; // between cyan & yellow else *hue = 4 + (fr - fg) / delta; // between magenta & cyan *hue *= 60; // degrees if (*hue < 0) *hue += 360; }
uint8 GlPlanes::Value(int32 pix) const { ArpASSERT(HasColor()); ArpASSERT(pix >= 0 && pix < w * h); if (gInitValue) return arp_clip_255(gScaledR[r[pix]] + gScaledG[g[pix]] + gScaledB[b[pix]]); uint8 v = (r[pix] > g[pix]) ? r[pix] : g[pix]; return (v > b[pix]) ? v : b[pix]; }
COLORREF COXTreeItem::GetItemColor(int nCol) const { ASSERT(HasColor(nCol)); if(!nCol) return m_clr; COXTreeSubItem *pSubItem = GetSubItem(nCol); if(!pSubItem) { ASSERT(FALSE); return 0; } return pSubItem->m_clr; }
void GlPlanes::SetHsv(int32 pix, float hue, float s, float v) { ArpASSERT(HasColor()); ArpASSERT(pix >= 0 && pix < w * h); int i; float f, p, q, t; if (s == 0) { // achromatic (grey) r[pix] = g[pix] = b[pix] = arp_clip_255(v * 255); return; } hue /= 60; // sector 0 to 5 i = int(floor(hue)); f = hue - i; // factorial part of hue p = v * (1 - s); q = v * (1 - s * f); t = v * (1 - s * (1 - f)); switch (i) { case 0: r[pix] = arp_clip_255(v * 255); g[pix] = arp_clip_255(t * 255); b[pix] = arp_clip_255(p * 255); break; case 1: r[pix] = arp_clip_255(q * 255); g[pix] = arp_clip_255(v * 255); b[pix] = arp_clip_255(p * 255); break; case 2: r[pix] = arp_clip_255(p * 255); g[pix] = arp_clip_255(v * 255); b[pix] = arp_clip_255(t * 255); break; case 3: r[pix] = arp_clip_255(p * 255); g[pix] = arp_clip_255(q * 255); b[pix] = arp_clip_255(v * 255); break; case 4: r[pix] = arp_clip_255(t * 255); g[pix] = arp_clip_255(p * 255); b[pix] = arp_clip_255(v * 255); break; default: r[pix] = arp_clip_255(v * 255); g[pix] = arp_clip_255(p * 255); b[pix] = arp_clip_255(q * 255); break; } }
LRESULT CTDCTaskListCtrl::OnListCustomDraw(NMLVCUSTOMDRAW* pLVCD) { HWND hwndList = pLVCD->nmcd.hdr.hwndFrom; int nItem = (int)pLVCD->nmcd.dwItemSpec; DWORD dwTaskID = pLVCD->nmcd.lItemlParam; if (hwndList == m_lcColumns) { // columns handled by base class return CTDCTaskCtrlBase::OnListCustomDraw(pLVCD); } switch (pLVCD->nmcd.dwDrawStage) { case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: { CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc); BOOL bAlternate = (IsColumnLineOdd(nItem) && HasColor(m_crAltLine)); COLORREF crBack = (bAlternate ? m_crAltLine : GetSysColor(COLOR_WINDOW)); if (HasStyle(TDCS_TASKCOLORISBACKGROUND)) { GetTaskTextColors(dwTaskID, pLVCD->clrText, pLVCD->clrTextBk); if (pLVCD->clrTextBk != CLR_NONE) crBack = pLVCD->clrTextBk; } pLVCD->clrTextBk = pLVCD->clrText = crBack; if (!OsIsXP()) { GraphicsMisc::FillItemRect(pDC, &pLVCD->nmcd.rc, crBack, m_lcTasks); ListView_SetBkColor(m_lcTasks, crBack); } return (CDRF_NOTIFYPOSTPAINT | CDRF_NEWFONT); // always } break; case CDDS_ITEMPOSTPAINT: { const TODOITEM* pTDI = NULL; const TODOSTRUCTURE* pTDS = NULL; DWORD dwTaskID = GetTaskID(nItem), dwTrueID(dwTaskID); if (m_data.GetTask(dwTrueID, pTDI, pTDS)) { CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc); CFont* pOldFont = pDC->SelectObject(GetTaskFont(pTDI, pTDS, FALSE)); GM_ITEMSTATE nState = GetListItemState(nItem); BOOL bSelected = (nState != GMIS_NONE); BOOL bAlternate = (IsColumnLineOdd(nItem) && HasColor(m_crAltLine)); COLORREF crBack, crText; VERIFY(GetTaskTextColors(pTDI, pTDS, crText, crBack, (dwTaskID != dwTrueID), bSelected)); // draw background CRect rRow(pLVCD->nmcd.rc); // extra for XP if (OsIsXP()) m_lcTasks.GetItemRect(nItem, rRow, LVIR_BOUNDS); CRect rItem; GetItemTitleRect(nItem, TDCTR_LABEL, rItem, pDC, pTDI->sTitle); DrawTasksRowBackground(pDC, rRow, rItem, nState, bAlternate, crBack); // draw text DrawColumnText(pDC, pTDI->sTitle, rItem, DT_LEFT, crText, TRUE); rItem.right = (rItem.left + pDC->GetTextExtent(pTDI->sTitle).cx + LV_COLPADDING); // cleanup pDC->SelectObject(pOldFont); // render comment text DrawCommentsText(pDC, rRow, rItem, pTDI, pTDS); } // restore default back colour ListView_SetBkColor(m_lcTasks, GetSysColor(COLOR_WINDOW)); return CDRF_SKIPDEFAULT; // always } break; } return CDRF_DODEFAULT; }