mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
reorganizing repo
git-svn-id: svn://ultimatepp.org/upp/trunk@9207 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
e3e8d627f5
commit
e29f8e4718
265 changed files with 0 additions and 69272 deletions
|
|
@ -1,42 +0,0 @@
|
|||
uniform sampler2D Texture;
|
||||
uniform vec4 GlyphColor;
|
||||
uniform vec4 GlowColor;
|
||||
uniform vec4 OutlineColor;
|
||||
|
||||
uniform bool Outline;
|
||||
uniform bool Glow;
|
||||
uniform bool Shadow;
|
||||
|
||||
const float AlphaCenter = 0.5;
|
||||
const float DistanceScale = 25.0;
|
||||
|
||||
uniform float OutlineCenter;
|
||||
uniform float GlowCenter;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture2D(Texture, gl_TexCoord[0].xy);
|
||||
float alpha = color.a;
|
||||
float width = min(length(fwidth(gl_TexCoord[0])), 1.0) * DistanceScale;
|
||||
|
||||
vec4 finalColor = GlyphColor;
|
||||
|
||||
float ma = smoothstep(AlphaCenter - width, AlphaCenter + width, alpha);
|
||||
finalColor.a = ma;
|
||||
|
||||
if(Outline)
|
||||
{
|
||||
float mo = smoothstep(OutlineCenter - width, OutlineCenter + width, alpha);
|
||||
finalColor = mix(OutlineColor, finalColor, ma);
|
||||
finalColor.a = mo;
|
||||
}
|
||||
|
||||
if(Glow && alpha >= finalColor.a - 0.5)
|
||||
{
|
||||
float mg = smoothstep(AlphaCenter, GlowCenter, sqrt(alpha));
|
||||
finalColor = mix(GlowColor, finalColor, ma);
|
||||
finalColor.a = mg;
|
||||
}
|
||||
|
||||
gl_FragColor = finalColor * GlyphColor.a;
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
void main()
|
||||
{
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
gl_Position = ftransform();
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
uniform float sigma; // The sigma value for the gaussian function: higher value means more blur
|
||||
// A good value for 9x9 is around 3 to 5
|
||||
// A good value for 7x7 is around 2.5 to 4
|
||||
// A good value for 5x5 is around 2 to 3.5
|
||||
// ... play around with this based on what you need :)
|
||||
|
||||
uniform float blurSize; // This should usually be equal to
|
||||
// 1.0f / texture_pixel_width for a horizontal blur, and
|
||||
// 1.0f / texture_pixel_height for a vertical blur.
|
||||
|
||||
uniform sampler2D blurSampler; // Texture that will be blurred by this shader
|
||||
|
||||
const float numBlurPixelsPerSide = 3.0f;
|
||||
// 9x9 - 4
|
||||
// 7x7 - 3
|
||||
// 5x5 - 2
|
||||
uniform vec2 blurMultiplyVec;
|
||||
// 1, 0 - vertical
|
||||
// 0, 1 - horizontal
|
||||
uniform vec3 gaussian;
|
||||
uniform float grayStrength;
|
||||
uniform float blurStrength;
|
||||
|
||||
void main() {
|
||||
|
||||
vec4 v = texture2D(blurSampler, gl_TexCoord[0].xy);
|
||||
if(blurStrength > 0.0f)
|
||||
{
|
||||
vec4 avgValue = vec4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
float coefficientSum = 0.0f;
|
||||
|
||||
vec3 incGaussian = gaussian;
|
||||
avgValue += v * incGaussian.x;
|
||||
coefficientSum += incGaussian.x;
|
||||
incGaussian.xy *= incGaussian.yz;
|
||||
|
||||
for (float i = 1.0f; i <= numBlurPixelsPerSide; i++) {
|
||||
vec2 pos = i * blurSize * blurMultiplyVec;
|
||||
avgValue += texture2D(blurSampler, gl_TexCoord[0].xy - pos) * incGaussian.x;
|
||||
avgValue += texture2D(blurSampler, gl_TexCoord[0].xy + pos) * incGaussian.x;
|
||||
coefficientSum += 2.0f * incGaussian.x;
|
||||
incGaussian.xy *= incGaussian.yz;
|
||||
}
|
||||
|
||||
v = avgValue / coefficientSum;
|
||||
}
|
||||
float gray = dot(v.rgb, vec3(0.299, 0.587, 0.114));
|
||||
vec4 grayColor = vec4(gray, gray, gray, v.a);
|
||||
|
||||
gl_FragColor = mix(v, grayColor, grayStrength);
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
void main()
|
||||
{
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
gl_Position = ftransform();
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void ChSysInit()
|
||||
{
|
||||
CtrlImg::Reset();
|
||||
CtrlsImg::Reset();
|
||||
ChReset();
|
||||
}
|
||||
|
||||
void ChHostSkin()
|
||||
{
|
||||
ChSysInit();
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
|
||||
static VectorMap<String, ClipData> fbClipboard;
|
||||
|
||||
void ClearClipboard()
|
||||
{
|
||||
GuiLock __;
|
||||
fbClipboard.Clear();
|
||||
}
|
||||
|
||||
void AppendClipboard(const char *format, const Value& data, String (*render)(const Value&))
|
||||
{
|
||||
GuiLock __;
|
||||
ClipData& cd = fbClipboard.GetAdd(format);
|
||||
cd.data = data;
|
||||
cd.render = render;
|
||||
}
|
||||
|
||||
static String sRawRender(const Value& v)
|
||||
{
|
||||
return v;
|
||||
}
|
||||
|
||||
void AppendClipboard(const char *format, const String& data)
|
||||
{
|
||||
GuiLock __;
|
||||
AppendClipboard(format, data, sRawRender);
|
||||
}
|
||||
|
||||
void AppendClipboard(const char *format, const byte *data, int length)
|
||||
{
|
||||
GuiLock __;
|
||||
AppendClipboard(format, String(data, length));
|
||||
}
|
||||
|
||||
String ReadClipboard(const char *format)
|
||||
{
|
||||
GuiLock __;
|
||||
int q = fbClipboard.Find(format);
|
||||
return q >= 0 ? (*fbClipboard[q].render)(fbClipboard[q].data) : String();
|
||||
}
|
||||
|
||||
void AppendClipboardText(const String& s)
|
||||
{
|
||||
AppendClipboard("text", ToSystemCharset(s));
|
||||
}
|
||||
|
||||
void AppendClipboardUnicodeText(const WString& s)
|
||||
{
|
||||
AppendClipboard("wtext", (byte *)~s, 2 * s.GetLength());
|
||||
}
|
||||
|
||||
const char *ClipFmtsText()
|
||||
{
|
||||
return "wtext;text";
|
||||
}
|
||||
|
||||
String GetString(PasteClip& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
if(clip.Accept("wtext")) {
|
||||
String s = ~clip;
|
||||
return WString((const wchar *)~s, wstrlen((const wchar *)~s)).ToString();
|
||||
}
|
||||
if(clip.IsAvailable("text"))
|
||||
return ~clip;
|
||||
return Null;
|
||||
}
|
||||
|
||||
WString GetWString(PasteClip& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
if(clip.Accept("wtext")) {
|
||||
String s = ~clip;
|
||||
return WString((const wchar *)~s, wstrlen((const wchar *)~s));
|
||||
}
|
||||
if(clip.IsAvailable("text"))
|
||||
return (~clip).ToWString();
|
||||
return Null;
|
||||
}
|
||||
|
||||
|
||||
bool AcceptText(PasteClip& clip)
|
||||
{
|
||||
return clip.Accept(ClipFmtsText());
|
||||
}
|
||||
|
||||
static String sText(const Value& data)
|
||||
{
|
||||
return data;
|
||||
}
|
||||
|
||||
static String sWText(const Value& data)
|
||||
{
|
||||
return Unicode__(WString(data));
|
||||
}
|
||||
|
||||
void Append(VectorMap<String, ClipData>& data, const String& text)
|
||||
{
|
||||
data.GetAdd("text", ClipData(text, sText));
|
||||
data.GetAdd("wtext", ClipData(text, sWText));
|
||||
}
|
||||
|
||||
void Append(VectorMap<String, ClipData>& data, const WString& text)
|
||||
{
|
||||
data.GetAdd("text", ClipData(text, sText));
|
||||
data.GetAdd("wtext", ClipData(text, sWText));
|
||||
}
|
||||
|
||||
String GetTextClip(const WString& text, const String& fmt)
|
||||
{
|
||||
if(fmt == "text")
|
||||
return text.ToString();
|
||||
if(fmt == "wtext")
|
||||
return Unicode__(text);
|
||||
return Null;
|
||||
}
|
||||
|
||||
String GetTextClip(const String& text, const String& fmt)
|
||||
{
|
||||
if(fmt == "text")
|
||||
return text;
|
||||
if(fmt == "wtext")
|
||||
return Unicode__(text.ToWString());
|
||||
return Null;
|
||||
}
|
||||
|
||||
String ReadClipboardText()
|
||||
{
|
||||
String w = ReadClipboard("text");
|
||||
return w.GetCount() ? w : ReadClipboardUnicodeText().ToString();
|
||||
}
|
||||
|
||||
WString ReadClipboardUnicodeText()
|
||||
{
|
||||
String w = ReadClipboard("wtext");
|
||||
if(w.GetCount())
|
||||
return WString((const wchar *)~w, w.GetLength() / 2);
|
||||
return ReadClipboard("text").ToWString();
|
||||
}
|
||||
|
||||
bool IsClipboardAvailable(const char *id)
|
||||
{
|
||||
return fbClipboard.Find(id) >= 0;
|
||||
}
|
||||
|
||||
bool IsClipboardAvailableText()
|
||||
{
|
||||
return IsClipboardAvailable("text") || IsClipboardAvailable("wtext");
|
||||
}
|
||||
|
||||
const char *ClipFmtsImage()
|
||||
{
|
||||
static const char *q;
|
||||
ONCELOCK {
|
||||
static String s = "dib;" + ClipFmt<Image>();
|
||||
q = s;
|
||||
}
|
||||
return q;
|
||||
}
|
||||
|
||||
bool AcceptImage(PasteClip& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
return clip.Accept(ClipFmtsImage());
|
||||
}
|
||||
|
||||
Image GetImage(PasteClip& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
Image m;
|
||||
if(Accept<Image>(clip)) {
|
||||
LoadFromString(m, ~clip);
|
||||
if(!m.IsEmpty())
|
||||
return m;
|
||||
}
|
||||
return Null;
|
||||
}
|
||||
|
||||
Image ReadClipboardImage()
|
||||
{
|
||||
GuiLock __;
|
||||
PasteClip d = Ctrl::Clipboard();
|
||||
return GetImage(d);
|
||||
}
|
||||
|
||||
String sImage(const Value& image)
|
||||
{
|
||||
Image img = image;
|
||||
return StoreAsString(const_cast<Image&>(img));
|
||||
}
|
||||
|
||||
String GetImageClip(const Image& img, const String& fmt)
|
||||
{
|
||||
GuiLock __;
|
||||
if(img.IsEmpty()) return Null;
|
||||
if(fmt == ClipFmt<Image>())
|
||||
return sImage(img);
|
||||
return Null;
|
||||
}
|
||||
|
||||
void AppendClipboardImage(const Image& img)
|
||||
{
|
||||
GuiLock __;
|
||||
if(img.IsEmpty()) return;
|
||||
AppendClipboard(ClipFmt<Image>(), img, sImage);
|
||||
}
|
||||
|
||||
bool AcceptFiles(PasteClip& clip)
|
||||
{
|
||||
if(clip.Accept("files")) {
|
||||
clip.SetAction(DND_COPY);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsAvailableFiles(PasteClip& clip)
|
||||
{
|
||||
return clip.IsAvailable("files");
|
||||
}
|
||||
|
||||
Vector<String> GetFiles(PasteClip& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
Vector<String> f;
|
||||
return f;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,199 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "Console.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void Console::Paint(Draw& w)
|
||||
{
|
||||
Size sz = GetSize();
|
||||
|
||||
#ifndef COLOR_ALPHA
|
||||
SystemDraw& sw = (SystemDraw&) w;
|
||||
sw.alpha = 100.f;
|
||||
Color frame = Yellow;
|
||||
Color body = Black;
|
||||
#else
|
||||
Color frame = Yellow().Alpha(100);
|
||||
Color body = Black().Alpha(100);
|
||||
#endif
|
||||
|
||||
w.DrawRect(sz, body);
|
||||
w.DrawRect(0, 0, sz.cx, 1, frame);
|
||||
w.DrawRect(sz.cx - 1, 1, 1, sz.cy - 1, frame);
|
||||
w.DrawRect(0, 1, 1, sz.cy, frame);
|
||||
w.DrawRect(1, sz.cy - 1, sz.cx - 2, 1, frame);
|
||||
//DrawFrame(w, sz, Yellow);
|
||||
//w.DrawImage(sz.cx - 18, sz.cy - 21, LinuxGlImg::ResizeMarker());
|
||||
w.DrawRect(1, sz.cy - 22, sz.cx - 2, 1, frame);
|
||||
w.Clip(5, 5, sz.cx - 10, sz.cy - 5 - 21);
|
||||
#ifndef COLOR_ALPHA
|
||||
sw.alpha = 255.f;
|
||||
#endif
|
||||
int y = 5;
|
||||
//int ty = Draw::GetStdFontCy() + 2;
|
||||
int ty = 12 + 2;
|
||||
for(int i = 0; i < fixedText.GetCount(); i++)
|
||||
{
|
||||
w.DrawText(5, y, fixedText[i].text, StdFont(), fixedText[i].ink);
|
||||
y += ty;
|
||||
}
|
||||
|
||||
if(fixedText.GetCount() > 0 && floatText.GetCount() > 0)
|
||||
{
|
||||
#ifndef COLOR_ALPHA
|
||||
sw.alpha = 150.f;
|
||||
#endif
|
||||
w.DrawRect(5, y, sz.cx - 10, 1, frame);
|
||||
#ifndef COLOR_ALPHA
|
||||
sw.alpha = 255.f;
|
||||
#endif
|
||||
y += 2;
|
||||
}
|
||||
|
||||
int lines = (sz.cy - y - 22) / ty;
|
||||
int n = fceil(sb.GetPos() / double(ty));
|
||||
int maxn = min(n + lines, currLine);
|
||||
|
||||
while(n < maxn)
|
||||
{
|
||||
LineInfo& lf = floatText[n];
|
||||
w.DrawText(5, y, lf.text, StdFont(), lf.ink);
|
||||
y += ty;
|
||||
++n;
|
||||
}
|
||||
|
||||
w.End();
|
||||
}
|
||||
|
||||
void Console::Log(int line, const char* text, Color ink)
|
||||
{
|
||||
LineInfo& lf = fixedText.GetAdd(line);
|
||||
lf.ink = ink;
|
||||
lf.text = text;
|
||||
}
|
||||
|
||||
void Console::Log(const char* text, Color ink)
|
||||
{
|
||||
bool isend = sb.IsEnd();
|
||||
|
||||
if(++currLine >= maxLine)
|
||||
{
|
||||
currLine = maxLine;
|
||||
for(int i = 0; i < maxLine - 1; i++)
|
||||
floatText[i] = floatText[i + 1];
|
||||
}
|
||||
|
||||
int ty = Draw::GetStdFontCy() + 2;
|
||||
int total = currLine * ty;
|
||||
int fcnt = fixedText.GetCount();
|
||||
sb.SetTotal(total + 5 + 22);
|
||||
|
||||
if(isend)
|
||||
sb.GoEnd();
|
||||
|
||||
LineInfo& lf = floatText[currLine - 1];
|
||||
lf.ink = ink;
|
||||
lf.text = text;
|
||||
}
|
||||
|
||||
void Console::LeftDown(Point p, dword keys)
|
||||
{
|
||||
SetCapture();
|
||||
pos = p;
|
||||
rs = GetSize();
|
||||
tl = GetScreenRect().TopLeft();
|
||||
Size sz = GetSize();
|
||||
resize = p.x > sz.cx - 18 && p.y > sz.cy - 18;
|
||||
}
|
||||
|
||||
void Console::LeftUp(Point p, dword keys)
|
||||
{
|
||||
ReleaseCapture();
|
||||
}
|
||||
|
||||
void Console::MouseMove(Point p, dword keys)
|
||||
{
|
||||
if(HasCapture())
|
||||
{
|
||||
Rect r = GetRect();
|
||||
bool isend = sb.IsEnd();
|
||||
if(resize)
|
||||
{
|
||||
tl = Point(p.x - pos.x, p.y - pos.y);
|
||||
SetConsoleRect(r.left, r.top, max(2, rs.cx + tl.x), max(2, rs.cy + tl.y));
|
||||
}
|
||||
else
|
||||
{
|
||||
tl += Point(p.x - pos.x, p.y - pos.y);
|
||||
SetConsoleRect(tl.x, tl.y, r.Width(), r.Height());
|
||||
}
|
||||
if(isend)
|
||||
sb.GoEnd();
|
||||
}
|
||||
}
|
||||
|
||||
void Console::Layout()
|
||||
{
|
||||
}
|
||||
|
||||
void Console::SetConsoleRect(int x, int y, int cx, int cy)
|
||||
{
|
||||
int width = cx < 0 ? 300 : cx;
|
||||
int height = cy < 0 ? 5 + 5 + (Draw::GetStdFontCy() + 2) * 30 + 3 : cy;
|
||||
SetRect(x, y, width, height);
|
||||
}
|
||||
|
||||
void Console::SetLines(int lines)
|
||||
{
|
||||
maxLine = lines;
|
||||
floatText.SetCount(lines);
|
||||
}
|
||||
|
||||
void Console::Init(Ctrl& parent)
|
||||
{
|
||||
if(!init)
|
||||
return;
|
||||
init = false;
|
||||
this->parent = &parent;
|
||||
SetConsoleRect(parent.GetSize().cx - 5 - 300, 5);
|
||||
sb.SetFrameSize(5, false).SetAlign(AlignedFrame::RIGHT);
|
||||
Show();
|
||||
}
|
||||
|
||||
void Console::Show(bool b)
|
||||
{
|
||||
if(IsOpen())
|
||||
{
|
||||
if(!b)
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(b)
|
||||
PopUp(parent, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
void Console::Clear()
|
||||
{
|
||||
currLine = 0;
|
||||
sb.Clear();
|
||||
}
|
||||
|
||||
Console::Console() : init(true), resize(false)
|
||||
{
|
||||
Add(sb.RightPos(2, 7).VSizePos(2, 22));
|
||||
Add(clear.LeftPos(2, 50).BottomPos(2, 18));
|
||||
clear.SetLabel("Clear");
|
||||
//clear.bg = Yellow;
|
||||
//clear.alpha = 150.f;
|
||||
clear <<= THISBACK(Clear);
|
||||
SetLines(3000);
|
||||
currLine = 0;
|
||||
scrollLine = 0;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
#ifndef _CoreGl_Console_h_
|
||||
#define _CoreGl_Console_h_
|
||||
|
||||
#include "ControlPanel.h"
|
||||
#include "Scrollbar.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
struct Console : Ctrl
|
||||
{
|
||||
Ctrl* parent;
|
||||
SlimScrollBar sb;
|
||||
SlimButton clear;
|
||||
|
||||
struct LineInfo : Moveable<LineInfo> {
|
||||
Color ink;
|
||||
String text;
|
||||
};
|
||||
|
||||
bool init;
|
||||
bool resize;
|
||||
Point pos;
|
||||
Point tl;
|
||||
Size rs;
|
||||
int currLine;
|
||||
int scrollLine;
|
||||
int maxLine;
|
||||
VectorMap<int, LineInfo> fixedText;
|
||||
Vector<LineInfo> floatText;
|
||||
void Init(Ctrl& parent);
|
||||
void SetConsoleRect(int x, int y, int cx = -1, int cy = -1);
|
||||
virtual void Paint(Draw& w);
|
||||
virtual void LeftDown(Point p, dword keys);
|
||||
virtual void LeftUp(Point p, dword keys);
|
||||
virtual void MouseMove(Point p, dword keys);
|
||||
virtual void Layout();
|
||||
|
||||
void Log(int line, const char* text, Color ink = White);
|
||||
void Log(const char* text, Color ink = White);
|
||||
|
||||
void SetLines(int lines);
|
||||
void Show(bool b = true);
|
||||
void Clear();
|
||||
|
||||
typedef Console CLASSNAME;
|
||||
Console();
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,211 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "ControlPanel.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
ValueSlider::ValueSlider()
|
||||
{
|
||||
pos = 0;
|
||||
shaded = true;
|
||||
immediate = false;
|
||||
src = Color(255, 255, 0);
|
||||
dst = Color(255, 153, 51);
|
||||
}
|
||||
|
||||
void ValueSlider::Paint(Draw &w)
|
||||
{
|
||||
Size sz = GetSize();
|
||||
|
||||
/*w.DrawRect(0, 0, sz.cx, 1, Black);
|
||||
w.DrawRect(0, sz.cy - 1, sz.cx, 1, Black);
|
||||
w.DrawRect(0, 0, 1, sz.cy, Black);
|
||||
w.DrawRect(sz.cx - 1, 0, 1, sz.cy, Black);*/
|
||||
|
||||
int t = (int) (((pos - minValue) * sz.cx) / (maxValue - minValue));
|
||||
if(t < 1) t = 1;
|
||||
if(t > sz.cx - 1) t = sz.cx - 1;
|
||||
|
||||
if(shaded)
|
||||
{
|
||||
for(int i = 1; i < t; i++)
|
||||
w.DrawRect(i, 1, 1, sz.cy - 2, Blend(src, dst, 256 * i / (sz.cx - 1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
w.DrawRect(Rect(1, 1, t, sz.cy - 1), dst);
|
||||
}
|
||||
|
||||
if(t < sz.cx - 1)
|
||||
w.DrawRect(Rect(t, 1, sz.cx - 1, sz.cy - 1), Color(245, 245, 255));
|
||||
|
||||
String s = Format("%s : %.2f", text, pos);
|
||||
Size tsz = GetTextSize(s, StdFont());
|
||||
w.DrawText((sz.cx - tsz.cx) / 2, (sz.cy - tsz.cy) / 2, s);
|
||||
}
|
||||
|
||||
void ValueSlider::LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
pos = minValue + (p.x * (maxValue - minValue)) / (float) GetSize().cx;
|
||||
Refresh();
|
||||
SetCapture();
|
||||
if(immediate)
|
||||
WhenAction();
|
||||
}
|
||||
|
||||
void ValueSlider::LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
ReleaseCapture();
|
||||
if(!immediate)
|
||||
WhenAction();
|
||||
}
|
||||
|
||||
void ValueSlider::MouseMove(Point p, dword keyflags)
|
||||
{
|
||||
if(HasCapture())
|
||||
{
|
||||
pos = minValue + (p.x * (maxValue - minValue)) / (float) GetSize().cx;
|
||||
if(pos > maxValue) pos = maxValue;
|
||||
if(pos < minValue) pos = minValue;
|
||||
Refresh();
|
||||
if(immediate)
|
||||
WhenAction();
|
||||
}
|
||||
}
|
||||
|
||||
void ValueSlider::SetPos(float p, float minv, float maxv)
|
||||
{
|
||||
pos = p;
|
||||
minValue = minv;
|
||||
maxValue = maxv;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
float ValueSlider::GetPos()
|
||||
{
|
||||
return pos;
|
||||
}
|
||||
|
||||
void SlimButton::Paint(Draw &w)
|
||||
{
|
||||
SystemDraw& sw = (SystemDraw&) w;
|
||||
float a = sw.alpha;
|
||||
sw.alpha = alpha;
|
||||
Size sz = GetSize();
|
||||
if(HasMouseIn(sz))
|
||||
w.DrawRect(sz, bg);
|
||||
sw.alpha = a;
|
||||
|
||||
Size tsz = GetTextSize(label, StdFont());
|
||||
w.DrawText((sz.cx - tsz.cx) / 2, (sz.cy - tsz.cy) / 2, label, StdFont(), fg);
|
||||
}
|
||||
|
||||
void SlimButton::LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
SetCapture();
|
||||
}
|
||||
|
||||
void SlimButton::LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
ReleaseCapture();
|
||||
Action();
|
||||
}
|
||||
|
||||
void SlimButton::MouseMove(Point p, dword keyflags)
|
||||
{
|
||||
}
|
||||
|
||||
void SlimButton::SetLabel(const char* s)
|
||||
{
|
||||
label = s;
|
||||
}
|
||||
|
||||
SlimButton::SlimButton()
|
||||
{
|
||||
fg = White;
|
||||
bg = Black;
|
||||
alpha = 255.f;
|
||||
}
|
||||
|
||||
InfoPanel::InfoPanel() : init(true), parent(NULL)
|
||||
{
|
||||
Add(alphaSlider.RightPos(199, 100).VSizePos(1, 0));
|
||||
Add(angleSlider.RightPos(100, 100).VSizePos(1, 0));
|
||||
Add(scaleSlider.RightPos(1, 100).VSizePos(1, 0));
|
||||
|
||||
alphaSlider.text = "Alpha";
|
||||
angleSlider.text = "Angle";
|
||||
scaleSlider.text = "Scale";
|
||||
|
||||
alphaSlider.shaded = true;
|
||||
angleSlider.shaded = true;
|
||||
scaleSlider.shaded = true;
|
||||
alphaSlider.immediate = true;
|
||||
angleSlider.immediate = true;
|
||||
scaleSlider.immediate = true;
|
||||
|
||||
alphaSlider.SetPos(255.f, 0.f, 255.f);
|
||||
angleSlider.SetPos(0.f, 0.f, 360.f);
|
||||
scaleSlider.SetPos(1.f, 1.f, 5.f);
|
||||
}
|
||||
|
||||
void InfoPanel::Paint(Draw& w)
|
||||
{
|
||||
Size sz = GetSize();
|
||||
Size wsz = screenRect.GetSize();
|
||||
Color frameColor = Color(183, 183, 183);
|
||||
Color bgColor = Color(102, 102, 102);
|
||||
w.DrawRect(sz, bgColor);
|
||||
w.DrawRect(0, 0, 1, sz.cy, frameColor);
|
||||
w.DrawRect(0, 0, sz.cx, 1, frameColor);
|
||||
w.DrawRect(sz.cx - 1, 0, 1, sz.cy, frameColor);
|
||||
String info = Format("FPS: %.2f, Textures: %d (%d), Size: %d, %d", GetFps(), resources.textures.GetCount(), resources.bindedTextures, wsz.cx, wsz.cy);
|
||||
w.DrawText(5, sz.cy - 18, info, StdFont(), White);
|
||||
}
|
||||
|
||||
void InfoPanel::Init(Ctrl& parent, float angle, float scale, float alpha)
|
||||
{
|
||||
const int width = 585;
|
||||
SetRect((screenRect.Width() - width) / 2, screenRect.Height() - 22, width, 22);
|
||||
if(!init)
|
||||
return;
|
||||
init = false;
|
||||
this->parent = &parent;
|
||||
Show();
|
||||
alphaSlider.SetPos(alpha, 0.f, 255.f);
|
||||
angleSlider.SetPos(angle, 0.f, 360.f);
|
||||
scaleSlider.SetPos(scale, 1.f, 5.f);
|
||||
}
|
||||
|
||||
void InfoPanel::Show(bool b)
|
||||
{
|
||||
if(IsOpen())
|
||||
{
|
||||
if(!b)
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(b)
|
||||
PopUp(parent, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
float InfoPanel::GetAlpha()
|
||||
{
|
||||
return alphaSlider.GetPos();
|
||||
}
|
||||
|
||||
float InfoPanel::GetAngle()
|
||||
{
|
||||
return angleSlider.GetPos();
|
||||
}
|
||||
|
||||
float InfoPanel::GetScale()
|
||||
{
|
||||
return scaleSlider.GetPos();
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
#ifndef _rainbow_CoreGl_ControlPanel_h_
|
||||
#define _rainbow_CoreGl_ControlPanel_h_
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
struct ValueSlider : Ctrl
|
||||
{
|
||||
bool shaded;
|
||||
bool immediate;
|
||||
Color src;
|
||||
Color dst;
|
||||
|
||||
float pos;
|
||||
float minValue;
|
||||
float maxValue;
|
||||
String text;
|
||||
|
||||
typedef ValueSlider CLASSNAME;
|
||||
|
||||
ValueSlider();
|
||||
|
||||
virtual void Paint(Draw &w);
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
|
||||
void SetPos(float p, float minValue, float maxValue);
|
||||
float GetPos();
|
||||
|
||||
Callback WhenLeftUp;
|
||||
};
|
||||
|
||||
struct SlimButton : Ctrl
|
||||
{
|
||||
Color fg;
|
||||
Color bg;
|
||||
float alpha;
|
||||
String label;
|
||||
virtual void Paint(Draw &w);
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
void SetLabel(const char* s);
|
||||
SlimButton();
|
||||
};
|
||||
|
||||
struct InfoPanel : Ctrl
|
||||
{
|
||||
bool init;
|
||||
Ctrl* parent;
|
||||
|
||||
ValueSlider alphaSlider;
|
||||
ValueSlider angleSlider;
|
||||
ValueSlider scaleSlider;
|
||||
|
||||
float GetAlpha();
|
||||
float GetAngle();
|
||||
float GetScale();
|
||||
|
||||
void Init(Ctrl& parent, float angle = 0.f, float scale = 1.f, float alpha = 255.f);
|
||||
void Show(bool b = true);
|
||||
virtual void Paint(Draw& w);
|
||||
typedef InfoPanel CLASSNAME;
|
||||
InfoPanel();
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,305 +0,0 @@
|
|||
#ifndef _CoreGl_CoreGl_h_
|
||||
#define _CoreGl_CoreGl_h_
|
||||
|
||||
#ifndef GLEW_STATIC
|
||||
#define GLEW_STATIC
|
||||
#endif
|
||||
|
||||
#define DRAW_ON_TIMER 0
|
||||
#define DRAW_ON_IDLE 1
|
||||
#define DRAW_ON_EVENT 2
|
||||
|
||||
#define CLIP_MODE 2
|
||||
/*
|
||||
0 - Scissor clip
|
||||
1 - Plane clip
|
||||
2 - Stencil clip
|
||||
3 - Manual clip
|
||||
*/
|
||||
#include "Gl.h"
|
||||
#include <Painter/Painter.h>
|
||||
|
||||
#include "Shaders.h"
|
||||
#include "Fbo.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
struct FrameInfo {
|
||||
int64 curr_tick_count;
|
||||
float fps;
|
||||
float frame_factor;
|
||||
float frame_skip;
|
||||
int64 frame_time;
|
||||
FrameInfo() : fps(0.f), frame_factor(1.f), frame_skip(60.f), frame_time(0), curr_tick_count(0)
|
||||
{}
|
||||
};
|
||||
|
||||
extern FrameInfo frameInfo;
|
||||
float GetFps();
|
||||
|
||||
#define IMAGECLASS CoreGlImg
|
||||
#define IMAGEFILE <CoreGl/CoreGl.iml>
|
||||
#include <Draw/iml_header.h>
|
||||
|
||||
#include "Resources.brc"
|
||||
|
||||
typedef Rect_<float> RectF;
|
||||
typedef Point_<float> PointF;
|
||||
|
||||
#include "FontGl.h"
|
||||
#include "ResGl.h"
|
||||
|
||||
enum TransformState {
|
||||
TS_BEFORE_CTRL_PAINT,
|
||||
TS_AFTER_CTRL_PAINT,
|
||||
TS_BEFORE_PAINT,
|
||||
TS_AFTER_PAINT,
|
||||
TS_BEFORE_SCREEN,
|
||||
TS_AFTER_SCREEN
|
||||
};
|
||||
|
||||
#define TEXEL_OFFSET 0.325f
|
||||
|
||||
class SystemDraw : public Draw {
|
||||
public:
|
||||
virtual dword GetInfo() const;
|
||||
virtual Size GetPageSize() const;
|
||||
bool CanSetSurface() { return false; }
|
||||
|
||||
void PlaneEquation(double eq[4], float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3);
|
||||
void SetClipRect(const Rect& r);
|
||||
void ScissorClip(const Rect& r);
|
||||
void PlaneClip(const Rect& r);
|
||||
void StencilClip(const Rect& r, int mode = 0, bool exlude = false);
|
||||
void SetClip(const Rect& r, int mode = 0, bool exclude = false);
|
||||
|
||||
virtual void BeginOp();
|
||||
virtual void EndOp();
|
||||
virtual void OffsetOp(Point p);
|
||||
virtual bool ClipOp(const Rect& r);
|
||||
virtual bool ClipoffOp(const Rect& r);
|
||||
virtual bool ExcludeClipOp(const Rect& r);
|
||||
virtual bool IntersectClipOp(const Rect& r);
|
||||
virtual bool IsPaintingOp(const Rect& r) const;
|
||||
virtual Rect GetPaintRect() const;
|
||||
|
||||
virtual void DrawRectOp(int x, int y, int cx, int cy, Color color);
|
||||
virtual void DrawImageOp(int x, int y, int cx, int cy, const Image& img, const Rect& src, Color color);
|
||||
virtual void DrawImageOp(float x0, float y0, float z0, float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, const Image& img, const Rect& src, Color color);
|
||||
virtual void DrawTextureOp(const RectF& r, int textureId, int width, int height, const RectF& src);
|
||||
virtual void DrawLineOp(int x1, int y1, int x2, int y2, int width, Color color);
|
||||
|
||||
virtual void DrawPolyPolylineOp(const Point *vertices, int vertex_count,
|
||||
const int *counts, int count_count,
|
||||
int width, Color color, Color doxor);
|
||||
virtual void DrawPolyPolyPolygonOp(const Point *vertices, int vertex_count,
|
||||
const int *subpolygon_counts, int scc,
|
||||
const int *disjunct_polygon_counts, int dpcc,
|
||||
Color color, int width, Color outline,
|
||||
uint64 pattern, Color doxor);
|
||||
virtual void DrawArcOp(const Rect& rc, Point start, Point end, int width, Color color);
|
||||
|
||||
virtual void DrawEllipseOp(const Rect& r, Color color, int pen, Color pencolor);
|
||||
virtual void DrawTextOp(int x, int y, int angle, const wchar *text, Font font,
|
||||
Color ink, int n, const int *dx);
|
||||
|
||||
virtual Size GetNativeDpi() const;
|
||||
virtual void BeginNative();
|
||||
virtual void EndNative();
|
||||
|
||||
virtual int GetCloffLevel() const;
|
||||
|
||||
void Text(int x, int y, int angle, const wchar *text, Font font, Color ink,
|
||||
int outlineStrength, Color outlineColor,
|
||||
int glowStrength, Color glowColor,
|
||||
int n, const int *dx);
|
||||
|
||||
void ImageColoring(bool b = true) { image_coloring = b; }
|
||||
|
||||
RectF UnProject(const RectF& r, float& depth);
|
||||
void UnProject(float* vtx, float sx, float sy, float dx, float dy);
|
||||
void UnProject(float& x, float& y, float &z);
|
||||
void SetVtx(float* vtx, float sx, float sy, float dx, float dy);
|
||||
void SetProjectionMode(int mode);
|
||||
bool IsPerspectiveProjection() { return projection_mode == 1; }
|
||||
bool IsOrthogonalProjection() { return projection_mode == 0; }
|
||||
|
||||
private:
|
||||
static SystemDraw* systemDraw;
|
||||
friend class FontInfo;
|
||||
friend class Font;
|
||||
|
||||
OpenGLFont fi;
|
||||
|
||||
struct Cloff : Moveable<Cloff> {
|
||||
bool clipping;
|
||||
bool exclude;
|
||||
Point org;
|
||||
Rect drawing_clip;
|
||||
};
|
||||
|
||||
struct MatrixStack : Moveable<MatrixStack>
|
||||
{
|
||||
double projection_matrix[16];
|
||||
double modelview_matrix[16];
|
||||
int projection_mode;
|
||||
};
|
||||
|
||||
float current_color[4];
|
||||
float vtx[8];
|
||||
float crd[8];
|
||||
double projection_matrix[16];
|
||||
void SetVec(float* v, float sx, float sy, float dx, float dy);
|
||||
void SetVec(float* v, int sx, int sy, int dx, int dy);
|
||||
|
||||
void SaveCurrentColor();
|
||||
void RestoreLastColor();
|
||||
|
||||
public:
|
||||
Rect drawing_clip;
|
||||
Size drawing_size;
|
||||
Point drawing_offset;
|
||||
Rect clip;
|
||||
float r, g, b, a;
|
||||
float alpha;
|
||||
float angle;
|
||||
float scale;
|
||||
static float blurStrength;
|
||||
static float grayStrength;
|
||||
|
||||
private:
|
||||
Array<Cloff> cloff;
|
||||
Array<MatrixStack> mstack;
|
||||
int ci;
|
||||
int cn;
|
||||
int cd;
|
||||
int mi;
|
||||
bool image_coloring;
|
||||
int projection_mode;
|
||||
|
||||
void Reset();
|
||||
|
||||
protected:
|
||||
|
||||
SystemDraw();
|
||||
void InitClip(const Rect& clip);
|
||||
void Init();
|
||||
|
||||
public:
|
||||
static SystemDraw& Get() { return *systemDraw; }
|
||||
static void Flush() { /*glFlush();*/ }
|
||||
Point GetOffset() const { return drawing_offset; }
|
||||
SystemDraw(Size sz);
|
||||
virtual ~SystemDraw();
|
||||
void ViewPort(int width = -1, int height = -1);
|
||||
void OrthogonalView(bool clear_modelview = true);
|
||||
void PerspectiveView(bool clear_modelview = true);
|
||||
void ApplyTransforms();
|
||||
void Clear(bool ontransforms = false);
|
||||
void PushContext();
|
||||
void PopContext();
|
||||
float GetAspect() { return drawing_size.cx / (float) drawing_size.cy; };
|
||||
};
|
||||
|
||||
struct BackDraw__ : public SystemDraw {
|
||||
BackDraw__() {}
|
||||
};
|
||||
|
||||
class BackDraw : public BackDraw__ { // Dummy only, as we are running in GlobalBackBuffer mode
|
||||
Size size;
|
||||
Draw *painting;
|
||||
Point painting_offset;
|
||||
ImageBuffer ib;
|
||||
|
||||
public:
|
||||
virtual bool IsPaintingOp(const Rect& r) const;
|
||||
|
||||
public:
|
||||
void Put(SystemDraw& w, int x, int y) {}
|
||||
void Put(SystemDraw& w, Point p) { Put(w, p.x, p.y); }
|
||||
|
||||
void Create(SystemDraw& w, int cx, int cy) {}
|
||||
void Create(SystemDraw& w, Size sz) { Create(w, sz.cx, sz.cy); }
|
||||
void Destroy() {}
|
||||
|
||||
void SetPaintingDraw(Draw& w, Point off) { painting = &w; painting_offset = off; }
|
||||
|
||||
BackDraw();
|
||||
~BackDraw();
|
||||
};
|
||||
|
||||
struct ImageDraw__ {
|
||||
ImageBuffer image;
|
||||
ImageBuffer alpha;
|
||||
|
||||
ImageDraw__(int cx, int cy) : image(cx, cy), alpha(cx, cy) {}
|
||||
};
|
||||
|
||||
class ImageDraw : private ImageDraw__, public BufferPainter {
|
||||
BufferPainter alpha_painter;
|
||||
bool has_alpha;
|
||||
|
||||
Image Get(bool pm) const;
|
||||
|
||||
public:
|
||||
Draw& Alpha();
|
||||
|
||||
operator Image() const { return Get(true); }
|
||||
|
||||
Image GetStraight() const { return Get(false); }
|
||||
|
||||
ImageDraw(Size sz);
|
||||
ImageDraw(int cx, int cy);
|
||||
};
|
||||
|
||||
void DrawDragRect(SystemDraw& w, const Rect& rect1, const Rect& rect2, const Rect& clip, int n, Color color, int type, int animation);
|
||||
|
||||
class PrinterJob { // Dummy only...
|
||||
NilDraw nil;
|
||||
Vector<int> pages;
|
||||
|
||||
public:
|
||||
Draw& GetDraw() { return nil; }
|
||||
operator Draw&() { return GetDraw(); }
|
||||
const Vector<int>& GetPages() const { return pages; }
|
||||
int operator[](int i) const { return 0; }
|
||||
int GetPageCount() const { return 0; }
|
||||
|
||||
bool Execute() { return false; }
|
||||
|
||||
PrinterJob& Landscape(bool b = true) { return *this; }
|
||||
PrinterJob& MinMaxPage(int minpage, int maxpage) { return *this; }
|
||||
PrinterJob& PageCount(int n) { return *this; }
|
||||
PrinterJob& CurrentPage(int currentpage) { return *this; }
|
||||
PrinterJob& Name(const char *_name) { return *this; }
|
||||
|
||||
PrinterJob(const char *name = NULL) {}
|
||||
~PrinterJob() {}
|
||||
};
|
||||
|
||||
class TopWindowFrame;
|
||||
struct InfoPanel;
|
||||
struct Console;
|
||||
void GlLog(int line, const char* text, Color ink = White);
|
||||
void GlLog(const char* text, Color ink = White);
|
||||
void GlLogF(Color ink, const char* fmt, ...);
|
||||
void GlLogF(const char* fmt, ...);
|
||||
|
||||
#define GUIPLATFORM_CTRL_TOP_DECLS Ctrl *owner_window;
|
||||
#define GUIPLATFORM_CTRL_DECLS_INCLUDE <CoreGl/Ctrl.h>
|
||||
#define GUIPLATFORM_PASTECLIP_DECLS \
|
||||
bool dnd; \
|
||||
friend struct DnDLoop;
|
||||
#define GUIPLATFORM_TOPWINDOW_DECLS_INCLUDE <CoreGl/Top.h>
|
||||
|
||||
#ifdef flagLINUXGL
|
||||
#define GUIPLATFORM_INCLUDE_AFTER <LinuxGl/After.h>
|
||||
#endif
|
||||
|
||||
#ifdef flagWINGL
|
||||
#define GUIPLATFORM_INCLUDE_AFTER <WinGl/After.h>
|
||||
#endif
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
PREMULTIPLIED
|
||||
IMAGE_ID(arrow)
|
||||
IMAGE_ID(ibeam)
|
||||
IMAGE_ID(wait)
|
||||
IMAGE_ID(no)
|
||||
IMAGE_ID(sizeall)
|
||||
IMAGE_ID(sizehorz)
|
||||
IMAGE_ID(sizeright)
|
||||
IMAGE_ID(sizeleft)
|
||||
IMAGE_ID(sizevert)
|
||||
IMAGE_ID(sizetopleft)
|
||||
IMAGE_ID(sizetop)
|
||||
IMAGE_ID(sizetopright)
|
||||
IMAGE_ID(sizebottomleft)
|
||||
IMAGE_ID(sizebottom)
|
||||
IMAGE_ID(sizebottomright)
|
||||
IMAGE_ID(overlap)
|
||||
IMAGE_ID(maximize)
|
||||
IMAGE_ID(close)
|
||||
IMAGE_ID(bgtitle)
|
||||
IMAGE_ID(title)
|
||||
IMAGE_ID(border)
|
||||
IMAGE_ID(hand)
|
||||
IMAGE_ID(ResizeMarker)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,90,205,75,85,65,20,159,50,211,66,9,137,118,46,218,180,233,79,136,160,109,203,192,130,32,218,228,34,90)
|
||||
IMAGE_DATA(180,171,69,148,249,130,136,32,66,131,44,9,75,203,2,53,107,241,54,34,42,234,194,15,4,63,240,3,30,162,8,34)
|
||||
IMAGE_DATA(136,136,160,43,221,157,230,61,223,199,120,238,220,51,231,204,187,207,10,238,25,14,58,119,126,191,51,103,126,231,220,123)
|
||||
IMAGE_DATA(159,31,170,74,93,80,105,59,173,78,164,191,128,146,25,8,57,0,32,226,192,193,193,69,216,223,191,196,229,192,222,222)
|
||||
IMAGE_DATA(21,216,221,189,6,59,59,215,57,28,216,222,190,1,91,91,55,97,115,243,14,172,175,215,187,56,176,177,81,175,113,247)
|
||||
IMAGE_DATA(97,109,237,33,172,174,62,130,84,234,41,197,129,149,149,199,176,188,252,68,227,26,97,113,241,21,204,207,191,133,217,217)
|
||||
IMAGE_DATA(230,48,14,44,45,189,132,133,133,215,48,55,215,4,51,51,173,48,53,213,9,147,147,223,97,98,162,221,198,209,152,102)
|
||||
IMAGE_DATA(152,158,126,175,113,109,48,62,222,13,35,35,35,89,255,5,195,195,157,152,163,99,181,106,92,27,140,141,117,194,232,232)
|
||||
IMAGE_DATA(239,60,94,21,106,105,114,52,230,179,246,14,24,26,250,1,131,131,63,161,191,63,73,158,119,96,160,29,250,250,190,230)
|
||||
IMAGE_DATA(227,36,147,221,36,62,153,252,18,200,177,171,235,91,168,62,54,13,58,58,62,81,120,235,190,45,45,239,68,125,216,212)
|
||||
IMAGE_DATA(244,70,220,235,137,196,115,209,30,13,13,207,196,123,8,176,65,43,87,231,212,73,85,145,113,133,10,175,50,55,235,161)
|
||||
IMAGE_DATA(161,239,243,155,163,249,127,127,45,228,188,1,93,84,149,22,174,92,139,86,126,84,56,174,103,56,181,61,31,72,55,176)
|
||||
IMAGE_DATA(199,129,39,57,22,108,40,135,192,6,56,12,108,158,35,193,250,228,226,115,86,31,45,255,66,125,101,253,89,163,71,101)
|
||||
IMAGE_DATA(118,80,194,89,156,107,220,155,132,195,47,102,93,146,103,177,252,64,1,25,49,236,79,31,127,126,88,94,82,62,55,134)
|
||||
IMAGE_DATA(100,221,181,7,39,71,234,156,148,185,52,150,240,109,57,73,122,197,118,205,151,207,141,227,115,223,249,220,183,174,88,118)
|
||||
IMAGE_DATA(99,62,144,14,163,6,95,239,34,51,95,255,197,240,115,46,141,131,249,62,113,192,48,52,117,198,192,56,155,30,84,172)
|
||||
IMAGE_DATA(48,60,231,154,121,29,231,109,59,11,198,98,190,143,219,226,248,228,17,149,30,81,213,197,22,203,118,22,23,23,239,143)
|
||||
IMAGE_DATA(93,18,195,22,71,202,199,113,124,249,40,14,109,53,250,99,127,165,42,203,56,38,187,2,80,24,238,33,194,112,84,211)
|
||||
IMAGE_DATA(218,76,169,227,191,121,56,121,68,165,135,185,238,85,151,184,208,113,161,253,2,50,19,118,225,138,21,216,188,230,227,182)
|
||||
IMAGE_DATA(56,62,121,68,165,135,185,238,85,151,10,93,234,178,108,169,45,27,178,19,193,194,186,4,183,9,132,230,206,131,255,235)
|
||||
IMAGE_DATA(107,212,249,40,93,40,61,57,185,24,235,5,171,214,227,116,118,4,50,65,162,19,1,201,164,92,28,23,190,88,14,22)
|
||||
IMAGE_DATA(219,197,193,197,226,238,23,182,119,177,60,73,29,36,103,53,121,170,132,181,240,237,17,107,47,198,79,166,210,173,81,231)
|
||||
IMAGE_DATA(163,116,161,244,228,228,98,172,23,204,124,50,81,22,200,18,21,132,216,236,88,159,66,92,14,22,223,197,161,10,201,197)
|
||||
IMAGE_DATA(227,117,28,75,146,3,7,111,114,212,49,235,207,205,77,218,83,113,195,198,13,91,18,14,55,55,113,195,198,175,210,210)
|
||||
IMAGE_DATA(173,81,231,163,116,161,244,228,228,98,172,23,44,254,144,31,228,224,98,113,247,11,219,187,88,158,164,14,146,179,154,60)
|
||||
IMAGE_DATA(85,194,90,248,246,136,181,23,171,244,136,200,172,119,154,225,54,60,21,203,23,207,201,3,227,93,123,70,133,231,232,83)
|
||||
IMAGE_DATA(42,93,204,107,146,58,241,45,130,102,114,37,39,17,203,134,137,241,209,227,37,245,226,91,20,79,166,171,213,213,161,155)
|
||||
IMAGE_DATA(227,181,244,60,231,54,172,109,205,118,157,138,131,215,93,216,48,14,133,149,226,37,249,72,206,235,171,39,149,39,117,14)
|
||||
IMAGE_DATA(210,78,233,145,179,186,186,86,184,253,160,23,238,190,232,133,123,31,123,65,58,207,7,43,203,252,109,38,1,103,46,247)
|
||||
IMAGE_DATA(192,249,91,75,80,219,152,126,9,11,231,233,54,47,215,35,251,179,44,247,126,58,242,230,119,153,249,255,212,185,57,229)
|
||||
IMAGE_DATA(137,68,34,198,151,8,159,155,187,220,167,23,50,205,228,248,197,8,245,233,5,227,32,149,74,29,249,26,134,197,56,3)
|
||||
IMAGE_DATA(111,253,4,18,134,71,251,228,99,112,241,46,156,13,159,115,41,62,204,209,153,165,120,39,135,210,148,137,229,225,207,234)
|
||||
IMAGE_DATA(225,99,250,161,6,148,199,56,26,199,177,63,147,104,81,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
|
||||
IMAGE_END_DATA(1056, 23)
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
uses
|
||||
Painter;
|
||||
|
||||
options(WIN32) "-D_WIN32 -DGLEW_STATIC";
|
||||
|
||||
file
|
||||
Gl.h,
|
||||
CoreGl.h,
|
||||
FontGl.h,
|
||||
ResGl.h,
|
||||
ControlPanel.h,
|
||||
ControlPanel.cpp,
|
||||
Scrollbar.h,
|
||||
Scrollbar.cpp,
|
||||
Console.h,
|
||||
Console.cpp,
|
||||
Draw.cpp,
|
||||
DrawOp.cpp,
|
||||
DrawText.cpp,
|
||||
Clip.cpp,
|
||||
Ctrl.h,
|
||||
Ctrl.cpp,
|
||||
Dnd.cpp,
|
||||
Event.cpp,
|
||||
Wnd.cpp,
|
||||
Image.cpp,
|
||||
Top.h,
|
||||
Top.cpp,
|
||||
TopFrame.h,
|
||||
TopFrame.cpp,
|
||||
ChSysInit.cpp,
|
||||
Util.cpp,
|
||||
Glew readonly separator,
|
||||
glew.h,
|
||||
glxew.h,
|
||||
wglew.h,
|
||||
glew.c,
|
||||
SceneGraph readonly separator,
|
||||
SceneGraph.h,
|
||||
SceneGraph.cpp,
|
||||
Resources readonly separator,
|
||||
Resources.cpp,
|
||||
Resources.brc,
|
||||
Fbo.h,
|
||||
Fbo.cpp,
|
||||
Shaders.h,
|
||||
Shaders.cpp,
|
||||
AlphaMag.vert,
|
||||
AlphaMag.frag,
|
||||
Blur.vert,
|
||||
Blur.frag,
|
||||
Fonts/TahomaB.fnt,
|
||||
Fonts/TahomaB_0.png,
|
||||
Fonts/TahomaN.fnt,
|
||||
Fonts/TahomaN_0.png,
|
||||
CoreGl.iml;
|
||||
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
#define LLOG(x) // DLOG(x)
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
int Ctrl::Xbuttons;
|
||||
int Ctrl::Xbuttontime;
|
||||
Point Ctrl::Xbuttonpos;
|
||||
|
||||
void Ctrl::GuiPlatformConstruct()
|
||||
{
|
||||
cliptobounds = true;
|
||||
}
|
||||
|
||||
void Ctrl::GuiPlatformRemove()
|
||||
{
|
||||
}
|
||||
|
||||
void Ctrl::GuiPlatformGetTopRect(Rect& r) const
|
||||
{
|
||||
}
|
||||
|
||||
bool Ctrl::GuiPlatformRefreshFrameSpecial(const Rect& r)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Ctrl::GuiPlatformSetFullRefreshSpecial()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void Ctrl::PaintCaret(SystemDraw& w)
|
||||
{
|
||||
}
|
||||
|
||||
String GuiPlatformGetKeyDesc(dword key)
|
||||
{
|
||||
return Null;
|
||||
}
|
||||
|
||||
void Ctrl::GuiPlatformSelection(PasteClip&)
|
||||
{
|
||||
}
|
||||
|
||||
void GuiPlatformAdjustDragImage(ImageBuffer&)
|
||||
{
|
||||
}
|
||||
|
||||
bool GuiPlatformHasSizeGrip()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiPlatformGripResize(TopWindow *q)
|
||||
{
|
||||
q->GripResize();
|
||||
}
|
||||
|
||||
Color GuiPlatformGetScreenPixel(int x, int y)
|
||||
{
|
||||
return Black;
|
||||
}
|
||||
|
||||
void GuiPlatformAfterMenuPopUp()
|
||||
{
|
||||
}
|
||||
|
||||
void Ctrl::InstallPanicBox()
|
||||
{
|
||||
}
|
||||
|
||||
void Ctrl::ApplyLayout()
|
||||
{
|
||||
GuiLock __;
|
||||
for(Ctrl *q = GetFirstChild(); q; q = q->GetNext())
|
||||
q->ApplyLayout();
|
||||
}
|
||||
|
||||
String Ctrl::Name() const {
|
||||
GuiLock __;
|
||||
#ifdef CPU_64
|
||||
String s = String(typeid(*this).name()) + " : 0x" + FormatIntHex(this);
|
||||
#else
|
||||
String s = String(typeid(*this).name()) + " : " + Format("0x%x", (int) this);
|
||||
#endif
|
||||
if(IsChild())
|
||||
s << "(parent " << String(typeid(*parent).name()) << ")";
|
||||
return s;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
//$ class Ctrl {
|
||||
static Ptr<Ctrl> desktop;
|
||||
static Vector<Ctrl *> topctrl;
|
||||
static InfoPanel infoPanel;
|
||||
|
||||
static float angle;
|
||||
static float scale;
|
||||
static float alpha;
|
||||
|
||||
static Point glCursorPos;
|
||||
static Image glCursorImage;
|
||||
static Rect glCaretRect;
|
||||
static int glCaretTm;
|
||||
|
||||
static int64 glEventLoop;
|
||||
static int64 glEndSessionLoop;
|
||||
|
||||
bool cliptobounds:1;
|
||||
|
||||
int FindTopCtrl() const;
|
||||
static void SyncTopWindows();
|
||||
void DestroyWnd();
|
||||
void NewTop() { top = new Top; top->owner_window = NULL; }
|
||||
void PutForeground();
|
||||
static void MouseEventGl(Ptr<Ctrl> t, int event, Point p, int zdelta);
|
||||
|
||||
static void DrawLine(const Vector<Rect>& clip, int x, int y, int cx, int cy, bool horz,
|
||||
const byte *pattern, int animation);
|
||||
static void DragRectDraw0(const Vector<Rect>& clip, const Rect& rect, int n,
|
||||
const byte *pattern, int animation);
|
||||
|
||||
|
||||
friend class TopWindowFrame;
|
||||
friend class SystemDraw;
|
||||
friend struct DnDLoop;
|
||||
|
||||
void SetOpen(bool b) { isopen = b; }
|
||||
|
||||
protected:
|
||||
static int PaintLock;
|
||||
|
||||
public:
|
||||
static int Xbuttons;
|
||||
static int Xbuttontime;
|
||||
static Point Xbuttonpos;
|
||||
|
||||
static Console console;
|
||||
static Rect screenRect;
|
||||
static bool screenReady;
|
||||
|
||||
static void InitGl();
|
||||
static void ExitGl();
|
||||
static void EndSession();
|
||||
static bool DoMouseGl(Ctrl* q, int event, Point p, int zdelta);
|
||||
static void DoMouseGl(int event, Point p, int zdelta = 0);
|
||||
static bool DoKeyGl(dword key, int cnt);
|
||||
static void CursorSync(Draw& w);
|
||||
static void MouseSync(Draw& w);
|
||||
|
||||
static void SetDesktop(Ctrl& q);
|
||||
static Ctrl *GetDesktop() { return desktop; }
|
||||
static void SetWindowSize(Size sz);
|
||||
static Size GetScreenSize() { return screenRect.GetSize(); }
|
||||
static dword GetCaretTm() { return glCaretTm; }
|
||||
static void ResetCaretTm() { glCaretTm = GetTickCount(); }
|
||||
|
||||
static void DrawScreen();
|
||||
|
||||
Ctrl& ClipToBounds(bool b = true) { cliptobounds = b; return *this; }
|
||||
bool IsClipToBounds() const { return cliptobounds; }
|
||||
|
||||
|
||||
virtual void ApplyTransform(TransformState state) {}
|
||||
virtual void PostPaint(Draw& w) {}
|
||||
virtual void ApplyLayout();
|
||||
void DragRectDraw(const Rect& rect1, const Rect& rect2, const Rect& clip, int n,
|
||||
Color color, int type, int animation);
|
||||
|
||||
static Ctrl *FindMouseTopCtrl();
|
||||
|
||||
enum { DRAWDRAGRECT_SCREEN = 0x8000 };
|
||||
|
||||
//$ };
|
||||
|
|
@ -1,150 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
|
||||
Ptr<Ctrl> sDnDSource;
|
||||
|
||||
Ctrl * Ctrl::GetDragAndDropSource()
|
||||
{
|
||||
return sDnDSource;
|
||||
}
|
||||
|
||||
struct DnDLoop : LocalLoop {
|
||||
const VectorMap<String, ClipData> *data;
|
||||
Vector<String> fmts;
|
||||
|
||||
Image move, copy, reject;
|
||||
Ptr<Ctrl> target;
|
||||
int action;
|
||||
byte actions;
|
||||
|
||||
void Sync();
|
||||
String GetData(const String& f);
|
||||
void DnD(bool paste);
|
||||
|
||||
virtual void LeftUp(Point, dword);
|
||||
virtual bool Key(dword, int);
|
||||
virtual void MouseMove(Point p, dword);
|
||||
virtual Image CursorImage(Point, dword);
|
||||
};
|
||||
|
||||
Ptr<DnDLoop> dndloop;
|
||||
|
||||
bool PasteClip::IsAvailable(const char *fmt) const
|
||||
{
|
||||
GuiLock __;
|
||||
return dnd ? dndloop && FindIndex(dndloop->fmts, fmt) >= 0
|
||||
: IsClipboardAvailable(fmt);
|
||||
}
|
||||
|
||||
String DnDLoop::GetData(const String& f)
|
||||
{
|
||||
GuiLock __;
|
||||
int i = data->Find(f);
|
||||
String d;
|
||||
if(i >= 0)
|
||||
d = (*data)[i].Render();
|
||||
else
|
||||
if(sDnDSource)
|
||||
d = sDnDSource->GetDropData(f);
|
||||
return d;
|
||||
}
|
||||
|
||||
String PasteClip::Get(const char *fmt) const
|
||||
{
|
||||
return dnd ? dndloop ? dndloop->GetData(fmt) : String() : ReadClipboard(fmt);
|
||||
}
|
||||
|
||||
void PasteClip::GuiPlatformConstruct()
|
||||
{
|
||||
dnd = false;
|
||||
}
|
||||
|
||||
void DnDLoop::DnD(bool paste)
|
||||
{
|
||||
PasteClip d;
|
||||
d.paste = paste;
|
||||
d.accepted = false;
|
||||
d.allowed = (byte)actions;
|
||||
d.action = GetCtrl() ? DND_COPY : DND_MOVE;
|
||||
d.dnd = true;
|
||||
if(target)
|
||||
target->DnD(GetMousePos(), d);
|
||||
action = d.IsAccepted() ? d.GetAction() : DND_NONE;
|
||||
}
|
||||
|
||||
void DnDLoop::Sync()
|
||||
{
|
||||
GuiLock __;
|
||||
Ptr<Ctrl> t = FindMouseTopCtrl();
|
||||
if(t != target)
|
||||
if(target)
|
||||
target->DnDLeave();
|
||||
target = t;
|
||||
DnD(false);
|
||||
}
|
||||
|
||||
void DnDLoop::LeftUp(Point, dword)
|
||||
{
|
||||
GuiLock __;
|
||||
LLOG("DnDLoop::LeftUp");
|
||||
DnD(true);
|
||||
EndLoop();
|
||||
}
|
||||
|
||||
void DnDLoop::MouseMove(Point p, dword)
|
||||
{
|
||||
GuiLock __;
|
||||
LLOG("DnDLoop::MouseMove");
|
||||
Sync();
|
||||
}
|
||||
|
||||
bool DnDLoop::Key(dword, int)
|
||||
{
|
||||
GuiLock __;
|
||||
LLOG("DnDLoop::Key");
|
||||
Sync();
|
||||
return false;
|
||||
}
|
||||
|
||||
Image DnDLoop::CursorImage(Point, dword)
|
||||
{
|
||||
GuiLock __;
|
||||
return action == DND_MOVE ? move : action == DND_COPY ? copy : reject;
|
||||
}
|
||||
|
||||
int Ctrl::DoDragAndDrop(const char *fmts, const Image& sample, dword actions,
|
||||
const VectorMap<String, ClipData>& data)
|
||||
{
|
||||
GuiLock __;
|
||||
DnDLoop d;
|
||||
d.actions = (byte)actions;
|
||||
d.reject = actions & DND_EXACTIMAGE ? CtrlCoreImg::DndNone() : MakeDragImage(CtrlCoreImg::DndNone(), sample);
|
||||
if(actions & DND_COPY)
|
||||
d.copy = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndCopy(), sample);
|
||||
if(actions & DND_MOVE)
|
||||
d.move = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndMoveX11(), sample);
|
||||
d.SetMaster(*this);
|
||||
d.data = &data;
|
||||
d.action = DND_NONE;
|
||||
d.fmts = Split(fmts, ';');
|
||||
dndloop = &d;
|
||||
sDnDSource = this;
|
||||
d.Run();
|
||||
sDnDSource = NULL;
|
||||
SyncCaret();
|
||||
LLOG("DoDragAndDrop finished");
|
||||
return d.action;
|
||||
}
|
||||
|
||||
void Ctrl::SetSelectionSource(const char *fmts) {}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,189 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlCore/CtrlCore.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
#define LTIMING(x) // RTIMING(x)
|
||||
|
||||
FrameInfo frameInfo;
|
||||
SystemDraw* SystemDraw::systemDraw = NULL;
|
||||
float SystemDraw::blurStrength = 0;
|
||||
float SystemDraw::grayStrength = 0;
|
||||
|
||||
dword SystemDraw::GetInfo() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Size SystemDraw::GetPageSize() const
|
||||
{
|
||||
return Size(0, 0);
|
||||
}
|
||||
|
||||
Size SystemDraw::GetNativeDpi() const
|
||||
{
|
||||
return Size(96, 96);
|
||||
}
|
||||
|
||||
void SystemDraw::BeginNative()
|
||||
{
|
||||
}
|
||||
|
||||
void SystemDraw::EndNative()
|
||||
{
|
||||
}
|
||||
|
||||
int SystemDraw::GetCloffLevel() const
|
||||
{
|
||||
return ci;
|
||||
}
|
||||
|
||||
void SystemDraw::InitClip(const Rect& clip)
|
||||
{
|
||||
GuiLock __;
|
||||
drawing_clip = clip;
|
||||
}
|
||||
|
||||
void SystemDraw::Reset() {
|
||||
systemDraw = this;
|
||||
cloff.SetCount(32);
|
||||
mstack.SetCount(32);
|
||||
ci = 0;
|
||||
cn = 0;
|
||||
cd = 0;
|
||||
mi = 0;
|
||||
drawing_offset = Point(0, 0);
|
||||
alpha = 255;
|
||||
r = g = b = a = 255;
|
||||
angle = 0;
|
||||
scale = 1;
|
||||
image_coloring = true;
|
||||
projection_mode = 0;
|
||||
}
|
||||
|
||||
SystemDraw::SystemDraw() {
|
||||
GuiLock __;
|
||||
Reset();
|
||||
}
|
||||
|
||||
SystemDraw::SystemDraw(Size sz) {
|
||||
GuiLock __;
|
||||
Reset();
|
||||
drawing_clip = sz;
|
||||
drawing_size = sz;
|
||||
clip = sz;
|
||||
Init();
|
||||
}
|
||||
|
||||
void SystemDraw::Init()
|
||||
{
|
||||
//glVertexPointer(2, GL_FLOAT, 0, vtx);
|
||||
//glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
#if CLIP_MODE == 0
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
#elif CLIP_MODE == 1
|
||||
glEnable(GL_CLIP_PLANE0);
|
||||
glEnable(GL_CLIP_PLANE1);
|
||||
glEnable(GL_CLIP_PLANE2);
|
||||
glEnable(GL_CLIP_PLANE3);
|
||||
#elif CLIP_MODE == 2
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glStencilFunc(GL_ALWAYS, 0, ~0);
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
glClearStencil(0);
|
||||
#endif
|
||||
glEnable(GL_LINE_SMOOTH);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glClearColor(0.f, 0.f, 0.f, 1.f);
|
||||
glClearDepth(1.0f);
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glColor4f(1.f, 1.f, 1.f, 1.f);
|
||||
}
|
||||
|
||||
void SystemDraw::Clear(bool ontransforms)
|
||||
{
|
||||
GuiLock __;
|
||||
if(ontransforms && (angle == 0 && scale == 1))
|
||||
return;
|
||||
#if CLIP_MODE == 0
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
#endif
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
#if CLIP_MODE == 0
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
#endif
|
||||
}
|
||||
|
||||
void SystemDraw::ViewPort(int width, int height)
|
||||
{
|
||||
GuiLock __;
|
||||
glViewport(0, 0, (GLsizei) width < 0 ? drawing_size.cx : width, (GLsizei) height < 0 ? drawing_size.cy : height);
|
||||
}
|
||||
|
||||
void SystemDraw::OrthogonalView(bool clear_modelview)
|
||||
{
|
||||
GuiLock __;
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(0, drawing_size.cx, drawing_size.cy, 0, -100, 100);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
if(clear_modelview)
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
void SystemDraw::PerspectiveView(bool clear_modelview)
|
||||
{
|
||||
GuiLock __;
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0f, GetAspect(), 1.f, 100.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
if(clear_modelview)
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
void SystemDraw::ApplyTransforms()
|
||||
{
|
||||
GuiLock __;
|
||||
float dx = (float) drawing_size.cx / 2;
|
||||
float dy = (float) drawing_size.cy / 2;
|
||||
glTranslatef(dx, dy, 0.f);
|
||||
glRotatef(angle, 0, 0, 1);
|
||||
glScalef(scale, scale, 1);
|
||||
glTranslatef(-dx, -dy, 0.f);
|
||||
}
|
||||
|
||||
void SystemDraw::PushContext()
|
||||
{
|
||||
GuiLock __;
|
||||
MatrixStack& m = mstack[mi++];
|
||||
glGetDoublev(GL_PROJECTION_MATRIX, m.projection_matrix);
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX, m.modelview_matrix);
|
||||
m.projection_mode = projection_mode;
|
||||
}
|
||||
|
||||
void SystemDraw::PopContext()
|
||||
{
|
||||
GuiLock __;
|
||||
MatrixStack& m = mstack[--mi];
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadMatrixd(m.projection_matrix);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadMatrixd(m.modelview_matrix);
|
||||
projection_mode = m.projection_mode;
|
||||
}
|
||||
|
||||
SystemDraw::~SystemDraw() {
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,657 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlCore/CtrlCore.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
#define LTIMING(x) // RTIMING(x)
|
||||
|
||||
void SystemDraw::PlaneEquation(double eq[4], float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3)
|
||||
{
|
||||
eq[0] = y1 * (z2 - z3) +
|
||||
y2 * (z3 - z1) +
|
||||
y3 * (z1 - z2);
|
||||
|
||||
eq[1] = z1 * (x2 - x3) +
|
||||
z2 * (x3 - x1) +
|
||||
z3 * (x1 - x2);
|
||||
|
||||
eq[2] = x1 * (y2 - y3) +
|
||||
x2 * (y3 - y1) +
|
||||
x3 * (y1 - y2);
|
||||
|
||||
eq[3] = -(x1 * (y2 * z3 - y3 * z2) +
|
||||
x2 * (y3 * z1 - y1 * z3) +
|
||||
x3 * (y1 * z2 - y2 * z1));
|
||||
}
|
||||
|
||||
void SystemDraw::SetClipRect(const Rect& r)
|
||||
{
|
||||
clip = r;
|
||||
#if CLIP_MODE != 2
|
||||
for(int i = 0; i < ci; i++)
|
||||
if(!cloff[i].exclude)
|
||||
clip &= cloff[i].drawing_clip;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SystemDraw::ScissorClip(const Rect& r)
|
||||
{
|
||||
glScissor(r.left, drawing_size.cy - r.top - r.Height(), r.Width(), r.Height());
|
||||
}
|
||||
|
||||
void SystemDraw::PlaneClip(const Rect& r)
|
||||
{
|
||||
float cl = (float) r.left;
|
||||
float ct = (float) r.top;
|
||||
float cr = (float) r.right;
|
||||
float cb = (float) r.bottom;
|
||||
|
||||
double eq[4];
|
||||
|
||||
PlaneEquation(eq, cl, ct, 0, cl, cb, 0, cl, cb, +1.0f);
|
||||
glClipPlane(GL_CLIP_PLANE0, eq);
|
||||
|
||||
PlaneEquation(eq, cr, ct, 0, cr, cb, 0, cr, cb, -1.0f);
|
||||
glClipPlane(GL_CLIP_PLANE1, eq);
|
||||
|
||||
PlaneEquation(eq, cl, ct, 0, cr, ct, 0, cr, ct, -1.0f);
|
||||
glClipPlane(GL_CLIP_PLANE2, eq);
|
||||
|
||||
PlaneEquation(eq, cl, cb, 0, cr, cb, 0, cr, cb, +1.0f);
|
||||
glClipPlane(GL_CLIP_PLANE3, eq);
|
||||
}
|
||||
|
||||
void SystemDraw::SetVec(float* v, float sx, float sy, float dx, float dy)
|
||||
{
|
||||
v[0] = sx; v[1] = dy;
|
||||
v[2] = sx; v[3] = sy;
|
||||
v[4] = dx; v[5] = dy;
|
||||
v[6] = dx; v[7] = sy;
|
||||
}
|
||||
|
||||
void SystemDraw::SetVec(float* v, int sx, int sy, int dx, int dy)
|
||||
{
|
||||
v[0] = (float) sx; v[1] = (float) dy;
|
||||
v[2] = (float) sx; v[3] = (float) sy;
|
||||
v[4] = (float) dx; v[5] = (float) dy;
|
||||
v[6] = (float) dx; v[7] = (float) sy;
|
||||
}
|
||||
|
||||
void SystemDraw::StencilClip(const Rect& r, int mode, bool exclude)
|
||||
{
|
||||
float vtx[12];
|
||||
SetVtx(vtx, (float) r.left, (float) r.top, (float) r.right, (float) r.bottom);
|
||||
|
||||
glVertexPointer(projection_mode ? 3 : 2, GL_FLOAT, 0, vtx);
|
||||
|
||||
int prev_cn = cn;
|
||||
|
||||
glColorMask(0, 0, 0, 0);
|
||||
|
||||
if(mode == 0)
|
||||
{
|
||||
if(exclude)
|
||||
{
|
||||
glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
|
||||
glStencilFunc(GL_ALWAYS, 255, ~0);
|
||||
}
|
||||
else
|
||||
{
|
||||
++cn;
|
||||
glStencilOp(GL_KEEP, GL_INCR, GL_INCR);
|
||||
glStencilFunc(GL_GEQUAL, cn, ~0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(exclude)
|
||||
{
|
||||
glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
|
||||
glStencilFunc(GL_ALWAYS, cn, ~0);
|
||||
}
|
||||
else
|
||||
{
|
||||
--cn;
|
||||
glStencilOp(GL_KEEP, GL_DECR, GL_DECR);
|
||||
glStencilFunc(GL_ALWAYS, cn, ~0);
|
||||
}
|
||||
}
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
if(exclude)
|
||||
glStencilFunc(GL_GREATER, 255, ~0);
|
||||
else
|
||||
glStencilFunc(GL_EQUAL, cn, ~0);
|
||||
|
||||
glColorMask(1, 1, 1, 1);
|
||||
}
|
||||
|
||||
void SystemDraw::SetClip(const Rect& r, int mode, bool exclude)
|
||||
{
|
||||
SetClipRect(r);
|
||||
#if CLIP_MODE == 0
|
||||
ScissorClip(clip);
|
||||
#elif CLIP_MODE == 1
|
||||
PlaneClip(clip);
|
||||
#elif CLIP_MODE == 2
|
||||
StencilClip(clip, mode, exclude);
|
||||
#endif
|
||||
}
|
||||
|
||||
void SystemDraw::BeginOp()
|
||||
{
|
||||
Cloff& w = cloff[ci++];
|
||||
w.clipping = false;
|
||||
w.exclude = false;
|
||||
w.org = drawing_offset;
|
||||
w.drawing_clip = drawing_clip;
|
||||
}
|
||||
|
||||
void SystemDraw::EndOp()
|
||||
{
|
||||
ASSERT(ci);
|
||||
#if CLIP_MODE == 2
|
||||
if(cloff[ci - 1].clipping)
|
||||
SetClip(drawing_clip, 1, cloff[ci - 1].exclude);
|
||||
#endif
|
||||
Cloff& w = cloff[--ci];
|
||||
drawing_offset = w.org;
|
||||
drawing_clip = w.drawing_clip;
|
||||
#if CLIP_MODE != 2
|
||||
if(cloff[ci].clipping)
|
||||
SetClip(drawing_clip);
|
||||
#endif
|
||||
}
|
||||
|
||||
void SystemDraw::OffsetOp(Point p)
|
||||
{
|
||||
GuiLock __;
|
||||
BeginOp();
|
||||
drawing_offset += p;
|
||||
}
|
||||
|
||||
bool SystemDraw::ClipOp(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
BeginOp();
|
||||
cloff[ci - 1].clipping = true;
|
||||
drawing_clip = r + drawing_offset;
|
||||
SetClip(drawing_clip);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SystemDraw::ClipoffOp(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
BeginOp();
|
||||
cloff[ci - 1].clipping = true;
|
||||
drawing_clip = r + drawing_offset;
|
||||
drawing_offset += r.TopLeft();
|
||||
SetClip(drawing_clip);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SystemDraw::ExcludeClipOp(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(ci > 0);
|
||||
cloff[ci - 1].clipping = true;
|
||||
cloff[ci - 1].exclude = true;
|
||||
drawing_clip = r + drawing_offset;
|
||||
SetClip(drawing_clip, 0, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SystemDraw::IntersectClipOp(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
Cloff& w = cloff[ci];
|
||||
drawing_clip = r + drawing_offset;
|
||||
SetClip(drawing_clip);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SystemDraw::IsPaintingOp(const Rect& r) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
Rect SystemDraw::GetPaintRect() const
|
||||
{
|
||||
GuiLock __;
|
||||
return drawing_clip;
|
||||
}
|
||||
|
||||
void SystemDraw::DrawRectOp(int x, int y, int cx, int cy, Color color)
|
||||
{
|
||||
GuiLock __;
|
||||
if(IsNull(color))
|
||||
return;
|
||||
|
||||
if(cx <= 0 || cy <= 0) return;
|
||||
|
||||
float sx = (float) x + drawing_offset.x;
|
||||
float sy = (float) y + drawing_offset.y;
|
||||
float dx = sx + cx;
|
||||
float dy = sy + cy;
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
float cl = (float) clip.left;
|
||||
float ct = (float) clip.top;
|
||||
float cr = (float) clip.right;
|
||||
float cb = (float) clip.bottom;
|
||||
|
||||
if(sx > cr || sy > cb)
|
||||
return;
|
||||
|
||||
if(dx < cl || dy < ct)
|
||||
return;
|
||||
|
||||
if(sx < cl)
|
||||
sx = cl;
|
||||
if(sy < ct)
|
||||
sy = ct;
|
||||
if(dx > cr)
|
||||
dx = cr;
|
||||
if(dy > cb)
|
||||
dy = cb;
|
||||
#endif
|
||||
|
||||
#ifdef COLOR_ALPHA
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), color.GetA() >= 255 ? (int) alpha : color.GetA());
|
||||
#else
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), (int) alpha);
|
||||
#endif
|
||||
|
||||
float vtx[12];
|
||||
SetVtx(vtx, sx, sy, dx, dy);
|
||||
|
||||
glVertexPointer(projection_mode ? 3 : 2, GL_FLOAT, 0, vtx);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
|
||||
#ifdef COLOR_ALPHA
|
||||
glColor4ub(255, 255, 255, 255);
|
||||
#else
|
||||
glColor4ub(255, 255, 255, (int) alpha);
|
||||
#endif
|
||||
}
|
||||
|
||||
void SystemDraw::DrawImageOp(int x, int y, int cx, int cy, const Image& img, const Rect& src, Color color)
|
||||
{
|
||||
GuiLock __;
|
||||
if(cx <= 0 || cy <= 0) return;
|
||||
|
||||
float sx = (float) x + drawing_offset.x;
|
||||
float sy = (float) y + drawing_offset.y;
|
||||
float dx = sx + cx;
|
||||
float dy = sy + cy;
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
if(sx > clip.right || sy > clip.bottom)
|
||||
return;
|
||||
|
||||
if(dx < clip.left || dy < clip.top)
|
||||
return;
|
||||
#endif
|
||||
|
||||
float tl = (float) src.left;
|
||||
float tr = (float) src.right;
|
||||
float tt = (float) src.top;
|
||||
float tb = (float) src.bottom;
|
||||
|
||||
float sw = (float) src.GetWidth();
|
||||
float sh = (float) src.GetHeight();
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
float cl = (float) clip.left;
|
||||
float ct = (float) clip.top;
|
||||
float cr = (float) clip.right;
|
||||
float cb = (float) clip.bottom;
|
||||
|
||||
if(sx < cl)
|
||||
{
|
||||
float dl = cl - sx;
|
||||
tl += dl * sw / (float) cx;
|
||||
sx = cl;
|
||||
}
|
||||
|
||||
if(sy < ct)
|
||||
{
|
||||
float dt = ct - sy;
|
||||
tt += dt * sh / (float) cy;
|
||||
sy = ct;
|
||||
}
|
||||
|
||||
if(dx > cr)
|
||||
{
|
||||
float dr = dx - cr;
|
||||
tr -= dr * sw / (float) cx;
|
||||
dx = cr;
|
||||
}
|
||||
|
||||
if(dy > cb)
|
||||
{
|
||||
float db = dy - cb;
|
||||
tb -= db * sh / (float) cy;
|
||||
dy = cb;
|
||||
}
|
||||
#endif
|
||||
|
||||
const TextureResource& t = resources.Bind(img, Resources::AUTO_ATLAS | Resources::NEAREST_FILTERING);
|
||||
|
||||
float tw = 1.f / (float) t.realWidth;
|
||||
float th = 1.f / (float) t.realHeight;
|
||||
|
||||
tl = (tl + t.x + TEXEL_OFFSET) * tw;
|
||||
tr = (tr + t.x - TEXEL_OFFSET) * tw;
|
||||
tt = (tt + t.y + TEXEL_OFFSET) * th;
|
||||
tb = (tb + t.y - TEXEL_OFFSET) * th;
|
||||
|
||||
if(image_coloring)
|
||||
{
|
||||
if(IsNull(color))
|
||||
glColor4ub(255, 255, 255, (int) alpha);
|
||||
else
|
||||
{
|
||||
#ifdef COLOR_ALPHA
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), color.GetA() >= 255 ? (int) alpha : color.GetA());
|
||||
#else
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), (int) alpha);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
glColor4ub(255, 255, 255, 255);
|
||||
|
||||
float vtx[12];
|
||||
SetVtx(vtx, sx, sy, dx, dy);
|
||||
|
||||
float crd[] = {
|
||||
tl, tb,
|
||||
tl, tt,
|
||||
tr, tb,
|
||||
tr, tt
|
||||
};
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
||||
glVertexPointer(projection_mode ? 3 : 2, GL_FLOAT, 0, vtx);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
void SystemDraw::DrawTextureOp(const RectF& r, int textureId, int width, int height, const RectF& src)
|
||||
{
|
||||
GuiLock __;
|
||||
float sx = r.left + drawing_offset.x;
|
||||
float sy = r.top + drawing_offset.y;
|
||||
float dx = sx + r.GetWidth();
|
||||
float dy = sy + r.GetHeight();
|
||||
|
||||
float tl = src.left;
|
||||
float tr = src.right;
|
||||
float tt = src.top;
|
||||
float tb = src.bottom;
|
||||
|
||||
resources.Bind(textureId, Resources::NEAREST_FILTERING);
|
||||
|
||||
float tw = 1.f / (float) (width);
|
||||
float th = 1.f / (float) (height);
|
||||
|
||||
tl = (tl + TEXEL_OFFSET) * tw;
|
||||
tr = (tr - TEXEL_OFFSET) * tw;
|
||||
tt = (tt + TEXEL_OFFSET) * th;
|
||||
tb = (tb - TEXEL_OFFSET) * th;
|
||||
|
||||
float vtx[12];
|
||||
|
||||
SetVtx(vtx, sx, sy, dx, dy);
|
||||
|
||||
float crd[] = {
|
||||
tl, tt,
|
||||
tl, tb,
|
||||
tr, tt,
|
||||
tr, tb
|
||||
};
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
||||
glVertexPointer(projection_mode ? 3 : 2, GL_FLOAT, 0, vtx);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
void SystemDraw::DrawImageOp(float x0, float y0, float z0, float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, const Image& img, const Rect& src, Color color)
|
||||
{
|
||||
GuiLock __;
|
||||
float tl = (float) src.left;
|
||||
float tr = (float) src.right;
|
||||
float tt = (float) src.top;
|
||||
float tb = (float) src.bottom;
|
||||
|
||||
float sw = (float) src.GetWidth();
|
||||
float sh = (float) src.GetHeight();
|
||||
|
||||
const TextureResource& t = resources.Bind(img, Resources::AUTO_ATLAS | Resources::NEAREST_FILTERING);
|
||||
|
||||
float tw = 1.f / (float) t.realWidth;
|
||||
float th = 1.f / (float) t.realHeight;
|
||||
|
||||
tl = (tl + t.x + TEXEL_OFFSET) * tw;
|
||||
tr = (tr + t.x - TEXEL_OFFSET) * tw;
|
||||
tt = (tt + t.y + TEXEL_OFFSET) * th;
|
||||
tb = (tb + t.y - TEXEL_OFFSET) * th;
|
||||
|
||||
if(image_coloring)
|
||||
{
|
||||
if(IsNull(color))
|
||||
glColor4ub(255, 255, 255, (int) alpha);
|
||||
else
|
||||
{
|
||||
#ifdef COLOR_ALPHA
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), color.GetA());
|
||||
#else
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), (int) alpha);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
float vtx[] = {
|
||||
x3, y3, z3,
|
||||
x0, y0, z0,
|
||||
x2, y2, z2,
|
||||
x1, y1, z1
|
||||
};
|
||||
|
||||
float crd[] = {
|
||||
tl, tb,
|
||||
tl, tt,
|
||||
tr, tb,
|
||||
tr, tt
|
||||
};
|
||||
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
||||
glVertexPointer(3, GL_FLOAT, 0, vtx);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
void SystemDraw::DrawLineOp(int x1, int y1, int x2, int y2, int width, Color color)
|
||||
{
|
||||
GuiLock __;
|
||||
#ifdef COLOR_ALPHA
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), color.GetA());
|
||||
#else
|
||||
glColor4ub(color.GetR(), color.GetG(), color.GetB(), (int) alpha);
|
||||
#endif
|
||||
glLineWidth((GLfloat) width);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2i(x1 + drawing_offset.x, y1 + drawing_offset.y);
|
||||
glVertex2i(x2 + drawing_offset.x, y2 + drawing_offset.y);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void SystemDraw::DrawPolyPolylineOp(const Point *vertices, int vertex_count, const int *counts, int count_count, int width, Color color, Color doxor)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void SystemDraw::DrawPolyPolyPolygonOp(const Point *vertices, int vertex_count, const int *subpolygon_counts, int scc, const int *disjunct_polygon_counts, int dpcc, Color color, int width, Color outline, uint64 pattern, Color doxor)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void SystemDraw::DrawArcOp(const Rect& rc, Point start, Point end, int width, Color color)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void SystemDraw::DrawEllipseOp(const Rect& r, Color color, int pen, Color pencolor)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void SystemDraw::SaveCurrentColor()
|
||||
{
|
||||
GuiLock __;
|
||||
glGetFloatv(GL_CURRENT_COLOR, current_color);
|
||||
}
|
||||
|
||||
void SystemDraw::RestoreLastColor()
|
||||
{
|
||||
GuiLock __;
|
||||
glColor4f(current_color[0], current_color[1], current_color[2], current_color[3]);
|
||||
}
|
||||
|
||||
RectF SystemDraw::UnProject(const RectF& r, float& depth)
|
||||
{
|
||||
GuiLock __;
|
||||
double projMat[16];
|
||||
double modelMat[16];
|
||||
int viewPort[4];
|
||||
|
||||
glGetDoublev(GL_PROJECTION_MATRIX, projMat);
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX, modelMat);
|
||||
glGetIntegerv(GL_VIEWPORT, viewPort);
|
||||
|
||||
RectF fr;
|
||||
double x, y, z;
|
||||
gluUnProject(r.left, r.top, 0.99f, modelMat, projMat, viewPort, &x, &y, &z);
|
||||
depth = (float) z;
|
||||
fr.left = (float) x;
|
||||
fr.top = (float) y;
|
||||
gluUnProject(r.right, r.bottom, 0.99f, modelMat, projMat, viewPort, &x, &y, &z);
|
||||
fr.right = (float) x;
|
||||
fr.bottom = (float) y;
|
||||
return fr;
|
||||
}
|
||||
|
||||
void SystemDraw::UnProject(float* vtx, float sx, float sy, float dx, float dy)
|
||||
{
|
||||
GuiLock __;
|
||||
double projMat[16];
|
||||
double modelMat[16] = {
|
||||
1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
0, 0, 0, 1
|
||||
};
|
||||
|
||||
int viewPort[4];
|
||||
|
||||
glGetDoublev(GL_PROJECTION_MATRIX, projMat);
|
||||
//glGetDoublev(GL_MODELVIEW_MATRIX, modelMat);
|
||||
glGetIntegerv(GL_VIEWPORT, viewPort);
|
||||
|
||||
double xs, ys, xd, yd, z;
|
||||
|
||||
gluUnProject(sx, drawing_size.cy - sy, 0.99, modelMat, projMat, viewPort, &xs, &ys, &z);
|
||||
gluUnProject(dx, drawing_size.cy - dy, 0.99, modelMat, projMat, viewPort, &xd, &yd, &z);
|
||||
|
||||
vtx[0] = (float) xs;
|
||||
vtx[1] = (float) yd;
|
||||
vtx[2] = (float) z;
|
||||
vtx[3] = (float) xs;
|
||||
vtx[4] = (float) ys;
|
||||
vtx[5] = (float) z;
|
||||
vtx[6] = (float) xd;
|
||||
vtx[7] = (float) yd;
|
||||
vtx[8] = (float) z;
|
||||
vtx[9] = (float) xd;
|
||||
vtx[10] = (float) ys;
|
||||
vtx[11] = (float) z;
|
||||
}
|
||||
|
||||
void SystemDraw::UnProject(float& x, float& y, float &z)
|
||||
{
|
||||
GuiLock __;
|
||||
double projMat[16];
|
||||
double modelMat[16] = {
|
||||
1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
0, 0, 0, 1
|
||||
};
|
||||
|
||||
int viewPort[4];
|
||||
|
||||
glGetDoublev(GL_PROJECTION_MATRIX, projMat);
|
||||
glGetIntegerv(GL_VIEWPORT, viewPort);
|
||||
|
||||
double xd, yd, zd;
|
||||
|
||||
gluUnProject(x, drawing_size.cy - y, 0.99, modelMat, projMat, viewPort, &xd, &yd, &zd);
|
||||
x = (float) xd;
|
||||
y = (float) yd;
|
||||
z = (float) zd;
|
||||
}
|
||||
|
||||
void SystemDraw::SetVtx(float* vtx, float sx, float sy, float dx, float dy)
|
||||
{
|
||||
if(projection_mode == 1)
|
||||
{
|
||||
UnProject(vtx, sx, sy, dx, dy);
|
||||
}
|
||||
else
|
||||
{
|
||||
vtx[0] = sx;
|
||||
vtx[1] = dy;
|
||||
vtx[2] = sx;
|
||||
vtx[3] = sy;
|
||||
vtx[4] = dx;
|
||||
vtx[5] = dy;
|
||||
vtx[6] = dx;
|
||||
vtx[7] = sy;
|
||||
}
|
||||
}
|
||||
|
||||
void SystemDraw::SetProjectionMode(int mode)
|
||||
{
|
||||
if(mode != projection_mode)
|
||||
{
|
||||
projection_mode = mode;
|
||||
if(projection_mode)
|
||||
PerspectiveView(false);
|
||||
else
|
||||
OrthogonalView(false);
|
||||
}
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,321 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlCore/CtrlCore.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void OpenGLFont::LoadBrc(const byte* xml, const byte** imagesData, const int* imagesSize, int imagesCount)
|
||||
{
|
||||
Parse((const char*) xml, false);
|
||||
for(int i = 0; i < imagesCount; i++)
|
||||
{
|
||||
MemStream ms((void*) imagesData[i], imagesSize[i]);
|
||||
Image img = StreamRaster::LoadAny(ms);
|
||||
images.Add(img);
|
||||
if(preload)
|
||||
resources.Add(img, true);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLFont::Load(const String& fileName, bool preload)
|
||||
{
|
||||
String filePath = GetDataFile(fileName);
|
||||
String xml = LoadFile(filePath);
|
||||
Parse(xml, true);
|
||||
}
|
||||
|
||||
void OpenGLFont::Parse(const char* xml, bool parsePages)
|
||||
{
|
||||
chars.SetCount(512);
|
||||
|
||||
XmlParser p(xml);
|
||||
|
||||
while(!p.IsTag())
|
||||
p.Skip();
|
||||
|
||||
p.PassTag("font");
|
||||
|
||||
while(!p.End())
|
||||
{
|
||||
if(p.TagE("common"))
|
||||
{
|
||||
scaleW = (float) p.Double("scaleW");
|
||||
scaleH = (float) p.Double("scaleH");
|
||||
lineHeight = (float) p.Double("lineHeight");
|
||||
base = (float) p.Double("base");
|
||||
}
|
||||
else if(p.Tag("pages"))
|
||||
{
|
||||
while(!p.End())
|
||||
{
|
||||
if(p.TagE("page"))
|
||||
{
|
||||
if(parsePages)
|
||||
{
|
||||
String fileName = p["file"];
|
||||
Image img = StreamRaster::LoadFileAny(GetDataFile(fileName));
|
||||
images.Add(img);
|
||||
if(preload)
|
||||
resources.Add(img, true);
|
||||
}
|
||||
pages.Add(StrInt(p["id"]));
|
||||
}
|
||||
else
|
||||
p.Skip();
|
||||
}
|
||||
|
||||
}
|
||||
else if(p.Tag("chars"))
|
||||
{
|
||||
while(!p.End())
|
||||
{
|
||||
if(p.TagE("char"))
|
||||
{
|
||||
int id = p.Int("id");
|
||||
CharInfo& ci = chars[id];
|
||||
|
||||
ci.id = id;
|
||||
ci.x = (float) p.Double("x");
|
||||
ci.y = (float) p.Double("y");
|
||||
ci.width = (float) p.Double("width");
|
||||
ci.height = (float) p.Double("height");
|
||||
ci.xoffset = (float) p.Double("xoffset");
|
||||
ci.yoffset = (float) p.Double("yoffset");
|
||||
ci.xadvance = (float) p.Double("xadvance");
|
||||
ci.page = p.Int("page");
|
||||
}
|
||||
else
|
||||
p.Skip();
|
||||
}
|
||||
}
|
||||
else if(p.Tag("kernings"))
|
||||
{
|
||||
while(!p.End())
|
||||
{
|
||||
if(p.TagE("kerning"))
|
||||
{
|
||||
int first = p.Int("first");
|
||||
int second = p.Int("second");
|
||||
float amount = (float) p.Double("amount");
|
||||
|
||||
VectorMap<int, float>& vm = kerns.GetAdd(first);
|
||||
vm.Add(second, amount);
|
||||
}
|
||||
else
|
||||
p.Skip();
|
||||
}
|
||||
}
|
||||
else
|
||||
p.Skip();
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLFont::UpdateTextures()
|
||||
{
|
||||
if(texturesUpdated)
|
||||
return;
|
||||
|
||||
for(int i = 0; i < images.GetCount(); i++)
|
||||
{
|
||||
const TextureResource& t = resources.Bind(images[i], Resources::LINEAR_FILTERING);
|
||||
pages[i] = t.serialId;
|
||||
}
|
||||
|
||||
texturesUpdated = true;
|
||||
}
|
||||
|
||||
float ConvStrength(float min, float max, float p)
|
||||
{
|
||||
return min + (max - min) * p / 100.f;
|
||||
}
|
||||
|
||||
void SystemDraw::Text(int x, int y, int angle, const wchar *text, Font font, Color ink, int outlineStrength, Color outlineColor, int glowStrength, Color glowColor, int n, const int *dx)
|
||||
{
|
||||
if(!text)
|
||||
return;
|
||||
|
||||
const wchar* s = text;
|
||||
OpenGLFont& fi = resources.GetFont(font);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
float cl = (float) clip.left;
|
||||
float ct = (float) clip.top;
|
||||
float cr = (float) clip.right;
|
||||
float cb = (float) clip.bottom;
|
||||
#endif
|
||||
fi.UpdateTextures();
|
||||
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
alphaMagProg.Start();
|
||||
|
||||
const float ic = 1.f / 255.f;
|
||||
|
||||
float outlineCenter = ConvStrength(0.1f, 0.45f, (float) 100 - min(outlineStrength, 100));
|
||||
float glowCenter = ConvStrength(0.55f, 0.95f, (float) 100 - min(glowStrength, 100));
|
||||
|
||||
#ifdef COLOR_ALPHA
|
||||
float ac = alpha / 255.f;
|
||||
int inkA = ink.GetA();
|
||||
int outlineA = outlineColor.GetA();
|
||||
int glowA = glowColor.GetA();
|
||||
#else
|
||||
float ac = alpha;
|
||||
int inkA = 1;
|
||||
int outlineA = 1;
|
||||
int glowA = 1;
|
||||
#endif
|
||||
|
||||
alphaMagProg.SetUniform("GlyphColor", ink.GetR() * ic, ink.GetG() * ic, ink.GetB() * ic, inkA * ic * ac);
|
||||
alphaMagProg.SetUniform("OutlineColor", outlineColor.GetR() * ic, outlineColor.GetG() * ic, outlineColor.GetB() * ic, outlineA * ic * ac);
|
||||
alphaMagProg.SetUniform("GlowColor", glowColor.GetR() * ic, glowColor.GetG() * ic, glowColor.GetB() * ic, glowA * ic * ac);
|
||||
alphaMagProg.SetUniform("Outline", outlineStrength > 0); //0.1 - 0.45
|
||||
alphaMagProg.SetUniform("Glow", glowStrength > 0); //0.55 - 0.095
|
||||
alphaMagProg.SetUniform("Shadow", false);
|
||||
alphaMagProg.SetUniform("OutlineCenter", outlineCenter);
|
||||
alphaMagProg.SetUniform("GlowCenter", glowCenter);
|
||||
|
||||
float xp = (float) x;
|
||||
float yp = (float) y;
|
||||
|
||||
int page = -1;
|
||||
|
||||
float sw = (float) fi.scaleW;
|
||||
float sh = (float) fi.scaleH;
|
||||
|
||||
float tw = 1.f / sw;
|
||||
float th = 1.f / sh;
|
||||
|
||||
while(*s && n > 0)
|
||||
{
|
||||
int cn = *s;
|
||||
|
||||
if(cn >= 0 && cn < fi.chars.GetCount())
|
||||
{
|
||||
const OpenGLFont::CharInfo& ci = fi.chars[cn];
|
||||
|
||||
cn <<= 3;
|
||||
|
||||
if(ci.page != page)
|
||||
{
|
||||
resources.Bind(fi.pages[ci.page], Resources::LINEAR_FILTERING);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
alphaMagProg.SetUniform("Texture", 0);
|
||||
page = ci.page;
|
||||
}
|
||||
|
||||
float sx = (float) ci.xoffset * fi.scale + xp + drawing_offset.x;
|
||||
float sy = (float) ci.yoffset * fi.scale + yp + drawing_offset.y;
|
||||
float dx = sx + ci.width * fi.scale;
|
||||
float dy = sy + ci.height * fi.scale;
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
if(sx <= clip.right && sy <= clip.bottom && dx >= clip.left && dy >= clip.top)
|
||||
#endif
|
||||
{
|
||||
float tl = (float) ci.x;
|
||||
float tt = (float) ci.y;
|
||||
float tr = (float) ci.x + ci.width;
|
||||
float tb = (float) ci.y + ci.height;
|
||||
|
||||
#if CLIP_MODE == 3
|
||||
if(sx < cl)
|
||||
{
|
||||
tl += (cl - sx);
|
||||
sx = cl;
|
||||
}
|
||||
|
||||
if(sy < ct)
|
||||
{
|
||||
tt += (ct - sy);
|
||||
sy = ct;
|
||||
}
|
||||
|
||||
if(dx > cr)
|
||||
{
|
||||
tr -= dx - cr;
|
||||
dx = cr;
|
||||
}
|
||||
|
||||
if(dy > cb)
|
||||
{
|
||||
tb -= dy - cb;
|
||||
dy = cb;
|
||||
}
|
||||
#endif
|
||||
|
||||
tl = (tl + TEXEL_OFFSET) * tw;
|
||||
tr = (tr - TEXEL_OFFSET) * tw;
|
||||
tt = (tt + TEXEL_OFFSET) * th;
|
||||
tb = (tb - TEXEL_OFFSET) * th;
|
||||
/*
|
||||
float vtx[] = {
|
||||
sx, dy,
|
||||
sx, sy,
|
||||
dx, dy,
|
||||
dx, sy
|
||||
};*/
|
||||
float vtx[12];
|
||||
SetVtx(vtx, sx, sy, dx, dy);
|
||||
|
||||
float crd[] = {
|
||||
tl, tb,
|
||||
tl, tt,
|
||||
tr, tb,
|
||||
tr, tt
|
||||
};
|
||||
|
||||
glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
||||
glVertexPointer(projection_mode ? 3: 2, GL_FLOAT, 0, vtx);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
}
|
||||
|
||||
xp += int(ci.xadvance * fi.scale + 0.5f);
|
||||
|
||||
int k = fi.kerns.Find(*s);
|
||||
if(k >= 0)
|
||||
xp += int(fi.kerns[k].Get(*(s + 1), 0) * fi.scale);
|
||||
}
|
||||
|
||||
++s;
|
||||
--n;
|
||||
}
|
||||
|
||||
alphaMagProg.Stop();
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
void SystemDraw::DrawTextOp(int x, int y, int angle, const wchar *text, Font font, Color ink, int n, const int *dx)
|
||||
{
|
||||
GuiLock __;
|
||||
Text(x, y, angle, text, font, ink, 0, White, 0, White, n, dx);
|
||||
}
|
||||
|
||||
Size GetTextSize(const wchar *text, const OpenGLFont& fi, int n)
|
||||
{
|
||||
if(n < 0)
|
||||
n = wstrlen(text);
|
||||
Size sz;
|
||||
sz.cx = 0;
|
||||
const wchar *wtext = (const wchar *)text;
|
||||
while(n > 0) {
|
||||
int cn = *wtext++;
|
||||
if(cn >= 0 && cn < fi.chars.GetCount())
|
||||
{
|
||||
const OpenGLFont::CharInfo& ci = fi.chars[cn];
|
||||
sz.cx += int(ci.xadvance * fi.scale + 0.5f);
|
||||
int k = fi.kerns.Find(cn);
|
||||
if(k >= 0)
|
||||
sz.cx += int(fi.kerns[k].Get(*wtext, 0) * fi.scale);
|
||||
}
|
||||
n--;
|
||||
}
|
||||
sz.cy = int(fi.lineHeight * fi.scale + 0.5f);
|
||||
return sz;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,174 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) //LOG(x)
|
||||
|
||||
static Point glmousepos;
|
||||
|
||||
Point GetMousePos() {
|
||||
return glmousepos;
|
||||
}
|
||||
|
||||
void Ctrl::SysEndLoop()
|
||||
{
|
||||
}
|
||||
|
||||
void WakeUpGuiThread()
|
||||
{
|
||||
}
|
||||
|
||||
void Ctrl::MouseEventGl(Ptr<Ctrl> t, int event, Point p, int zdelta)
|
||||
{
|
||||
if(!t->IsEnabled() && (t != (Ctrl*) &infoPanel && t != (Ctrl*) &console))
|
||||
return;
|
||||
Rect rr = t->GetRect();
|
||||
if((event & Ctrl::ACTION) == DOWN) {
|
||||
Ptr<Ctrl> q = t;
|
||||
TopWindowFrame *wf = dynamic_cast<TopWindowFrame *>(~t);
|
||||
if(wf)
|
||||
q = wf->window;
|
||||
if(q) q->ClickActivateWnd();
|
||||
if(q) q->SetForeground();
|
||||
if(ignoreclick)
|
||||
return;
|
||||
}
|
||||
if(t)
|
||||
t->DispatchMouse(event, p - rr.TopLeft(), zdelta);
|
||||
if(t)
|
||||
t->PostInput();
|
||||
}
|
||||
|
||||
Ctrl *Ctrl::FindMouseTopCtrl()
|
||||
{
|
||||
for(int i = topctrl.GetCount() - 1; i >= 0; i--) {
|
||||
Ctrl *t = topctrl[i];
|
||||
if(t->GetRect().Contains(glmousepos))
|
||||
return t->IsEnabled() ? t : NULL;
|
||||
}
|
||||
return desktop->IsEnabled() ? desktop : NULL;
|
||||
}
|
||||
|
||||
bool Ctrl::DoMouseGl(Ctrl* q, int event, Point p, int zdelta)
|
||||
{
|
||||
Rect rr = q->GetRect();
|
||||
if(rr.Contains(p)) {
|
||||
MouseEventGl(q, event, p, zdelta);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Ctrl::DoMouseGl(int event, Point p, int zdelta)
|
||||
{
|
||||
glmousepos = p;
|
||||
int a = event & Ctrl::ACTION;
|
||||
if(a == Ctrl::UP && Ctrl::ignoreclick) {
|
||||
EndIgnore();
|
||||
return;
|
||||
}
|
||||
else
|
||||
if(a == Ctrl::DOWN && ignoreclick)
|
||||
return;
|
||||
LLOG("### Mouse event: " << event << " position " << p << " zdelta " << zdelta << ", capture " << Upp::Name(captureCtrl));
|
||||
if(captureCtrl)
|
||||
MouseEventGl(captureCtrl->GetTopCtrl(), event, p, zdelta);
|
||||
else
|
||||
{
|
||||
bool processed = consoleActive && DoMouseGl((Ctrl*) &console, event, p, zdelta);
|
||||
|
||||
if(!processed && controlPanelActive)
|
||||
processed = DoMouseGl((Ctrl*) &infoPanel, event, p, zdelta);
|
||||
|
||||
if(!processed)
|
||||
{
|
||||
for(int i = topctrl.GetCount() - 1; i >= 0; i--) {
|
||||
Ptr<Ctrl> t = topctrl[i];
|
||||
if(t != (Ctrl*) &infoPanel && t != (Ctrl*) &console && t->GetRect().Contains(p) &&
|
||||
DoMouseGl(t, event, p, zdelta))
|
||||
return;
|
||||
}
|
||||
Ctrl *desktop = GetDesktop();
|
||||
if(desktop) {
|
||||
desktop->DispatchMouse(event, p, zdelta);
|
||||
desktop->PostInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Ctrl::DoKeyGl(dword key, int cnt)
|
||||
{
|
||||
if(key == K_CTRL_GRAVE)
|
||||
{
|
||||
controlPanelActive = !controlPanelActive;
|
||||
consoleActive = !consoleActive;
|
||||
return true;
|
||||
}
|
||||
else if(key == K_CTRL_F12)
|
||||
{
|
||||
consoleActive = !consoleActive;
|
||||
return true;
|
||||
}
|
||||
else if(key == K_CTRL_F11)
|
||||
{
|
||||
controlPanelActive = !controlPanelActive;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool b = DispatchKey(key, cnt);
|
||||
SyncCaret();
|
||||
Ctrl *desktop = GetDesktop();
|
||||
if(desktop)
|
||||
desktop->PostInput();
|
||||
return b;
|
||||
}
|
||||
|
||||
void Ctrl::SetCaret(int x, int y, int cx, int cy)
|
||||
{
|
||||
GuiLock __;
|
||||
caretx = x;
|
||||
carety = y;
|
||||
caretcx = cx;
|
||||
caretcy = cy;
|
||||
glCaretTm = GetTickCount();
|
||||
SyncCaret();
|
||||
}
|
||||
|
||||
void Ctrl::SyncCaret() {
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void Ctrl::CursorSync(Draw& w)
|
||||
{
|
||||
Rect cr = Null;
|
||||
if(focusCtrl && (((GetTickCount() - glCaretTm) / 500) & 1) == 0)
|
||||
cr = (RectC(focusCtrl->caretx, focusCtrl->carety, focusCtrl->caretcx, focusCtrl->caretcy)
|
||||
+ focusCtrl->GetScreenView().TopLeft()) & focusCtrl->GetScreenView();
|
||||
|
||||
glCaretRect = cr;
|
||||
if(!cr.IsEmpty())
|
||||
w.DrawRect(cr, Black);
|
||||
}
|
||||
|
||||
void Ctrl::MouseSync(Draw& w)
|
||||
{
|
||||
glCursorPos = GetMousePos() - glCursorImage.GetHotSpot();
|
||||
Size sz = glCursorImage.GetSize();
|
||||
w.DrawImage(glCursorPos.x, glCursorPos.y, sz.cx, sz.cy, glCursorImage);
|
||||
}
|
||||
|
||||
void Ctrl::SetMouseCursor(const Image& image)
|
||||
{
|
||||
GuiLock __;
|
||||
if(image.GetSerialId() != glCursorImage.GetSerialId()) {
|
||||
glCursorImage = image;
|
||||
glCursorPos = Null;
|
||||
}
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,103 +0,0 @@
|
|||
#include "Fbo.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
bool Fbo::Create(int width, int height, bool resize)
|
||||
{
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
|
||||
if(!resize)
|
||||
{
|
||||
glGenFramebuffers(1, &fbId);
|
||||
glGenRenderbuffers(1, &rbId);
|
||||
glGenTextures(1, &texId);
|
||||
}
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbId);
|
||||
glBindTexture(GL_TEXTURE_2D, texId);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, 0);
|
||||
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, rbId);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbId, 0);
|
||||
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbId);
|
||||
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbId);
|
||||
status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
||||
ready = true;
|
||||
|
||||
return status == GL_FRAMEBUFFER_COMPLETE;
|
||||
}
|
||||
|
||||
void Fbo::Resize(int width, int height)
|
||||
{
|
||||
if(ready)
|
||||
Create(width, height, true);
|
||||
}
|
||||
|
||||
void Fbo::Bind()
|
||||
{
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbId);
|
||||
}
|
||||
|
||||
void Fbo::Unbind()
|
||||
{
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
void Fbo::Clear()
|
||||
{
|
||||
glClearColor(0.f, 0.f, 0.f, 1.f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
}
|
||||
|
||||
void Fbo::BlitToScreen()
|
||||
{
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbId);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
}
|
||||
|
||||
void Fbo::BlitTo(const Fbo& fbo)
|
||||
{
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbId);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo.fbId);
|
||||
glBlitFramebuffer(0, 0, width, height, 0, 0, fbo.width, fbo.height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
}
|
||||
|
||||
void Fbo::Remove()
|
||||
{
|
||||
glDeleteTextures(1, &texId);
|
||||
glDeleteRenderbuffers(1, &rbId);
|
||||
glDeleteFramebuffers(1, &fbId);
|
||||
}
|
||||
|
||||
String Fbo::GetError()
|
||||
{
|
||||
switch(status)
|
||||
{
|
||||
case GL_FRAMEBUFFER_COMPLETE:
|
||||
return "Framebuffer complete";
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
|
||||
return "Framebuffer incomplete attachment";
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
|
||||
return "Framebuffer incomplete missing attachment";
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
|
||||
return "Framebuffer incomplete draw buffer";
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
|
||||
return "Framebuffer incomplete read buffer";
|
||||
case GL_FRAMEBUFFER_UNSUPPORTED:
|
||||
return "Framebuffer unsupported";
|
||||
default:
|
||||
return "Unknown error";
|
||||
}
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
#ifndef _CoreGl_Fbo_h_
|
||||
#define _CoreGl_Fbo_h_
|
||||
|
||||
#include <Core/Core.h>
|
||||
#include <Draw/Draw.h>
|
||||
#include "Gl.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
struct Fbo : Moveable<Fbo>
|
||||
{
|
||||
GLuint texId;
|
||||
GLuint fbId;
|
||||
GLuint rbId;
|
||||
GLenum status;
|
||||
int width;
|
||||
int height;
|
||||
bool ready;
|
||||
|
||||
bool Create(int width, int height, bool resize = false);
|
||||
void Resize(int width, int height);
|
||||
void Bind();
|
||||
void Unbind();
|
||||
void Clear();
|
||||
void BlitToScreen();
|
||||
void BlitTo(const Fbo& fbo);
|
||||
void Remove();
|
||||
String GetError();
|
||||
|
||||
Fbo() : width(0), height(0), ready(false)
|
||||
{}
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
#ifndef _CoreGl_FontGl_h_
|
||||
#define _CoreGl_FontGl_h_
|
||||
|
||||
struct OpenGLFont : Moveable<OpenGLFont>
|
||||
{
|
||||
float scaleW;
|
||||
float scaleH;
|
||||
float lineHeight;
|
||||
float base;
|
||||
float scale;
|
||||
|
||||
bool texturesUpdated;
|
||||
|
||||
float vtx[1024 * 4 * 2];
|
||||
float crd[1024 * 4 * 2];
|
||||
|
||||
struct CharInfo : Moveable<CharInfo>
|
||||
{
|
||||
int id;
|
||||
float x;
|
||||
float y;
|
||||
float width;
|
||||
float height;
|
||||
float xoffset;
|
||||
float yoffset;
|
||||
float xadvance;
|
||||
int page;
|
||||
};
|
||||
|
||||
struct BrcImage : Moveable<BrcImage>
|
||||
{
|
||||
const byte* data;
|
||||
int length;
|
||||
};
|
||||
|
||||
Vector<CharInfo> chars;
|
||||
VectorMap<int, VectorMap<int, float> > kerns;
|
||||
Vector<Image> images;
|
||||
Vector<int64> pages;
|
||||
bool preload;
|
||||
|
||||
OpenGLFont() : texturesUpdated(false), preload(false), scale(1.0f)
|
||||
{}
|
||||
|
||||
~OpenGLFont()
|
||||
{}
|
||||
|
||||
void LoadBrc(const byte* xml, const byte** imagesData, const int* imagesSize, int imagesCount);
|
||||
void Load(const String& fileName, bool preload = false);
|
||||
void Parse(const char* xml, bool parsePages);
|
||||
void UpdateTextures();
|
||||
void BuildVertices();
|
||||
};
|
||||
|
||||
Size GetTextSize(const wchar *text, const OpenGLFont& fi, int n);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
BINARY(resTahoma14Fnt, "tahoma14.fnt")
|
||||
BINARY(resTahoma14BoldFnt, "tahoma14b.fnt")
|
||||
BINARY(resTahoma14Img, "tahoma14.png")
|
||||
BINARY(resTahoma14BoldImg, "tahoma14b.png")
|
||||
|
|
@ -1,329 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Tahoma" size="64" bold="1" italic="0" charset="" unicode="1" stretchH="100" smooth="0" aa="1" padding="64,64,64,64" spacing="1,1" outline="0" />
|
||||
<common lineHeight="64" base="53" scaleW="1024" scaleH="1024" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="TahomaB_0.png" />
|
||||
</pages>
|
||||
<chars count="319">
|
||||
<char id="32" x="1006" y="16,25" width="16,125" height="16,125" xoffset="-8" yoffset="45" xadvance="15,5" page="0" chnl="15" />
|
||||
<char id="33" x="793" y="681,375" width="26,25" height="54,5" xoffset="-4" yoffset="6,5" xadvance="18,125" page="0" chnl="15" />
|
||||
<char id="34" x="654,875" y="783,75" width="35,375" height="31,25" xoffset="-4,75" yoffset="4,75" xadvance="25,875" page="0" chnl="15" />
|
||||
<char id="35" x="608,75" y="628,375" width="52,875" height="54,5" xoffset="-4,75" yoffset="6,5" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="36" x="862,5" y="206,25" width="45,25" height="66,125" xoffset="-5,5" yoffset="4,25" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="37" x="878,125" y="514,625" width="73,875" height="56,125" xoffset="-5,25" yoffset="5,75" xadvance="63,5" page="0" chnl="15" />
|
||||
<char id="38" x="952,125" y="513,625" width="56,625" height="56,125" xoffset="-5,75" yoffset="5,75" xadvance="41,375" page="0" chnl="15" />
|
||||
<char id="39" x="690,375" y="783,75" width="24,5" height="31,25" xoffset="-4,875" yoffset="4,75" xadvance="14,625" page="0" chnl="15" />
|
||||
<char id="40" x="291,75" y="208,125" width="35,125" height="66,875" xoffset="-5,125" yoffset="4,75" xadvance="24,125" page="0" chnl="15" />
|
||||
<char id="41" x="327" y="208" width="35,125" height="66,875" xoffset="-6" yoffset="4,75" xadvance="24,125" page="0" chnl="15" />
|
||||
<char id="42" x="160" y="795,25" width="41,875" height="41,375" xoffset="-4,625" yoffset="4,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="43" x="148,25" y="746" width="49,375" height="49,125" xoffset="-3" yoffset="11,375" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="44" x="523,625" y="787,375" width="30,625" height="35,75" xoffset="-8,125" yoffset="34,875" xadvance="16,625" page="0" chnl="15" />
|
||||
<char id="45" x="891,625" y="780,75" width="33,125" height="23,125" xoffset="-5,125" yoffset="24,375" xadvance="22,875" page="0" chnl="15" />
|
||||
<char id="46" x="830,5" y="781,25" width="25,125" height="26,125" xoffset="-4,25" yoffset="34,875" xadvance="16,625" page="0" chnl="15" />
|
||||
<char id="47" x="942" y="272,375" width="38,75" height="64,625" xoffset="-5" yoffset="4,75" xadvance="30,625" page="0" chnl="15" />
|
||||
<char id="48" x="152" y="578,375" width="45,75" height="56,125" xoffset="-6" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="49" x="688,25" y="682,875" width="41,5" height="54,5" xoffset="-3" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="50" x="755" y="571,375" width="44,25" height="55,25" xoffset="-4,125" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="51" x="289,125" y="577,25" width="44,625" height="56,125" xoffset="-5,375" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="52" x="138" y="636,625" width="47,625" height="54,625" xoffset="-6,875" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="53" x="598,375" y="572,875" width="44,25" height="55,375" xoffset="-4,875" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="54" x="197,875" y="577,875" width="45,5" height="56,125" xoffset="-5,5" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="55" x="475,875" y="685,875" width="44,375" height="54,5" xoffset="-5" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="56" x="486,375" y="518,375" width="46,5" height="56,25" xoffset="-6,375" yoffset="5,625" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="57" x="243,5" y="577,375" width="45,5" height="56,125" xoffset="-6,25" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="58" x="989,75" y="680,75" width="25,125" height="45,125" xoffset="-3" yoffset="15,875" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="59" x="983,875" y="569,875" width="30,625" height="54,75" xoffset="-6,875" yoffset="15,875" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="60" x="49,5" y="747,875" width="49,25" height="49,25" xoffset="-3,375" yoffset="11,375" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="61" x="554,375" y="787,25" width="47,75" height="35,5" xoffset="-2,25" yoffset="18,25" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="62" x="98,875" y="747" width="49,25" height="49,25" xoffset="-2,5" yoffset="11,375" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="63" x="843,625" y="571,125" width="41,125" height="55,25" xoffset="-5,125" yoffset="5,75" xadvance="30" page="0" chnl="15" />
|
||||
<char id="64" x="173,375" y="341,75" width="58,25" height="61,125" xoffset="-5" yoffset="5,75" xadvance="48,75" page="0" chnl="15" />
|
||||
<char id="65" x="767,25" y="626,75" width="52,5" height="54,5" xoffset="-8,125" yoffset="6,5" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="66" x="244,375" y="689,25" width="46,875" height="54,5" xoffset="-4" yoffset="6,5" xadvance="36,375" page="0" chnl="15" />
|
||||
<char id="67" x="104" y="580,375" width="47,875" height="56,125" xoffset="-6,25" yoffset="5,75" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="68" x="924,125" y="626,125" width="50,375" height="54,5" xoffset="-4" yoffset="6,5" xadvance="40,125" page="0" chnl="15" />
|
||||
<char id="69" x="520,375" y="685,75" width="42,125" height="54,5" xoffset="-4" yoffset="6,5" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="70" x="562,625" y="683" width="41,75" height="54,5" xoffset="-4" yoffset="6,5" xadvance="30,75" page="0" chnl="15" />
|
||||
<char id="71" x="53,375" y="581,25" width="50,5" height="56,125" xoffset="-6,25" yoffset="5,75" xadvance="39,5" page="0" chnl="15" />
|
||||
<char id="72" x="98,75" y="692,375" width="48,5" height="54,5" xoffset="-4" yoffset="6,5" xadvance="40,5" page="0" chnl="15" />
|
||||
<char id="73" x="729,875" y="682,75" width="36,625" height="54,5" xoffset="-5,5" yoffset="6,5" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="74" x="944,875" y="570,875" width="38,875" height="55,125" xoffset="-7,875" yoffset="6,5" xadvance="26,5" page="0" chnl="15" />
|
||||
<char id="75" x="0" y="693,25" width="49,75" height="54,5" xoffset="-4" yoffset="6,5" xadvance="36,875" page="0" chnl="15" />
|
||||
<char id="76" x="646,375" y="683" width="41,75" height="54,5" xoffset="-4" yoffset="6,5" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="77" x="443,5" y="631,25" width="55,375" height="54,5" xoffset="-4" yoffset="6,5" xadvance="47,375" page="0" chnl="15" />
|
||||
<char id="78" x="974,625" y="626,125" width="48,875" height="54,5" xoffset="-4" yoffset="6,5" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="79" x="0" y="582,125" width="53,25" height="56,125" xoffset="-6,25" yoffset="5,75" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="80" x="430,125" y="686,125" width="45,625" height="54,5" xoffset="-4" yoffset="6,5" xadvance="34,875" page="0" chnl="15" />
|
||||
<char id="81" x="663,625" y="206,5" width="53,25" height="66,125" xoffset="-6,25" yoffset="5,75" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="82" x="872,375" y="626,5" width="51,625" height="54,5" xoffset="-4" yoffset="6,5" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="83" x="333,875" y="576,5" width="46,75" height="56" xoffset="-6,125" yoffset="5,75" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="84" x="147,375" y="691,375" width="48,375" height="54,5" xoffset="-8" yoffset="6,5" xadvance="32,5" page="0" chnl="15" />
|
||||
<char id="85" x="550,125" y="572,875" width="48,125" height="55,375" xoffset="-4,5" yoffset="6,5" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="86" x="714,625" y="628,125" width="52,5" height="54,5" xoffset="-8,375" yoffset="6,5" xadvance="35,75" page="0" chnl="15" />
|
||||
<char id="87" x="185,75" y="634,625" width="69" height="54,5" xoffset="-7,25" yoffset="6,5" xadvance="54,5" page="0" chnl="15" />
|
||||
<char id="88" x="661,75" y="628,25" width="52,75" height="54,5" xoffset="-8,25" yoffset="6,5" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="89" x="819,875" y="626,75" width="52,375" height="54,5" xoffset="-8,5" yoffset="6,5" xadvance="35,5" page="0" chnl="15" />
|
||||
<char id="90" x="291,375" y="688,25" width="46,5" height="54,5" xoffset="-6,625" yoffset="6,5" xadvance="33" page="0" chnl="15" />
|
||||
<char id="91" x="584,5" y="207,25" width="32,25" height="66,375" xoffset="-3,75" yoffset="4,75" xadvance="24,125" page="0" chnl="15" />
|
||||
<char id="92" x="903,125" y="272,5" width="38,75" height="64,625" xoffset="-3" yoffset="4,75" xadvance="30,625" page="0" chnl="15" />
|
||||
<char id="93" x="552,125" y="207,25" width="32,25" height="66,375" xoffset="-4,5" yoffset="4,75" xadvance="24,125" page="0" chnl="15" />
|
||||
<char id="94" x="386,75" y="789,75" width="50,375" height="37,125" xoffset="-3,5" yoffset="6,5" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="95" x="958,125" y="779,5" width="50,5" height="21,25" xoffset="-8,375" yoffset="48,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="96" x="745,25" y="782,625" width="29,875" height="26,125" xoffset="-1" yoffset="1,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="97" x="420" y="742,75" width="43,125" height="46,875" xoffset="-6,625" yoffset="15" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="98" x="845,25" y="457,625" width="44,5" height="56,875" xoffset="-4,5" yoffset="4,75" xadvance="33,5" page="0" chnl="15" />
|
||||
<char id="99" x="508,125" y="740,5" width="41,75" height="46,75" xoffset="-6,625" yoffset="15" xadvance="28" page="0" chnl="15" />
|
||||
<char id="100" x="532,125" y="459,25" width="44,5" height="57,125" xoffset="-6,625" yoffset="4,75" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="101" x="463,25" y="740,75" width="44,75" height="46,75" xoffset="-6,625" yoffset="15" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="102" x="260,25" y="520,625" width="37,5" height="56,5" xoffset="-7,5" yoffset="4,5" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="103" x="889,875" y="457" width="44,5" height="56,875" xoffset="-6,625" yoffset="15" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="104" x="624,75" y="516,375" width="43,125" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="105" x="407,375" y="518,875" width="25,625" height="56,375" xoffset="-4,75" yoffset="4,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="106" x="818,625" y="139,125" width="33,875" height="67,25" xoffset="-10,125" yoffset="4,625" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="107" x="579,625" y="516,5" width="45" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="108" x="853" y="514,625" width="25" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="16" page="0" chnl="15" />
|
||||
<char id="109" x="591" y="737,625" width="59,75" height="46" xoffset="-4,625" yoffset="15" xadvance="50,5" page="0" chnl="15" />
|
||||
<char id="110" x="694,125" y="737,5" width="43,125" height="46" xoffset="-4,5" yoffset="15" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="111" x="373,875" y="742,75" width="46" height="46,875" xoffset="-6,625" yoffset="15" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="112" x="172,375" y="521,125" width="44,5" height="56,625" xoffset="-4,5" yoffset="15" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="113" x="127,75" y="521,625" width="44,5" height="56,625" xoffset="-6,625" yoffset="15" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="114" x="981,625" y="733,5" width="35,5" height="45,125" xoffset="-4,5" yoffset="15,875" xadvance="23" page="0" chnl="15" />
|
||||
<char id="115" x="550" y="740,375" width="40,875" height="46,75" xoffset="-6,5" yoffset="15" xadvance="27,25" page="0" chnl="15" />
|
||||
<char id="116" x="819,375" y="681,375" width="37,25" height="54" xoffset="-7,5" yoffset="7,625" xadvance="22" page="0" chnl="15" />
|
||||
<char id="117" x="650,875" y="737,625" width="43,125" height="46" xoffset="-4,75" yoffset="15,875" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="118" x="848,25" y="735,5" width="46,625" height="45,125" xoffset="-8" yoffset="15,875" xadvance="30,625" page="0" chnl="15" />
|
||||
<char id="119" x="737,375" y="737,375" width="62,375" height="45,125" xoffset="-7,625" yoffset="15,875" xadvance="47,125" page="0" chnl="15" />
|
||||
<char id="120" x="799,875" y="736" width="48,25" height="45,125" xoffset="-8,125" yoffset="15,875" xadvance="32" page="0" chnl="15" />
|
||||
<char id="121" x="416,375" y="575,375" width="46,75" height="55,75" xoffset="-8,125" yoffset="15,875" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="122" x="940,125" y="734,25" width="41,375" height="45,125" xoffset="-6,75" yoffset="15,875" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="123" x="463,875" y="207,375" width="44" height="66,375" xoffset="-6,5" yoffset="4,75" xadvance="33" page="0" chnl="15" />
|
||||
<char id="124" x="616,875" y="207,25" width="23,25" height="66,375" xoffset="5,25" yoffset="4,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="125" x="508" y="207,375" width="44" height="66,375" xoffset="-4,5" yoffset="4,75" xadvance="33" page="0" chnl="15" />
|
||||
<char id="126" x="602,25" y="783,75" width="52,5" height="33" xoffset="-4,5" yoffset="19,375" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="160" x="1002,125" y="0" width="16,125" height="16,125" xoffset="-8" yoffset="45" xadvance="15,5" page="0" chnl="15" />
|
||||
<char id="161" x="766,625" y="682,75" width="26,25" height="54,5" xoffset="-4" yoffset="6,5" xadvance="18,125" page="0" chnl="15" />
|
||||
<char id="162" x="44,75" y="342,25" width="42" height="63,375" xoffset="-4,125" yoffset="6,875" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="163" x="799,375" y="571,375" width="44,125" height="55,25" xoffset="-4,875" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="164" x="25,125" y="797,875" width="43,75" height="43,75" xoffset="-5" yoffset="14" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="165" x="49,875" y="693,25" width="48,75" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="166" x="640,25" y="207,25" width="23,25" height="66,375" xoffset="5,25" yoffset="4,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="167" x="636,875" y="273,75" width="44,375" height="65,375" xoffset="-5,25" yoffset="5,75" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="168" x="855,75" y="780,75" width="35,75" height="23,125" xoffset="-3,5" yoffset="4,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="169" x="292,625" y="341,25" width="60,75" height="60,75" xoffset="-5,75" yoffset="5,75" xadvance="49,25" page="0" chnl="15" />
|
||||
<char id="170" x="314,875" y="789,875" width="37,75" height="40,5" xoffset="-6,125" yoffset="5,75" xadvance="26,875" page="0" chnl="15" />
|
||||
<char id="171" x="114,5" y="796,375" width="45,375" height="42,375" xoffset="-4,625" yoffset="14,75" xadvance="37,25" page="0" chnl="15" />
|
||||
<char id="172" x="474,375" y="787,625" width="49,125" height="35,875" xoffset="-3" yoffset="23,875" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="173" x="924,875" y="779,5" width="33,125" height="23,125" xoffset="-5,125" yoffset="24,375" xadvance="22,875" page="0" chnl="15" />
|
||||
<char id="174" x="231,75" y="341,625" width="60,75" height="60,75" xoffset="-5,75" yoffset="5,75" xadvance="49,25" page="0" chnl="15" />
|
||||
<char id="175" x="0" y="843,125" width="50,5" height="21,25" xoffset="-8,375" yoffset="-2,375" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="176" x="437,25" y="789,75" width="37" height="36,875" xoffset="-4,75" yoffset="5,75" xadvance="27,5" page="0" chnl="15" />
|
||||
<char id="177" x="894,125" y="681,125" width="49,375" height="53" xoffset="-3" yoffset="8" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="178" x="278,25" y="790,875" width="36,5" height="40,625" xoffset="-3,375" yoffset="5,75" xadvance="28,625" page="0" chnl="15" />
|
||||
<char id="179" x="202" y="791,125" width="36" height="41,25" xoffset="-3,625" yoffset="5,75" xadvance="28,625" page="0" chnl="15" />
|
||||
<char id="180" x="775,25" y="782,625" width="29,875" height="26,125" xoffset="0,875" yoffset="1,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="181" x="463,25" y="575,25" width="43,5" height="55,75" xoffset="-4,5" yoffset="15,875" xadvance="34,5" page="0" chnl="15" />
|
||||
<char id="182" x="0" y="342,25" width="44,625" height="63,875" xoffset="-6,25" yoffset="6,5" xadvance="33,75" page="0" chnl="15" />
|
||||
<char id="183" x="805,25" y="781,25" width="25,125" height="26,125" xoffset="-3" yoffset="15,875" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="184" x="715" y="783,625" width="30,125" height="27,375" xoffset="-0,625" yoffset="44,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="185" x="352,75" y="789,875" width="33,875" height="39,875" xoffset="-2,125" yoffset="6,5" xadvance="28,625" page="0" chnl="15" />
|
||||
<char id="186" x="238,125" y="791,125" width="40" height="40,625" xoffset="-5,375" yoffset="5,75" xadvance="28,625" page="0" chnl="15" />
|
||||
<char id="187" x="69" y="797,25" width="45,375" height="42,375" xoffset="-3,25" yoffset="14,75" xadvance="37,25" page="0" chnl="15" />
|
||||
<char id="188" x="69,75" y="637,5" width="68,125" height="54,75" xoffset="-3,75" yoffset="6,25" xadvance="59,75" page="0" chnl="15" />
|
||||
<char id="189" x="0" y="638,375" width="69,625" height="54,75" xoffset="-4,25" yoffset="6,25" xadvance="59,75" page="0" chnl="15" />
|
||||
<char id="190" x="684" y="572,75" width="70,875" height="55,25" xoffset="-4,375" yoffset="5,75" xadvance="59,75" page="0" chnl="15" />
|
||||
<char id="191" x="642,75" y="572,75" width="41,125" height="55,375" xoffset="-6" yoffset="6,5" xadvance="30" page="0" chnl="15" />
|
||||
<char id="192" x="113,75" y="70,375" width="52,5" height="69" xoffset="-8,125" yoffset="-8" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="193" x="166,375" y="70,125" width="52,5" height="69" xoffset="-8,125" yoffset="-8" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="194" x="255,75" y="139,25" width="52,5" height="68,75" xoffset="-8,125" yoffset="-7,75" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="195" x="925,125" y="139" width="52,5" height="67" xoffset="-8,125" yoffset="-6" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="196" x="907,875" y="206,25" width="52,5" height="66" xoffset="-8,125" yoffset="-5" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="197" x="960,5" y="206,125" width="52,5" height="66" xoffset="-8,125" yoffset="-5" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="198" x="321,625" y="633,5" width="66,25" height="54,5" xoffset="-8,5" yoffset="6,5" xadvance="52,375" page="0" chnl="15" />
|
||||
<char id="199" x="767,625" y="206,5" width="47,875" height="66,125" xoffset="-6,25" yoffset="5,75" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="200" x="757,125" y="70" width="42,125" height="69" xoffset="-4" yoffset="-8" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="201" x="799,375" y="70" width="42,125" height="69" xoffset="-4" yoffset="-8" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="202" x="883,875" y="69,875" width="42,125" height="69" xoffset="-4" yoffset="-8" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="203" x="141,375" y="275,625" width="42,125" height="66" xoffset="-4" yoffset="-5" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="204" x="36,75" y="139,875" width="36,625" height="69" xoffset="-5,5" yoffset="-8" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="205" x="0" y="139,875" width="36,625" height="69" xoffset="-5,5" yoffset="-8" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="206" x="968" y="69,75" width="37,875" height="69" xoffset="-6,125" yoffset="-8" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="207" x="183,625" y="275,5" width="36,625" height="66" xoffset="-5,5" yoffset="-5" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="208" x="499" y="631,125" width="54,75" height="54,5" xoffset="-7,5" yoffset="6,5" xadvance="41" page="0" chnl="15" />
|
||||
<char id="209" x="642,375" y="139,125" width="48,875" height="67,25" xoffset="-4" yoffset="-6,25" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="210" x="326,125" y="0" width="53,25" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="211" x="272,75" y="0" width="53,25" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="212" x="219,375" y="0" width="53,25" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="213" x="360,875" y="139,125" width="53,25" height="68,125" xoffset="-6,25" yoffset="-6,25" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="214" x="46,875" y="209" width="53,25" height="66,875" xoffset="-6,25" yoffset="-5" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="215" x="197,75" y="743,875" width="47,125" height="47,125" xoffset="-1,875" yoffset="12,375" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="216" x="353,5" y="341" width="53,25" height="60,5" xoffset="-6,25" yoffset="3,875" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="217" x="580" y="0" width="48,125" height="69,875" xoffset="-4,5" yoffset="-8" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="218" x="531,75" y="0" width="48,125" height="69,875" xoffset="-4,5" yoffset="-8" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="219" x="483,5" y="0" width="48,125" height="69,875" xoffset="-4,5" yoffset="-8" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="220" x="150,875" y="208,5" width="48,125" height="66,875" xoffset="-4,5" yoffset="-5" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="221" x="308,375" y="139,125" width="52,375" height="68,75" xoffset="-8,5" yoffset="-7,75" xadvance="35,5" page="0" chnl="15" />
|
||||
<char id="222" x="384,25" y="688,125" width="45,75" height="54,5" xoffset="-4" yoffset="6,5" xadvance="34,875" page="0" chnl="15" />
|
||||
<char id="223" x="799,75" y="457,75" width="45,375" height="56,875" xoffset="-4,5" yoffset="4,5" xadvance="34,25" page="0" chnl="15" />
|
||||
<char id="224" x="591,375" y="339,25" width="43,125" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="225" x="850,875" y="338" width="43,125" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="226" x="634,625" y="339,25" width="43,125" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="227" x="924,375" y="398" width="43,125" height="58,5" xoffset="-6,625" yoffset="3,375" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="228" x="202,375" y="463,25" width="43,125" height="57,25" xoffset="-6,625" yoffset="4,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="229" x="130,125" y="342,125" width="43,125" height="61,25" xoffset="-6,625" yoffset="0,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="230" x="310,625" y="742,875" width="63,125" height="46,875" xoffset="-6,625" yoffset="15" xadvance="49,625" page="0" chnl="15" />
|
||||
<char id="231" x="0" y="525,125" width="41,75" height="56,875" xoffset="-6,625" yoffset="15" xadvance="28" page="0" chnl="15" />
|
||||
<char id="232" x="0" y="406,25" width="44,75" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="233" x="939" y="337,25" width="44,75" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="234" x="894,125" y="337,75" width="44,75" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="235" x="487,25" y="459,625" width="44,75" height="57,125" xoffset="-6,625" yoffset="4,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="236" x="670,75" y="399,625" width="29,875" height="59,375" xoffset="-8,125" yoffset="1,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="237" x="640,75" y="399,625" width="29,875" height="59,375" xoffset="-5,625" yoffset="1,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="238" x="606,5" y="399,625" width="34,125" height="59,375" xoffset="-9,125" yoffset="1,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="239" x="373,375" y="518,875" width="33,875" height="56,375" xoffset="-8,875" yoffset="4,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="240" x="75,5" y="466" width="46,125" height="57,5" xoffset="-6,625" yoffset="4,375" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="241" x="32,25" y="466,5" width="43,125" height="57,625" xoffset="-4,5" yoffset="3,375" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="242" x="499,125" y="339,375" width="46" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="243" x="453" y="339,75" width="46" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="244" x="406,875" y="339,75" width="46" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="245" x="878,25" y="398,375" width="46" height="58,5" xoffset="-6,625" yoffset="3,375" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="246" x="156,25" y="463,75" width="46" height="57,25" xoffset="-6,625" yoffset="4,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="247" x="0" y="747,875" width="49,375" height="49,875" xoffset="-3" yoffset="11" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="248" x="943,625" y="680,75" width="46" height="52,625" xoffset="-6,625" yoffset="12,5" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="249" x="677,875" y="339,25" width="43,125" height="60,25" xoffset="-4,75" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="250" x="721,125" y="338,25" width="43,125" height="60,25" xoffset="-4,75" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="251" x="764,375" y="338" width="43,125" height="60,25" xoffset="-4,75" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="252" x="245,625" y="463,25" width="43,125" height="57,25" xoffset="-4,75" yoffset="4,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="253" x="172,5" y="0" width="46,75" height="70" xoffset="-8,125" yoffset="1,625" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="254" x="247,125" y="208,25" width="44,5" height="66,875" xoffset="-4,5" yoffset="4,75" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="255" x="0" y="209" width="46,75" height="67" xoffset="-8,125" yoffset="4,625" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="256" x="257,125" y="275,25" width="52,5" height="65,875" xoffset="-8,125" yoffset="-4,875" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="257" x="620" y="459,125" width="43,125" height="57,125" xoffset="-6,625" yoffset="4,75" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="258" x="510,75" y="139,125" width="52,5" height="68" xoffset="-8,125" yoffset="-7" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="259" x="746,875" y="398,625" width="43,125" height="59,25" xoffset="-6,625" yoffset="2,625" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="260" x="723,25" y="272,75" width="52,5" height="65,125" xoffset="-8,125" yoffset="6,5" xadvance="36,25" page="0" chnl="15" />
|
||||
<char id="261" x="217" y="520,625" width="43,125" height="56,625" xoffset="-6,625" yoffset="15" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="262" x="724,5" y="0" width="47,875" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="263" x="174" y="403" width="41,75" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="28" page="0" chnl="15" />
|
||||
<char id="264" x="676,5" y="0" width="47,875" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="265" x="131,875" y="403,5" width="42" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="28" page="0" chnl="15" />
|
||||
<char id="266" x="199,125" y="208,5" width="47,875" height="66,875" xoffset="-6,25" yoffset="-5" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="267" x="663,25" y="459,125" width="41,75" height="57,125" xoffset="-6,625" yoffset="4,625" xadvance="28" page="0" chnl="15" />
|
||||
<char id="268" x="772,5" y="0" width="47,875" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="269" x="89,75" y="403,75" width="42" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="28" page="0" chnl="15" />
|
||||
<char id="270" x="375" y="70" width="50,375" height="69" xoffset="-4" yoffset="-8" xadvance="40,125" page="0" chnl="15" />
|
||||
<char id="271" x="288,875" y="462,75" width="59,25" height="57,125" xoffset="-6,625" yoffset="4,75" xadvance="43,375" page="0" chnl="15" />
|
||||
<char id="272" x="553,875" y="628,375" width="54,75" height="54,5" xoffset="-7,5" yoffset="6,5" xadvance="41" page="0" chnl="15" />
|
||||
<char id="273" x="348,25" y="461,625" width="47,875" height="57,125" xoffset="-6,625" yoffset="4,75" xadvance="33,125" page="0" chnl="15" />
|
||||
<char id="274" x="309,75" y="275,125" width="42,125" height="65,875" xoffset="-4" yoffset="-4,875" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="275" x="705,125" y="459" width="44,75" height="57" xoffset="-6,625" yoffset="4,75" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="276" x="563,375" y="139,125" width="42,125" height="68" xoffset="-4" yoffset="-7" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="277" x="833,375" y="398,375" width="44,75" height="59,125" xoffset="-6,625" yoffset="2,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="278" x="99,125" y="276" width="42,125" height="66" xoffset="-4" yoffset="-5" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="279" x="442,375" y="461,125" width="44,75" height="57,125" xoffset="-6,625" yoffset="4,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="280" x="824,125" y="272,75" width="42,125" height="65,125" xoffset="-4" yoffset="6,5" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="281" x="82,875" y="523,625" width="44,75" height="56,625" xoffset="-6,625" yoffset="15" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="282" x="841,625" y="69,875" width="42,125" height="69" xoffset="-4" yoffset="-8" xadvance="32,625" page="0" chnl="15" />
|
||||
<char id="283" x="44,875" y="405,75" width="44,75" height="60,125" xoffset="-6,625" yoffset="1,625" xadvance="31,5" page="0" chnl="15" />
|
||||
<char id="284" x="432,875" y="0" width="50,5" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="39,5" page="0" chnl="15" />
|
||||
<char id="285" x="44,625" y="0" width="44,5" height="70,25" xoffset="-6,625" yoffset="1,625" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="286" x="156,875" y="139,5" width="50,5" height="68,875" xoffset="-6,25" yoffset="-7" xadvance="39,5" page="0" chnl="15" />
|
||||
<char id="287" x="0" y="70,5" width="44,5" height="69,25" xoffset="-6,625" yoffset="2,625" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="288" x="100,25" y="208,625" width="50,5" height="66,875" xoffset="-6,25" yoffset="-5" xadvance="39,5" page="0" chnl="15" />
|
||||
<char id="289" x="691,375" y="139,125" width="44,5" height="67,25" xoffset="-6,625" yoffset="4,625" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="290" x="717" y="206,5" width="50,5" height="66,125" xoffset="-6,25" yoffset="5,75" xadvance="39,5" page="0" chnl="15" />
|
||||
<char id="291" x="0" y="0" width="44,5" height="70,375" xoffset="-6,625" yoffset="1,5" xadvance="33,375" page="0" chnl="15" />
|
||||
<char id="292" x="523,5" y="70" width="48,5" height="69" xoffset="-4" yoffset="-8" xadvance="40,5" page="0" chnl="15" />
|
||||
<char id="293" x="713,875" y="70" width="43,125" height="69" xoffset="-4,5" yoffset="-8" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="294" x="388" y="631,5" width="55,375" height="54,5" xoffset="-7" yoffset="6,5" xadvance="41,375" page="0" chnl="15" />
|
||||
<char id="295" x="533" y="516,5" width="46,5" height="56,25" xoffset="-8,125" yoffset="4,75" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="296" x="779,75" y="139,125" width="38,75" height="67,25" xoffset="-6,5" yoffset="-6,25" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="297" x="121,75" y="464" width="34,375" height="57,5" xoffset="-9,125" yoffset="3,5" xadvance="16" page="0" chnl="15" />
|
||||
<char id="298" x="352" y="275" width="36,625" height="65,875" xoffset="-5,5" yoffset="-4,875" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="299" x="821,625" y="514,75" width="31,25" height="56,25" xoffset="-7,625" yoffset="4,75" xadvance="16" page="0" chnl="15" />
|
||||
<char id="300" x="605,625" y="139,125" width="36,625" height="68" xoffset="-5,5" yoffset="-7" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="301" x="0" y="466,5" width="32,125" height="58,5" xoffset="-8" yoffset="2,5" xadvance="16" page="0" chnl="15" />
|
||||
<char id="302" x="866,375" y="272,5" width="36,625" height="65,125" xoffset="-5,5" yoffset="6,5" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="303" x="977,75" y="138,875" width="26,375" height="67" xoffset="-5,5" yoffset="4,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="304" x="220,375" y="275,5" width="36,625" height="66" xoffset="-5,5" yoffset="-5" xadvance="25,625" page="0" chnl="15" />
|
||||
<char id="305" x="0" y="797,875" width="25" height="45,125" xoffset="-4,5" yoffset="15,875" xadvance="16" page="0" chnl="15" />
|
||||
<char id="306" x="884,875" y="570,875" width="59,875" height="55,125" xoffset="-5,5" yoffset="6,5" xadvance="49,875" page="0" chnl="15" />
|
||||
<char id="307" x="736" y="139,125" width="43,625" height="67,25" xoffset="-4,75" yoffset="4,625" xadvance="34,375" page="0" chnl="15" />
|
||||
<char id="308" x="961,125" y="0" width="40,875" height="69,625" xoffset="-7,875" yoffset="-8" xadvance="26,5" page="0" chnl="15" />
|
||||
<char id="309" x="89,25" y="0" width="36,25" height="70,25" xoffset="-10,125" yoffset="1,625" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="310" x="440,5" y="274,25" width="49,75" height="65,375" xoffset="-4" yoffset="6,5" xadvance="36,875" page="0" chnl="15" />
|
||||
<char id="311" x="852,625" y="139" width="45" height="67,125" xoffset="-4,5" yoffset="4,75" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="312" x="895" y="734,25" width="45" height="45,125" xoffset="-4,5" yoffset="15,875" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="313" x="926,125" y="69,875" width="41,75" height="69" xoffset="-4" yoffset="-8" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="314" x="73,5" y="139,5" width="29,875" height="69" xoffset="-5,5" yoffset="-8" xadvance="16" page="0" chnl="15" />
|
||||
<char id="315" x="681,375" y="272,75" width="41,75" height="65,375" xoffset="-4" yoffset="6,5" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="316" x="897,75" y="139" width="27,25" height="67,125" xoffset="-5,5" yoffset="4,75" xadvance="16" page="0" chnl="15" />
|
||||
<char id="317" x="668" y="516,375" width="43" height="56,25" xoffset="-4" yoffset="4,75" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="318" x="711,125" y="516,125" width="39,75" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="26" page="0" chnl="15" />
|
||||
<char id="319" x="604,5" y="683" width="41,75" height="54,5" xoffset="-4" yoffset="6,5" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="320" x="751" y="515" width="37,5" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="25,875" page="0" chnl="15" />
|
||||
<char id="321" x="338" y="688,125" width="46,125" height="54,5" xoffset="-7,5" yoffset="6,5" xadvance="31,25" page="0" chnl="15" />
|
||||
<char id="322" x="788,625" y="515" width="32,875" height="56,25" xoffset="-7,5" yoffset="4,75" xadvance="17,75" page="0" chnl="15" />
|
||||
<char id="323" x="425,5" y="70" width="48,875" height="69" xoffset="-4" yoffset="-8" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="324" x="401,375" y="401,625" width="43,125" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="325" x="490,375" y="273,875" width="48,875" height="65,375" xoffset="-4" yoffset="6,5" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="326" x="934,5" y="456,625" width="43,125" height="56,875" xoffset="-4,5" yoffset="15" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="327" x="474,5" y="70" width="48,875" height="69" xoffset="-4" yoffset="-8" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="328" x="444,625" y="400,125" width="43,125" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="329" x="433,125" y="518,875" width="53,125" height="56,25" xoffset="-9" yoffset="4,75" xadvance="39,375" page="0" chnl="15" />
|
||||
<char id="330" x="539,375" y="273,875" width="48,875" height="65,375" xoffset="-4" yoffset="6,5" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="331" x="977,75" y="456,125" width="43,125" height="56,875" xoffset="-4,5" yoffset="15" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="332" x="362,25" y="207,375" width="53,25" height="66,75" xoffset="-6,25" yoffset="-4,875" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="333" x="396,25" y="461,625" width="46" height="57,125" xoffset="-6,625" yoffset="4,75" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="334" x="103,5" y="139,5" width="53,25" height="68,875" xoffset="-6,25" yoffset="-7" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="335" x="700,75" y="399,625" width="46" height="59,25" xoffset="-6,625" yoffset="2,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="336" x="379,5" y="0" width="53,25" height="69,875" xoffset="-6,25" yoffset="-8" xadvance="40,75" page="0" chnl="15" />
|
||||
<char id="337" x="545,25" y="339,375" width="46" height="60,25" xoffset="-6,625" yoffset="1,625" xadvance="32,75" page="0" chnl="15" />
|
||||
<char id="338" x="254,875" y="633,625" width="66,625" height="54,5" xoffset="-6,25" yoffset="6,5" xadvance="55" page="0" chnl="15" />
|
||||
<char id="339" x="245" y="743,875" width="65,5" height="46,875" xoffset="-6,625" yoffset="15" xadvance="52,25" page="0" chnl="15" />
|
||||
<char id="340" x="323,25" y="70" width="51,625" height="69" xoffset="-4" yoffset="-8" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="341" x="570,875" y="399,75" width="35,5" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="23" page="0" chnl="15" />
|
||||
<char id="342" x="388,75" y="274,25" width="51,625" height="65,375" xoffset="-4" yoffset="6,5" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="343" x="380,75" y="575,375" width="35,5" height="56" xoffset="-4,5" yoffset="15,875" xadvance="23" page="0" chnl="15" />
|
||||
<char id="344" x="271,5" y="70" width="51,625" height="69" xoffset="-4" yoffset="-8" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="345" x="983,875" y="336,625" width="38,875" height="59,375" xoffset="-6,625" yoffset="1,625" xadvance="23" page="0" chnl="15" />
|
||||
<char id="346" x="867,375" y="0" width="46,75" height="69,75" xoffset="-6,125" yoffset="-8" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="347" x="256,875" y="402,5" width="40,875" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,25" page="0" chnl="15" />
|
||||
<char id="348" x="820,5" y="0" width="46,75" height="69,75" xoffset="-6,125" yoffset="-8" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="349" x="215,875" y="403" width="40,875" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,25" page="0" chnl="15" />
|
||||
<char id="350" x="815,625" y="206,5" width="46,75" height="66,125" xoffset="-6,125" yoffset="5,75" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="351" x="41,875" y="524,25" width="40,875" height="56,875" xoffset="-6,5" yoffset="15" xadvance="27,25" page="0" chnl="15" />
|
||||
<char id="352" x="914,25" y="0" width="46,75" height="69,75" xoffset="-6,125" yoffset="-8" xadvance="33,625" page="0" chnl="15" />
|
||||
<char id="353" x="297,875" y="402,125" width="40,875" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,25" page="0" chnl="15" />
|
||||
<char id="354" x="588,375" y="273,75" width="48,375" height="65,375" xoffset="-8" yoffset="6,5" xadvance="32,5" page="0" chnl="15" />
|
||||
<char id="355" x="980,875" y="272,25" width="37,25" height="64,25" xoffset="-7,5" yoffset="7,625" xadvance="22" page="0" chnl="15" />
|
||||
<char id="356" x="572,125" y="70" width="48,375" height="69" xoffset="-8" yoffset="-8" xadvance="32,5" page="0" chnl="15" />
|
||||
<char id="357" x="750" y="458" width="49,625" height="56,875" xoffset="-7,5" yoffset="4,75" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="358" x="195,875" y="689,25" width="48,375" height="54,5" xoffset="-8" yoffset="6,5" xadvance="32,5" page="0" chnl="15" />
|
||||
<char id="359" x="856,75" y="681,375" width="37,25" height="54" xoffset="-7,5" yoffset="7,625" xadvance="22" page="0" chnl="15" />
|
||||
<char id="360" x="414,25" y="139,125" width="48,125" height="68,125" xoffset="-4,5" yoffset="-6,25" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="361" x="967,625" y="397,5" width="43,125" height="58,5" xoffset="-4,75" yoffset="3,375" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="362" x="415,625" y="207,375" width="48,125" height="66,75" xoffset="-4,5" yoffset="-4,875" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="363" x="576,75" y="459,25" width="43,125" height="57,125" xoffset="-4,75" yoffset="4,75" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="364" x="207,5" y="139,25" width="48,125" height="68,875" xoffset="-4,5" yoffset="-7" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="365" x="790,125" y="398,375" width="43,125" height="59,25" xoffset="-4,75" yoffset="2,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="366" x="462,5" y="139,125" width="48,125" height="68,125" xoffset="-4,5" yoffset="-6,25" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="367" x="86,875" y="342,125" width="43,125" height="61,5" xoffset="-4,75" yoffset="0,375" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="368" x="628,25" y="0" width="48,125" height="69,875" xoffset="-4,5" yoffset="-8" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="369" x="807,625" y="338" width="43,125" height="60,25" xoffset="-4,75" yoffset="1,625" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="370" x="775,875" y="272,75" width="48,125" height="65,125" xoffset="-4,5" yoffset="6,5" xadvance="39,125" page="0" chnl="15" />
|
||||
<char id="371" x="506,875" y="574,75" width="43,125" height="55,75" xoffset="-4,75" yoffset="15,875" xadvance="33,875" page="0" chnl="15" />
|
||||
<char id="372" x="44,625" y="70,375" width="69" height="69" xoffset="-7,25" yoffset="-8" xadvance="54,5" page="0" chnl="15" />
|
||||
<char id="373" x="338,875" y="402,125" width="62,375" height="59,375" xoffset="-7,625" yoffset="1,625" xadvance="47,125" page="0" chnl="15" />
|
||||
<char id="374" x="219" y="70,125" width="52,375" height="69" xoffset="-8,5" yoffset="-8" xadvance="35,5" page="0" chnl="15" />
|
||||
<char id="375" x="125,625" y="0" width="46,75" height="70" xoffset="-8,125" yoffset="1,625" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="376" x="0" y="276,125" width="52,375" height="66" xoffset="-8,5" yoffset="-5" xadvance="35,5" page="0" chnl="15" />
|
||||
<char id="377" x="667,25" y="70" width="46,5" height="69" xoffset="-6,625" yoffset="-8" xadvance="33" page="0" chnl="15" />
|
||||
<char id="378" x="529,375" y="399,75" width="41,375" height="59,375" xoffset="-6,75" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="379" x="52,5" y="276" width="46,5" height="66" xoffset="-6,625" yoffset="-5" xadvance="33" page="0" chnl="15" />
|
||||
<char id="380" x="331,875" y="520" width="41,375" height="56,375" xoffset="-6,75" yoffset="4,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="381" x="620,625" y="70" width="46,5" height="69" xoffset="-6,625" yoffset="-8" xadvance="33" page="0" chnl="15" />
|
||||
<char id="382" x="487,875" y="400,125" width="41,375" height="59,375" xoffset="-6,75" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="383" x="297,875" y="520" width="33,875" height="56,5" xoffset="-4,5" yoffset="4,5" xadvance="17,125" page="0" chnl="15" />
|
||||
</chars>
|
||||
</font>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 321 KiB |
|
|
@ -1,796 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Tahoma" size="64" bold="0" italic="0" charset="" unicode="1" stretchH="100" smooth="0" aa="1" padding="64,64,64,64" spacing="1,1" outline="0" />
|
||||
<common lineHeight="64" base="53" scaleW="1024" scaleH="1024" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="TahomaN_0.png" />
|
||||
</pages>
|
||||
<chars count="319">
|
||||
<char id="32" x="1005,625" y="0" width="16,125" height="16,125" xoffset="-8" yoffset="45" xadvance="16,625" page="0" chnl="15" />
|
||||
<char id="33" x="667,125" y="619,5" width="21,75" height="54,5" xoffset="-2,125" yoffset="6,5" xadvance="17,625" page="0" chnl="15" />
|
||||
<char id="34" x="338,875" y="724,5" width="31,375" height="31" xoffset="-5" yoffset="4,75" xadvance="21,25" page="0" chnl="15" />
|
||||
<char id="35" x="647,25" y="564,875" width="47,25" height="54,5" xoffset="-4,375" yoffset="6,5" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="36" x="42,25" y="208,375" width="39,75" height="66,125" xoffset="-5,25" yoffset="4,125" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="37" x="538,875" y="453,5" width="62,5" height="56" xoffset="-5,375" yoffset="5,75" xadvance="51,75" page="0" chnl="15" />
|
||||
<char id="38" x="601,5" y="453,375" width="51,625" height="56" xoffset="-6,25" yoffset="5,75" xadvance="35,75" page="0" chnl="15" />
|
||||
<char id="39" x="370,375" y="724,5" width="21,625" height="31" xoffset="-5,25" yoffset="4,75" xadvance="11,125" page="0" chnl="15" />
|
||||
<char id="40" x="686,25" y="139" width="31,625" height="66,875" xoffset="-5,25" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="41" x="718" y="139" width="31,625" height="66,875" xoffset="-6,125" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="42" x="66,75" y="727,125" width="39,375" height="40" xoffset="-5,125" yoffset="4,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="43" x="973,75" y="613,75" width="46,5" height="46,375" xoffset="-4" yoffset="12,875" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="44" x="267" y="725,875" width="27" height="33" xoffset="-6,125" yoffset="37,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="45" x="598,875" y="719,5" width="30,625" height="20,625" xoffset="-5,625" yoffset="25,75" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="46" x="522,375" y="722,5" width="22,125" height="23,375" xoffset="-3,125" yoffset="37,625" xadvance="16" page="0" chnl="15" />
|
||||
<char id="47" x="79,5" y="274,625" width="35,5" height="64,625" xoffset="-8,625" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="48" x="920,5" y="447,75" width="40,625" height="56" xoffset="-5,875" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="49" x="0" y="571,625" width="34,875" height="54,625" xoffset="-2,25" yoffset="6,375" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="50" x="581,375" y="509,625" width="39,75" height="55,25" xoffset="-5,125" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="51" x="961,25" y="447,125" width="39,375" height="56" xoffset="-5,5" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="52" x="131" y="625,875" width="42,625" height="54,5" xoffset="-7" yoffset="6,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="53" x="660,375" y="506,375" width="39" height="55,25" xoffset="-4,75" yoffset="6,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="54" x="879,375" y="447,75" width="41" height="56" xoffset="-5,75" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="55" x="341,375" y="624,125" width="40,5" height="54,5" xoffset="-5,375" yoffset="6,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="56" x="497,625" y="453,625" width="41,125" height="56,125" xoffset="-6,125" yoffset="5,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="57" x="838,25" y="448,375" width="41" height="56" xoffset="-6,25" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="58" x="723" y="670,25" width="22,125" height="44,875" xoffset="-1,75" yoffset="16,125" xadvance="18,75" page="0" chnl="15" />
|
||||
<char id="59" x="640" y="619,625" width="27" height="54,5" xoffset="-4,875" yoffset="16,125" xadvance="18,75" page="0" chnl="15" />
|
||||
<char id="60" x="354,625" y="678,75" width="43,75" height="45,625" xoffset="-2,75" yoffset="13,375" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="61" x="294,125" y="725,875" width="44,625" height="31" xoffset="-3" yoffset="20,625" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="62" x="310,75" y="678,75" width="43,75" height="45,625" xoffset="-2,375" yoffset="13,375" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="63" x="775,125" y="506" width="36,75" height="55,25" xoffset="-5,125" yoffset="5,75" xadvance="25,125" page="0" chnl="15" />
|
||||
<char id="64" x="708,375" y="271,375" width="57,75" height="61,125" xoffset="-4,625" yoffset="5,75" xadvance="48,125" page="0" chnl="15" />
|
||||
<char id="65" x="550,625" y="565" width="48,25" height="54,5" xoffset="-8,25" yoffset="6,5" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="66" x="216,5" y="625,5" width="42,125" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="31,25" page="0" chnl="15" />
|
||||
<char id="67" x="750,625" y="449,875" width="45,25" height="56" xoffset="-6,25" yoffset="5,75" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="68" x="836,375" y="560,125" width="46,375" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="36" page="0" chnl="15" />
|
||||
<char id="69" x="422,5" y="622,875" width="40,125" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="70" x="462,75" y="622,875" width="39,125" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="27,625" page="0" chnl="15" />
|
||||
<char id="71" x="703,375" y="450,25" width="47,125" height="56" xoffset="-6,25" yoffset="5,75" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="72" x="0" y="626,375" width="44" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="35,75" page="0" chnl="15" />
|
||||
<char id="73" x="579" y="619,625" width="30,875" height="54,5" xoffset="-5,5" yoffset="6,5" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="74" x="901,75" y="503,875" width="34,25" height="55,125" xoffset="-7,75" yoffset="6,5" xadvance="22,125" page="0" chnl="15" />
|
||||
<char id="75" x="975,25" y="558,125" width="44,125" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="31,125" page="0" chnl="15" />
|
||||
<char id="76" x="540,5" y="619,875" width="38,375" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="77" x="501,375" y="565,25" width="49,125" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="40,875" page="0" chnl="15" />
|
||||
<char id="78" x="44,125" y="626" width="43,625" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="79" x="653,25" y="450,25" width="50" height="56" xoffset="-6,25" yoffset="5,75" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="80" x="382" y="624" width="40,375" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="81" x="213,125" y="207,75" width="50,125" height="65,375" xoffset="-6,25" yoffset="5,75" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="82" x="929,25" y="559,125" width="45,875" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="83" x="796" y="448,75" width="42,125" height="56" xoffset="-6" yoffset="5,75" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="84" x="789,125" y="561,375" width="47,125" height="54,5" xoffset="-8,125" yoffset="6,5" xadvance="31" page="0" chnl="15" />
|
||||
<char id="85" x="455,125" y="511" width="43,75" height="55,25" xoffset="-4,5" yoffset="6,5" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="86" x="599" y="565" width="48,125" height="54,5" xoffset="-8,25" yoffset="6,5" xadvance="31,625" page="0" chnl="15" />
|
||||
<char id="87" x="163,125" y="570,875" width="62,5" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="47,75" page="0" chnl="15" />
|
||||
<char id="88" x="882,875" y="559,75" width="46,25" height="54,5" xoffset="-7,75" yoffset="6,5" xadvance="30,75" page="0" chnl="15" />
|
||||
<char id="89" x="741,875" y="561,75" width="47,125" height="54,5" xoffset="-8,25" yoffset="6,5" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="90" x="87,875" y="626" width="43" height="54,5" xoffset="-6,5" yoffset="6,5" xadvance="29,625" page="0" chnl="15" />
|
||||
<char id="91" x="824,75" y="139" width="29,5" height="66,375" xoffset="-3,75" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="92" x="43,875" y="274,625" width="35,5" height="64,625" xoffset="-6,625" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="93" x="854,375" y="139" width="29,5" height="66,375" xoffset="-5,5" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="94" x="137,125" y="727,125" width="47,625" height="36,875" xoffset="-4,5" yoffset="6,5" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="95" x="706,25" y="719,125" width="45,625" height="19,375" xoffset="-8,375" yoffset="49,375" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="96" x="495,375" y="722,5" width="26,875" height="25,625" xoffset="-1,625" yoffset="1,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="97" x="101,625" y="680,625" width="39" height="46,375" xoffset="-6,5" yoffset="15,375" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="98" x="690,375" y="393,125" width="40,25" height="57" xoffset="-4,5" yoffset="4,75" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="99" x="181,75" y="680,125" width="38,125" height="46,25" xoffset="-6,5" yoffset="15,375" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="100" x="650" y="393,125" width="40,25" height="57" xoffset="-6,5" yoffset="4,75" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="101" x="140,75" y="680,5" width="40,875" height="46,25" xoffset="-6,5" yoffset="15,375" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="102" x="966" y="390,5" width="34" height="56,5" xoffset="-7,25" yoffset="4,5" xadvance="16,875" page="0" chnl="15" />
|
||||
<char id="103" x="772,875" y="392,125" width="40,25" height="56,5" xoffset="-6,5" yoffset="15,375" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="104" x="324,125" y="457,125" width="38,625" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="105" x="1000,75" y="446,125" width="21,5" height="54,75" xoffset="-4,625" yoffset="6,25" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="106" x="159,125" y="208" width="29,75" height="65,625" xoffset="-10,375" yoffset="6,25" xadvance="14,875" page="0" chnl="15" />
|
||||
<char id="107" x="284" y="457,5" width="40" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="108" x="1000,125" y="389,75" width="20,875" height="56,25" xoffset="-4,375" yoffset="4,75" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="109" x="257" y="680,125" width="53,625" height="45,625" xoffset="-4,5" yoffset="15,375" xadvance="44,5" page="0" chnl="15" />
|
||||
<char id="110" x="437,25" y="677,5" width="38,625" height="45,625" xoffset="-4,5" yoffset="15,375" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="111" x="59,75" y="680,625" width="41,75" height="46,375" xoffset="-6,5" yoffset="15,375" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="112" x="203,25" y="458,125" width="40,25" height="56,25" xoffset="-4,5" yoffset="15,375" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="113" x="243,625" y="457,625" width="40,25" height="56,25" xoffset="-6,5" yoffset="15,375" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="114" x="691,5" y="674,125" width="31,375" height="44,875" xoffset="-4,5" yoffset="16,125" xadvance="19,125" page="0" chnl="15" />
|
||||
<char id="115" x="220" y="680,125" width="36,875" height="46,25" xoffset="-6,25" yoffset="15,375" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="116" x="710,875" y="616,375" width="33" height="53,75" xoffset="-7,375" yoffset="7,875" xadvance="17,75" page="0" chnl="15" />
|
||||
<char id="117" x="398,5" y="678,625" width="38,625" height="45,625" xoffset="-4,625" yoffset="16,125" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="118" x="530" y="674,5" width="42,125" height="44,875" xoffset="-7,875" yoffset="16,125" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="119" x="476" y="677,5" width="53,875" height="44,875" xoffset="-7,25" yoffset="16,125" xadvance="39,375" page="0" chnl="15" />
|
||||
<char id="120" x="572,25" y="674,5" width="41,75" height="44,875" xoffset="-7,75" yoffset="16,125" xadvance="26,25" page="0" chnl="15" />
|
||||
<char id="121" x="71,875" y="515,625" width="42,125" height="55,5" xoffset="-7,875" yoffset="16,125" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="122" x="654,25" y="674,25" width="37,125" height="44,875" xoffset="-6,75" yoffset="16,125" xadvance="23,5" page="0" chnl="15" />
|
||||
<char id="123" x="749,75" y="139" width="37,375" height="66,375" xoffset="-6,5" yoffset="4,75" xadvance="25,5" page="0" chnl="15" />
|
||||
<char id="124" x="884" y="139" width="20,375" height="66,375" xoffset="0" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="125" x="787,25" y="139" width="37,375" height="66,375" xoffset="-5,5" yoffset="4,75" xadvance="25,5" page="0" chnl="15" />
|
||||
<char id="126" x="392,125" y="724,5" width="47,5" height="29,75" xoffset="-4,5" yoffset="21" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="160" x="1003,5" y="501" width="16,125" height="16,125" xoffset="-8" yoffset="45" xadvance="16,625" page="0" chnl="15" />
|
||||
<char id="161" x="689" y="619,5" width="21,75" height="54,5" xoffset="-2,125" yoffset="6,5" xadvance="17,625" page="0" chnl="15" />
|
||||
<char id="162" x="592,125" y="271,625" width="38,25" height="63,5" xoffset="-5" yoffset="6,875" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="163" x="540,875" y="509,625" width="40,375" height="55,25" xoffset="-5,75" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="164" x="810,25" y="668,25" width="41,625" height="41,75" xoffset="-6,25" yoffset="15,125" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="165" x="258,75" y="624,75" width="41,875" height="54,5" xoffset="-6,625" yoffset="6,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="166" x="904,5" y="139" width="20,375" height="66,375" xoffset="0" yoffset="4,75" xadvance="20,25" page="0" chnl="15" />
|
||||
<char id="167" x="701,875" y="206" width="38,75" height="65,25" xoffset="-4,875" yoffset="5,75" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="168" x="566,875" y="719,5" width="31,875" height="21" xoffset="-1,5" yoffset="6,25" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="169" x="766,25" y="271,375" width="60,75" height="60,75" xoffset="-5,75" yoffset="5,75" xadvance="49,25" page="0" chnl="15" />
|
||||
<char id="170" x="970,875" y="660,875" width="35,625" height="41,25" xoffset="-5" yoffset="5,75" xadvance="26,125" page="0" chnl="15" />
|
||||
<char id="171" x="852" y="665" width="40,375" height="41,375" xoffset="-5,375" yoffset="15,375" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="172" x="220,75" y="726,5" width="46,125" height="34,25" xoffset="-3,875" yoffset="25,25" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="173" x="629,625" y="719,25" width="30,625" height="20,625" xoffset="-5,625" yoffset="25,75" xadvance="19,25" page="0" chnl="15" />
|
||||
<char id="174" x="827,125" y="270,75" width="60,75" height="60,75" xoffset="-5,75" yoffset="5,75" xadvance="49,25" page="0" chnl="15" />
|
||||
<char id="175" x="660,375" y="719,25" width="45,75" height="19,375" xoffset="-8,375" yoffset="-1,25" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="176" x="184,875" y="726,5" width="35,75" height="35,625" xoffset="-5,375" yoffset="5,75" xadvance="25" page="0" chnl="15" />
|
||||
<char id="177" x="865,875" y="614,75" width="46,5" height="48,25" xoffset="-4" yoffset="8,625" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="178" x="33" y="727,5" width="33,625" height="40,625" xoffset="-3,25" yoffset="5,75" xadvance="26,125" page="0" chnl="15" />
|
||||
<char id="179" x="0" y="727,5" width="32,875" height="41,25" xoffset="-3,25" yoffset="5,75" xadvance="26,125" page="0" chnl="15" />
|
||||
<char id="180" x="468,375" y="723,25" width="26,875" height="25,625" xoffset="3,625" yoffset="1,625" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="181" x="156" y="515,25" width="39,125" height="55,5" xoffset="-4,5" yoffset="16,125" xadvance="30,125" page="0" chnl="15" />
|
||||
<char id="182" x="519,125" y="272" width="39,875" height="63,875" xoffset="-6,5" yoffset="6,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="183" x="544,625" y="719,5" width="22,125" height="23,375" xoffset="-1,75" yoffset="16,125" xadvance="18,75" page="0" chnl="15" />
|
||||
<char id="184" x="439,75" y="723,25" width="28,5" height="27,375" xoffset="-0,5" yoffset="44,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="185" x="106,25" y="727,125" width="30,75" height="39,875" xoffset="-1,625" yoffset="6,5" xadvance="26,125" page="0" chnl="15" />
|
||||
<char id="186" x="933" y="660,875" width="37,75" height="41,25" xoffset="-5,75" yoffset="5,75" xadvance="26,125" page="0" chnl="15" />
|
||||
<char id="187" x="892,5" y="663,125" width="40,375" height="41,375" xoffset="-4,625" yoffset="15,375" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="188" x="287,75" y="569,5" width="59,25" height="54,5" xoffset="-3,5" yoffset="6,5" xadvance="53" page="0" chnl="15" />
|
||||
<char id="189" x="225,75" y="570,125" width="61,875" height="54,5" xoffset="-3,5" yoffset="6,5" xadvance="53" page="0" chnl="15" />
|
||||
<char id="190" x="393,375" y="512,875" width="61,625" height="55,25" xoffset="-4,375" yoffset="5,75" xadvance="53" page="0" chnl="15" />
|
||||
<char id="191" x="738,25" y="506,375" width="36,75" height="55,25" xoffset="-6,5" yoffset="6,5" xadvance="25,125" page="0" chnl="15" />
|
||||
<char id="192" x="62,625" y="70,25" width="48,25" height="69" xoffset="-8,25" yoffset="-8" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="193" x="111" y="70,25" width="48,25" height="69" xoffset="-8,25" yoffset="-8" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="194" x="141,25" y="139,375" width="48,25" height="68,5" xoffset="-8,25" yoffset="-7,5" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="195" x="597,5" y="139" width="48,25" height="66,875" xoffset="-8,25" yoffset="-5,875" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="196" x="430,5" y="272,5" width="48,25" height="63,875" xoffset="-8,25" yoffset="-2,875" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="197" x="403,875" y="139" width="48,25" height="67,5" xoffset="-8,25" yoffset="-6,5" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="198" x="99,375" y="571,25" width="63,625" height="54,5" xoffset="-9" yoffset="6,5" xadvance="48,375" page="0" chnl="15" />
|
||||
<char id="199" x="972,25" y="138,875" width="45,25" height="66,125" xoffset="-6,25" yoffset="5,75" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="200" x="778,25" y="69,875" width="40,125" height="69" xoffset="-4,125" yoffset="-8" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="201" x="738" y="69,875" width="40,125" height="69" xoffset="-4,125" yoffset="-8" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="202" x="657,5" y="69,875" width="40,125" height="69" xoffset="-4,125" yoffset="-8" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="203" x="245,75" y="273,25" width="40,125" height="64,375" xoffset="-4,125" yoffset="-3,375" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="204" x="960,5" y="69,75" width="30,875" height="69" xoffset="-5,5" yoffset="-8" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="205" x="929,5" y="69,75" width="30,875" height="69" xoffset="-5,5" yoffset="-8" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="206" x="895,75" y="69,875" width="33,625" height="69" xoffset="-6,75" yoffset="-8" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="207" x="286" y="272,75" width="31,875" height="64,375" xoffset="-6" yoffset="-3,375" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="208" x="399,875" y="568,25" width="50,625" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="37" page="0" chnl="15" />
|
||||
<char id="209" x="487,75" y="139" width="43,625" height="67,375" xoffset="-4,125" yoffset="-6,375" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="210" x="298,875" y="0" width="50" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="211" x="248,75" y="0" width="50" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="212" x="198,625" y="0" width="50" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="213" x="233,5" y="139" width="50" height="68,125" xoffset="-6,25" yoffset="-6,375" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="214" x="771,75" y="205,5" width="50" height="65,125" xoffset="-6,25" yoffset="-3,375" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="215" x="766,25" y="670,25" width="43,875" height="43,875" xoffset="-2,625" yoffset="14,25" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="216" x="705,125" y="332,875" width="50" height="59,875" xoffset="-6,25" yoffset="4,125" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="217" x="670,25" y="0" width="43,75" height="69,75" xoffset="-4,5" yoffset="-8" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="218" x="626,375" y="0" width="43,75" height="69,75" xoffset="-4,5" yoffset="-8" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="219" x="758" y="0" width="43,75" height="69,75" xoffset="-4,5" yoffset="-8" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="220" x="914,5" y="205,5" width="43,75" height="65,125" xoffset="-4,5" yoffset="-3,375" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="221" x="206,625" y="69,875" width="47,125" height="69" xoffset="-8,25" yoffset="-8" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="222" x="300,75" y="624,125" width="40,5" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="30" page="0" chnl="15" />
|
||||
<char id="223" x="512,375" y="396,25" width="40,125" height="57,125" xoffset="-4,5" yoffset="4,5" xadvance="29" page="0" chnl="15" />
|
||||
<char id="224" x="120,875" y="338,625" width="39" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="225" x="81,75" y="339,375" width="39" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="226" x="160" y="338,625" width="39" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="227" x="292,125" y="398" width="39" height="59" xoffset="-6,5" yoffset="2,75" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="228" x="195,25" y="514,5" width="39" height="55,5" xoffset="-6,5" yoffset="6,25" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="229" x="630,5" y="271,375" width="39" height="61,5" xoffset="-6,5" yoffset="0,25" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="230" x="0" y="681" width="59,625" height="46,375" xoffset="-6,5" yoffset="15,375" xadvance="46,625" page="0" chnl="15" />
|
||||
<char id="231" x="890,75" y="391,125" width="38,125" height="56,5" xoffset="-6,5" yoffset="15,375" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="232" x="397,375" y="336,625" width="40,875" height="60" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="233" x="438,375" y="336,5" width="40,875" height="60" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="234" x="315,375" y="337,25" width="40,875" height="60" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="235" x="314,125" y="513,875" width="40,875" height="55,375" xoffset="-6,5" yoffset="6,25" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="236" x="62,5" y="399,625" width="26,875" height="59,375" xoffset="-8,125" yoffset="1,625" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="237" x="995" y="330,25" width="26,875" height="59,375" xoffset="-4,75" yoffset="1,625" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="238" x="31,5" y="399,625" width="30,875" height="59,375" xoffset="-9,375" yoffset="1,625" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="239" x="973,375" y="503,25" width="30" height="54,75" xoffset="-9" yoffset="6,25" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="240" x="439,375" y="396,625" width="41,75" height="57,25" xoffset="-6,5" yoffset="4,5" xadvance="28,875" page="0" chnl="15" />
|
||||
<char id="241" x="370" y="396,875" width="38,625" height="58,25" xoffset="-4,5" yoffset="2,75" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="242" x="971,75" y="270" width="41,75" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="243" x="929,875" y="270,75" width="41,75" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="244" x="888" y="270,75" width="41,75" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="245" x="209,25" y="398,5" width="41,75" height="59" xoffset="-6,5" yoffset="2,75" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="246" x="114,125" y="515,25" width="41,75" height="55,5" xoffset="-6,5" yoffset="6,25" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="247" x="819,375" y="616" width="46,375" height="48,875" xoffset="-3,875" yoffset="11,625" xadvance="38,5" page="0" chnl="15" />
|
||||
<char id="248" x="777,125" y="616,375" width="42,125" height="51,75" xoffset="-6,875" yoffset="13" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="249" x="276,625" y="337,75" width="38,625" height="60,125" xoffset="-4,625" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="250" x="237,875" y="338,125" width="38,625" height="60,125" xoffset="-4,625" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="251" x="199,125" y="338,25" width="38,625" height="60,125" xoffset="-4,625" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="252" x="234,375" y="514,5" width="38,625" height="55,5" xoffset="-4,625" yoffset="6,25" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="253" x="114,125" y="0" width="42,125" height="70" xoffset="-7,875" yoffset="1,625" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="254" x="645,875" y="139" width="40,25" height="66,875" xoffset="-4,5" yoffset="4,75" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="255" x="488,375" y="206,5" width="42,125" height="65,375" xoffset="-7,875" yoffset="6,25" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="256" x="382,125" y="272,625" width="48,25" height="63,875" xoffset="-8,25" yoffset="-2,875" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="257" x="621,25" y="509,5" width="39" height="55,25" xoffset="-6,5" yoffset="6,5" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="258" x="283,625" y="139" width="48,25" height="68" xoffset="-8,25" yoffset="-7" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="259" x="131,375" y="398,875" width="39" height="59,125" xoffset="-6,5" yoffset="2,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="260" x="569,125" y="206,25" width="48,5" height="65,25" xoffset="-8,25" yoffset="6,5" xadvance="31,75" page="0" chnl="15" />
|
||||
<char id="261" x="71,875" y="459,125" width="39,625" height="56,375" xoffset="-6,5" yoffset="15,375" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="262" x="446,375" y="0" width="45,25" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="263" x="479,375" y="336,125" width="38,125" height="60" xoffset="-6,5" yoffset="1,625" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="264" x="491,75" y="0" width="45,25" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="265" x="517,625" y="336,125" width="38,125" height="60" xoffset="-6,5" yoffset="1,625" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="266" x="869,125" y="205,5" width="45,25" height="65,125" xoffset="-6,25" yoffset="-3,375" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="267" x="355,125" y="513,5" width="38,125" height="55,375" xoffset="-6,5" yoffset="6,25" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="268" x="537,125" y="0" width="45,25" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="31,875" page="0" chnl="15" />
|
||||
<char id="269" x="555,875" y="336" width="38,125" height="60" xoffset="-6,5" yoffset="1,625" xadvance="24,5" page="0" chnl="15" />
|
||||
<char id="270" x="301,125" y="69,875" width="46,375" height="69" xoffset="-4,125" yoffset="-8" xadvance="36" page="0" chnl="15" />
|
||||
<char id="271" x="552,625" y="396,25" width="52,625" height="57" xoffset="-6,5" yoffset="4,75" xadvance="36,375" page="0" chnl="15" />
|
||||
<char id="272" x="450,625" y="568,25" width="50,625" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="37" page="0" chnl="15" />
|
||||
<char id="273" x="605,375" y="395,375" width="44,5" height="57" xoffset="-6,5" yoffset="4,75" xadvance="30,375" page="0" chnl="15" />
|
||||
<char id="274" x="478,875" y="272,125" width="40,125" height="63,875" xoffset="-4,125" yoffset="-2,875" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="275" x="860,75" y="504,5" width="40,875" height="55,125" xoffset="-6,5" yoffset="6,5" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="276" x="332" y="139" width="40,125" height="68" xoffset="-4,125" yoffset="-7" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="277" x="251,125" y="398,375" width="40,875" height="59" xoffset="-6,5" yoffset="2,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="278" x="205,5" y="273,625" width="40,125" height="64,375" xoffset="-4,125" yoffset="-3,375" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="279" x="273,125" y="514" width="40,875" height="55,375" xoffset="-6,5" yoffset="6,25" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="280" x="661,625" y="206" width="40,125" height="65,25" xoffset="-4,125" yoffset="6,5" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="281" x="30,875" y="459,125" width="40,875" height="56,375" xoffset="-6,5" yoffset="15,375" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="282" x="697,75" y="69,875" width="40,125" height="69" xoffset="-4,125" yoffset="-8" xadvance="29,75" page="0" chnl="15" />
|
||||
<char id="283" x="356,375" y="336,75" width="40,875" height="60" xoffset="-6,5" yoffset="1,625" xadvance="27,875" page="0" chnl="15" />
|
||||
<char id="284" x="399,125" y="0" width="47,125" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="285" x="0" y="0" width="40,25" height="70,25" xoffset="-6,5" yoffset="1,625" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="286" x="50,125" y="139,5" width="47,125" height="68,75" xoffset="-6,25" yoffset="-7" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="287" x="965,25" y="0" width="40,25" height="69,25" xoffset="-6,5" yoffset="2,625" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="288" x="821,875" y="205,5" width="47,125" height="65,125" xoffset="-6,25" yoffset="-3,375" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="289" x="82,125" y="208,375" width="40,25" height="65,625" xoffset="-6,5" yoffset="6,25" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="290" x="925" y="139" width="47,125" height="66,125" xoffset="-6,25" yoffset="5,75" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="291" x="40,375" y="0" width="40,25" height="70,125" xoffset="-6,5" yoffset="1,75" xadvance="29,25" page="0" chnl="15" />
|
||||
<char id="292" x="439,625" y="69,875" width="44" height="69" xoffset="-4,125" yoffset="-8" xadvance="35,75" page="0" chnl="15" />
|
||||
<char id="293" x="818,5" y="69,875" width="38,625" height="69" xoffset="-4,5" yoffset="-8" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="294" x="347,125" y="569,375" width="52,625" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="37,875" page="0" chnl="15" />
|
||||
<char id="295" x="160,25" y="458,125" width="42,875" height="56,25" xoffset="-7,625" yoffset="4,75" xadvance="30,625" page="0" chnl="15" />
|
||||
<char id="296" x="452,25" y="139" width="35,375" height="67,5" xoffset="-7,75" yoffset="-6,5" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="297" x="481,25" y="396,25" width="31" height="57,25" xoffset="-9,375" yoffset="3,75" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="298" x="559,125" y="272" width="32,875" height="63,875" xoffset="-6,5" yoffset="-2,875" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="299" x="610" y="619,625" width="29,875" height="54,5" xoffset="-8,875" yoffset="6,5" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="300" x="372,25" y="139" width="31,5" height="67,875" xoffset="-5,75" yoffset="-6,875" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="301" x="408,75" y="396,75" width="30,5" height="57,75" xoffset="-9,25" yoffset="3,25" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="302" x="740,75" y="206" width="30,875" height="65,25" xoffset="-5,5" yoffset="6,5" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="303" x="189" y="208" width="24" height="65,5" xoffset="-6,75" yoffset="6,25" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="304" x="318" y="272,625" width="30,875" height="64,375" xoffset="-5,5" yoffset="-3,375" xadvance="19,75" page="0" chnl="15" />
|
||||
<char id="305" x="745,25" y="670,25" width="20,875" height="44,875" xoffset="-4,375" yoffset="16,125" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="306" x="812" y="504,875" width="48,625" height="55,125" xoffset="-5,5" yoffset="6,5" xadvance="38,75" page="0" chnl="15" />
|
||||
<char id="307" x="122,5" y="208,25" width="36,5" height="65,625" xoffset="-4,625" yoffset="6,25" xadvance="27,375" page="0" chnl="15" />
|
||||
<char id="308" x="928,625" y="0" width="36,5" height="69,625" xoffset="-7,75" yoffset="-8" xadvance="22,125" page="0" chnl="15" />
|
||||
<char id="309" x="80,75" y="0" width="33,25" height="70,125" xoffset="-10,375" yoffset="1,75" xadvance="14,875" page="0" chnl="15" />
|
||||
<char id="310" x="356,625" y="207,125" width="44,125" height="65,375" xoffset="-4,125" yoffset="6,5" xadvance="31,125" page="0" chnl="15" />
|
||||
<char id="311" x="531,5" y="139" width="40" height="67,125" xoffset="-4,5" yoffset="4,75" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="312" x="614,125" y="674,25" width="40" height="44,875" xoffset="-4,5" yoffset="16,125" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="313" x="857,25" y="69,875" width="38,375" height="69" xoffset="-4,125" yoffset="-8" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="314" x="991,5" y="69,375" width="26,875" height="69" xoffset="-4,875" yoffset="-8" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="315" x="530,625" y="206,5" width="38,375" height="65,375" xoffset="-4,125" yoffset="6,5" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="316" x="571,625" y="139" width="25,75" height="67,125" xoffset="-6,125" yoffset="4,75" xadvance="12,125" page="0" chnl="15" />
|
||||
<char id="317" x="362,875" y="456,5" width="38,375" height="56,25" xoffset="-4,125" yoffset="4,75" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="318" x="434,75" y="454,625" width="33,25" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="19,125" page="0" chnl="15" />
|
||||
<char id="319" x="502" y="619,875" width="38,375" height="54,5" xoffset="-4,125" yoffset="6,5" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="320" x="401,375" y="455,25" width="33,25" height="56,25" xoffset="-4,5" yoffset="4,75" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="321" x="173,75" y="625,5" width="42,625" height="54,5" xoffset="-7,375" yoffset="6,5" xadvance="27,375" page="0" chnl="15" />
|
||||
<char id="322" x="468,125" y="454" width="29,375" height="56,25" xoffset="-7,375" yoffset="4,75" xadvance="14,5" page="0" chnl="15" />
|
||||
<char id="323" x="527,5" y="69,875" width="43,625" height="69" xoffset="-4,125" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="324" x="848" y="331,625" width="38,625" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="325" x="400,875" y="207" width="43,625" height="65,375" xoffset="-4,125" yoffset="6,5" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="326" x="813,25" y="391,75" width="38,625" height="56,5" xoffset="-4,5" yoffset="15,375" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="327" x="483,75" y="69,875" width="43,625" height="69" xoffset="-4,125" yoffset="-8" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="328" x="809,25" y="332,25" width="38,625" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="329" x="111,625" y="458,875" width="48,5" height="56,25" xoffset="-7,125" yoffset="4,75" xadvance="36,75" page="0" chnl="15" />
|
||||
<char id="330" x="444,625" y="206,625" width="43,625" height="65,375" xoffset="-4,125" yoffset="6,5" xadvance="35,375" page="0" chnl="15" />
|
||||
<char id="331" x="852" y="391,125" width="38,625" height="56,5" xoffset="-4,5" yoffset="15,375" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="332" x="958,375" y="205,25" width="50" height="64,625" xoffset="-6,25" yoffset="-2,875" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="333" x="499" y="509,875" width="41,75" height="55,25" xoffset="-6,5" yoffset="6,5" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="334" x="0" y="139,5" width="50" height="68,75" xoffset="-6,25" yoffset="-7" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="335" x="89,5" y="399,625" width="41,75" height="59,125" xoffset="-6,5" yoffset="2,625" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="336" x="349" y="0" width="50" height="69,75" xoffset="-6,25" yoffset="-8" xadvance="37,5" page="0" chnl="15" />
|
||||
<char id="337" x="0" y="339,375" width="41,75" height="60,125" xoffset="-6,5" yoffset="1,625" xadvance="28,75" page="0" chnl="15" />
|
||||
<char id="338" x="35" y="571,375" width="64,25" height="54,5" xoffset="-6,25" yoffset="6,5" xadvance="51,75" page="0" chnl="15" />
|
||||
<char id="339" x="912,5" y="614,375" width="61,125" height="46,375" xoffset="-6,5" yoffset="15,375" xadvance="48,125" page="0" chnl="15" />
|
||||
<char id="340" x="393,625" y="69,875" width="45,875" height="69" xoffset="-4,125" yoffset="-8" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="341" x="0" y="399,625" width="31,375" height="59,375" xoffset="-4,5" yoffset="1,625" xadvance="19,125" page="0" chnl="15" />
|
||||
<char id="342" x="310,625" y="207,125" width="45,875" height="65,375" xoffset="-4,125" yoffset="6,5" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="343" x="0" y="515,75" width="32,25" height="55,75" xoffset="-5,375" yoffset="16,125" xadvance="19,125" page="0" chnl="15" />
|
||||
<char id="344" x="347,625" y="69,875" width="45,875" height="69" xoffset="-4,125" yoffset="-8" xadvance="32,875" page="0" chnl="15" />
|
||||
<char id="345" x="961,25" y="331" width="33,625" height="59,375" xoffset="-6,5" yoffset="1,625" xadvance="19,125" page="0" chnl="15" />
|
||||
<char id="346" x="801,875" y="0" width="42,125" height="69,75" xoffset="-6" yoffset="-8" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="347" x="594,125" y="335,25" width="36,875" height="60" xoffset="-6,25" yoffset="1,625" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="348" x="886,375" y="0" width="42,125" height="69,75" xoffset="-6" yoffset="-8" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="349" x="631,125" y="333" width="36,875" height="60" xoffset="-6,25" yoffset="1,625" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="350" x="0" y="208,375" width="42,125" height="66,125" xoffset="-6" yoffset="5,75" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="351" x="929" y="390,5" width="36,875" height="56,5" xoffset="-6,25" yoffset="15,375" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="352" x="844,125" y="0" width="42,125" height="69,75" xoffset="-6" yoffset="-8" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="353" x="668,125" y="333" width="36,875" height="60" xoffset="-6,25" yoffset="1,625" xadvance="23,625" page="0" chnl="15" />
|
||||
<char id="354" x="263,375" y="207,25" width="47,125" height="65,375" xoffset="-8,125" yoffset="6,5" xadvance="31" page="0" chnl="15" />
|
||||
<char id="355" x="349" y="272,625" width="33" height="64" xoffset="-7,375" yoffset="7,875" xadvance="17,75" page="0" chnl="15" />
|
||||
<char id="356" x="253,875" y="69,875" width="47,125" height="69" xoffset="-8,125" yoffset="-8" xadvance="31" page="0" chnl="15" />
|
||||
<char id="357" x="730,75" y="392,875" width="42" height="56,875" xoffset="-7,375" yoffset="4,75" xadvance="24,875" page="0" chnl="15" />
|
||||
<char id="358" x="694,625" y="561,75" width="47,125" height="54,5" xoffset="-8,125" yoffset="6,5" xadvance="31" page="0" chnl="15" />
|
||||
<char id="359" x="744" y="616,375" width="33" height="53,75" xoffset="-7,125" yoffset="7,875" xadvance="18" page="0" chnl="15" />
|
||||
<char id="360" x="189,625" y="139,25" width="43,75" height="68,375" xoffset="-4,5" yoffset="-6,625" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="361" x="331,25" y="397,375" width="38,625" height="59" xoffset="-4,625" yoffset="2,75" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="362" x="0" y="274,625" width="43,75" height="64,625" xoffset="-4,5" yoffset="-2,875" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="363" x="699,5" y="506,375" width="38,625" height="55,25" xoffset="-4,625" yoffset="6,5" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="364" x="97,375" y="139,375" width="43,75" height="68,75" xoffset="-4,5" yoffset="-7" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="365" x="170,5" y="398,875" width="38,625" height="59,125" xoffset="-4,625" yoffset="2,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="366" x="582,5" y="0" width="43,75" height="69,75" xoffset="-4,5" yoffset="-8" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="367" x="669,625" y="271,375" width="38,625" height="61,375" xoffset="-4,625" yoffset="0,375" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="368" x="714,125" y="0" width="43,75" height="69,75" xoffset="-4,5" yoffset="-8" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="369" x="41,875" y="339,375" width="39,75" height="60,125" xoffset="-4,625" yoffset="1,625" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="370" x="617,75" y="206" width="43,75" height="65,25" xoffset="-4,5" yoffset="6,5" xadvance="34,75" page="0" chnl="15" />
|
||||
<char id="371" x="32,375" y="515,625" width="39,375" height="55,625" xoffset="-4,625" yoffset="16,125" xadvance="29,5" page="0" chnl="15" />
|
||||
<char id="372" x="0" y="70,375" width="62,5" height="69" xoffset="-7,375" yoffset="-8" xadvance="47,75" page="0" chnl="15" />
|
||||
<char id="373" x="755,25" y="332,625" width="53,875" height="59,375" xoffset="-7,25" yoffset="1,625" xadvance="39,375" page="0" chnl="15" />
|
||||
<char id="374" x="159,375" y="70,125" width="47,125" height="69" xoffset="-8,25" yoffset="-8" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="375" x="156,375" y="0" width="42,125" height="70" xoffset="-7,875" yoffset="1,625" xadvance="26,375" page="0" chnl="15" />
|
||||
<char id="376" x="115,125" y="274,125" width="47,125" height="64,375" xoffset="-8,25" yoffset="-3,375" xadvance="30,5" page="0" chnl="15" />
|
||||
<char id="377" x="571,25" y="69,875" width="43" height="69" xoffset="-6,5" yoffset="-8" xadvance="29,625" page="0" chnl="15" />
|
||||
<char id="378" x="924" y="331" width="37,125" height="59,375" xoffset="-6,75" yoffset="1,625" xadvance="23,5" page="0" chnl="15" />
|
||||
<char id="379" x="162,375" y="273,75" width="43" height="64,375" xoffset="-6,5" yoffset="-3,375" xadvance="29,625" page="0" chnl="15" />
|
||||
<char id="380" x="936,125" y="503,875" width="37,125" height="54,75" xoffset="-6,75" yoffset="6,25" xadvance="23,5" page="0" chnl="15" />
|
||||
<char id="381" x="614,375" y="69,875" width="43" height="69" xoffset="-6,5" yoffset="-8" xadvance="29,625" page="0" chnl="15" />
|
||||
<char id="382" x="886,75" y="331,625" width="37,125" height="59,375" xoffset="-6,75" yoffset="1,625" xadvance="23,5" page="0" chnl="15" />
|
||||
<char id="383" x="0" y="459,125" width="30,75" height="56,5" xoffset="-4,375" yoffset="4,5" xadvance="13,5" page="0" chnl="15" />
|
||||
</chars>
|
||||
<kernings count="465">
|
||||
<kerning first="191" second="74" amount="0,75" />
|
||||
<kerning first="248" second="121" amount="-0,25" />
|
||||
<kerning first="39" second="65" amount="-2,375" />
|
||||
<kerning first="39" second="198" amount="-2,375" />
|
||||
<kerning first="40" second="84" amount="0,5" />
|
||||
<kerning first="40" second="106" amount="1,25" />
|
||||
<kerning first="44" second="41" amount="-2,375" />
|
||||
<kerning first="44" second="55" amount="-1,25" />
|
||||
<kerning first="44" second="93" amount="-2,375" />
|
||||
<kerning first="44" second="125" amount="-2,375" />
|
||||
<kerning first="248" second="120" amount="-0,5" />
|
||||
<kerning first="248" second="118" amount="-0,25" />
|
||||
<kerning first="45" second="65" amount="-1,25" />
|
||||
<kerning first="45" second="73" amount="-0,75" />
|
||||
<kerning first="45" second="74" amount="-2,375" />
|
||||
<kerning first="45" second="83" amount="-0,5" />
|
||||
<kerning first="45" second="84" amount="-3,75" />
|
||||
<kerning first="45" second="86" amount="-1,25" />
|
||||
<kerning first="45" second="87" amount="-1,25" />
|
||||
<kerning first="45" second="88" amount="-2" />
|
||||
<kerning first="45" second="89" amount="-3,375" />
|
||||
<kerning first="45" second="90" amount="-0,75" />
|
||||
<kerning first="45" second="97" amount="-0,5" />
|
||||
<kerning first="45" second="118" amount="-1" />
|
||||
<kerning first="45" second="119" amount="-0,5" />
|
||||
<kerning first="45" second="120" amount="-1,25" />
|
||||
<kerning first="45" second="121" amount="-1" />
|
||||
<kerning first="45" second="122" amount="-1" />
|
||||
<kerning first="45" second="198" amount="-1,25" />
|
||||
<kerning first="45" second="230" amount="-0,5" />
|
||||
<kerning first="46" second="41" amount="-2,625" />
|
||||
<kerning first="46" second="44" amount="-3,5" />
|
||||
<kerning first="46" second="45" amount="-4,25" />
|
||||
<kerning first="46" second="55" amount="-1,25" />
|
||||
<kerning first="46" second="93" amount="-2,625" />
|
||||
<kerning first="46" second="125" amount="-2,625" />
|
||||
<kerning first="248" second="46" amount="-0,5" />
|
||||
<kerning first="248" second="44" amount="-0,75" />
|
||||
<kerning first="216" second="90" amount="-0,5" />
|
||||
<kerning first="216" second="89" amount="-0,5" />
|
||||
<kerning first="52" second="44" amount="-0,5" />
|
||||
<kerning first="52" second="46" amount="-0,5" />
|
||||
<kerning first="55" second="44" amount="-3,875" />
|
||||
<kerning first="55" second="46" amount="-3,875" />
|
||||
<kerning first="216" second="88" amount="-0,25" />
|
||||
<kerning first="65" second="45" amount="-1,25" />
|
||||
<kerning first="65" second="83" amount="-0,125" />
|
||||
<kerning first="65" second="84" amount="-3" />
|
||||
<kerning first="65" second="85" amount="-0,25" />
|
||||
<kerning first="65" second="86" amount="-1,375" />
|
||||
<kerning first="65" second="87" amount="-1,25" />
|
||||
<kerning first="65" second="89" amount="-2" />
|
||||
<kerning first="65" second="116" amount="-0,375" />
|
||||
<kerning first="65" second="117" amount="-0,25" />
|
||||
<kerning first="65" second="118" amount="-0,75" />
|
||||
<kerning first="65" second="119" amount="-0,25" />
|
||||
<kerning first="65" second="121" amount="-0,75" />
|
||||
<kerning first="216" second="84" amount="-1,25" />
|
||||
<kerning first="216" second="46" amount="-0,75" />
|
||||
<kerning first="216" second="44" amount="-0,75" />
|
||||
<kerning first="239" second="108" amount="0,25" />
|
||||
<kerning first="239" second="102" amount="0,375" />
|
||||
<kerning first="238" second="108" amount="0,25" />
|
||||
<kerning first="66" second="44" amount="-0,5" />
|
||||
<kerning first="66" second="45" amount="0,25" />
|
||||
<kerning first="66" second="46" amount="-0,5" />
|
||||
<kerning first="66" second="67" amount="0,25" />
|
||||
<kerning first="66" second="71" amount="0,25" />
|
||||
<kerning first="66" second="79" amount="0,25" />
|
||||
<kerning first="66" second="81" amount="0,25" />
|
||||
<kerning first="66" second="84" amount="-1,375" />
|
||||
<kerning first="66" second="97" amount="0,25" />
|
||||
<kerning first="66" second="101" amount="0,25" />
|
||||
<kerning first="66" second="104" amount="0,25" />
|
||||
<kerning first="66" second="105" amount="0,25" />
|
||||
<kerning first="66" second="106" amount="0,25" />
|
||||
<kerning first="66" second="108" amount="0,25" />
|
||||
<kerning first="66" second="111" amount="0,25" />
|
||||
<kerning first="66" second="114" amount="0,25" />
|
||||
<kerning first="66" second="117" amount="0,25" />
|
||||
<kerning first="66" second="119" amount="0,25" />
|
||||
<kerning first="231" second="45" amount="-0,5" />
|
||||
<kerning first="199" second="338" amount="-0,625" />
|
||||
<kerning first="199" second="45" amount="-1,25" />
|
||||
<kerning first="123" second="106" amount="1,25" />
|
||||
<kerning first="67" second="45" amount="-1,25" />
|
||||
<kerning first="67" second="338" amount="-0,625" />
|
||||
<kerning first="123" second="84" amount="0,5" />
|
||||
<kerning first="122" second="248" amount="-0,25" />
|
||||
<kerning first="68" second="44" amount="-1,25" />
|
||||
<kerning first="68" second="46" amount="-1,25" />
|
||||
<kerning first="68" second="74" amount="-0,5" />
|
||||
<kerning first="68" second="84" amount="-1,25" />
|
||||
<kerning first="68" second="87" amount="-0,5" />
|
||||
<kerning first="68" second="88" amount="-0,25" />
|
||||
<kerning first="68" second="89" amount="-0,5" />
|
||||
<kerning first="68" second="90" amount="-0,5" />
|
||||
<kerning first="122" second="231" amount="-0,25" />
|
||||
<kerning first="70" second="44" amount="-7,375" />
|
||||
<kerning first="70" second="46" amount="-7,375" />
|
||||
<kerning first="70" second="58" amount="-1,375" />
|
||||
<kerning first="122" second="113" amount="-0,25" />
|
||||
<kerning first="70" second="63" amount="1,375" />
|
||||
<kerning first="70" second="65" amount="-2,375" />
|
||||
<kerning first="70" second="74" amount="-1,5" />
|
||||
<kerning first="70" second="84" amount="0,75" />
|
||||
<kerning first="70" second="97" amount="-2,375" />
|
||||
<kerning first="70" second="101" amount="-1,25" />
|
||||
<kerning first="70" second="111" amount="-1,25" />
|
||||
<kerning first="70" second="198" amount="-2,75" />
|
||||
<kerning first="70" second="230" amount="-2,375" />
|
||||
<kerning first="70" second="248" amount="-1,25" />
|
||||
<kerning first="122" second="111" amount="-0,25" />
|
||||
<kerning first="70" second="339" amount="-1,25" />
|
||||
<kerning first="73" second="45" amount="-0,75" />
|
||||
<kerning first="73" second="97" amount="-0,5" />
|
||||
<kerning first="73" second="99" amount="-0,625" />
|
||||
<kerning first="73" second="100" amount="-0,5" />
|
||||
<kerning first="73" second="101" amount="-0,625" />
|
||||
<kerning first="73" second="103" amount="-0,5" />
|
||||
<kerning first="73" second="109" amount="-0,25" />
|
||||
<kerning first="73" second="110" amount="-0,25" />
|
||||
<kerning first="73" second="111" amount="-0,625" />
|
||||
<kerning first="73" second="112" amount="-0,25" />
|
||||
<kerning first="73" second="114" amount="-0,25" />
|
||||
<kerning first="73" second="115" amount="-0,5" />
|
||||
<kerning first="73" second="118" amount="-0,75" />
|
||||
<kerning first="122" second="103" amount="-0,25" />
|
||||
<kerning first="122" second="101" amount="-0,25" />
|
||||
<kerning first="74" second="44" amount="-0,5" />
|
||||
<kerning first="74" second="46" amount="-0,5" />
|
||||
<kerning first="74" second="65" amount="-0,25" />
|
||||
<kerning first="74" second="198" amount="-0,25" />
|
||||
<kerning first="122" second="100" amount="-0,25" />
|
||||
<kerning first="75" second="45" amount="-2,75" />
|
||||
<kerning first="75" second="79" amount="-0,5" />
|
||||
<kerning first="75" second="97" amount="-1,125" />
|
||||
<kerning first="75" second="101" amount="-1,5" />
|
||||
<kerning first="75" second="111" amount="-1,5" />
|
||||
<kerning first="75" second="117" amount="-1" />
|
||||
<kerning first="75" second="118" amount="-1,375" />
|
||||
<kerning first="75" second="119" amount="-1,5" />
|
||||
<kerning first="75" second="121" amount="-1,375" />
|
||||
<kerning first="75" second="216" amount="-0,5" />
|
||||
<kerning first="75" second="230" amount="-1,375" />
|
||||
<kerning first="75" second="248" amount="-1,75" />
|
||||
<kerning first="75" second="338" amount="-0,5" />
|
||||
<kerning first="75" second="339" amount="-1,75" />
|
||||
<kerning first="122" second="99" amount="-0,25" />
|
||||
<kerning first="122" second="45" amount="-0,5" />
|
||||
<kerning first="76" second="39" amount="-3" />
|
||||
<kerning first="76" second="45" amount="-3,875" />
|
||||
<kerning first="76" second="65" amount="-1" />
|
||||
<kerning first="76" second="67" amount="-0,5" />
|
||||
<kerning first="76" second="71" amount="-0,5" />
|
||||
<kerning first="76" second="74" amount="2,375" />
|
||||
<kerning first="76" second="79" amount="-0,5" />
|
||||
<kerning first="76" second="81" amount="-0,5" />
|
||||
<kerning first="76" second="84" amount="-4,25" />
|
||||
<kerning first="76" second="86" amount="-2,75" />
|
||||
<kerning first="76" second="87" amount="-2,375" />
|
||||
<kerning first="76" second="89" amount="-3,875" />
|
||||
<kerning first="76" second="118" amount="-2,75" />
|
||||
<kerning first="76" second="121" amount="-2,75" />
|
||||
<kerning first="76" second="199" amount="-0,5" />
|
||||
<kerning first="76" second="198" amount="-1" />
|
||||
<kerning first="76" second="216" amount="-0,5" />
|
||||
<kerning first="76" second="338" amount="-0,5" />
|
||||
<kerning first="121" second="339" amount="-0,25" />
|
||||
<kerning first="121" second="248" amount="-0,375" />
|
||||
<kerning first="121" second="230" amount="-1" />
|
||||
<kerning first="121" second="231" amount="-0,375" />
|
||||
<kerning first="79" second="44" amount="-0,75" />
|
||||
<kerning first="79" second="46" amount="-0,75" />
|
||||
<kerning first="79" second="74" amount="-0,25" />
|
||||
<kerning first="79" second="84" amount="-1,25" />
|
||||
<kerning first="79" second="88" amount="-0,25" />
|
||||
<kerning first="79" second="89" amount="-0,5" />
|
||||
<kerning first="79" second="90" amount="-0,5" />
|
||||
<kerning first="121" second="113" amount="-0,25" />
|
||||
<kerning first="80" second="44" amount="-7,375" />
|
||||
<kerning first="80" second="46" amount="-7,375" />
|
||||
<kerning first="80" second="65" amount="-1,25" />
|
||||
<kerning first="80" second="74" amount="-1,75" />
|
||||
<kerning first="80" second="89" amount="0,5" />
|
||||
<kerning first="80" second="97" amount="-1,25" />
|
||||
<kerning first="80" second="101" amount="-1,25" />
|
||||
<kerning first="80" second="111" amount="-1,25" />
|
||||
<kerning first="80" second="198" amount="-1,75" />
|
||||
<kerning first="80" second="230" amount="-1,25" />
|
||||
<kerning first="80" second="248" amount="-1,25" />
|
||||
<kerning first="121" second="111" amount="-0,375" />
|
||||
<kerning first="80" second="339" amount="-1,25" />
|
||||
<kerning first="81" second="44" amount="-0,75" />
|
||||
<kerning first="81" second="46" amount="-0,75" />
|
||||
<kerning first="121" second="103" amount="-0,25" />
|
||||
<kerning first="82" second="45" amount="-2,375" />
|
||||
<kerning first="82" second="84" amount="-1,375" />
|
||||
<kerning first="82" second="89" amount="-0,5" />
|
||||
<kerning first="82" second="97" amount="-0,5" />
|
||||
<kerning first="82" second="101" amount="-1" />
|
||||
<kerning first="82" second="111" amount="-1" />
|
||||
<kerning first="82" second="117" amount="-0,25" />
|
||||
<kerning first="82" second="121" amount="-1,25" />
|
||||
<kerning first="82" second="230" amount="-1,25" />
|
||||
<kerning first="82" second="248" amount="-1,25" />
|
||||
<kerning first="82" second="339" amount="-1,375" />
|
||||
<kerning first="121" second="101" amount="-0,375" />
|
||||
<kerning first="121" second="100" amount="-0,25" />
|
||||
<kerning first="121" second="99" amount="-0,375" />
|
||||
<kerning first="121" second="97" amount="-1" />
|
||||
<kerning first="83" second="44" amount="-0,5" />
|
||||
<kerning first="83" second="46" amount="-0,5" />
|
||||
<kerning first="83" second="65" amount="-0,375" />
|
||||
<kerning first="83" second="83" amount="-0,625" />
|
||||
<kerning first="83" second="99" amount="0,125" />
|
||||
<kerning first="83" second="101" amount="0,125" />
|
||||
<kerning first="83" second="111" amount="0,125" />
|
||||
<kerning first="83" second="113" amount="0,125" />
|
||||
<kerning first="83" second="118" amount="-0,75" />
|
||||
<kerning first="83" second="119" amount="-0,5" />
|
||||
<kerning first="83" second="121" amount="-0,75" />
|
||||
<kerning first="83" second="198" amount="-0,5" />
|
||||
<kerning first="121" second="46" amount="-4,625" />
|
||||
<kerning first="84" second="41" amount="0,5" />
|
||||
<kerning first="84" second="44" amount="-7,125" />
|
||||
<kerning first="84" second="45" amount="-3,75" />
|
||||
<kerning first="84" second="46" amount="-7,125" />
|
||||
<kerning first="84" second="58" amount="-4,875" />
|
||||
<kerning first="121" second="45" amount="-1" />
|
||||
<kerning first="84" second="63" amount="1,375" />
|
||||
<kerning first="84" second="65" amount="-3" />
|
||||
<kerning first="84" second="67" amount="-1" />
|
||||
<kerning first="84" second="71" amount="-1" />
|
||||
<kerning first="84" second="74" amount="-1,5" />
|
||||
<kerning first="84" second="79" amount="-1,25" />
|
||||
<kerning first="84" second="83" amount="-0,25" />
|
||||
<kerning first="84" second="84" amount="-2,625" />
|
||||
<kerning first="84" second="89" amount="-1,75" />
|
||||
<kerning first="84" second="93" amount="0,5" />
|
||||
<kerning first="84" second="97" amount="-5,875" />
|
||||
<kerning first="84" second="99" amount="-5,375" />
|
||||
<kerning first="84" second="101" amount="-5,375" />
|
||||
<kerning first="84" second="103" amount="-5,25" />
|
||||
<kerning first="84" second="111" amount="-5,375" />
|
||||
<kerning first="84" second="114" amount="-4,875" />
|
||||
<kerning first="84" second="115" amount="-4,375" />
|
||||
<kerning first="84" second="117" amount="-4,875" />
|
||||
<kerning first="84" second="118" amount="-4,875" />
|
||||
<kerning first="84" second="119" amount="-4,875" />
|
||||
<kerning first="84" second="121" amount="-4,875" />
|
||||
<kerning first="84" second="122" amount="-4,25" />
|
||||
<kerning first="84" second="125" amount="0,5" />
|
||||
<kerning first="84" second="199" amount="-1" />
|
||||
<kerning first="84" second="198" amount="-3,125" />
|
||||
<kerning first="84" second="216" amount="-1,25" />
|
||||
<kerning first="84" second="230" amount="-5,875" />
|
||||
<kerning first="84" second="248" amount="-5,375" />
|
||||
<kerning first="121" second="44" amount="-4,625" />
|
||||
<kerning first="84" second="338" amount="-1,25" />
|
||||
<kerning first="84" second="339" amount="-5,375" />
|
||||
<kerning first="120" second="339" amount="-0,5" />
|
||||
<kerning first="120" second="248" amount="-0,625" />
|
||||
<kerning first="85" second="44" amount="-0,5" />
|
||||
<kerning first="85" second="46" amount="-0,5" />
|
||||
<kerning first="85" second="65" amount="-0,25" />
|
||||
<kerning first="85" second="198" amount="-0,5" />
|
||||
<kerning first="120" second="231" amount="-0,5" />
|
||||
<kerning first="86" second="44" amount="-7,125" />
|
||||
<kerning first="86" second="45" amount="-1,25" />
|
||||
<kerning first="86" second="46" amount="-7,125" />
|
||||
<kerning first="86" second="58" amount="-2" />
|
||||
<kerning first="120" second="111" amount="-0,625" />
|
||||
<kerning first="86" second="65" amount="-1,375" />
|
||||
<kerning first="86" second="97" amount="-2,375" />
|
||||
<kerning first="86" second="101" amount="-2,375" />
|
||||
<kerning first="86" second="111" amount="-2,375" />
|
||||
<kerning first="86" second="117" amount="-1,375" />
|
||||
<kerning first="86" second="121" amount="-1,625" />
|
||||
<kerning first="86" second="198" amount="-1,75" />
|
||||
<kerning first="86" second="230" amount="-2,375" />
|
||||
<kerning first="86" second="248" amount="-2,375" />
|
||||
<kerning first="120" second="103" amount="-0,25" />
|
||||
<kerning first="86" second="339" amount="-2,375" />
|
||||
<kerning first="120" second="101" amount="-0,625" />
|
||||
<kerning first="120" second="100" amount="-0,25" />
|
||||
<kerning first="87" second="44" amount="-7,125" />
|
||||
<kerning first="87" second="45" amount="-1,25" />
|
||||
<kerning first="87" second="46" amount="-5,375" />
|
||||
<kerning first="87" second="58" amount="-2" />
|
||||
<kerning first="120" second="99" amount="-0,5" />
|
||||
<kerning first="87" second="65" amount="-1,25" />
|
||||
<kerning first="87" second="97" amount="-2" />
|
||||
<kerning first="87" second="101" amount="-2" />
|
||||
<kerning first="87" second="111" amount="-2" />
|
||||
<kerning first="87" second="114" amount="-1" />
|
||||
<kerning first="87" second="117" amount="-1" />
|
||||
<kerning first="87" second="121" amount="-1,375" />
|
||||
<kerning first="87" second="198" amount="-1" />
|
||||
<kerning first="87" second="230" amount="-2" />
|
||||
<kerning first="87" second="248" amount="-2" />
|
||||
<kerning first="120" second="45" amount="-1,25" />
|
||||
<kerning first="87" second="339" amount="-2" />
|
||||
<kerning first="119" second="230" amount="-0,5" />
|
||||
<kerning first="119" second="97" amount="-0,5" />
|
||||
<kerning first="88" second="45" amount="-2" />
|
||||
<kerning first="88" second="67" amount="-0,25" />
|
||||
<kerning first="88" second="71" amount="-0,25" />
|
||||
<kerning first="88" second="79" amount="-0,25" />
|
||||
<kerning first="88" second="97" amount="-1" />
|
||||
<kerning first="88" second="101" amount="-1,125" />
|
||||
<kerning first="88" second="111" amount="-1,125" />
|
||||
<kerning first="88" second="117" amount="-0,75" />
|
||||
<kerning first="88" second="121" amount="-1,75" />
|
||||
<kerning first="88" second="199" amount="-0,25" />
|
||||
<kerning first="88" second="216" amount="-0,25" />
|
||||
<kerning first="88" second="230" amount="-1,25" />
|
||||
<kerning first="88" second="248" amount="-1,375" />
|
||||
<kerning first="88" second="338" amount="-0,25" />
|
||||
<kerning first="88" second="339" amount="-1,375" />
|
||||
<kerning first="119" second="46" amount="-1,75" />
|
||||
<kerning first="119" second="45" amount="-0,5" />
|
||||
<kerning first="89" second="44" amount="-7,125" />
|
||||
<kerning first="89" second="45" amount="-3,375" />
|
||||
<kerning first="89" second="46" amount="-7,125" />
|
||||
<kerning first="89" second="58" amount="-4,875" />
|
||||
<kerning first="119" second="44" amount="-1,75" />
|
||||
<kerning first="89" second="65" amount="-2" />
|
||||
<kerning first="89" second="74" amount="-1,5" />
|
||||
<kerning first="89" second="79" amount="-0,5" />
|
||||
<kerning first="89" second="97" amount="-3,375" />
|
||||
<kerning first="89" second="100" amount="-3" />
|
||||
<kerning first="89" second="101" amount="-3,125" />
|
||||
<kerning first="89" second="103" amount="-3,125" />
|
||||
<kerning first="89" second="109" amount="-2,375" />
|
||||
<kerning first="89" second="110" amount="-2,375" />
|
||||
<kerning first="89" second="111" amount="-3,125" />
|
||||
<kerning first="89" second="112" amount="-2,375" />
|
||||
<kerning first="89" second="113" amount="-3,125" />
|
||||
<kerning first="89" second="114" amount="-2,375" />
|
||||
<kerning first="89" second="115" amount="-2,75" />
|
||||
<kerning first="89" second="117" amount="-2,75" />
|
||||
<kerning first="89" second="118" amount="-2,375" />
|
||||
<kerning first="89" second="198" amount="-2" />
|
||||
<kerning first="89" second="216" amount="-0,5" />
|
||||
<kerning first="89" second="230" amount="-3,375" />
|
||||
<kerning first="89" second="248" amount="-3,125" />
|
||||
<kerning first="118" second="339" amount="-0,25" />
|
||||
<kerning first="89" second="338" amount="-0,5" />
|
||||
<kerning first="89" second="339" amount="-3,125" />
|
||||
<kerning first="118" second="248" amount="-0,375" />
|
||||
<kerning first="118" second="230" amount="-1" />
|
||||
<kerning first="90" second="45" amount="-1,375" />
|
||||
<kerning first="90" second="67" amount="-0,5" />
|
||||
<kerning first="90" second="71" amount="-0,5" />
|
||||
<kerning first="90" second="79" amount="-0,5" />
|
||||
<kerning first="90" second="90" amount="-0,25" />
|
||||
<kerning first="90" second="97" amount="-1,25" />
|
||||
<kerning first="90" second="101" amount="-1,375" />
|
||||
<kerning first="90" second="111" amount="-1,375" />
|
||||
<kerning first="90" second="119" amount="-1" />
|
||||
<kerning first="90" second="121" amount="-1,625" />
|
||||
<kerning first="90" second="199" amount="-0,5" />
|
||||
<kerning first="90" second="216" amount="-0,5" />
|
||||
<kerning first="90" second="230" amount="-1,25" />
|
||||
<kerning first="90" second="248" amount="-1,375" />
|
||||
<kerning first="90" second="338" amount="-0,5" />
|
||||
<kerning first="90" second="339" amount="-1,375" />
|
||||
<kerning first="118" second="111" amount="-0,375" />
|
||||
<kerning first="118" second="101" amount="-0,375" />
|
||||
<kerning first="91" second="84" amount="0,5" />
|
||||
<kerning first="91" second="106" amount="1,25" />
|
||||
<kerning first="97" second="118" amount="-0,375" />
|
||||
<kerning first="97" second="119" amount="-0,25" />
|
||||
<kerning first="97" second="121" amount="-0,375" />
|
||||
<kerning first="98" second="44" amount="-0,75" />
|
||||
<kerning first="98" second="46" amount="-0,5" />
|
||||
<kerning first="98" second="121" amount="-0,125" />
|
||||
<kerning first="118" second="97" amount="-1" />
|
||||
<kerning first="99" second="45" amount="-0,5" />
|
||||
<kerning first="99" second="84" amount="-2,5" />
|
||||
<kerning first="99" second="99" amount="-0,125" />
|
||||
<kerning first="99" second="231" amount="-0,125" />
|
||||
<kerning first="118" second="46" amount="-4,375" />
|
||||
<kerning first="118" second="45" amount="-1" />
|
||||
<kerning first="101" second="84" amount="-3,375" />
|
||||
<kerning first="102" second="34" amount="2,25" />
|
||||
<kerning first="102" second="39" amount="2,25" />
|
||||
<kerning first="102" second="41" amount="2,625" />
|
||||
<kerning first="102" second="42" amount="1,75" />
|
||||
<kerning first="102" second="44" amount="-3,875" />
|
||||
<kerning first="102" second="45" amount="-1,75" />
|
||||
<kerning first="102" second="46" amount="-3,875" />
|
||||
<kerning first="102" second="63" amount="3" />
|
||||
<kerning first="102" second="92" amount="2,375" />
|
||||
<kerning first="102" second="93" amount="2,625" />
|
||||
<kerning first="102" second="97" amount="-0,625" />
|
||||
<kerning first="102" second="99" amount="-0,5" />
|
||||
<kerning first="102" second="101" amount="-0,5" />
|
||||
<kerning first="102" second="102" amount="-0,375" />
|
||||
<kerning first="102" second="103" amount="-0,25" />
|
||||
<kerning first="102" second="106" amount="-0,5" />
|
||||
<kerning first="102" second="109" amount="-0,25" />
|
||||
<kerning first="102" second="110" amount="-0,25" />
|
||||
<kerning first="102" second="111" amount="-0,5" />
|
||||
<kerning first="102" second="112" amount="-0,25" />
|
||||
<kerning first="102" second="113" amount="-0,25" />
|
||||
<kerning first="102" second="114" amount="-0,25" />
|
||||
<kerning first="102" second="115" amount="-0,625" />
|
||||
<kerning first="102" second="117" amount="-0,5" />
|
||||
<kerning first="102" second="121" amount="-0,625" />
|
||||
<kerning first="102" second="125" amount="2,625" />
|
||||
<kerning first="102" second="233" amount="-0,5" />
|
||||
<kerning first="102" second="238" amount="3,125" />
|
||||
<kerning first="102" second="230" amount="-0,625" />
|
||||
<kerning first="102" second="248" amount="-0,5" />
|
||||
<kerning first="118" second="44" amount="-4,375" />
|
||||
<kerning first="116" second="121" amount="-0,5" />
|
||||
<kerning first="116" second="118" amount="-0,5" />
|
||||
<kerning first="116" second="116" amount="-0,375" />
|
||||
<kerning first="116" second="45" amount="-1" />
|
||||
<kerning first="103" second="106" amount="0,25" />
|
||||
<kerning first="104" second="118" amount="-0,5" />
|
||||
<kerning first="104" second="119" amount="-0,25" />
|
||||
<kerning first="104" second="121" amount="-0,5" />
|
||||
<kerning first="105" second="102" amount="0,125" />
|
||||
<kerning first="114" second="339" amount="-0,25" />
|
||||
<kerning first="114" second="248" amount="-0,25" />
|
||||
<kerning first="105" second="116" amount="0,125" />
|
||||
<kerning first="107" second="45" amount="-2,375" />
|
||||
<kerning first="107" second="101" amount="-0,5" />
|
||||
<kerning first="107" second="111" amount="-0,5" />
|
||||
<kerning first="107" second="248" amount="-0,5" />
|
||||
<kerning first="107" second="339" amount="-0,5" />
|
||||
<kerning first="114" second="230" amount="-1" />
|
||||
<kerning first="114" second="233" amount="-0,25" />
|
||||
<kerning first="114" second="231" amount="-0,25" />
|
||||
<kerning first="114" second="113" amount="-0,25" />
|
||||
<kerning first="108" second="108" amount="0,125" />
|
||||
<kerning first="108" second="116" amount="0,125" />
|
||||
<kerning first="108" second="238" amount="0,25" />
|
||||
<kerning first="108" second="239" amount="0,25" />
|
||||
<kerning first="114" second="111" amount="-0,25" />
|
||||
<kerning first="109" second="118" amount="-0,5" />
|
||||
<kerning first="109" second="119" amount="-0,25" />
|
||||
<kerning first="109" second="121" amount="-0,5" />
|
||||
<kerning first="110" second="118" amount="-0,5" />
|
||||
<kerning first="110" second="119" amount="-0,25" />
|
||||
<kerning first="110" second="121" amount="-0,5" />
|
||||
<kerning first="111" second="44" amount="-0,75" />
|
||||
<kerning first="111" second="46" amount="-0,5" />
|
||||
<kerning first="111" second="118" amount="-0,25" />
|
||||
<kerning first="111" second="120" amount="-0,5" />
|
||||
<kerning first="111" second="121" amount="-0,25" />
|
||||
<kerning first="114" second="103" amount="-0,25" />
|
||||
<kerning first="112" second="44" amount="-0,75" />
|
||||
<kerning first="112" second="46" amount="-0,5" />
|
||||
<kerning first="112" second="121" amount="-0,125" />
|
||||
<kerning first="114" second="101" amount="-0,25" />
|
||||
<kerning first="114" second="44" amount="-7,125" />
|
||||
<kerning first="114" second="45" amount="-0,625" />
|
||||
<kerning first="114" second="46" amount="-7,125" />
|
||||
<kerning first="114" second="97" amount="-0,875" />
|
||||
<kerning first="114" second="99" amount="-0,25" />
|
||||
<kerning first="114" second="100" amount="-0,25" />
|
||||
</kernings>
|
||||
</font>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 300 KiB |
|
|
@ -1,40 +0,0 @@
|
|||
#ifndef _CoreGl_Gl_h_
|
||||
#define _CoreGl_Gl_h_
|
||||
|
||||
#ifdef flagLINUXGL
|
||||
#define Time XTime
|
||||
#define Font XFont
|
||||
#define Display XDisplay
|
||||
#define Picture XPicture
|
||||
#define Screen XScreen
|
||||
#define Window XWindow
|
||||
#define Complex XComplex
|
||||
#include <X11/X.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xatom.h>
|
||||
#endif
|
||||
|
||||
#include <CoreGl/glew.h>
|
||||
|
||||
#ifdef flagWINGL
|
||||
#include <CoreGl/wglew.h>
|
||||
#endif
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#ifdef flagLINUXGL
|
||||
#include <GL/glx.h>
|
||||
#endif
|
||||
|
||||
#ifdef flagLINUXGL
|
||||
#undef Picture
|
||||
#undef Time
|
||||
#undef Font
|
||||
#undef Display
|
||||
#undef Screen
|
||||
#undef Window
|
||||
#undef Complex
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LTIMING(x) // RTIMING(x)
|
||||
|
||||
void SetSurface(SystemDraw& w, int x, int y, int cx, int cy, const RGBA *pixels)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void SetSurface(SystemDraw& w, const Rect& dest, const RGBA *pixels, Size psz, Point poff)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
Image ImageDraw::Get(bool pm) const
|
||||
{
|
||||
ImageBuffer result(image.GetSize());
|
||||
const RGBA *e = image.End();
|
||||
const RGBA *p = ~image;
|
||||
RGBA *t = ~result;
|
||||
if(has_alpha) {
|
||||
const RGBA *a = ~alpha;
|
||||
while(p < e) {
|
||||
*t = *p++;
|
||||
(t++)->a = (a++)->r;
|
||||
}
|
||||
if(pm)
|
||||
Premultiply(result);
|
||||
result.SetKind(IMAGE_ALPHA);
|
||||
}
|
||||
else {
|
||||
while(p < e) {
|
||||
*t = *p++;
|
||||
(t++)->a = 255;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Draw& ImageDraw::Alpha()
|
||||
{
|
||||
has_alpha = true;
|
||||
return alpha_painter;
|
||||
}
|
||||
|
||||
|
||||
ImageDraw::ImageDraw(Size sz)
|
||||
: ImageDraw__(sz.cx, sz.cy),
|
||||
BufferPainter(image),
|
||||
alpha_painter(alpha)
|
||||
{
|
||||
has_alpha = false;
|
||||
}
|
||||
|
||||
ImageDraw::ImageDraw(int cx, int cy)
|
||||
: ImageDraw__(cx, cy),
|
||||
BufferPainter(image),
|
||||
alpha_painter(alpha)
|
||||
{
|
||||
has_alpha = false;
|
||||
}
|
||||
|
||||
#define IMAGECLASS CoreGlImg
|
||||
#define IMAGEFILE <CoreGl/CoreGl.iml>
|
||||
#include <Draw/iml_source.h>
|
||||
|
||||
Image Image::Arrow() { return CoreGlImg::arrow(); }
|
||||
Image Image::Wait() { return CoreGlImg::wait(); }
|
||||
Image Image::IBeam() { return CoreGlImg::ibeam(); }
|
||||
Image Image::No() { return CoreGlImg::no(); }
|
||||
Image Image::SizeAll() { return CoreGlImg::sizeall(); }
|
||||
Image Image::SizeHorz() { return CoreGlImg::sizehorz(); }
|
||||
Image Image::SizeVert() { return CoreGlImg::sizevert(); }
|
||||
Image Image::SizeTopLeft() { return CoreGlImg::sizetopleft(); }
|
||||
Image Image::SizeTop() { return CoreGlImg::sizetop(); }
|
||||
Image Image::SizeTopRight() { return CoreGlImg::sizetopright(); }
|
||||
Image Image::SizeLeft() { return CoreGlImg::sizeleft(); }
|
||||
Image Image::SizeRight() { return CoreGlImg::sizeright(); }
|
||||
Image Image::SizeBottomLeft() { return CoreGlImg::sizebottomleft(); }
|
||||
Image Image::SizeBottom() { return CoreGlImg::sizebottom(); }
|
||||
Image Image::SizeBottomRight() { return CoreGlImg::sizebottomright(); }
|
||||
Image Image::Hand() { return CoreGlImg::hand(); }
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,103 +0,0 @@
|
|||
#ifndef _CoreGl_ResGl_h_
|
||||
#define _CoreGl_ResGl_h_
|
||||
|
||||
struct TextureResource : Moveable<TextureResource>
|
||||
{
|
||||
int64 serialId;
|
||||
int64 atlasSerialId;
|
||||
int realWidth;
|
||||
int realHeight;
|
||||
int width;
|
||||
int height;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
TextureResource(int w = 0, int h = 0)
|
||||
{
|
||||
serialId = -1;
|
||||
atlasSerialId = -1;
|
||||
realWidth = w;
|
||||
realHeight = h;
|
||||
width = w;
|
||||
height = h;
|
||||
x = 0;
|
||||
y = 0;
|
||||
}
|
||||
|
||||
String ToString() const
|
||||
{
|
||||
return Format("x: %d, y: %d, w: %d, h:%d (%d, %d) - %ld", x, y, width, height, realWidth, realHeight, serialId);
|
||||
}
|
||||
};
|
||||
|
||||
struct AtlasResource : Moveable<AtlasResource>
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
bool linear;
|
||||
Vector<Image> parts;
|
||||
Image Make(ArrayMap<int64, TextureResource>& textures);
|
||||
};
|
||||
|
||||
struct ImageResource : Moveable<ImageResource>
|
||||
{
|
||||
int type;
|
||||
bool linear;
|
||||
|
||||
//direct image
|
||||
Image img;
|
||||
//brc image
|
||||
const byte* data;
|
||||
int length;
|
||||
//disk image
|
||||
String fileName;
|
||||
};
|
||||
|
||||
struct Resources
|
||||
{
|
||||
enum {
|
||||
NEAREST_FILTERING = 1,
|
||||
LINEAR_FILTERING = 2,
|
||||
FORCE_FILTERING = 4,
|
||||
AUTO_ATLAS = 8,
|
||||
FORCE_BIND = 16
|
||||
};
|
||||
|
||||
Vector<ImageResource> staticImages;
|
||||
VectorMap<String, AtlasResource> staticAtlases;
|
||||
Vector<Font> staticFonts;
|
||||
|
||||
TextureResource autoAtlas;
|
||||
ImageBuffer autoAtlasBuffer;
|
||||
Image autoAtlasImage;
|
||||
int px, py, maxh;
|
||||
|
||||
int bindedTextures;
|
||||
|
||||
int64 currentSerialId;
|
||||
ArrayMap<int64, TextureResource> textures;
|
||||
ArrayMap<String, OpenGLFont> fonts;
|
||||
|
||||
const TextureResource& CreateTexture(const Image& img, int width = -1, int height = -1);
|
||||
void CreateSubTexture(const TextureResource& t, const Image& img, int x, int y);
|
||||
|
||||
const TextureResource& Bind(const Image& img, int opts = NEAREST_FILTERING);
|
||||
bool Bind(int64 serialId, int opts = NEAREST_FILTERING);
|
||||
void Add(const Image& img, bool linear = false);
|
||||
void Add(Iml* images, bool linear = false);
|
||||
void Add(const Font& fnt);
|
||||
void AddAtlas(const char* atlasName, const Image& img);
|
||||
void AddAtlas(const char* atlasName, Iml* images);
|
||||
OpenGLFont& GetFont(const char* fontName, int fontHeight, bool preload = false, const byte* fontDef = NULL, const byte** imagesData = NULL, const int* imagesSize = NULL, int imagesCount = 0);
|
||||
OpenGLFont& GetFont(const Font& font, bool preload = false);
|
||||
void SetTextureFiltring(int opts);
|
||||
|
||||
void BindStatic();
|
||||
|
||||
Resources();
|
||||
};
|
||||
|
||||
extern Resources resources;
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
BINARY(alphaMagFrag, "AlphaMag.frag")
|
||||
BINARY(alphaMagVert, "AlphaMag.vert")
|
||||
BINARY(blurVert, "Blur.vert")
|
||||
BINARY(blurFrag, "Blur.frag")
|
||||
BINARY(tahomaNFontDef, "Fonts/TahomaN.fnt")
|
||||
BINARY_ARRAY(tahomaNFontImg, 0, "Fonts/TahomaN_0.png")
|
||||
BINARY(tahomaBFontDef, "Fonts/TahomaB.fnt")
|
||||
BINARY_ARRAY(tahomaBFontImg, 0, "Fonts/TahomaB_0.png")
|
||||
|
|
@ -1,362 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "CoreGl.h"
|
||||
#include <plugin/png/png.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
Resources resources;
|
||||
|
||||
Resources::Resources() : autoAtlas(1024, 1024)
|
||||
{
|
||||
px = 0;
|
||||
py = 0;
|
||||
maxh = 0;
|
||||
currentSerialId = -1;
|
||||
bindedTextures = 0;
|
||||
}
|
||||
|
||||
void Resources::SetTextureFiltring(int opts)
|
||||
{
|
||||
if(opts & LINEAR_FILTERING)
|
||||
{
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
}
|
||||
else if(opts & NEAREST_FILTERING)
|
||||
{
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
}
|
||||
}
|
||||
|
||||
const TextureResource& Resources::CreateTexture(const Image& img, int width, int height)
|
||||
{
|
||||
int64 serialId = img.GetSerialId();
|
||||
TextureResource& t = textures.Add(serialId);
|
||||
t.serialId = serialId;
|
||||
t.atlasSerialId = -1;
|
||||
t.width = width > 0 ? width : img.GetWidth();
|
||||
t.height = height > 0 ? height : img.GetHeight();
|
||||
t.realWidth = t.width;
|
||||
t.realHeight = t.height;
|
||||
t.x = 0;
|
||||
t.y = 0;
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, t.width, t.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, img);
|
||||
++bindedTextures;
|
||||
return t;
|
||||
}
|
||||
|
||||
void Resources::CreateSubTexture(const TextureResource& t, const Image& img, int x, int y)
|
||||
{
|
||||
Bind(autoAtlas.serialId, 0);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, img.GetWidth(), img.GetHeight(), GL_BGRA, GL_UNSIGNED_BYTE, img);
|
||||
}
|
||||
|
||||
const TextureResource& Resources::Bind(const Image& img, int opts)
|
||||
{
|
||||
int64 serialId = img.GetSerialId();
|
||||
|
||||
const TextureResource* texture = textures.FindPtr(serialId);
|
||||
if(texture)
|
||||
{
|
||||
if(texture->atlasSerialId >= 0)
|
||||
serialId = texture->atlasSerialId;
|
||||
}
|
||||
else if(opts & AUTO_ATLAS)
|
||||
{
|
||||
int w = img.GetWidth();
|
||||
int h = img.GetHeight();
|
||||
|
||||
if(w <= autoAtlas.width && h <= autoAtlas.height && w <= 64 && h <= 64)
|
||||
{
|
||||
bool add = px + w <= autoAtlas.width && py + h <= autoAtlas.height;
|
||||
|
||||
if(!add)
|
||||
{
|
||||
if(py + maxh + h > autoAtlas.height)
|
||||
{
|
||||
add = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
px = 0;
|
||||
py += maxh;
|
||||
maxh = 0;
|
||||
add = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(add)
|
||||
{
|
||||
if(h > maxh)
|
||||
maxh = h;
|
||||
|
||||
TextureResource& t = textures.Add(img.GetSerialId());
|
||||
t.atlasSerialId = autoAtlas.serialId;
|
||||
t.width = w;
|
||||
t.height = h;
|
||||
t.realWidth = autoAtlas.width;
|
||||
t.realHeight = autoAtlas.height;
|
||||
t.x = px;
|
||||
t.y = py;
|
||||
|
||||
CreateSubTexture(autoAtlas, img, px, py);
|
||||
Copy(autoAtlasImage, Point(px, py), img, img.GetSize());
|
||||
|
||||
px += w;
|
||||
|
||||
texture = &t;
|
||||
serialId = autoAtlas.serialId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!Bind(serialId, opts))
|
||||
return *texture;
|
||||
|
||||
if(!texture)
|
||||
{
|
||||
texture = &CreateTexture(img);
|
||||
}
|
||||
|
||||
return *texture;
|
||||
}
|
||||
|
||||
bool Resources::Bind(int64 serialId, int opts)
|
||||
{
|
||||
if(!(opts & FORCE_BIND) && serialId == currentSerialId)
|
||||
{
|
||||
if(opts & FORCE_FILTERING)
|
||||
SetTextureFiltring(opts);
|
||||
return false;
|
||||
}
|
||||
|
||||
currentSerialId = serialId;
|
||||
glBindTexture(GL_TEXTURE_2D, (GLuint) serialId);
|
||||
SetTextureFiltring(opts);
|
||||
return true;
|
||||
}
|
||||
|
||||
void Resources::BindStatic()
|
||||
{
|
||||
if(autoAtlas.serialId < 0)
|
||||
{
|
||||
autoAtlasBuffer.Create(autoAtlas.width, autoAtlas.height);
|
||||
Fill(autoAtlasBuffer, RGBAZero(), autoAtlasBuffer.GetLength());
|
||||
autoAtlasImage = autoAtlasBuffer;
|
||||
Bind(autoAtlasImage.GetSerialId());
|
||||
autoAtlas = CreateTexture(autoAtlasImage);
|
||||
}
|
||||
|
||||
if(!staticImages.IsEmpty())
|
||||
{
|
||||
for(int i = 0; i < staticImages.GetCount(); i++)
|
||||
Bind(staticImages[i].img, staticImages[i].linear ? Resources::LINEAR_FILTERING : Resources::NEAREST_FILTERING);
|
||||
staticImages.Clear();
|
||||
}
|
||||
|
||||
if(!staticAtlases.IsEmpty())
|
||||
{
|
||||
for(int i = 0; i < staticAtlases.GetCount(); i++)
|
||||
Bind(staticAtlases[i].Make(textures), staticAtlases[i].linear ? Resources::LINEAR_FILTERING : Resources::NEAREST_FILTERING);
|
||||
staticAtlases.Clear();
|
||||
}
|
||||
|
||||
if(!staticFonts.IsEmpty())
|
||||
{
|
||||
for(int i = 0; i < staticFonts.GetCount(); i++)
|
||||
GetFont(staticFonts[i], true);
|
||||
staticFonts.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void Resources::Add(const Image& img, bool linear)
|
||||
{
|
||||
ImageResource& ir = staticImages.Add();
|
||||
ir.img = img;
|
||||
ir.linear = linear;
|
||||
}
|
||||
|
||||
void Resources::Add(const Font& fnt)
|
||||
{
|
||||
Font& f = staticFonts.Add(fnt);
|
||||
}
|
||||
|
||||
void Resources::Add(Iml* images, bool linear)
|
||||
{
|
||||
for(int i = 0; i < images->GetCount(); i++)
|
||||
Add(images->Get(i), linear);
|
||||
}
|
||||
|
||||
void Resources::AddAtlas(const char* atlasName, const Image& img)
|
||||
{
|
||||
AtlasResource& atlas = staticAtlases.GetAdd(atlasName);
|
||||
atlas.linear = false;
|
||||
atlas.parts.Add(img);
|
||||
}
|
||||
|
||||
void Resources::AddAtlas(const char* atlasName, Iml* images)
|
||||
{
|
||||
AtlasResource& atlas = staticAtlases.GetAdd(atlasName);
|
||||
atlas.linear = false;
|
||||
for(int i = 0; i < images->GetCount(); i++)
|
||||
atlas.parts.Add(images->Get(i));
|
||||
}
|
||||
|
||||
Image AtlasResource::Make(ArrayMap<int64, TextureResource>& textures)
|
||||
{
|
||||
width = 512;
|
||||
height = 512;
|
||||
|
||||
ImageBuffer ib(width, height);
|
||||
Fill(ib, RGBAZero(), ib.GetLength());
|
||||
|
||||
Point p(0, 0);
|
||||
int maxh = 0;
|
||||
|
||||
int tidx = textures.GetCount();
|
||||
|
||||
for(int i = 0; i < parts.GetCount(); i++)
|
||||
{
|
||||
Image& img = parts[i];
|
||||
|
||||
int w = img.GetWidth();
|
||||
int h = img.GetHeight();
|
||||
|
||||
if(w > width || h > height)
|
||||
continue;
|
||||
|
||||
if(p.x + w > width)
|
||||
{
|
||||
if(p.y + maxh + h > height)
|
||||
continue;
|
||||
|
||||
p.x = 0;
|
||||
p.y += maxh;
|
||||
maxh = 0;
|
||||
}
|
||||
|
||||
if(h > maxh)
|
||||
maxh = h;
|
||||
|
||||
TextureResource& t = textures.Add(img.GetSerialId());
|
||||
t.width = w;
|
||||
t.height = h;
|
||||
t.realWidth = width;
|
||||
t.realHeight = height;
|
||||
t.x = p.x;
|
||||
t.y = p.y;
|
||||
|
||||
Copy(ib, p, img, img.GetSize());
|
||||
|
||||
p.x += w;
|
||||
}
|
||||
|
||||
Image finalImg(ib);
|
||||
int64 finalSerialId = finalImg.GetSerialId();
|
||||
|
||||
for(int i = tidx; i < textures.GetCount(); i++)
|
||||
textures[i].atlasSerialId = finalSerialId;
|
||||
|
||||
return finalImg;
|
||||
}
|
||||
|
||||
OpenGLFont& Resources::GetFont(const char* fontName, int fontHeight, bool preload, const byte* fontDef, const byte** imagesData, const int* imagesSize, int imagesCount)
|
||||
{
|
||||
int n = fonts.Find(fontName);
|
||||
OpenGLFont* fgl = NULL;
|
||||
if(n >= 0)
|
||||
fgl = &fonts[n];
|
||||
else
|
||||
{
|
||||
fgl = &fonts.Add(fontName);
|
||||
fgl->preload = preload;
|
||||
|
||||
if(fontDef)
|
||||
fgl->LoadBrc(fontDef, imagesData, imagesSize, imagesCount);
|
||||
else
|
||||
fgl->Load(fontName);
|
||||
}
|
||||
|
||||
fgl->scale = (fontHeight * 96.f / 72.f) / 72.f;
|
||||
return *fgl;
|
||||
}
|
||||
|
||||
OpenGLFont& Resources::GetFont(const Font& font, bool preload)
|
||||
{
|
||||
if(font.IsBold())
|
||||
return GetFont("TahomaB", font.GetHeight(), preload,
|
||||
tahomaBFontDef, (const byte**) tahomaBFontImg, tahomaBFontImg_length, tahomaBFontImg_count);
|
||||
else
|
||||
return GetFont("TahomaN", font.GetHeight(), preload,
|
||||
tahomaNFontDef, (const byte**) tahomaNFontImg, tahomaNFontImg_length, tahomaNFontImg_count);
|
||||
}
|
||||
|
||||
int64 GetHighTickCount()
|
||||
{
|
||||
#ifdef PLATFORM_WIN32
|
||||
static int64 counterFreq = 0;
|
||||
if(counterFreq == 0)
|
||||
{
|
||||
if(!QueryPerformanceFrequency((LARGE_INTEGER*) &counterFreq))
|
||||
counterFreq = 0;
|
||||
}
|
||||
if(counterFreq > 0)
|
||||
{
|
||||
int64 counter;
|
||||
QueryPerformanceCounter((LARGE_INTEGER*) &counter);
|
||||
return counter * 1000 / counterFreq;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetTickCount();
|
||||
}
|
||||
#else
|
||||
return GetTickCount();
|
||||
#endif
|
||||
}
|
||||
|
||||
float GetFps()
|
||||
{
|
||||
static float fps = 0.0f;
|
||||
static int64 updateInterval = 1000;
|
||||
static int64 timeSinceLastUpdate = 0;
|
||||
static int64 frameCount = 0;
|
||||
static int64 currentTick;
|
||||
static int64 lastTick;
|
||||
static bool isFirst = true;
|
||||
|
||||
if(isFirst)
|
||||
{
|
||||
currentTick = frameInfo.curr_tick_count;
|
||||
lastTick = currentTick;
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
frameCount++;
|
||||
currentTick = frameInfo.curr_tick_count;
|
||||
|
||||
int64 elapsed = currentTick - lastTick;
|
||||
|
||||
lastTick = currentTick;
|
||||
timeSinceLastUpdate += elapsed;
|
||||
|
||||
if (timeSinceLastUpdate > updateInterval)
|
||||
{
|
||||
if (timeSinceLastUpdate)
|
||||
{
|
||||
fps = (frameCount / float(timeSinceLastUpdate)) * 1000.f;
|
||||
frameCount = 0;
|
||||
timeSinceLastUpdate -= updateInterval;
|
||||
}
|
||||
}
|
||||
|
||||
return fps;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "SceneGraph.h"
|
||||
/*
|
||||
GraphNode::GraphNode() : next(NULL), prev(NULL)
|
||||
{
|
||||
}
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
#ifndef _WinGl_SceneGraph_h_
|
||||
#define _WinGl_SceneGraph_h_
|
||||
/*
|
||||
struct GraphNode : Moveable<GraphNode>
|
||||
{
|
||||
RGBA color;
|
||||
double x, y, z;
|
||||
|
||||
GraphNode* prev;
|
||||
GraphNode* next;
|
||||
|
||||
GraphNode();
|
||||
};
|
||||
|
||||
class SceneGraph
|
||||
{
|
||||
private:
|
||||
GraphNode* root;
|
||||
|
||||
public:
|
||||
|
||||
};
|
||||
*/
|
||||
#endif
|
||||
|
|
@ -1,332 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "Scrollbar.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void AlignedFrame::FrameLayout(Rect &r)
|
||||
{
|
||||
switch(layout)
|
||||
{
|
||||
case LEFT:
|
||||
LayoutFrameLeft(r, this, framesize);
|
||||
break;
|
||||
case TOP:
|
||||
LayoutFrameTop(r, this, framesize);
|
||||
break;
|
||||
case RIGHT:
|
||||
LayoutFrameRight(r, this, framesize);
|
||||
break;
|
||||
case BOTTOM:
|
||||
LayoutFrameBottom(r, this, framesize);
|
||||
break;
|
||||
}
|
||||
r.top += border;
|
||||
r.left += border;
|
||||
r.right -= border;
|
||||
r.bottom -= border;
|
||||
}
|
||||
|
||||
void AlignedFrame::FrameAddSize(Size& sz)
|
||||
{
|
||||
sz += border * 2;
|
||||
IsVert() ? sz.cx += framesize : sz.cy += framesize;
|
||||
}
|
||||
|
||||
void AlignedFrame::FramePaint(Draw& w, const Rect& r)
|
||||
{
|
||||
if(border > 0)
|
||||
{
|
||||
Rect n = r;
|
||||
switch(layout)
|
||||
{
|
||||
case LEFT:
|
||||
n.left += framesize;
|
||||
break;
|
||||
case TOP:
|
||||
n.top += framesize;
|
||||
break;
|
||||
case RIGHT:
|
||||
n.right -= framesize;
|
||||
break;
|
||||
case BOTTOM:
|
||||
n.bottom -= framesize;
|
||||
break;
|
||||
}
|
||||
ViewFrame().FramePaint(w, n);
|
||||
}
|
||||
else
|
||||
FrameCtrl<Ctrl>::FramePaint(w, r);
|
||||
}
|
||||
|
||||
AlignedFrame& AlignedFrame::SetFrameSize(int sz, bool refresh)
|
||||
{
|
||||
framesize = sz;
|
||||
if (refresh) RefreshParentLayout();
|
||||
return *this;
|
||||
}
|
||||
|
||||
void AlignedFrame::Fix(Size& sz)
|
||||
{
|
||||
if(IsVert())
|
||||
Swap(sz.cx, sz.cy);
|
||||
}
|
||||
|
||||
void AlignedFrame::Fix(Point& p)
|
||||
{
|
||||
if(IsVert())
|
||||
Swap(p.x, p.y);
|
||||
}
|
||||
|
||||
Size AlignedFrame::Fixed(const Size& sz)
|
||||
{
|
||||
return IsVert() ? Size(sz.cy, sz.cx) : Size(sz.cx, sz.cy);
|
||||
}
|
||||
|
||||
Point AlignedFrame::Fixed(const Point& p)
|
||||
{
|
||||
return IsVert() ? Point(p.y, p.x) : Point(p.x, p.y);
|
||||
}
|
||||
|
||||
// SlimScrollBar
|
||||
SlimScrollBar::SlimScrollBar()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
void SlimScrollBar::Clear()
|
||||
{
|
||||
total = 0;
|
||||
t = 0;
|
||||
pos = 0;
|
||||
prev_ps = 0;
|
||||
ps = 0;
|
||||
start_pos = 0;
|
||||
new_pos = 0;
|
||||
old_pos = 0;
|
||||
isend = true;
|
||||
isbegin = true;
|
||||
sz.Clear();
|
||||
ready = false;
|
||||
}
|
||||
|
||||
void SlimScrollBar::UpdatePos(bool update, bool whenscroll)
|
||||
{
|
||||
sz = GetSize();
|
||||
Fix(sz);
|
||||
|
||||
if(total <= 0 || sz.cx <= 0)
|
||||
{
|
||||
cs = ics = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
cs = sz.cx / double(t + 0.5);
|
||||
ics = t / double(sz.cx);
|
||||
}
|
||||
|
||||
size = max(0.0, sz.cx * cs);
|
||||
|
||||
if(update)
|
||||
pos = new_pos - start_pos;
|
||||
|
||||
isbegin = t < sz.cx;
|
||||
isend = t < sz.cx;
|
||||
|
||||
if(pos <= 0)
|
||||
{
|
||||
pos = 0;
|
||||
isbegin = true;
|
||||
}
|
||||
else if(pos + size >= sz.cx)
|
||||
{
|
||||
pos = sz.cx - size;
|
||||
isend = true;
|
||||
}
|
||||
|
||||
ps = t > sz.cx ? pos * ics : 0;
|
||||
|
||||
if(whenscroll && int(ps) != int(prev_ps))
|
||||
WhenScroll();
|
||||
|
||||
prev_ps = ps;
|
||||
}
|
||||
|
||||
void SlimScrollBar::Paint(Draw &w)
|
||||
{
|
||||
if(!ready)
|
||||
{
|
||||
UpdatePos();
|
||||
ready = true;
|
||||
}
|
||||
|
||||
Ctrl* q = GetParent();
|
||||
if(!q)
|
||||
return;
|
||||
|
||||
Size sz = GetSize();
|
||||
Size psz = q->GetSize();
|
||||
|
||||
if(IsHorz() && total > psz.cx || IsVert() && total > psz.cy) {
|
||||
Point p(int(pos), 0);
|
||||
Size rsz(int(size), IsVert() ? sz.cx : sz.cy);
|
||||
Fix(p);
|
||||
Fix(rsz);
|
||||
#ifdef COLOR_ALPHA
|
||||
w.DrawRect(p.x, p.y, rsz.cx, rsz.cy, White().Alpha(150));
|
||||
#else
|
||||
SystemDraw& sw = (SystemDraw&) w;
|
||||
sw.alpha = 150.f;
|
||||
w.DrawRect(p.x, p.y, rsz.cx, rsz.cy, White);
|
||||
sw.alpha = 255.f;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void SlimScrollBar::Layout()
|
||||
{
|
||||
Size csz = GetSize();
|
||||
Fix(csz);
|
||||
if(ready && csz != sz)
|
||||
{
|
||||
sz = csz;
|
||||
UpdatePos(false);
|
||||
}
|
||||
}
|
||||
|
||||
void SlimScrollBar::LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
SetCapture();
|
||||
Fix(p);
|
||||
old_pos = new_pos = p.x;
|
||||
if(p.x < pos || p.x > pos + size)
|
||||
start_pos = size / 2;
|
||||
else
|
||||
start_pos = tabs(p.x - pos);
|
||||
UpdatePos();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
ReleaseCapture();
|
||||
Fix(p);
|
||||
old_pos = p.x;
|
||||
}
|
||||
|
||||
void SlimScrollBar::MouseMove(Point p, dword keyflags)
|
||||
{
|
||||
if(!HasCapture())
|
||||
return;
|
||||
|
||||
Fix(p);
|
||||
new_pos = p.x;
|
||||
UpdatePos();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::MouseWheel(Point p, int zdelta, dword keyflags)
|
||||
{
|
||||
AddPos(-zdelta / 4, true);
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
|
||||
int SlimScrollBar::GetPos() const
|
||||
{
|
||||
return int(ps);
|
||||
}
|
||||
|
||||
void SlimScrollBar::SetPos(int p, bool dontscale, bool whenscroll)
|
||||
{
|
||||
pos = total > 0 ? dontscale ? p : iscale(p, sz.cx, t) : 0;
|
||||
UpdatePos(false, whenscroll);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::AddPos(int p, bool dontscale, bool whenscroll)
|
||||
{
|
||||
pos += total > 0 ? dontscale ? p : iscale(p, sz.cx, t) : 0;
|
||||
UpdatePos(false, whenscroll);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
int SlimScrollBar::GetTotal() const
|
||||
{
|
||||
return total;
|
||||
}
|
||||
|
||||
void SlimScrollBar::SetTotal(int total, bool whenscroll)
|
||||
{
|
||||
Ctrl* q = GetParent();
|
||||
|
||||
Size sz = GetSize();
|
||||
Size psz = q ? q->GetSize() : Size(0, 0);
|
||||
|
||||
Fix(sz);
|
||||
Fix(psz);
|
||||
|
||||
this->total = total;
|
||||
this->t = total;
|
||||
if(q)
|
||||
this->t -= psz.cx - sz.cx;
|
||||
|
||||
UpdatePos(false, whenscroll);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::AddTotal(int t)
|
||||
{
|
||||
sz = GetSize();
|
||||
Fix(sz);
|
||||
total += t;
|
||||
if(total <= 0 || sz.cx <= 0)
|
||||
cs = ics = 0;
|
||||
else
|
||||
cs = sz.cx / ((double) t + 0.5);
|
||||
size = int(sz.cx * cs);
|
||||
ps = min(ps, (double)(t - sz.cx));
|
||||
pos = (int)(ps * cs);
|
||||
old_pos = new_pos = (int)(pos - start_pos);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::GoEnd(bool whenscroll)
|
||||
{
|
||||
pos = total;
|
||||
UpdatePos(false, whenscroll);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SlimScrollBar::GoBegin(bool whenscroll)
|
||||
{
|
||||
pos = 0;
|
||||
UpdatePos(false, whenscroll);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
bool SlimScrollBar::IsEnd()
|
||||
{
|
||||
return isend;
|
||||
}
|
||||
|
||||
bool SlimScrollBar::IsBegin()
|
||||
{
|
||||
return isbegin;
|
||||
}
|
||||
|
||||
void SlimScrollBar::Set(const SlimScrollBar& t)
|
||||
{
|
||||
total = t.total;
|
||||
pos = t.pos;
|
||||
ps = t.ps;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
bool SlimScrollBar::IsScrollable() const
|
||||
{
|
||||
return t > sz.cx && sz.cx > 0;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
#ifndef _CoreGl_Scrollbar_h_
|
||||
#define _CoreGl_Scrollbar_h_
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
struct AlignedFrame : FrameCtrl<Ctrl>
|
||||
{
|
||||
int layout;
|
||||
int framesize;
|
||||
int border;
|
||||
public:
|
||||
enum
|
||||
{
|
||||
LEFT = 0,
|
||||
TOP = 1,
|
||||
RIGHT = 2,
|
||||
BOTTOM = 3
|
||||
};
|
||||
|
||||
AlignedFrame() : layout(TOP), framesize(0), border(0) {}
|
||||
|
||||
virtual void FrameAddSize(Size& sz);
|
||||
virtual void FramePaint(Draw& w, const Rect& r);
|
||||
virtual void FrameLayout(Rect& r);
|
||||
|
||||
bool IsVert() const { return (layout & 1) == 0; }
|
||||
bool IsHorz() const { return layout & 1; }
|
||||
bool IsTL() const { return layout < 2; }
|
||||
bool IsBR() const { return layout >= 2; }
|
||||
|
||||
AlignedFrame& SetAlign(int align) { layout = align; FrameSet(); RefreshParentLayout(); return *this; }
|
||||
AlignedFrame& SetLeft() { return SetAlign(LEFT); }
|
||||
AlignedFrame& SetTop() { return SetAlign(TOP); }
|
||||
AlignedFrame& SetRight() { return SetAlign(RIGHT); }
|
||||
AlignedFrame& SetBottom() { return SetAlign(BOTTOM); }
|
||||
AlignedFrame& SetFrameSize(int sz, bool refresh = true);
|
||||
|
||||
int GetAlign() const { return layout; }
|
||||
int GetFrameSize() const { return framesize; }
|
||||
int GetBorder() const { return border; }
|
||||
protected:
|
||||
void Fix(Size& sz);
|
||||
void Fix(Point& p);
|
||||
Size Fixed(const Size& sz);
|
||||
Point Fixed(const Point& p);
|
||||
|
||||
bool HasBorder() { return border >= 0; }
|
||||
AlignedFrame& SetBorder(int _border) { border = _border; return *this; }
|
||||
|
||||
virtual void FrameSet() { }
|
||||
};
|
||||
|
||||
class SlimScrollBar : public AlignedFrame
|
||||
{
|
||||
private:
|
||||
int total;
|
||||
int t;
|
||||
bool isend;
|
||||
bool isbegin;
|
||||
double pos, prev_ps, ps;
|
||||
int new_pos;
|
||||
int old_pos;
|
||||
double start_pos;
|
||||
double size;
|
||||
double cs, ics;
|
||||
virtual void UpdatePos(bool update = true, bool whenscroll = true);
|
||||
void RefreshScroll();
|
||||
bool ready;
|
||||
Size sz;
|
||||
public:
|
||||
SlimScrollBar();
|
||||
|
||||
virtual void Paint(Draw& w);
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
|
||||
virtual void Layout();
|
||||
|
||||
int GetPos() const;
|
||||
void SetPos(int p, bool dontscale = false, bool whenscroll = true);
|
||||
void AddPos(int p, bool dontscale = false, bool whenscroll = true);
|
||||
int GetTotal() const;
|
||||
void AddTotal(int t);
|
||||
void SetTotal(int t, bool whenscroll = true);
|
||||
void GoEnd(bool whenscroll = true);
|
||||
void GoBegin(bool whenscroll = true);
|
||||
bool IsEnd();
|
||||
bool IsBegin();
|
||||
void Clear();
|
||||
void Set(const SlimScrollBar& t);
|
||||
bool IsScrollable() const;
|
||||
Callback WhenScroll;
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,387 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "Shaders.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void Shader::PrintShaderInfoLog(GLuint obj, const char* fileName)
|
||||
{
|
||||
int infoLength = 0;
|
||||
int charsWritten = 0;
|
||||
|
||||
glGetShaderiv(obj, GL_INFO_LOG_LENGTH, &infoLength);
|
||||
|
||||
if(infoLength > 0)
|
||||
{
|
||||
char* info = new char[infoLength];
|
||||
glGetShaderInfoLog(obj, infoLength, &charsWritten, info);
|
||||
if(charsWritten > 0)
|
||||
{
|
||||
compileError = info;
|
||||
FileOut f(fileName);
|
||||
f.Put(info);
|
||||
}
|
||||
delete[] info;
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::PrintProgramInfoLog(GLuint obj, const char* fileName)
|
||||
{
|
||||
int infoLength = 0;
|
||||
int charsWritten = 0;
|
||||
|
||||
glGetProgramiv(obj, GL_INFO_LOG_LENGTH, &infoLength);
|
||||
|
||||
if(infoLength > 0)
|
||||
{
|
||||
char* info = new char[infoLength];
|
||||
glGetShaderInfoLog(obj, infoLength, &charsWritten, info);
|
||||
if(charsWritten > 0)
|
||||
{
|
||||
FileOut f(fileName);
|
||||
f.Put(info);
|
||||
}
|
||||
delete[] info;
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::PrintProgramValidationLog(GLuint obj, const char* fileName)
|
||||
{
|
||||
char log[1024];
|
||||
int len = 0;
|
||||
glValidateProgram(obj);
|
||||
glGetProgramInfoLog(obj, 1024, &len, log);
|
||||
if(len > 0)
|
||||
{
|
||||
FileOut f(fileName);
|
||||
f.Put(log);
|
||||
}
|
||||
}
|
||||
|
||||
bool Shader::CheckGLError()
|
||||
{
|
||||
unsigned int lastError = glGetError();
|
||||
if(GL_NO_ERROR != lastError)
|
||||
{
|
||||
error = (const char*) gluErrorString(lastError);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Shader::IsProgramCompiled(int program)
|
||||
{
|
||||
GLint result = GL_FALSE;
|
||||
glGetShaderiv(program, GL_COMPILE_STATUS, &result);
|
||||
return result == GL_TRUE;
|
||||
}
|
||||
|
||||
bool Shader::IsProgramLinked(int program)
|
||||
{
|
||||
GLint result = GL_FALSE;
|
||||
glGetProgramiv(program, GL_LINK_STATUS, &result);
|
||||
return result == GL_TRUE;
|
||||
}
|
||||
|
||||
int Shader::CompileProgram(const char* vs, const char* fs, const char* gs)
|
||||
{
|
||||
vertSrc = vs;
|
||||
fragSrc = fs;
|
||||
geomSrc = gs;
|
||||
|
||||
const GLchar* vertexShaderSrc = (const GLchar*) vertSrc;
|
||||
const GLchar* fragmentShaderSrc = (const GLchar*) fragSrc;
|
||||
const GLchar* geometryShaderSrc = (const GLchar*) geomSrc;
|
||||
|
||||
DeleteFile("shader_vertex.log");
|
||||
DeleteFile("shader_fragment.log");
|
||||
DeleteFile("shader_geometry.log");
|
||||
DeleteFile("shader_link.log");
|
||||
DeleteFile("shader_validation.log");
|
||||
|
||||
GLenum vertexShader = 0;
|
||||
GLenum fragmentShader = 0;
|
||||
GLenum geometryShader = 0;
|
||||
|
||||
if(!vertSrc.IsEmpty())
|
||||
{
|
||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertexShader, 1, &vertexShaderSrc, NULL);
|
||||
glCompileShader(vertexShader);
|
||||
|
||||
if(!IsProgramCompiled(vertexShader))
|
||||
{
|
||||
PrintShaderInfoLog(vertexShader, "shader_vertex.log");
|
||||
error = "Vertex shader compilation error:\n\n" + compileError;
|
||||
glDeleteShader(vertexShader);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if(!fragSrc.IsEmpty())
|
||||
{
|
||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragmentShader, 1, &fragmentShaderSrc, NULL);
|
||||
glCompileShader(fragmentShader);
|
||||
|
||||
if(!IsProgramCompiled(fragmentShader))
|
||||
{
|
||||
PrintShaderInfoLog(fragmentShader, "shader_fragment.log");
|
||||
error = "Fragment shader compilation error:\n\n" + compileError;
|
||||
glDeleteShader(fragmentShader);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if(!geomSrc.IsEmpty())
|
||||
{
|
||||
geometryShader = glCreateShader(GL_GEOMETRY_SHADER);
|
||||
glShaderSource(geometryShader, 1, &geometryShaderSrc, NULL);
|
||||
glCompileShader(geometryShader);
|
||||
|
||||
if(!IsProgramCompiled(geometryShader))
|
||||
{
|
||||
PrintShaderInfoLog(geometryShader, "shader_geometry.log");
|
||||
error = "Geometry shader compilation error:\n\n" + compileError;
|
||||
glDeleteShader(geometryShader);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
program = glCreateProgram();
|
||||
|
||||
if(program > 0)
|
||||
{
|
||||
if(vertexShader > 0)
|
||||
glAttachShader(program, vertexShader);
|
||||
if(fragmentShader > 0)
|
||||
glAttachShader(program, fragmentShader);
|
||||
if(geometryShader > 0)
|
||||
glAttachShader(program, geometryShader);
|
||||
|
||||
glLinkProgram(program);
|
||||
if(!IsProgramLinked(program))
|
||||
{
|
||||
PrintProgramInfoLog(program, "shader_link.log");
|
||||
PrintProgramValidationLog(program, "shader_validation.log");
|
||||
glDeleteProgram(program);
|
||||
program = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
program = -1;
|
||||
|
||||
return program;
|
||||
}
|
||||
|
||||
int Shader::CompileProgram(const byte* vs, const byte* fs, const byte* gs)
|
||||
{
|
||||
return CompileProgram((const char*) vs, (const char*) fs, (const char*) gs);
|
||||
}
|
||||
|
||||
int Shader::GetProgram()
|
||||
{
|
||||
return program;
|
||||
}
|
||||
|
||||
String Shader::GetError()
|
||||
{
|
||||
return error;
|
||||
}
|
||||
|
||||
int Shader::GetUniformId(const char* var)
|
||||
{
|
||||
int n = uniforms.Find(var);
|
||||
if(n < 0)
|
||||
{
|
||||
int id = glGetUniformLocation(program, var);
|
||||
CheckGLError();
|
||||
if(id >= 0)
|
||||
uniforms.Add(var, id);
|
||||
return id;
|
||||
}
|
||||
else
|
||||
return uniforms[n];
|
||||
}
|
||||
|
||||
int Shader::GetAttributeId(const char* var)
|
||||
{
|
||||
int n = attributes.Find(var);
|
||||
if(n < 0)
|
||||
{
|
||||
int id = glGetAttribLocation(program, var);
|
||||
CheckGLError();
|
||||
if(id >= 0)
|
||||
attributes.Add(var, id);
|
||||
return id;
|
||||
}
|
||||
else
|
||||
return attributes[n];
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, float v)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform1f(id, v);
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, bool v)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform1i(id, int(v));
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, int v)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform1i(id, v);
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, float v0, float v1)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform2f(id, v0, v1);
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, float v0, float v1, float v2)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform3f(id, v0, v1, v2);
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, float v0, float v1, float v2, float v3)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
glUniform4f(id, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
void Shader::SetUniform(const char* var, float* v, int size, int count)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
{
|
||||
if(size == 2)
|
||||
glUniform2fv(id, count, v);
|
||||
else if(size == 3)
|
||||
glUniform3fv(id, count, v);
|
||||
else if(size == 4)
|
||||
glUniform4fv(id, count, v);
|
||||
else if(size == 16)
|
||||
glUniformMatrix4fv(id, count, GL_FALSE, v);
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::SetMatrixUniform(const char* var, float* v, int size, int count)
|
||||
{
|
||||
int id = GetUniformId(var);
|
||||
if(id >= 0)
|
||||
{
|
||||
if(size == 2)
|
||||
glUniform2fv(id, count, v);
|
||||
else if(size == 3)
|
||||
glUniform3fv(id, count, v);
|
||||
else if(size == 4)
|
||||
glUniform4fv(id, count, v);
|
||||
else if(size == 16)
|
||||
glUniformMatrix4fv(id, count, GL_FALSE, v);
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::EnableAttribute(const char* var, bool b)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
{
|
||||
if(b)
|
||||
glEnableVertexAttribArray(id);
|
||||
else
|
||||
glDisableVertexAttribArray(id);
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::DisableAttribute(const char* var)
|
||||
{
|
||||
EnableAttribute(var, false);
|
||||
}
|
||||
|
||||
void Shader::DisableAllAtrributes()
|
||||
{
|
||||
for(int i = 0; i < attributes.GetCount(); i++)
|
||||
{
|
||||
int id = attributes[i];
|
||||
if(id >= 0)
|
||||
glDisableVertexAttribArray(id);
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::SetAttribute(const char* var, float v)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
glVertexAttrib1f(id, v);
|
||||
}
|
||||
|
||||
void Shader::SetAttribute(const char* var, float v0, float v1)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
glVertexAttrib2f(id, v0, v1);
|
||||
}
|
||||
|
||||
void Shader::SetAttribute(const char* var, float v0, float v1, float v2)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
glVertexAttrib3f(id, v0, v1, v2);
|
||||
}
|
||||
|
||||
void Shader::SetAttribute(const char* var, float v0, float v1, float v2, float v3)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
glVertexAttrib4f(id, v0, v1, v2, v3);
|
||||
}
|
||||
|
||||
void Shader::SetAttribute(const char* var, float* v, int size)
|
||||
{
|
||||
int id = GetAttributeId(var);
|
||||
if(id >= 0)
|
||||
{
|
||||
if(size == 2)
|
||||
glVertexAttrib2fv(id, v);
|
||||
else if(size == 3)
|
||||
glVertexAttrib3fv(id, v);
|
||||
else if(size == 4)
|
||||
glVertexAttrib4fv(id, v);
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::Start()
|
||||
{
|
||||
glUseProgram(program);
|
||||
CheckGLError();
|
||||
}
|
||||
|
||||
void Shader::Stop()
|
||||
{
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
void Shader::Release()
|
||||
{
|
||||
if(program >= 0)
|
||||
glDeleteProgram(program);
|
||||
}
|
||||
|
||||
Shader::Shader() : program(-1)
|
||||
{}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
#ifndef _CoreGl_Shaders_h_
|
||||
#define _CoreGl_Shaders_h_
|
||||
|
||||
#include <Core/Core.h>
|
||||
#include <Draw/Draw.h>
|
||||
#include "Gl.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
class Shader
|
||||
{
|
||||
private:
|
||||
int program;
|
||||
String error;
|
||||
String compileError;
|
||||
String fragSrc;
|
||||
String vertSrc;
|
||||
String geomSrc;
|
||||
VectorMap<String, int> uniforms;
|
||||
VectorMap<String, int> attributes;
|
||||
|
||||
void PrintShaderInfoLog(GLuint obj, const char* fileName);
|
||||
void PrintProgramInfoLog(GLuint obj, const char* fileName);
|
||||
void PrintProgramValidationLog(GLuint obj, const char* fileName);
|
||||
bool CheckGLError();
|
||||
bool IsProgramCompiled(int program);
|
||||
bool IsProgramLinked(int program);
|
||||
|
||||
public:
|
||||
int GetUniformId(const char* var);
|
||||
int GetAttributeId(const char* var);
|
||||
|
||||
int CompileProgram(const char* vs, const char* fs, const char* gs = NULL);
|
||||
int CompileProgram(const byte* vs, const byte* fs, const byte* gs = NULL);
|
||||
int GetProgram();
|
||||
|
||||
void SetUniform(const char* var, float v);
|
||||
void SetUniform(const char* var, bool v);
|
||||
void SetUniform(const char* var, int v);
|
||||
void SetUniform(const char* var, float v0, float v1);
|
||||
void SetUniform(const char* var, float v0, float v1, float v2);
|
||||
void SetUniform(const char* var, float v0, float v1, float v2, float v3);
|
||||
void SetUniform(const char* var, float* v, int size, int count = 1);
|
||||
void SetMatrixUniform(const char* var, float* v, int size, int count = 1);
|
||||
|
||||
void EnableAttribute(const char* var, bool b = true);
|
||||
void DisableAttribute(const char* var);
|
||||
void DisableAllAtrributes();
|
||||
|
||||
void SetAttribute(const char* var, float v);
|
||||
void SetAttribute(const char* var, float v0, float v1);
|
||||
void SetAttribute(const char* var, float v0, float v1, float v2);
|
||||
void SetAttribute(const char* var, float v0, float v1, float v2, float v3);
|
||||
void SetAttribute(const char* var, float* v, int size);
|
||||
|
||||
void Start();
|
||||
void Stop();
|
||||
String GetError();
|
||||
void Release();
|
||||
|
||||
Shader();
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
#endif
|
||||
|
|
@ -1,149 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
|
||||
void TopWindow::SyncFrameRect(const Rect& r)
|
||||
{
|
||||
frame->SetClient(r);
|
||||
}
|
||||
|
||||
void TopWindow::DestroyFrame()
|
||||
{
|
||||
if(frame->IsOpen())
|
||||
frame->DestroyWnd();
|
||||
}
|
||||
|
||||
void TopWindow::GripResize()
|
||||
{
|
||||
frame->GripResize();
|
||||
}
|
||||
|
||||
void TopWindow::SyncSizeHints()
|
||||
{
|
||||
SyncCaption();
|
||||
}
|
||||
|
||||
void TopWindow::SyncTitle()
|
||||
{
|
||||
SyncCaption();
|
||||
}
|
||||
|
||||
void TopWindow::SyncCaption()
|
||||
{
|
||||
GuiLock __;
|
||||
frame->title = title.ToString();
|
||||
frame->minsize = minsize;
|
||||
frame->close.Show(!noclosebox);
|
||||
frame->maximize.Show(maximizebox);
|
||||
frame->sizeable = sizeable;
|
||||
frame->RefreshLayout();
|
||||
frame->Refresh();
|
||||
frame->close <<= Proxy(WhenClose);
|
||||
frame->icon = icon;
|
||||
frame->Enable(IsEnabled());
|
||||
}
|
||||
|
||||
void TopWindow::State(int reason)
|
||||
{
|
||||
SyncCaption();
|
||||
}
|
||||
|
||||
void TopWindow::SyncRect()
|
||||
{
|
||||
frame->SyncRect();
|
||||
Rect r = frame->GetClient();
|
||||
if(r != GetRect()) {
|
||||
SetRect(r);
|
||||
}
|
||||
}
|
||||
|
||||
void TopWindow::Open(Ctrl *owner)
|
||||
{
|
||||
GuiLock __;
|
||||
Rect r = GetRect();
|
||||
if(r.IsEmpty())
|
||||
SetRect(GetDefaultWindowRect());
|
||||
else
|
||||
if(r.left == 0 && r.top == 0)
|
||||
if(owner && center == 1)
|
||||
SetRect(owner->GetRect().CenterRect(r.GetSize()));
|
||||
else
|
||||
if(center)
|
||||
SetRect(GetWorkArea().CenterRect(r.GetSize()));
|
||||
frame->SetClient(GetRect());
|
||||
frame->window = this;
|
||||
frame->PopUp(owner, false, true);
|
||||
PopUp(frame, false, true);
|
||||
popup = false;
|
||||
SetRect(frame->GetClient());
|
||||
SyncCaption();
|
||||
if(state == MAXIMIZED)
|
||||
frame->Maximize();
|
||||
}
|
||||
|
||||
void TopWindow::Open()
|
||||
{
|
||||
Open(GetActiveCtrl());
|
||||
}
|
||||
|
||||
void TopWindow::OpenMain()
|
||||
{
|
||||
Open(NULL);
|
||||
}
|
||||
|
||||
void TopWindow::Minimize(bool effect)
|
||||
{
|
||||
// state = MINIMIZED;
|
||||
}
|
||||
|
||||
TopWindow& TopWindow::FullScreen(bool b)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
void TopWindow::Maximize(bool effect)
|
||||
{
|
||||
state = MAXIMIZED;
|
||||
frame->Maximize();
|
||||
}
|
||||
|
||||
void TopWindow::Overlap(bool effect)
|
||||
{
|
||||
GuiLock __;
|
||||
state = OVERLAPPED;
|
||||
frame->Overlap();
|
||||
}
|
||||
|
||||
TopWindow& TopWindow::TopMost(bool b, bool stay_top)
|
||||
{
|
||||
GuiLock __;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool TopWindow::IsTopMost() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void TopWindow::GuiPlatformConstruct()
|
||||
{
|
||||
frame = new TopWindowFrame;
|
||||
}
|
||||
|
||||
void TopWindow::GuiPlatformDestruct()
|
||||
{
|
||||
delete frame;
|
||||
}
|
||||
|
||||
void TopWindow::SerializePlacement(Stream& s, bool reminimize)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//$ class TopWindow {
|
||||
public:
|
||||
virtual void State(int reason);
|
||||
|
||||
private:
|
||||
TopWindowFrame *frame;
|
||||
|
||||
void SyncRect();
|
||||
void SyncFrameRect(const Rect& r);
|
||||
void DestroyFrame();
|
||||
|
||||
friend class Ctrl;
|
||||
|
||||
public:
|
||||
void GripResize();
|
||||
//$ };
|
||||
|
|
@ -1,209 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
|
||||
TopWindowFrame::TopWindowFrame()
|
||||
{
|
||||
close.SetImage(CoreGlImg::close());
|
||||
close.EdgeStyle();
|
||||
Add(close);
|
||||
maximize.SetImage(CoreGlImg::maximize());
|
||||
maximize.EdgeStyle();
|
||||
Add(maximize);
|
||||
maximize <<= THISBACK(ToggleMaximize);
|
||||
maximized = false;
|
||||
sizeable = false;
|
||||
holding = false;
|
||||
}
|
||||
|
||||
void TopWindowFrame::SyncRect()
|
||||
{
|
||||
if(maximized) {
|
||||
Size sz = screenRect.GetSize();
|
||||
if(GetRect().GetSize() != sz)
|
||||
SetRect(sz);
|
||||
}
|
||||
}
|
||||
|
||||
void TopWindowFrame::Maximize()
|
||||
{
|
||||
if(!maximized && maximize.IsShown()) {
|
||||
maximized = true;
|
||||
overlapped = GetRect();
|
||||
SetRect(screenRect);
|
||||
maximize.SetImage(CoreGlImg::overlap());
|
||||
}
|
||||
}
|
||||
|
||||
void TopWindowFrame::Overlap()
|
||||
{
|
||||
if(maximized && maximize.IsShown()) {
|
||||
maximized = false;
|
||||
SetRect(overlapped);
|
||||
maximize.SetImage(CoreGlImg::maximize());
|
||||
}
|
||||
}
|
||||
|
||||
void TopWindowFrame::ToggleMaximize()
|
||||
{
|
||||
if(maximized)
|
||||
Overlap();
|
||||
else
|
||||
Maximize();
|
||||
}
|
||||
|
||||
Rect TopWindowFrame::Margins() const
|
||||
{
|
||||
return maximized ? Rect(0, 0, 0, 0) : ChMargins(CoreGlImg::border());
|
||||
}
|
||||
|
||||
void TopWindowFrame::Paint(Draw& w)
|
||||
{
|
||||
Size sz = GetSize();
|
||||
Rect m = Margins();
|
||||
int c = GetStdFontCy() + 4;
|
||||
ChPaintEdge(w, sz, CoreGlImg::border());
|
||||
Image img = window->IsForeground() ? CoreGlImg::title() : CoreGlImg::bgtitle();
|
||||
resources.Bind(img, Resources::FORCE_FILTERING | Resources::LINEAR_FILTERING);
|
||||
ChPaint(w, m.left, m.top, sz.cx - m.left - m.right, GetStdFontCy() + 4, img);
|
||||
int tx = m.left + 2;
|
||||
int tcx = sz.cx - m.left - m.right - 4 - c * (close.IsShown() + maximize.IsShown());
|
||||
if(!IsNull(icon)) {
|
||||
Image h = icon;
|
||||
if(h.GetWidth() > c || h.GetHeight() > c)
|
||||
h = Rescale(h, GetFitSize(h.GetSize(), Size(c)));
|
||||
w.DrawImage(tx, m.top + 2, h);
|
||||
tx += c;
|
||||
tcx -= c;
|
||||
}
|
||||
DrawTextEllipsis(w, tx, m.top + 2, tcx, title, "..", StdFont(), SColorHighlightText());
|
||||
}
|
||||
|
||||
void TopWindowFrame::Layout()
|
||||
{
|
||||
Size sz = GetSize();
|
||||
Rect m = Margins();
|
||||
int c = GetStdFontCy() + 4;
|
||||
int x = sz.cx - m.right;
|
||||
if(close.IsShown())
|
||||
close.SetRect(x -= c, m.top, c, c);
|
||||
if(maximize.IsShown())
|
||||
maximize.SetRect(x -= c, m.top, c, c);
|
||||
}
|
||||
|
||||
Rect TopWindowFrame::GetClient() const
|
||||
{
|
||||
Rect r = GetRect();
|
||||
Rect m = Margins();
|
||||
r.left += m.left;
|
||||
r.right -= m.right;
|
||||
r.top += m.top;
|
||||
r.bottom -= m.bottom;
|
||||
r.top += GetStdFontCy() + 4;
|
||||
return r;
|
||||
}
|
||||
|
||||
Rect TopWindowFrame::ComputeClient(Rect r)
|
||||
{
|
||||
Rect m = Margins();
|
||||
r.left -= m.left;
|
||||
r.right += m.right;
|
||||
r.top -= m.top;
|
||||
r.bottom += m.bottom;
|
||||
r.top -= GetStdFontCy() + 4;
|
||||
return r;
|
||||
}
|
||||
|
||||
void TopWindowFrame::SetClient(Rect r)
|
||||
{
|
||||
SetRect(ComputeClient(r));
|
||||
}
|
||||
|
||||
Point TopWindowFrame::GetDragMode(Point p)
|
||||
{
|
||||
Size sz = GetSize();
|
||||
Rect m = ChMargins(CoreGlImg::border());
|
||||
Point dir;
|
||||
dir.y = p.y < m.top ? -1 : p.y > sz.cy - m.top ? 1 : 0;
|
||||
dir.x = p.x < m.left ? -1 : p.x > sz.cx - m.right ? 1 : 0;
|
||||
return dir;
|
||||
}
|
||||
|
||||
void TopWindowFrame::StartDrag()
|
||||
{
|
||||
if(maximized)
|
||||
return;
|
||||
if(!sizeable && (dir.x || dir.y))
|
||||
return;
|
||||
SetCapture();
|
||||
startrect = GetRect();
|
||||
startpos = GetMousePos();
|
||||
}
|
||||
|
||||
void TopWindowFrame::GripResize()
|
||||
{
|
||||
dir = Point(1, 1);
|
||||
StartDrag();
|
||||
}
|
||||
|
||||
void TopWindowFrame::LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
dir = GetDragMode(p);
|
||||
StartDrag();
|
||||
}
|
||||
|
||||
void TopWindowFrame::LeftDouble(Point p, dword keyflags)
|
||||
{
|
||||
ToggleMaximize();
|
||||
IgnoreMouseUp();
|
||||
}
|
||||
|
||||
void TopWindowFrame::LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
ReleaseCapture();
|
||||
}
|
||||
|
||||
void TopWindowFrame::MouseMove(Point, dword)
|
||||
{
|
||||
if(!HasCapture())
|
||||
return;
|
||||
Size msz = ComputeClient(minsize).GetSize();
|
||||
Point p = GetMousePos() - startpos;
|
||||
Rect r = startrect;
|
||||
if(dir.x == -1)
|
||||
r.left = min(r.left + p.x, startrect.right - msz.cx);
|
||||
if(dir.x == 1)
|
||||
r.right = max(r.right + p.x, startrect.left + msz.cx);
|
||||
if(dir.y == -1)
|
||||
r.top = min(r.top + p.y, startrect.bottom - msz.cy);
|
||||
if(dir.y == 1)
|
||||
r.bottom = max(r.bottom + p.y, startrect.top + msz.cy);
|
||||
if(dir.y == 0 && dir.x == 0)
|
||||
r.Offset(p);
|
||||
SetRect(r);
|
||||
}
|
||||
|
||||
Image TopWindowFrame::GetDragImage(Point dir)
|
||||
{
|
||||
static Image (*im[9])() = {
|
||||
Image::SizeTopLeft, Image::SizeLeft, Image::SizeBottomLeft,
|
||||
Image::SizeTop, Image::Arrow, Image::SizeBottom,
|
||||
Image::SizeTopRight, Image::SizeRight, Image::SizeBottomRight,
|
||||
};
|
||||
return (*im[(dir.x + 1) * 3 + (dir.y + 1)])();
|
||||
}
|
||||
|
||||
Image TopWindowFrame::CursorImage(Point p, dword)
|
||||
{
|
||||
if(!sizeable)
|
||||
return Image::Arrow();
|
||||
return GetDragImage(HasCapture() ? dir : GetDragMode(p));
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
#ifndef _CoreGl_TopFrame_h_
|
||||
#define _CoreGl_TopFrame_h_
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
class TopWindowFrame : public Ctrl {
|
||||
public:
|
||||
virtual void Layout();
|
||||
virtual void Paint(Draw& w);
|
||||
virtual Image CursorImage(Point p, dword keyflags);
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftDouble(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
|
||||
private:
|
||||
Point dir;
|
||||
Point startpos;
|
||||
Rect startrect;
|
||||
|
||||
bool maximized;
|
||||
Rect overlapped;
|
||||
|
||||
bool holding;
|
||||
TimeCallback hold;
|
||||
|
||||
Point GetDragMode(Point p);
|
||||
Image GetDragImage(Point dragmode);
|
||||
void StartDrag();
|
||||
Rect Margins() const;
|
||||
Rect ComputeClient(Rect r);
|
||||
void Hold();
|
||||
|
||||
typedef TopWindowFrame CLASSNAME;
|
||||
|
||||
public:
|
||||
String title;
|
||||
Button close, maximize;
|
||||
Image icon;
|
||||
Size minsize;
|
||||
bool sizeable;
|
||||
TopWindow *window;
|
||||
|
||||
void SetTitle(const String& s) { title = s; Refresh(); }
|
||||
Rect GetClient() const;
|
||||
void SetClient(Rect r);
|
||||
void GripResize();
|
||||
|
||||
void Maximize();
|
||||
void Overlap();
|
||||
void ToggleMaximize();
|
||||
bool IsMaximized() const { return maximized; }
|
||||
void SyncRect();
|
||||
|
||||
TopWindowFrame();
|
||||
};
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include <CtrlCore/CtrlCore.h>
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void DDRect(RGBA *t, int dir, const byte *pattern, int pos, int count)
|
||||
{
|
||||
while(count-- > 0) {
|
||||
byte p = pattern[7 & pos++];
|
||||
t->r ^= p;
|
||||
t->g ^= p;
|
||||
t->b ^= p;
|
||||
t += dir;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawLine(const Vector<Rect>& clip, int x, int y, int cx, int cy, bool horz, const byte *pattern, int animation)
|
||||
{
|
||||
if(cx <= 0 || cy <= 0)
|
||||
return;
|
||||
|
||||
/* Vector<Rect> rr = Intersection(clip, RectC(x, y, cx, cy));
|
||||
for(int i = 0; i < rr.GetCount(); i++) {
|
||||
Rect r = rr[i];
|
||||
if(horz)
|
||||
for(int y = r.top; y < r.bottom; y++)
|
||||
DDRect(framebuffer[y] + r.left, 1, pattern, r.left + animation, r.GetWidth());
|
||||
else
|
||||
for(int x = r.left; x < r.right; x++)
|
||||
DDRect(framebuffer[r.top] + x, framebuffer.GetWidth(), pattern, r.top + animation, r.GetHeight());
|
||||
}*/
|
||||
|
||||
glColor4ub(255, 0, 0, 255);
|
||||
//glEnable(GL_LINE_STIPPLE);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2i(x, y);
|
||||
glVertex2i(x + cx, y + cy);
|
||||
//glVertex2i(10, 10);
|
||||
//glVertex2i(100, 100);
|
||||
glEnd();
|
||||
//glDisable(GL_LINE_STIPPLE);
|
||||
}
|
||||
|
||||
void DragRectDraw0(const Vector<Rect>& clip, const Rect& rect, int n, const byte *pattern, int animation)
|
||||
{
|
||||
int hn = min(rect.GetHeight(), n);
|
||||
int vn = min(rect.GetWidth(), n);
|
||||
DrawLine(clip, rect.left, rect.top, rect.GetWidth(), hn, true, pattern, animation);
|
||||
DrawLine(clip, rect.left, rect.top + hn, vn, rect.GetHeight() - hn, false, pattern, animation);
|
||||
DrawLine(clip, rect.right - vn, rect.top + hn, vn, rect.GetHeight() - hn, false, pattern, animation);
|
||||
DrawLine(clip, rect.left + vn, rect.bottom - hn, rect.GetWidth() - 2 * vn, hn, true, pattern, animation);
|
||||
}
|
||||
|
||||
void DrawDragRect(SystemDraw& w, const Rect& rect1, const Rect& rect2, const Rect& clip, int n, Color color, int type, int animation)
|
||||
{
|
||||
static byte solid[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
static byte normal[] = { 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00 };
|
||||
static byte dashed[] = { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 };
|
||||
Point p = Ctrl::screenRect.TopLeft();
|
||||
Vector<Rect> pr;
|
||||
if(type & Ctrl::DRAWDRAGRECT_SCREEN) {
|
||||
pr.Add(Rect(Ctrl::screenRect.GetSize()));
|
||||
type &= ~Ctrl::DRAWDRAGRECT_SCREEN;
|
||||
p = Point(0, 0);
|
||||
}
|
||||
else
|
||||
//pr = Intersection(screenRect, clip.Offseted(p));
|
||||
pr.Add(clip.Offseted(p));
|
||||
const byte *pattern = type == DRAWDRAGRECT_DASHED ? dashed :
|
||||
type == DRAWDRAGRECT_NORMAL ? normal : solid;
|
||||
DragRectDraw0(pr, rect1.Offseted(p), n, pattern, animation);
|
||||
DragRectDraw0(pr, rect2.Offseted(p), n, pattern, animation);
|
||||
}
|
||||
|
||||
void DrawDragRect(Ctrl& q, const Rect& rect1, const Rect& rect2, const Rect& clip, int n,
|
||||
Color color, int type, int animation)
|
||||
{
|
||||
}
|
||||
|
||||
void FinishDragRect(Ctrl& q)
|
||||
{
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -1,658 +0,0 @@
|
|||
#if defined(flagWINGL) || defined(flagLINUXGL)
|
||||
|
||||
#include "TopFrame.h"
|
||||
#include "ControlPanel.h"
|
||||
#include "Console.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) DLOG(x)
|
||||
#define LDUMP(x) DDUMP(x)
|
||||
#define LDUMPC(x) DDUMPC(x)
|
||||
|
||||
Ptr<Ctrl> Ctrl::desktop;
|
||||
Vector<Ctrl *> Ctrl::topctrl;
|
||||
InfoPanel Ctrl::infoPanel;
|
||||
Console Ctrl::console;
|
||||
float Ctrl::angle = 0.f;
|
||||
float Ctrl::scale = 1.f;
|
||||
float Ctrl::alpha = 255.f;
|
||||
Rect Ctrl::screenRect;
|
||||
bool Ctrl::screenReady = false;
|
||||
Point Ctrl::glCursorPos = Null;
|
||||
Image Ctrl::glCursorImage;
|
||||
Rect Ctrl::glCaretRect;
|
||||
int Ctrl::glCaretTm;
|
||||
int64 Ctrl::glEventLoop = 0;
|
||||
int64 Ctrl::glEndSessionLoop = 0;
|
||||
int Ctrl::PaintLock;
|
||||
|
||||
void GlLog(int line, const char* text, Color ink)
|
||||
{
|
||||
GuiLock __;
|
||||
Ctrl::console.Log(line, text, ink);
|
||||
}
|
||||
|
||||
void GlLog(const char* text, Color ink)
|
||||
{
|
||||
GuiLock __;
|
||||
Ctrl::console.Log(text, ink);
|
||||
}
|
||||
|
||||
void GlLogF(Color ink, const char* fmt, ...)
|
||||
{
|
||||
char buffer[1024];
|
||||
va_list argptr;
|
||||
va_start(argptr, fmt);
|
||||
vsprintf(buffer, fmt, argptr);
|
||||
va_end(argptr);
|
||||
GlLog(buffer, ink);
|
||||
}
|
||||
|
||||
void GlLogF(const char* fmt, ...)
|
||||
{
|
||||
char buffer[1024];
|
||||
va_list argptr;
|
||||
va_start(argptr, fmt);
|
||||
vsprintf(buffer, fmt, argptr);
|
||||
va_end(argptr);
|
||||
GlLog(buffer);
|
||||
}
|
||||
|
||||
void Ctrl::SetDesktop(Ctrl& q)
|
||||
{
|
||||
q.SetRect(screenRect.GetSize());
|
||||
q.SetOpen(true);
|
||||
q.StateH(OPEN);
|
||||
q.NewTop();
|
||||
desktop = &q;
|
||||
}
|
||||
|
||||
void Ctrl::SetWindowSize(Size sz)
|
||||
{
|
||||
screenRect = sz;
|
||||
if(desktop)
|
||||
desktop->SetRect(screenRect);
|
||||
}
|
||||
|
||||
void Ctrl::InitGl()
|
||||
{
|
||||
Ctrl::GlobalBackBuffer();
|
||||
Ctrl::InitTimer();
|
||||
ChStdSkin();
|
||||
static StaticRect x;
|
||||
x.Color(Cyan());
|
||||
SetDesktop(x);
|
||||
}
|
||||
|
||||
void Ctrl::EndSession()
|
||||
{
|
||||
GuiLock __;
|
||||
glEndSession = true;
|
||||
EndSessionLoopNo = EventLoopNo;
|
||||
}
|
||||
|
||||
void Ctrl::ExitGl()
|
||||
{
|
||||
TopWindow::ShutdownWindows();
|
||||
Ctrl::CloseTopCtrls();
|
||||
if(glEndSession)
|
||||
GlQuitSession();
|
||||
}
|
||||
|
||||
|
||||
int Ctrl::FindTopCtrl() const
|
||||
{
|
||||
for(int i = 0; i < topctrl.GetCount(); i++)
|
||||
if(this == topctrl[i])
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool Ctrl::IsAlphaSupported()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Ctrl::IsCompositedGui()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Vector<Ctrl *> Ctrl::GetTopCtrls()
|
||||
{
|
||||
Vector<Ctrl *> ctrl;
|
||||
if(desktop)
|
||||
ctrl.Add(desktop);
|
||||
for(int i = 0; i < topctrl.GetCount(); i++)
|
||||
if(!dynamic_cast<TopWindowFrame *>(topctrl[i]))
|
||||
ctrl.Add(topctrl[i]);
|
||||
return ctrl;
|
||||
}
|
||||
|
||||
Ctrl *Ctrl::GetOwner()
|
||||
{
|
||||
GuiLock __;
|
||||
int q = FindTopCtrl();
|
||||
if(q > 0 && topctrl[q]->top) {
|
||||
Ctrl *x = topctrl[q]->top->owner_window;
|
||||
return dynamic_cast<TopWindowFrame *>(x) ? x->GetOwner() : x;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Ctrl *Ctrl::GetActiveCtrl()
|
||||
{
|
||||
GuiLock __;
|
||||
if(focusCtrl == &infoPanel || focusCtrl == &console)
|
||||
return desktop;
|
||||
return focusCtrl ? focusCtrl->GetTopCtrl() : NULL;
|
||||
}
|
||||
|
||||
// Vector<Callback> Ctrl::hotkey;
|
||||
|
||||
int Ctrl::RegisterSystemHotKey(dword key, Callback cb)
|
||||
{
|
||||
/* ASSERT(key >= K_DELTA);
|
||||
int q = hotkey.GetCount();
|
||||
for(int i = 0; i < hotkey.GetCount(); i++)
|
||||
if(!hotkey[i]) {
|
||||
q = i;
|
||||
break;
|
||||
}
|
||||
hotkey.At(q) = cb;
|
||||
dword mod = 0;
|
||||
if(key & K_ALT)
|
||||
mod |= MOD_ALT;
|
||||
if(key & K_SHIFT)
|
||||
mod |= MOD_SHIFT;
|
||||
if(key & K_CTRL)
|
||||
mod |= MOD_CONTROL;
|
||||
|
||||
return RegisterHotKey(NULL, q, mod, key & 0xffff) ? q : -1;*/
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Ctrl::UnregisterSystemHotKey(int id)
|
||||
{
|
||||
/* if(id >= 0 && id < hotkey.GetCount()) {
|
||||
UnregisterHotKey(NULL, id);
|
||||
hotkey[id].Clear();
|
||||
}*/
|
||||
}
|
||||
|
||||
bool Ctrl::IsWaitingEvent()
|
||||
{
|
||||
return GlIsWaitingEvent();
|
||||
}
|
||||
|
||||
void Ctrl::SyncTopWindows()
|
||||
{
|
||||
for(int i = 0; i < topctrl.GetCount(); i++) {
|
||||
TopWindow *w = dynamic_cast<TopWindow *>(topctrl[i]);
|
||||
if(w)
|
||||
w->SyncRect();
|
||||
}
|
||||
}
|
||||
|
||||
bool Ctrl::ProcessEvent(bool *quit)
|
||||
{
|
||||
ASSERT(IsMainThread());
|
||||
if(!GetMouseLeft() && !GetMouseRight() && !GetMouseMiddle())
|
||||
ReleaseCtrlCapture();
|
||||
if(GlProcessEvent(quit)) {
|
||||
SyncTopWindows();
|
||||
DefferedFocusSync();
|
||||
SyncCaret();
|
||||
return true;
|
||||
}
|
||||
else if(glDrawMode == DRAW_ON_IDLE && !Ctrl::painting)
|
||||
{
|
||||
GuiSleep(0);
|
||||
TimerProc(GetTickCount());
|
||||
SweepMkImageCache();
|
||||
DrawScreen();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Ctrl::DrawScreen()
|
||||
{
|
||||
#ifdef flagWINGL
|
||||
if(hRC)
|
||||
#endif
|
||||
if(desktop && !painting) {
|
||||
screenReady = true;
|
||||
painting = true;
|
||||
resources.BindStatic();
|
||||
int64 t0 = GetHighTickCount();
|
||||
frameInfo.curr_tick_count = t0;
|
||||
desktop->ApplyLayout();
|
||||
desktop->ApplyTransform(TS_BEFORE_SCREEN);
|
||||
for(int i = 0; i < topctrl.GetCount(); i++) {
|
||||
topctrl[i]->ApplyLayout();
|
||||
topctrl[i]->ApplyTransform(TS_BEFORE_SCREEN);
|
||||
}
|
||||
Rect clip = desktop->GetRect();
|
||||
SystemDraw draw(clip.GetSize());
|
||||
infoPanel.Init(*desktop);
|
||||
infoPanel.Show(controlPanelActive);
|
||||
console.Init(*desktop);
|
||||
console.Show(consoleActive);
|
||||
draw.alpha = infoPanel.GetAlpha();
|
||||
draw.angle = infoPanel.GetAngle();
|
||||
draw.scale = infoPanel.GetScale();
|
||||
draw.ViewPort();
|
||||
draw.OrthogonalView();
|
||||
draw.Clear(true);
|
||||
screenFbo0.Bind();
|
||||
screenFbo0.Clear();
|
||||
desktop->ApplyTransform(TS_BEFORE_PAINT);
|
||||
desktop->CtrlPaint(draw, clip);
|
||||
screenFbo0.Unbind();
|
||||
draw.OrthogonalView();
|
||||
glDisable(GL_BLEND);
|
||||
RectF drawRect(0.f, 0.f, (float) screenRect.GetWidth(), (float) screenRect.GetHeight());
|
||||
float blur = SystemDraw::blurStrength;
|
||||
float gray = SystemDraw::grayStrength;
|
||||
if(blur > 0 || gray > 0)
|
||||
{
|
||||
float sigma = blur * 3.f;
|
||||
float gx = 1.0f / (sqrt(2.0f * float(M_PI)) * sigma);
|
||||
float gy = exp(-0.5f / (sigma * sigma));
|
||||
float gz = gy * gy;
|
||||
float blurSizeHorz = 1.f / (float) screenFbo0.width;
|
||||
float blurSizeVert = 1.f / (float) screenFbo0.height;
|
||||
blurProg.Start();
|
||||
blurProg.SetUniform("blurSize", blurSizeHorz);
|
||||
blurProg.SetUniform("gaussian", gx, gy, gz);
|
||||
blurProg.SetUniform("blurMultiplyVec", 1, 0);
|
||||
blurProg.SetUniform("blurStrength", blur);
|
||||
blurProg.SetUniform("grayStrength", gray);
|
||||
screenFbo1.Bind();
|
||||
draw.DrawTextureOp(drawRect, screenFbo0.texId, screenFbo0.width, screenFbo0.height, drawRect);
|
||||
screenFbo1.Unbind();
|
||||
|
||||
blurProg.SetUniform("blurSize", blurSizeVert);
|
||||
blurProg.SetUniform("blurMultiplyVec", 0, 1);
|
||||
blurProg.SetUniform("blurStrength", blur);
|
||||
blurProg.SetUniform("grayStrength", gray);
|
||||
draw.ApplyTransforms();
|
||||
draw.DrawTextureOp(drawRect, screenFbo1.texId, screenFbo1.width, screenFbo1.height, drawRect);
|
||||
blurProg.Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
draw.ApplyTransforms();
|
||||
draw.DrawTextureOp(drawRect, screenFbo0.texId, screenFbo0.width, screenFbo0.height, drawRect);
|
||||
//screenFbo0.BlitToScreen();
|
||||
}
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
for(int i = 0; i < topctrl.GetCount(); i++) {
|
||||
Ctrl* tq = topctrl[i];
|
||||
if(tq == &infoPanel || tq == &console)
|
||||
continue;
|
||||
Rect r = tq->GetRect();
|
||||
tq->ApplyTransform(TS_BEFORE_PAINT);
|
||||
draw.Offset(r.left, r.top);
|
||||
tq->CtrlPaint(draw, clip);
|
||||
draw.End();
|
||||
tq->ApplyTransform(TS_AFTER_PAINT);
|
||||
}
|
||||
|
||||
CursorSync(draw);
|
||||
|
||||
desktop->PostPaint(draw);
|
||||
desktop->ApplyTransform(TS_AFTER_PAINT);
|
||||
|
||||
glLoadIdentity();
|
||||
#if CLIP_MODE == 2
|
||||
//glDisable(GL_STENCIL_TEST);
|
||||
#endif
|
||||
draw.ImageColoring();
|
||||
draw.alpha = 255.f;
|
||||
if(controlPanelActive)
|
||||
{
|
||||
draw.Offset(infoPanel.GetRect().TopLeft());
|
||||
infoPanel.CtrlPaint(draw, clip);
|
||||
draw.End();
|
||||
}
|
||||
if(consoleActive)
|
||||
{
|
||||
draw.Offset(console.GetRect().TopLeft());
|
||||
console.CtrlPaint(draw, clip);
|
||||
draw.End();
|
||||
}
|
||||
#if CLIP_MODE == 2
|
||||
//glEnable(GL_STENCIL_TEST);
|
||||
#endif
|
||||
MouseSync(draw);
|
||||
#ifdef flagWINGL
|
||||
SwapBuffers(hDC);
|
||||
#endif
|
||||
#ifdef flagLINUXGL
|
||||
glXSwapBuffers(dpy, win);
|
||||
#endif
|
||||
int64 t1 = GetHighTickCount();
|
||||
frameInfo.frame_time = t1 - t0;
|
||||
frameInfo.frame_factor = frameInfo.frame_time * frameInfo.frame_skip / 1000.f;
|
||||
frameInfo.fps = frameInfo.frame_time > 0.f ? 1000.f / (float)frameInfo.frame_time : 0.f;
|
||||
//LOGF("ft: %d, t0: %d, t1: %d\n", frameInfo.frame_time, t0, t1);
|
||||
painting = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool Ctrl::ProcessEvents(bool *quit)
|
||||
{
|
||||
if(!ProcessEvent(quit))
|
||||
return false;
|
||||
while(ProcessEvent(quit) && (!LoopCtrl || LoopCtrl->InLoop()));
|
||||
if(glDrawMode == DRAW_ON_TIMER)
|
||||
{
|
||||
TimerProc(GetTickCount());
|
||||
SweepMkImageCache();
|
||||
DrawScreen();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Ctrl::EventLoop(Ctrl *ctrl)
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(IsMainThread());
|
||||
ASSERT(LoopLevel == 0 || ctrl);
|
||||
LoopLevel++;
|
||||
Ptr<Ctrl> ploop;
|
||||
if(ctrl) {
|
||||
ploop = LoopCtrl;
|
||||
LoopCtrl = ctrl;
|
||||
ctrl->inloop = true;
|
||||
}
|
||||
|
||||
bool quit = false;
|
||||
int64 loopno = ++EventLoopNo;
|
||||
ProcessEvents(&quit);
|
||||
while(loopno > EndSessionLoopNo && !quit && (ctrl ? ctrl->IsOpen() && ctrl->InLoop() : GetTopCtrls().GetCount()))
|
||||
{
|
||||
SyncCaret();
|
||||
//if(glDrawMode == DRAW_ON_TIMER)
|
||||
// GuiSleep(20);
|
||||
ProcessEvents(&quit);
|
||||
}
|
||||
|
||||
if(ctrl)
|
||||
LoopCtrl = ploop;
|
||||
LoopLevel--;
|
||||
}
|
||||
|
||||
void Ctrl::GuiSleep(int ms)
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(IsMainThread());
|
||||
int level = LeaveGuiMutexAll();
|
||||
GlSleep(ms);
|
||||
EnterGuiMutex(level);
|
||||
}
|
||||
|
||||
Rect Ctrl::GetWndScreenRect() const
|
||||
{
|
||||
GuiLock __;
|
||||
return GetRect();
|
||||
}
|
||||
|
||||
void Ctrl::WndShow(bool b)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void Ctrl::WndUpdate()
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void Ctrl::WndUpdate(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
bool Ctrl::IsWndOpen() const {
|
||||
GuiLock __;
|
||||
return FindTopCtrl() >= 0 || this == desktop;
|
||||
}
|
||||
|
||||
void Ctrl::SetAlpha(byte alpha)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetWorkArea() const
|
||||
{
|
||||
GuiLock __;
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
void Ctrl::GetWorkArea(Array<Rect>& rc)
|
||||
{
|
||||
GuiLock __;
|
||||
//Array<Rect> r;
|
||||
rc.Add(screenRect.GetSize());
|
||||
}
|
||||
|
||||
Rect Ctrl::GetVirtualWorkArea()
|
||||
{
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetWorkArea(Point pt)
|
||||
{
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetVirtualScreenArea()
|
||||
{
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetPrimaryWorkArea()
|
||||
{
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetPrimaryScreenArea()
|
||||
{
|
||||
return screenRect;
|
||||
}
|
||||
|
||||
int Ctrl::GetKbdDelay()
|
||||
{
|
||||
GuiLock __;
|
||||
return 500;
|
||||
}
|
||||
|
||||
int Ctrl::GetKbdSpeed()
|
||||
{
|
||||
GuiLock __;
|
||||
return 1000 / 32;
|
||||
}
|
||||
|
||||
void Ctrl::DestroyWnd()
|
||||
{
|
||||
for(int i = 0; i < topctrl.GetCount(); i++)
|
||||
if(topctrl[i]->top && topctrl[i]->top->owner_window == this)
|
||||
topctrl[i]->WndDestroy();
|
||||
int q = FindTopCtrl();
|
||||
if(q >= 0) {
|
||||
topctrl.Remove(q);
|
||||
}
|
||||
if(top) {
|
||||
delete top;
|
||||
top = NULL;
|
||||
}
|
||||
isopen = false;
|
||||
TopWindow *win = dynamic_cast<TopWindow *>(this);
|
||||
if(win)
|
||||
win->DestroyFrame();
|
||||
}
|
||||
|
||||
void Ctrl::WndDestroy()
|
||||
{
|
||||
DestroyWnd();
|
||||
if(topctrl.GetCount())
|
||||
topctrl.Top()->ActivateWnd();
|
||||
}
|
||||
|
||||
void Ctrl::PutForeground()
|
||||
{
|
||||
int q = FindTopCtrl();
|
||||
if(q >= 0) {
|
||||
topctrl.Remove(q);
|
||||
topctrl.Add(this);
|
||||
}
|
||||
Vector< Ptr<Ctrl> > fw;
|
||||
for(int i = 0; i < topctrl.GetCount(); i++)
|
||||
if(topctrl[i] && topctrl[i]->top && topctrl[i]->top->owner_window == this && topctrl[i] != this)
|
||||
fw.Add(topctrl[i]);
|
||||
for(int i = 0; i < fw.GetCount(); i++)
|
||||
if(fw[i])
|
||||
fw[i]->PutForeground();
|
||||
}
|
||||
|
||||
void Ctrl::SetWndForeground()
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(IsOpen());
|
||||
if(IsWndForeground())
|
||||
return;
|
||||
Ctrl *to = this;
|
||||
while(to->top && to->top->owner_window)
|
||||
to = to->top->owner_window;
|
||||
to->PutForeground();
|
||||
if(this != focusCtrl)
|
||||
ActivateWnd();
|
||||
}
|
||||
|
||||
bool Ctrl::IsWndForeground() const
|
||||
{
|
||||
GuiLock __;
|
||||
bool b = false;
|
||||
for(int i = 0; i < topctrl.GetCount(); i++) {
|
||||
const TopWindow *tw = dynamic_cast<const TopWindow *>(topctrl[i]);
|
||||
if(tw)
|
||||
b = tw == this;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
void Ctrl::WndEnable(bool b)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
bool Ctrl::SetWndFocus()
|
||||
{
|
||||
GuiLock __;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Ctrl::HasWndFocus() const
|
||||
{
|
||||
GuiLock __;
|
||||
return focusCtrl && focusCtrl->GetTopCtrl() == this;
|
||||
}
|
||||
|
||||
bool Ctrl::SetWndCapture()
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(IsMainThread());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Ctrl::ReleaseWndCapture()
|
||||
{
|
||||
GuiLock __;
|
||||
ASSERT(IsMainThread());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Ctrl::HasWndCapture() const
|
||||
{
|
||||
GuiLock __;
|
||||
return captureCtrl && captureCtrl->GetTopCtrl() == this;
|
||||
}
|
||||
|
||||
void Ctrl::WndInvalidateRect(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
//::InvalidateRect(glHwnd, NULL, false);
|
||||
}
|
||||
|
||||
void Ctrl::WndSetPos(const Rect& rect)
|
||||
{
|
||||
GuiLock __;
|
||||
TopWindow *w = dynamic_cast<TopWindow *>(this);
|
||||
if(w)
|
||||
w->SyncFrameRect(rect);
|
||||
SetWndRect(rect);
|
||||
}
|
||||
|
||||
void Ctrl::WndScrollView(const Rect& r, int dx, int dy)
|
||||
{
|
||||
GuiLock __;
|
||||
}
|
||||
|
||||
void Ctrl::PopUp(Ctrl *owner, bool savebits, bool activate, bool dropshadow, bool topmost)
|
||||
{
|
||||
ASSERT(!IsChild() && !IsOpen() && FindTopCtrl() < 0);
|
||||
NewTop();
|
||||
if(owner) {
|
||||
Ctrl *owner_window = owner->GetTopWindow();
|
||||
if(!owner_window)
|
||||
owner_window = owner->GetTopCtrl();
|
||||
ASSERT(owner_window->IsOpen());
|
||||
if(owner_window != desktop) {
|
||||
owner_window->SetForeground();
|
||||
top->owner_window = owner_window;
|
||||
}
|
||||
}
|
||||
topctrl.Add(this);
|
||||
popup = isopen = true;
|
||||
StateH(OPEN);
|
||||
if(activate) SetFocusWnd();
|
||||
}
|
||||
|
||||
Rect Ctrl::GetDefaultWindowRect() {
|
||||
GuiLock __;
|
||||
int ii = 0;
|
||||
Size sz = screenRect.GetSize();
|
||||
Rect rect = sz;
|
||||
rect.Deflate(sz / 8);
|
||||
rect.Offset(Point(sz) / 16 * (ii % 8));
|
||||
return rect;
|
||||
}
|
||||
|
||||
Vector<WString> SplitCmdLine__(const char *cmd)
|
||||
{
|
||||
Vector<WString> out;
|
||||
while(*cmd)
|
||||
if((byte)*cmd <= ' ')
|
||||
cmd++;
|
||||
else if(*cmd == '\"') {
|
||||
WString quoted;
|
||||
while(*++cmd && (*cmd != '\"' || *++cmd == '\"'))
|
||||
quoted.Cat(FromSystemCharset(String(cmd, 1)).ToWString());
|
||||
out.Add(quoted);
|
||||
}
|
||||
else {
|
||||
const char *begin = cmd;
|
||||
while((byte)*cmd > ' ')
|
||||
cmd++;
|
||||
out.Add(String(begin, cmd).ToWString());
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
15483
rainbow/CoreGl/glew.c
15483
rainbow/CoreGl/glew.c
File diff suppressed because it is too large
Load diff
15507
rainbow/CoreGl/glew.h
15507
rainbow/CoreGl/glew.h
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +0,0 @@
|
|||
#ifndef _CoreGl_icpp_init_stub
|
||||
#define _CoreGl_icpp_init_stub
|
||||
#include "Painter/init"
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue