mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
RichEdit: Fixed cosmetics issue with Diagram shape icons in droplist
This commit is contained in:
parent
f29a9f2b96
commit
fef58bbcb8
7 changed files with 48 additions and 33 deletions
|
|
@ -599,13 +599,18 @@ Rect MultiButton::Paint0(Draw& w, bool getcr)
|
|||
return cr;
|
||||
}
|
||||
|
||||
Rect MultiButton::GetContentRect()
|
||||
{
|
||||
NilDraw nw;
|
||||
return Paint0(nw, true);
|
||||
}
|
||||
|
||||
void MultiButton::SyncInfo()
|
||||
{
|
||||
if((HasMouse() || info.HasMouse()) && display &&
|
||||
(GetMouseFlags() & (K_MOUSELEFT|K_MOUSERIGHT|K_MOUSEMIDDLE)) == 0) {
|
||||
Point p = GetMouseViewPos();
|
||||
NilDraw nw;
|
||||
Rect r = Paint0(nw, true);
|
||||
Rect r = GetContentRect();
|
||||
if(r.Contains(p)) {
|
||||
Value v = convert->Format(value);
|
||||
int cm = DPI(2);
|
||||
|
|
|
|||
|
|
@ -113,7 +113,6 @@ private:
|
|||
|
||||
int FindButton(int px);
|
||||
void Margins(int& l, int& r);
|
||||
Rect ContentRect();
|
||||
void GetLR(int& lx, int& rx);
|
||||
bool GetPos(SubButton& b, int& lx, int& rx, int& x, int& cx, int px = -1);
|
||||
void GetPos(int ii, int& x, int& cx);
|
||||
|
|
@ -166,6 +165,7 @@ public:
|
|||
SubButton& MainButton();
|
||||
|
||||
Rect GetPushScreenRect() const { return pushrect; }
|
||||
Rect GetContentRect();
|
||||
|
||||
const Display& GetDisplay() const { return *display; }
|
||||
const Convert& GetConvert() const { return *convert; }
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ void DiagramEditor::TheBar(Bar& bar)
|
|||
bar.Separator();
|
||||
bar.Add("Diagram size", DiagramImg::Size(), [=] { ChangeSize(); });
|
||||
bar.Separator();
|
||||
int icx = IconSz().cx + DPI(4) + DPI(18);
|
||||
int icx = IconDlCx();
|
||||
bar.Add(shape, icx);
|
||||
shape.Enable(!(IsCursor() && findarg(CursorItem().shape, DiagramItem::SHAPE_SVGPATH, DiagramItem::SHAPE_IMAGE) >= 0));
|
||||
bar.Add(line_start, icx);
|
||||
|
|
@ -94,7 +94,7 @@ void DiagramEditor::TheBar(Bar& bar)
|
|||
})
|
||||
.Check(ar);
|
||||
bar.Separator();
|
||||
Size isz = IconSz();
|
||||
Size isz = icon_sz;
|
||||
for(int i = 0; i < tool_count; i++) {
|
||||
DiagramItem m = tl[i];
|
||||
if(m.IsLine()) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,14 @@ namespace Upp {
|
|||
|
||||
DiagramEditor::DiagramEditor()
|
||||
{
|
||||
{ // estimate the size of icons
|
||||
DropList shape;
|
||||
shape.SetRect(0, 0, IconDlCx(), shape.MultiButton::GetStdSize().cy);
|
||||
icon_sz = shape.GetContentRect().GetSize();
|
||||
icon_sz.cx = max(icon_sz.cx, 8); // sanity
|
||||
icon_sz.cy = max(icon_sz.cy, 8);
|
||||
}
|
||||
|
||||
AddFrame(toolbar);
|
||||
|
||||
Add(text_editor);
|
||||
|
|
|
|||
|
|
@ -33,8 +33,8 @@ public:
|
|||
Size isz = Size(64, 32);
|
||||
int count = 18;
|
||||
|
||||
Event<int> WhenSelect;
|
||||
Event<Draw&, Size, int, bool> WhenPaintItem;
|
||||
Event<int> WhenSelect;
|
||||
Event<Draw&, const Rect&, int, bool> WhenPaintItem;
|
||||
|
||||
ColumnPopUp();
|
||||
};
|
||||
|
|
@ -75,6 +75,8 @@ private:
|
|||
|
||||
bool allow_dark_content = false;
|
||||
bool dark_content = false;
|
||||
|
||||
Size icon_sz;
|
||||
|
||||
Point sizehandle = Point(0, 0);
|
||||
Point draghandle = Point(0, 0);
|
||||
|
|
@ -148,7 +150,7 @@ private:
|
|||
double GetZoom() const { return DPI(1) * 0.01 * zoom_percent; }
|
||||
void Map(Point& p);
|
||||
Image MakeIcon(DiagramItem& m, Size isz);
|
||||
Size IconSz() { return Size(DPI(24), DPI(16)); }
|
||||
int IconDlCx() { return DPI(24 + 4 + 18); }
|
||||
Image ShapeIcon(int i);
|
||||
Image CapIcon(int start, int end);
|
||||
Image DashIcon(int i);
|
||||
|
|
@ -158,7 +160,7 @@ private:
|
|||
void Grid(Point& p);
|
||||
void Grid(Pointf& p);
|
||||
void ChangeSize();
|
||||
void PopPaint(Draw& w, const Image& m, bool sel);
|
||||
void PopPaint(Draw& w, const Rect& r, const Image& m, bool sel);
|
||||
void Shapes(ColumnPopUp& shape);
|
||||
void Caps(ColumnPopUp& m, bool left);
|
||||
void Dashes(ColumnPopUp& m);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ Image DiagramEditor::MakeIcon(DiagramItem& m, Size isz)
|
|||
|
||||
Image DiagramEditor::ShapeIcon(int i)
|
||||
{
|
||||
Size isz = IconSz();
|
||||
Size isz = icon_sz;
|
||||
DiagramItem m;
|
||||
m.shape = i;
|
||||
if(m.IsLine()) {
|
||||
|
|
@ -50,11 +50,11 @@ Image DiagramEditor::ShapeIcon(int i)
|
|||
|
||||
Image DiagramEditor::CapIcon(int start, int end)
|
||||
{
|
||||
Size isz = IconSz();
|
||||
Size isz = icon_sz;
|
||||
DiagramItem m;
|
||||
m.pos = Point(findarg(start, DiagramItem::CAP_CIRCLEL, DiagramItem::CAP_DISCL) >= 0 ? DPI(6) : DPI(4), isz.cy / 2);
|
||||
m.size = Size(isz.cx - (findarg(end, DiagramItem::CAP_CIRCLEL, DiagramItem::CAP_DISCL) >= 0 ? DPI(10) :
|
||||
findarg(end, DiagramItem::CAP_CIRCLE, DiagramItem::CAP_DISC) >= 0 ? DPI(8) : DPI(4)), 0);
|
||||
findarg(end, DiagramItem::CAP_CIRCLE, DiagramItem::CAP_DISC) >= 0 ? DPI(8) : DPI(6)), 0);
|
||||
m.shape = DiagramItem::SHAPE_LINE;
|
||||
m.width = DPI(1);
|
||||
m.cap[0] = start;
|
||||
|
|
@ -67,7 +67,7 @@ Image DiagramEditor::DashIcon(int i)
|
|||
return MakeValue(
|
||||
[=] { return String((char *)&i, sizeof(i)) + String("D", (int)IsDarkTheme()); },
|
||||
[=](Value& v) {
|
||||
Size isz = IconSz();
|
||||
Size isz = icon_sz;
|
||||
ImagePainter p(isz);
|
||||
p.Clear();
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ Image DiagramEditor::WidthIcon(int i)
|
|||
return MakeValue(
|
||||
[=] { return String((char *)&i, sizeof(i)) + String("D", (int)IsDarkTheme()); },
|
||||
[=](Value& v) {
|
||||
Size isz = IconSz();
|
||||
Size isz = icon_sz;
|
||||
ImagePainter p(isz);
|
||||
p.Clear();
|
||||
p.Move(DPI(2), isz.cy / 2.0 - (i & 1) * 0.5)
|
||||
|
|
@ -107,15 +107,15 @@ void DiagramEditor::Dashes(ColumnPopUp& m)
|
|||
{
|
||||
m.count = DiagramItem::DASH_COUNT;
|
||||
m.columns = 4;
|
||||
m.isz = IconSz() + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, Size isz, int ii, bool sel) {
|
||||
PopPaint(w, DashIcon(ii), sel);
|
||||
m.isz = icon_sz + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, const Rect& r, int ii, bool sel) {
|
||||
PopPaint(w, r, DashIcon(ii), sel);
|
||||
};
|
||||
}
|
||||
|
||||
void DiagramEditor::PopPaint(Draw& w, const Image& m, bool sel)
|
||||
void DiagramEditor::PopPaint(Draw& w, const Rect& r, const Image& m, bool sel)
|
||||
{
|
||||
Point p = Rect(IconSz() + Size(DPI(4), DPI(4))).CenterPos(m.GetSize());
|
||||
Point p = r.CenterPos(m.GetSize());
|
||||
if(sel)
|
||||
w.DrawImage(p.x, p.y, m, SColorHighlightText());
|
||||
else
|
||||
|
|
@ -126,11 +126,11 @@ void DiagramEditor::Shapes(ColumnPopUp& shape)
|
|||
{
|
||||
shape.count = DiagramItem::SHAPE_COUNT;
|
||||
shape.columns = 5;
|
||||
shape.isz = IconSz() + Size(DPI(4), DPI(4));
|
||||
shape.WhenPaintItem = [=](Draw& w, Size isz, int ii, bool sel) {
|
||||
PopPaint(w, ii == DiagramItem::SHAPE_SVGPATH ? DiagramImg::FontSvg() :
|
||||
ii == DiagramItem::SHAPE_IMAGE ? CtrlImg::open()
|
||||
: ShapeIcon(ii),
|
||||
shape.isz = icon_sz + Size(DPI(4), DPI(4));
|
||||
shape.WhenPaintItem = [=](Draw& w, const Rect& r, int ii, bool sel) {
|
||||
PopPaint(w, r, ii == DiagramItem::SHAPE_SVGPATH ? DiagramImg::FontSvg() :
|
||||
ii == DiagramItem::SHAPE_IMAGE ? CtrlImg::open()
|
||||
: ShapeIcon(ii),
|
||||
sel && ii != DiagramItem::SHAPE_IMAGE);
|
||||
};
|
||||
}
|
||||
|
|
@ -139,9 +139,9 @@ void DiagramEditor::Caps(ColumnPopUp& m, bool left)
|
|||
{
|
||||
m.count = DiagramItem::CAP_COUNT;
|
||||
m.columns = 3;
|
||||
m.isz = IconSz() + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, Size isz, int ii, bool sel) {
|
||||
PopPaint(w, left ? CapIcon(ii, 0) : CapIcon(0, ii), sel);
|
||||
m.isz = icon_sz + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, const Rect& r, int ii, bool sel) {
|
||||
PopPaint(w, r, left ? CapIcon(ii, 0) : CapIcon(0, ii), sel);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -149,15 +149,15 @@ void DiagramEditor::Widths(ColumnPopUp& m)
|
|||
{
|
||||
m.count = 15;
|
||||
m.columns = 5;
|
||||
m.isz = IconSz() + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, Size isz, int ii, bool sel) {
|
||||
PopPaint(w, WidthIcon(ii), sel);
|
||||
m.isz = icon_sz + Size(DPI(4), DPI(4));
|
||||
m.WhenPaintItem = [=](Draw& w, const Rect& r, int ii, bool sel) {
|
||||
PopPaint(w, r, WidthIcon(ii), sel);
|
||||
};
|
||||
}
|
||||
|
||||
void Upp::DiagramEditor::DropColumns::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const
|
||||
{
|
||||
popup.WhenPaintItem(w, r.GetSize(), (int)q, false);
|
||||
popup.WhenPaintItem(w, r, (int)q, false);
|
||||
}
|
||||
|
||||
DiagramEditor::DropColumns::DropColumns()
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ void DiagramEditor::RightDown(Point p, dword keyflags)
|
|||
Dashes(menu);
|
||||
menu.count = DiagramItem::DASH_COUNT + 15;
|
||||
menu.columns = 5;
|
||||
menu.WhenPaintItem = [=](Draw& w, Size isz, int ii, bool sel) {
|
||||
PopPaint(w, ii < DiagramItem::DASH_COUNT ? DashIcon(ii) : WidthIcon(ii - DiagramItem::DASH_COUNT), sel);
|
||||
menu.WhenPaintItem = [=](Draw& w, const Rect& r, int ii, bool sel) {
|
||||
PopPaint(w, r, ii < DiagramItem::DASH_COUNT ? DashIcon(ii) : WidthIcon(ii - DiagramItem::DASH_COUNT), sel);
|
||||
};
|
||||
|
||||
int n = menu.Execute();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue