MultiButton::SubButton& DropGrid::AddButton(int type, const Callback &cb) { MultiButton::SubButton& btn = drop.InsertButton(1); Image img; switch(type) { case BTN_PLUS: img = GridImg::SelPlus; break; case BTN_SELECT: img = GridImg::SelDots; break; case BTN_LEFT: img = GridImg::SelLeft; break; case BTN_RIGHT: img = GridImg::SelRight; break; case BTN_UP: img = GridImg::SelUp; break; case BTN_DOWN: img = GridImg::SelDn; break; case BTN_CLEAN: img = GridImg::SelCross; break; } btn.SetImage(img); btn.SetMonoImage(Grayscale(img)); btn.WhenPush = cb; return btn; }
void RGBACtrl::Paint(Draw& w) { w.DrawRect(GetSize(), SColorFace); if(alpha.IsMask()) return; for(int x = 0; x <= 18; x++) w.DrawRect(x * cbox.cx + cs.x, cs.y, 1, cbox.cy * 14, SColorText()); int i = 0; int my = cs.y + 1; w.DrawRect(cs.x, cs.y + 14 * cbox.cy, cbox.cx * 18 + 1, 1, SColorText()); Point pp = Null; for(int y = 0; y < 14; y++) { w.DrawRect(cs.x, my - 1, cbox.cx * 18 + 1, 1, SColorText()); int mx = cs.x + 1; for(int x = 0; x < 18; x++) { Color c = GetColor(i++); w.DrawRect(mx, my, cbox.cx - 1, cbox.cy - 1, c); if(c == color) pp = Point(mx, my); mx += cbox.cx; } my += cbox.cy; } if(!IsNull(pp)) { Size isz = CtrlImg::wheel_cursor().GetSize(); pp = pp + (cbox - isz) / 2; w.DrawImage(pp.x, pp.y, CtrlImg::wheel_cursor(), Grayscale(color) < 120 ? White() : Black()); } }
void RichTextView::Paint(Draw& w) { Size sz = GetSize(); w.DrawRect(sz, background); sz.cx -= margin.left + margin.right; sz.cy -= margin.top + margin.bottom; w.Clipoff(margin.left, margin.top, sz.cx, sz.cy); PaintInfo pi; if(!hldec) pi.hyperlink = Null; if(sell < selh) { pi.sell = sell; pi.selh = selh; } pi.indexentry = Null; pi.highlightpara = highlight; pi.zoom = GetZoom(); int q = sb * pi.zoom; scroller.Set(q); w.Offset(0, -q); SimplePageDraw pw(w); pi.top = PageY(0, sb); pi.bottom = PageY(0, sb + sz.cy / pi.zoom); pi.usecache = true; pi.sizetracking = sizetracking; pi.shrink_oversized_objects = shrink_oversized_objects; Color c = SColorPaper(); if(Grayscale(c) < 100) pi.coloroverride = true; text.Paint(pw, GetPage(), pi); w.End(); w.End(); }
Image DisImage(const Image& m) { Image mm = Grayscale(m, 200); ImageBuffer ib(mm); RGBA *s = ~ib; RGBA *e = s + ib.GetLength(); while(s < e) (s++)->a /= 3; Premultiply(ib); return ib; }
void MenuItemBase::PaintTopItem(Draw& w, int state) { Size sz = GetSize(); if(GUI_GlobalStyle() >= GUISTYLE_XP) { bool opaque = InOpaqueBar(); bool opaque2 = opaque || state; Color bg = SColorFace(); if(opaque2) ChPaint(w, 0, 0, sz.cx, sz.cy, style->topitem[state]); else if(opaque) w.DrawRect(0, 0, sz.cx, sz.cy, bg); String text = GetText(); Size isz = GetTextSize(text, StdFont()); Color txt = opaque ? style->topitemtext[0] : GetLabelTextColor(this); Color hltxt = opaque2 ? style->topitemtext[state] : GetLabelTextColor(this); if(!opaque && state != 2) { // Fix issues when text color is not compatible with transparent background (e.g. Ubuntu Ambience)] Color c = state == 1 ? SColorHighlight() : bg; int g = Grayscale(c); bool dark = IsDark(c); if(abs(g - Grayscale(txt)) < 70) txt = dark ? White() : Black(); if(abs(g - Grayscale(hltxt)) < 70) hltxt = dark ? White() : Black(); } DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), state, txt, hltxt); } else { w.DrawRect(sz, SColorFace); static const ColorF b0[] = { (ColorF)1, SColorLight, SColorLight, SColorShadow, SColorShadow, }; static const ColorF b1[] = { (ColorF)1, SColorShadow, SColorShadow, SColorLight, SColorLight, }; String text = GetText(); Size isz = GetTextSize(text, StdFont()); DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), false, SColorMenuText, SColorHighlightText); if(state) DrawBorder(w, 0, 0, sz.cx, sz.cy, state == 2 ? b1 : b0); } }
void FileList::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const { const File& m = ValueTo<File>(q); bool dark = Grayscale(paper) < 150; w.DrawRect(r, paper); int x = r.left + 2; w.DrawImage(x, r.top + (r.Height() - m.icon.GetSize().cy) / 2, m.icon); x += iconwidth; x += 2; FontInfo fi = m.font.Info(); DrawFileName(w, x, r.top + (r.Height() - fi.GetHeight()) / 2, r.right - x - 2, r.Height(), WString(m.name), m.isdir, m.font, dark ? SColorHighlightText : m.ink, dark ? SColorHighlightText : m.extink, WString(m.desc), m.descfont, justname, m.underline); }
bool IsLight(Color c) { return Grayscale(c) > 255 - 80; }
bool IsDark(Color c) { return Grayscale(c) < 80; }
void GridDisplay::Paint(Draw &w, int x, int y, int cx, int cy, const Value &val, dword style, Color &fg, Color &bg, Font &fnt, bool found, int fs, int fe) { real_size.cx = 0; real_size.cy = 0; if(cx == 0 || cy == 0) return; Color mg = bg; int al = style & GD::ALIGN ? style & GD::ALIGN : align; if(cx > lm + rm && cy > tm + bm) { int nx = x + lm; int ny = y + tm; int ncx = cx - lm - rm; int ncy = cy - tm - bm; if(IsNull(bgImg)) { if(lm > 0) w.DrawRect(x, y, lm, cy, mg); if(rm > 0) w.DrawRect(x + cx - rm, y, rm, cy, mg); if(tm > 0) w.DrawRect(x, y, cx, tm, mg); if(bm > 0) w.DrawRect(x, y + cy - bm, cx, bm, mg); w.DrawRect(nx, ny, ncx, ncy, bg); } else w.DrawImage(x, y, cx, cy, bgImg); w.Clip(nx, ny, ncx, ncy); if(!leftImg.IsEmpty()) { Size isz = leftImg.GetSize(); w.DrawImage(nx, ny + (cy - isz.cy) / 2, style & GD::READONLY ? Grayscale(leftImg) : leftImg); nx += isz.cx + 3; ncx -= isz.cx + 3; } if(!rightImg.IsEmpty()) { Size isz = rightImg.GetSize(); w.DrawImage(nx + ncx - isz.cx, y + (cy - isz.cy) / 2, style & GD::READONLY ? Grayscale(rightImg) : rightImg); } if(!centerImg.IsEmpty()) { Size isz = centerImg.GetSize(); w.DrawImage(x + (cx - isz.cx) / 2, y + (cy - isz.cy) / 2, style & GD::READONLY ? Grayscale(centerImg) : centerImg); } if(!(style & GD::NOTEXT)) { DrawText(w, nx, nx, ny, ncx, ncy, al, GetStdConvertedValue(val), fnt, fg, bg, found, fs, fe, style & GD::WRAP); } w.End(); } else w.DrawRect(x, y, cx, cy, bg); }