CtrlLib: MacOS U++ menu visuals improved

git-svn-id: svn://ultimatepp.org/upp/trunk@14006 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2020-02-13 20:10:11 +00:00
parent d168b37fc9
commit 5429057cdc
2 changed files with 70 additions and 0 deletions

View file

@ -152,6 +152,32 @@ void ChHostSkin()
s.paper = field(COCO_POPUPBUTTON);
}
{ // U++ menu should not be used MacOS apps, but adjust some values anyway
MenuBar::Style& s = MenuBar::StyleDefault().Write();
s.pullshift.y = 0;
s.popupbody = SColorFace();
SColorMenu_Write(SColorFace());
s.menutext = SColorText();
SColorMenuText_Write(s.menutext);
s.itemtext = SColorText();
s.item = SColorHighlight();
s.look = SColorFace();
Color dk = SColorText();
Color wh = SColorPaper();
if(IsDark(wh))
Swap(dk, wh);
s.topitemtext[0] = SColorText();
s.topitem[1] = s.topitem[0] = Null;
s.topitemtext[1] = SColorText();
s.topitem[0] = Null;
s.topitem[2] = SColorHighlight();
s.topitemtext[2] = SColorText();
CtrlImg::Set(CtrlImg::I_MenuCheck0, CtrlsImg::O0());
CtrlImg::Set(CtrlImg::I_MenuCheck1, CtrlsImg::O1());
CtrlImg::Set(CtrlImg::I_MenuRadio0, CtrlsImg::S0());
CtrlImg::Set(CtrlImg::I_MenuRadio1, CtrlsImg::S1());
}
auto nsimg = [](int ii) { return CocoImg(COCO_NSIMAGE, ii); };
CtrlImg::Set(CtrlImg::I_information, nsimg(1));
CtrlImg::Set(CtrlImg::I_question, nsimg(0));

View file

@ -293,6 +293,50 @@ void ChHostSkin()
SOImages(CtrlsImg::I_O2, GTK_STATE_FLAG_INCONSISTENT);
CtrlImg::Set(CtrlImg::I_MenuCheck0, CtrlsImg::O0());
{
MenuBar::Style& s = MenuBar::StyleDefault().Write();
s.pullshift.y = 0;
Gtk_New("menu");
Image m = CairoImage(128, 64);
s.pullshift.y = 0;
int mg = DPI(2);
s.popupframe = WithHotSpot(m, mg, mg);
Size sz = m.GetSize();
s.popupbody = Crop(m, mg, mg, sz.cx - 2 * mg, sz.cy - 2 * mg);
s.leftgap = DPI(16) + Zx(6);
SColorMenu_Write(GetBackgroundColor());
SColorMenuText_Write(s.menutext);
Gtk_New("menu menuitem");
s.menutext = GetInkColor();
Gtk_State(CTRL_HOT);
s.itemtext = GetInkColor();
Color c = AvgColor(m);
if(Diff(c, s.menutext) < 100) // menutext color too close to background color, fix it
s.menutext = IsDark(c) ? White() : Black();
s.item = Hot3(CairoImage(32, 16));
m = CreateImage(Size(DPI(32), DPI(16)), SColorFace());
Gtk_New("frame");
Over(m, CairoImage(DPI(32), DPI(16)));
Gtk_New("frame border");
Over(m, CairoImage(DPI(32), DPI(16)));
Gtk_New("menubar");
Over(m, CairoImage(DPI(32), DPI(16)));
s.look = Hot3(m);
Color dk = SColorText();
Color wh = SColorPaper();
if(IsDark(wh))
Swap(dk, wh);
s.topitemtext[0] = IsDark(AvgColor(m)) ? wh : dk;
s.topitem[1] = s.topitem[0] = Null;
s.topitemtext[1] = s.topitemtext[0];
Gtk_New("menubar menuitem", CTRL_HOT);
s.topitem[0] = Null;
s.topitem[2] = Hot3(CairoImage(32, 16));
s.topitemtext[2] = GetInkColor();
}
CtrlImg::Set(CtrlImg::I_MenuCheck1, CtrlsImg::O1());
CtrlImg::Set(CtrlImg::I_MenuRadio0, CtrlsImg::S0());
CtrlImg::Set(CtrlImg::I_MenuRadio1, CtrlsImg::S1());