예제 #1
0
파일: Template.cpp 프로젝트: kolyden/mirror
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++;
	}
}
예제 #2
0
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());
}
예제 #3
0
/**
*  @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);
}
예제 #4
0
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);
}
예제 #5
0
파일: DrawText.cpp 프로젝트: koz4k/soccer
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
}
예제 #6
0
파일: LineEdit.cpp 프로젝트: pedia/raidget
Size LineEdit::GetFontSize() const {
	FontInfo fi = font.Info();
	return Size(max(fi['M'], fi['W']), fi.GetHeight());
}
예제 #7
0
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);
	}
}