mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
199 lines
3.6 KiB
C++
199 lines
3.6 KiB
C++
#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
|