mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-18 06:06:01 -06:00
136 lines
3.3 KiB
C++
136 lines
3.3 KiB
C++
#include "Draw.h"
|
|
|
|
NAMESPACE_UPP
|
|
|
|
|
|
#define LLOG(x) // LOG(x)
|
|
#define LTIMING(x) // TIMING(x)
|
|
|
|
WString TextUnicode(const char *s, int n, byte cs, Font font)
|
|
{
|
|
if(n < 0)
|
|
n = (int)strlen(s);
|
|
if(font.GetFace() == Font::SYMBOL) {
|
|
WStringBuffer b(n);
|
|
wchar *t = b;
|
|
while(n > 0) {
|
|
*t++ = *s++;
|
|
n--;
|
|
}
|
|
return b;
|
|
}
|
|
else
|
|
return ToUnicode(s, n, cs);
|
|
}
|
|
|
|
void Draw::DrawText(int x, int y, int angle, const wchar *text, Font font,
|
|
Color ink, int n, const int *dx)
|
|
{
|
|
if(IsNull(ink)) return;
|
|
if(n < 0)
|
|
n = wstrlen(text);
|
|
ComposeText(x, y, angle, text, font, ink, n, dx);
|
|
}
|
|
|
|
// ----------------------------
|
|
|
|
void Draw::DrawText(int x, int y, const wchar *text, Font font,
|
|
Color ink, int n, const int *dx)
|
|
{
|
|
DrawText(x, y, 0, text, font, ink, n, dx);
|
|
}
|
|
|
|
// ---------------------------
|
|
|
|
void Draw::DrawText(int x, int y, int angle, const WString& text, Font font,
|
|
Color ink, const int *dx)
|
|
{
|
|
DrawText(x, y, angle, ~text, font, ink, text.GetLength(), dx);
|
|
}
|
|
|
|
void Draw::DrawText(int x, int y, const WString& text, Font font, Color ink, const int *dx)
|
|
{
|
|
DrawText(x, y, 0, text, font, ink, dx);
|
|
}
|
|
|
|
// ---------------------------
|
|
|
|
void Draw::DrawText(int x, int y, int angle, const char *text, byte charset, Font font,
|
|
Color ink, int n, const int *dx)
|
|
{
|
|
DrawText(x, y, angle, TextUnicode(text, n, charset, font), font, ink, dx);
|
|
}
|
|
|
|
void Draw::DrawText(int x, int y, const char *text, byte charset, Font font,
|
|
Color ink, int n, const int *dx)
|
|
{
|
|
DrawText(x, y, 0, text, charset, font, ink, n, dx);
|
|
}
|
|
|
|
// ---------------------------
|
|
|
|
void Draw::DrawText(int x, int y, int angle, const char *text,
|
|
Font font, Color ink, int n, const int *dx)
|
|
{
|
|
DrawText(x, y, angle, text, CHARSET_DEFAULT, font, ink, n, dx);
|
|
}
|
|
|
|
void Draw::DrawText(int x, int y, const char *text, Font font,
|
|
Color ink, int n, const int *dx)
|
|
{
|
|
DrawText(x, y, text, CHARSET_DEFAULT, font, ink, n, dx);
|
|
}
|
|
|
|
// ---------------------------
|
|
|
|
void Draw::DrawText(int x, int y, int angle, const String& text, Font font,
|
|
Color ink, const int *dx)
|
|
{
|
|
DrawText(x, y, angle, text, font, ink, text.GetLength(), dx);
|
|
}
|
|
|
|
void Draw::DrawText(int x, int y, const String& text, Font font, Color ink, const int *dx)
|
|
{
|
|
WString h = TextUnicode(text, text.GetLength(), CHARSET_DEFAULT, font);
|
|
DrawText(x, y, h, font, ink, h.GetLength(), dx);
|
|
}
|
|
|
|
// --------------------------
|
|
|
|
Size GetTextSize(const wchar *text, Font font, int n)
|
|
{
|
|
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;
|
|
}
|
|
|
|
Size GetTextSize(const WString& text, Font font)
|
|
{
|
|
return GetTextSize(text, font, text.GetLength());
|
|
}
|
|
|
|
Size GetTextSize(const char *text, byte charset, Font font, int n)
|
|
{
|
|
return GetTextSize(TextUnicode(text, n, charset, font), font);
|
|
}
|
|
|
|
Size GetTextSize(const char *text, Font font, int n)
|
|
{
|
|
return GetTextSize(text, CHARSET_DEFAULT, font, n);
|
|
}
|
|
|
|
Size GetTextSize(const String& text, Font font)
|
|
{
|
|
return GetTextSize(text, font, text.GetLength());
|
|
}
|
|
|
|
END_UPP_NAMESPACE
|