void AppPreview::Paint(Draw& w) { Size sz = GetSize(); FontInfo fi = CourierZ(12).Info(); int y = 0; int i = sb; while(y < sz.cy) { bool hdr = i < line.GetCount() && line[i].header; w.DrawRect(0, y, sz.cx, fi.GetHeight(), hdr ? LtCyan : SColorPaper); if(i < line.GetCount()) w.DrawText(0, y, line[i].text, hdr ? ArialZ(12).Bold().Italic() : CourierZ(12), SColorText); y += fi.GetHeight(); i++; } }
Size FileList::GetStdSize(const Value& q) const { const File& m = ValueTo<File>(q); FontInfo fi = m.font.Info(); int cx = GetTextSize(fi, WString(m.name)) + 2 + iconwidth + 2 + 3; if(!IsNull(m.desc)) cx += GetTextSize(m.descfont.Info(), WString(m.desc)) + fi.GetHeight(); return Size(cx, GetItemHeight()); }
/** * @brief * Constructor */ Font::Font(Gui &cGui, const FontInfo &cFontInfo) : m_pGui(&cGui), m_pFontImpl(nullptr), m_sFamily(cFontInfo.GetFamily()), m_nHeight(cFontInfo.GetHeight()), m_nWeight(cFontInfo.GetWeight()), m_nStyle(cFontInfo.GetStyle()), m_sFilename(cFontInfo.GetFilename()) { // Load font if (m_sFilename.GetLength() > 0) LoadFromFile(m_sFilename, m_nHeight); else Load(m_sFamily, m_nHeight, m_nWeight, m_nStyle); }
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); }
Size GetTextSize(const wchar *text, Font font, int n) { #if defined(flagWINGL) || defined(flagLINUXGL) return GetTextSize(text, resources.GetFont(font), n); #else FontInfo fi = font.Info(); if(n < 0) n = wstrlen(text); Size sz; sz.cx = 0; const wchar *wtext = (const wchar *)text; while(n > 0) { sz.cx += fi[*wtext++]; n--; } sz.cy = fi.GetHeight(); return sz; #endif }
Size LineEdit::GetFontSize() const { FontInfo fi = font.Info(); return Size(max(fi['M'], fi['W']), fi.GetHeight()); }
void DrawFileName(Draw& ww, int x0, int y, int wcx0, int cy, const WString& mname, bool isdir, Font font, Color ink, Color extink, const WString& desc, Font descfont, bool justname, Color uln) { for(int pass = IsNull(uln); pass < 2; pass++) { NilDraw nd; Draw *w = pass ? &ww : &nd; FontInfo fi = font.Info(); int extpos = (isdir ? -1 : mname.ReverseFind('.')); int slash = isdir ? -1 : max(mname.ReverseFind('\\'), mname.ReverseFind('/')); if(extpos < slash) extpos = -1; const wchar *ext = extpos >= slash && extpos >= 0 ? mname.Begin() + extpos + 1 : mname.End(); const wchar *name = mname; if(justname && slash >= 0) name += slash + 1; int txtcx = GetTextSize(fi, name); int x = x0; int wcx = wcx0; if(txtcx <= wcx) { if(pass == 0) ww.DrawRect(x0, y + fi.GetAscent() + 1, txtcx, 1, uln); ww.DrawText(x, y, name, font, ink, (int)(ext - name)); ww.DrawText(x + GetTextSize(fi, name, ext), y, ext, font, extink, (int)(mname.End() - ext)); if(!IsEmpty(desc) && pass) DrawTextEllipsis(ww, x + fi.GetHeight(), y, wcx - txtcx, desc, "...", descfont, extink); x += txtcx; return; } else { int dot3 = 3 * fi['.']; if(2 * dot3 > wcx) { int n = GetTextFitCount(fi, name, wcx); w->DrawText(x, y, name, font, ink, n); x += GetTextSize(fi, name, name + n); } else { const wchar *end = mname.End(); int dircx = 2 * fi['.'] + fi[DIR_SEP]; const wchar *bk = strdirsep(name); if(bk) { wcx -= dircx; w->DrawText(x, y, ".." DIR_SEPS, font, SColorDisabled, 3); x += dircx; do { txtcx -= GetTextSize(fi, name, bk + 1); name = bk + 1; if(txtcx < wcx) { w->DrawText(x, y, name, font, ink, (int)(ext - name)); x += GetTextSize(fi, name, ext); w->DrawText(x, y, ext, font, extink, (int)(end - ext)); x += GetTextSize(fi, ext, end); goto end; } bk = strdirsep(name); } while(bk); } wcx -= dot3; int extcx = GetTextSize(fi, ext, end); if(2 * extcx > wcx || ext == end) { int n = GetTextFitCount(fi, name, wcx); w->DrawText(x, y, name, font, ink, n); x += GetTextSize(fi, name, name + n); w->DrawText(x, y, "...", font, SColorDisabled, 3); x += dot3; } else { wcx -= extcx; int n = (int)(GetTextFitLim(fi, name, end, wcx) - name); w->DrawText(x, y, name, font, ink, n); x += GetTextSize(fi, name, name + n); w->DrawText(x, y, "...", font, SColorDisabled, 3); w->DrawText(x + dot3, y, ext, font, extink, (int)(end - ext)); x += dot3 + extcx; } } } end: if(pass == 0) ww.DrawRect(x0, y + fi.GetAscent() + 1, x - x0, 1, uln); } }