mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-06-11 06:12:34 -06:00
ide: PDB Color, RGBA support
git-svn-id: svn://ultimatepp.org/upp/trunk@13731 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
fef24c6cf8
commit
90b9b0e3ca
3 changed files with 70 additions and 16 deletions
|
|
@ -146,6 +146,8 @@ struct Pdb : Debugger, ParentCtrl {
|
|||
String text;
|
||||
Color ink;
|
||||
bool mark;
|
||||
|
||||
Size GetSize() const;
|
||||
};
|
||||
|
||||
struct Visual {
|
||||
|
|
@ -257,7 +259,10 @@ struct Pdb : Debugger, ParentCtrl {
|
|||
int64 data_count; // number of entries
|
||||
Vector<String> data_type; // type of data items (usuallt type_param)
|
||||
Vector<adr_t> data_ptr; // pointer to items (data_count.GetCount() * data_type.GetCount() items)
|
||||
String text;
|
||||
Visual text;
|
||||
|
||||
void Text(const char *s, Color color = SRed) { text.Cat(s, color); }
|
||||
void SetNull() { Text("Null", SCyan); }
|
||||
};
|
||||
|
||||
VectorMap<String, Tuple<int, Event<Val, const Vector<String>&, int64, int, Pdb::Pretty&>>> pretty;
|
||||
|
|
@ -403,6 +408,8 @@ struct Pdb : Debugger, ParentCtrl {
|
|||
void PrettyArrayMap(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
|
||||
void PrettyDate(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
|
||||
void PrettyTime(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
|
||||
void PrettyColor(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p);
|
||||
void PrettyRGBA(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p);
|
||||
void PrettyValueArray_(adr_t a, Pdb::Pretty& p);
|
||||
void PrettyValueArray(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p);
|
||||
void PrettyValue(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
// THIS is currently hardwired to the current version of U++ Core...
|
||||
|
||||
// TODO: from->int64
|
||||
|
||||
void Pdb::PrettyString(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p)
|
||||
{
|
||||
bool small = IntAt(val, "chr", 14) == 0;
|
||||
|
|
@ -99,10 +97,10 @@ void Pdb::PrettyDate(Pdb::Val val, const Vector<String>&, int64 from, int count,
|
|||
int year = GetIntAttr(val, "year");
|
||||
p.kind = SINGLE_VALUE;
|
||||
if(year < -20000)
|
||||
p.text = "Null";
|
||||
p.SetNull();
|
||||
else
|
||||
if(day >= 0 && day <= 31 && month >= 1 && month <= 12 && year > 1900 && year < 3000)
|
||||
p.text = Format("%04d/%02d/%02d", year, month, day);
|
||||
p.Text(Format("%04d/%02d/%02d", year, month, day));
|
||||
}
|
||||
|
||||
void Pdb::PrettyTime(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p)
|
||||
|
|
@ -115,11 +113,43 @@ void Pdb::PrettyTime(Pdb::Val val, const Vector<String>&, int64 from, int count,
|
|||
int second = GetIntAttr(val, "second");
|
||||
p.kind = SINGLE_VALUE;
|
||||
if(year < -20000)
|
||||
p.text = "Null";
|
||||
p.SetNull();
|
||||
else
|
||||
if(day >= 1 && day <= 31 && month >= 1 && month <= 12 && year > 1900 && year < 3000 &&
|
||||
hour >= 0 && hour <= 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60)
|
||||
p.text = Format("%04d/%02d/%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
|
||||
p.Text(Format("%04d/%02d/%02d %02d:%02d:%02d", year, month, day, hour, minute, second));
|
||||
}
|
||||
|
||||
void Pdb::PrettyColor(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p)
|
||||
{
|
||||
dword color = GetIntAttr(val, "color");
|
||||
Color c = Color::FromRaw(color);
|
||||
if(IsNull(c))
|
||||
p.SetNull();
|
||||
else {
|
||||
p.Text("\1", c);
|
||||
p.Text(" ");
|
||||
p.Text(ColorToHtml(c));
|
||||
}
|
||||
p.kind = SINGLE_VALUE;
|
||||
}
|
||||
|
||||
void Pdb::PrettyRGBA(Pdb::Val val, const Vector<String>&, int64 from, int count, Pdb::Pretty& p)
|
||||
{
|
||||
RGBA rc;
|
||||
rc.r = GetIntAttr(val, "r");
|
||||
rc.g = GetIntAttr(val, "g");
|
||||
rc.b = GetIntAttr(val, "b");
|
||||
rc.a = 255;
|
||||
|
||||
Color c(rc);
|
||||
|
||||
p.Text("\1", c);
|
||||
p.Text(" ");
|
||||
p.Text(ColorToHtml(c));
|
||||
p.Text(", a: " + AsString(GetIntAttr(val, "a")));
|
||||
|
||||
p.kind = SINGLE_VALUE;
|
||||
}
|
||||
|
||||
void Pdb::PrettyValueArray_(adr_t a, Pdb::Pretty& p)
|
||||
|
|
@ -176,11 +206,12 @@ void Pdb::PrettyValue(Pdb::Val val, const Vector<String>&, int64 from, int count
|
|||
}
|
||||
p.data_ptr << a;
|
||||
if(st == 3) {
|
||||
p.text = "void";
|
||||
p.Text("void", SCyan);
|
||||
return;
|
||||
}
|
||||
String t = decode(st, 1, "int", 2, "double", 4, "Upp::Date", 5, "Upp::Time",
|
||||
10, "int64", 11, "bool", "");
|
||||
10, "int64", 11, "bool", 39, "Upp::Color",
|
||||
"");
|
||||
if(t.GetCount())
|
||||
p.data_type << t;
|
||||
}
|
||||
|
|
@ -270,6 +301,8 @@ bool Pdb::PrettyVal(Pdb::Val val, int64 from, int count, Pretty& p)
|
|||
if(pretty.GetCount() == 0) {
|
||||
pretty.Add("Upp::Date", { 0, THISFN(PrettyDate) });
|
||||
pretty.Add("Upp::Time", { 0, THISFN(PrettyTime) });
|
||||
pretty.Add("Upp::Color", { 0, THISFN(PrettyColor) });
|
||||
pretty.Add("Upp::RGBA", { 0, THISFN(PrettyRGBA) });
|
||||
pretty.Add("Upp::ValueArray", { 0, THISFN(PrettyValueArray) });
|
||||
pretty.Add("Upp::ValueMap", { 0, THISFN(PrettyValueMap) });
|
||||
pretty.Add("Upp::Value", { 0, THISFN(PrettyValue) });
|
||||
|
|
@ -336,8 +369,9 @@ bool Pdb::VisualisePretty(Visual& result, Pdb::Val val, dword flags)
|
|||
if(p.kind == SINGLE_VALUE) {
|
||||
Pretty p;
|
||||
PrettyVal(val, 0, 1, p);
|
||||
if(p.text.GetCount())
|
||||
result.Cat(p.text, SRed);
|
||||
if(p.text.part.GetCount())
|
||||
for(const VisualPart& vp : p.text.part)
|
||||
result.Cat(vp.text, vp.ink);
|
||||
else
|
||||
if(p.data_type.GetCount() && p.data_ptr.GetCount())
|
||||
Visualise(result, MakeVal(p.data_type[0], p.data_ptr[0]), flags);
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, dword flags)
|
|||
}
|
||||
if(val.type < 0) { // Display primitive type
|
||||
#define RESULTINT(x, type) case x: CatInt(result, (type)val.ival, flags); break;
|
||||
#define RESULTINTN(x, type, t2) case x: if(IsNull((t2)val.ival)) result.Cat("Null ", Magenta); CatInt(result, (type)val.ival, flags); break;
|
||||
#define RESULTINTN(x, type, t2) case x: if(IsNull((t2)val.ival)) result.Cat("Null ", SCyan); CatInt(result, (type)val.ival, flags); break;
|
||||
switch(val.type) {
|
||||
RESULTINT(BOOL1, bool)
|
||||
RESULTINT(UINT1, byte)
|
||||
|
|
@ -177,7 +177,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, dword flags)
|
|||
case DBL:
|
||||
case FLT:
|
||||
if(IsNull(val.fval))
|
||||
result.Cat("Null", SMagenta);
|
||||
result.Cat("Null", SCyan);
|
||||
else
|
||||
if(IsInf(val.fval))
|
||||
result.Cat("INF", SMagenta);
|
||||
|
|
@ -326,6 +326,11 @@ Pdb::Visual Pdb::Visualise(const String& exp, dword flags)
|
|||
return r;
|
||||
}
|
||||
|
||||
Size Pdb::VisualPart::GetSize() const
|
||||
{
|
||||
return GetTextSize(*text < 32 ? "MM" : ~text, StdFont());
|
||||
}
|
||||
|
||||
Size Pdb::VisualDisplay::GetStdSize(const Value& q) const
|
||||
{
|
||||
if(!IsType<Visual>(q))
|
||||
|
|
@ -333,7 +338,7 @@ Size Pdb::VisualDisplay::GetStdSize(const Value& q) const
|
|||
Size sz(0, GetStdFontCy());
|
||||
if(IsType<Visual>(q))
|
||||
for(const VisualPart& p : ValueTo<Visual>(q).part)
|
||||
sz.cx += GetTextSize(p.text, StdFont()).cx;
|
||||
sz.cx += p.GetSize().cx;
|
||||
return sz;
|
||||
}
|
||||
|
||||
|
|
@ -348,10 +353,18 @@ void Pdb::VisualDisplay::Paint(Draw& w, const Rect& r, const Value& q,
|
|||
int y = r.top + (r.Height() - Draw::GetStdFontCy()) / 2;
|
||||
bool blue = (style & (Display::CURSOR|Display::FOCUS)) == (Display::CURSOR|Display::FOCUS);
|
||||
for(const VisualPart& p : ValueTo<Visual>(q).part) {
|
||||
Size sz = GetTextSize(p.text, StdFont());
|
||||
Size sz = p.GetSize();
|
||||
w.DrawRect(x, y, sz.cx, r.Height(),
|
||||
blue || !p.mark ? paper : HighlightSetup::GetHlStyle(HighlightSetup::PAPER_SELWORD).color);
|
||||
w.DrawText(x, y, p.text, StdFont(), blue ? ink : p.ink);
|
||||
if(*p.text == '\1') { // Color support
|
||||
Rect r = RectC(x, y, sz.cx, sz.cy);
|
||||
r.Deflate(DPI(1));
|
||||
w.DrawRect(r, SBlack);
|
||||
r.Deflate(DPI(1));
|
||||
w.DrawRect(r, p.ink);
|
||||
}
|
||||
else
|
||||
w.DrawText(x, y, p.text, StdFont(), blue ? ink : p.ink);
|
||||
x += sz.cx;
|
||||
}
|
||||
w.DrawRect(x, y, r.right - x, r.Height(), paper);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue