CtrlLib: ChCoco

git-svn-id: svn://ultimatepp.org/upp/trunk@12279 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2018-09-15 09:35:07 +00:00
parent 6f59ef3dbb
commit cbf64d097d
6 changed files with 81 additions and 33 deletions

View file

@ -1,6 +1,6 @@
#include "ChCoco.h"
#ifdef PLAFORM_COCOA
#ifdef PLATFORM_COCOA
namespace Upp {
@ -11,7 +11,7 @@ Image Hot3(const Image& m)
}
Image Coco_ThemeImage(Color bg, int cx, int cy, int margin, int type,
int value = 0, int state = CTRL_NORMAL, bool focus = false)
int value, int state, bool focus)
{
Size isz(cx + 2 * margin, cy + 2 * margin);
ImageDraw iw(isz);
@ -63,25 +63,31 @@ void SOImages(int imli, int type, int value)
CtrlsImg::Set(imli++, Hot3(h[i]));
}
void CocoButton(Button::Style& s, int value)
void CocoButton(Image *h, int type, int value)
{
Image h[4];
h[0] = Coco_ThemeImage(DPI(40), DPI(32), 10, COCO_BUTTON, value, CTRL_NORMAL);
h[1] = Coco_ThemeImage(DPI(40), DPI(32), 10, COCO_BUTTON, value, CTRL_HOT); // same as Normal
h[2] = Coco_ThemeImage(DPI(40), DPI(32), 10, COCO_BUTTON, value, CTRL_PRESSED);
h[3] = Coco_ThemeImage(DPI(40), DPI(32), 10, COCO_BUTTON, value, CTRL_DISABLED);
h[0] = Coco_ThemeImage(DPI(40), DPI(32), 10, type, value, CTRL_NORMAL);
h[1] = Coco_ThemeImage(DPI(40), DPI(32), 10, type, value, CTRL_HOT); // same as Normal
h[2] = Coco_ThemeImage(DPI(40), DPI(32), 10, type, value, CTRL_PRESSED);
h[3] = Coco_ThemeImage(DPI(40), DPI(32), 10, type, value, CTRL_DISABLED);
AutoCrop(h, 4);
for(int i = 0; i < 4; i++)
h[i] = Hot3(h[i]);
}
void CocoButton(Button::Style& s, int type, int value)
{
Image h[4];
CocoButton(h, type, value);
Size sz = h[0].GetSize();
for(int i = 0; i < 4; i++) {
Image img = Hot3(h[i]);
s.look[i] = img;
s.look[i] = h[i];
Image gg = CreateImage(h[i].GetSize(), SColorFace());
Over(gg, h[i]);
s.textcolor[i] = i == CTRL_DISABLED ? SColorDisabled()
: Grayscale(AvgColor(gg, img.GetSize().cy / 3)) > 160 ? SColorText()
: White();
: Grayscale(AvgColor(gg, h[i].GetSize().cy / 3)) > 160 ? SColorText()
: White();
}
s.overpaint = 5;
s.pressoffset = Point(0, 0);
@ -126,9 +132,24 @@ void ChHostSkin()
SOImages(CtrlsImg::I_O1, COCO_CHECKBOX, 1);
SOImages(CtrlsImg::I_O2, COCO_CHECKBOX, 2);
CocoButton(Button::StyleNormal().Write(), 0);
CocoButton(Button::StyleOk().Write(), 1);
CocoButton(Button::StyleNormal().Write(), COCO_BUTTON, 0);
CocoButton(Button::StyleOk().Write(), COCO_BUTTON, 1);
CocoButton(Button::StyleEdge().Write(), COCO_BEVELBUTTON, 0);
CocoButton(Button::StyleScroll().Write(), COCO_BEVELBUTTON, 0);
{
auto& s = ToolButton::StyleDefault().Write();
Image h[4];
CocoButton(h, COCO_ROUNDEDBUTTON, 0);
s.look[CTRL_NORMAL] = Image();
s.look[CTRL_HOT] = h[CTRL_HOT];
s.look[CTRL_PRESSED] = h[CTRL_PRESSED];
s.look[CTRL_DISABLED] = Image();
CocoButton(h, COCO_ROUNDEDBUTTON, 1);
s.look[CTRL_CHECKED] = h[CTRL_NORMAL];
s.look[CTRL_HOTCHECKED] = h[CTRL_HOT];
}
{
Color menuink = CocoColor(COCO_SELECTEDMENUTEXT);
SColorMenu_Write(AvgColor(AutoCrop(Coco_ThemeImage(30, 20, 10, COCO_MENU, 0, CTRL_NORMAL))));
@ -139,12 +160,6 @@ void ChHostSkin()
SColorMenu_Write(SColorFace());
// s.popupframe = WithHotSpot(mimg, m, m);
// s.popupbody = Crop(mimg, m, m, 32 - 2 * m, 32 - 2 * m);
// s.leftgap = DPI(16) + Zx(6);
// s.itemtext = ChGtkColor(2, menu_item);
// s.menutext = SColorMenuText();
s.topitem[1] = s.topitem[0] = SColorFace();
s.topitemtext[1] = SColorText();
Image m = AutoCrop(Coco_ThemeImage(50, 50, 10, COCO_MENUITEM, 0, CTRL_HOT));
@ -157,8 +172,28 @@ void ChHostSkin()
s.itemtext = s.topitemtext[2] = menuink;
s.look = SColorFace();
s.opaquetest = false;
// s.breaksep.l1 = Color(img[31][15]);
// s.breaksep.l2 = Null;
}
{
ScrollBar::Style& s = ScrollBar::StyleDefault().Write();
s.arrowsize = 0; // no arrows
s.through = true;
s.barsize = s.thumbwidth = Coco_Metric(0); // kThemeMetricScrollBarWidth
for(int status = CTRL_NORMAL; status <= CTRL_DISABLED; status++) {
s.vupper[status] = s.vlower[status] =
Hot3(Coco_ThemeImage(SColorFace(), s.barsize, 40, 0, COCO_SCROLLTRACK, 0, status));
Image thumb = Coco_ThemeImage(s.barsize, 50, 0, COCO_SCROLLTHUMB, 0, status);
Rect bounds = FindBounds(thumb);
thumb = Crop(thumb, Rect(0, bounds.top, thumb.GetWidth(), bounds.bottom));
s.vthumb[status] = Hot3(thumb);
s.hupper[status] = s.hlower[status] =
Hot3(Coco_ThemeImage(SColorFace(), 40, s.barsize, 0, COCO_SCROLLTRACK, 1, status));
thumb = Coco_ThemeImage(50, s.barsize, 0, COCO_SCROLLTHUMB, 1, status);
bounds = FindBounds(thumb);
thumb = Crop(thumb, Rect(bounds.left, 0, bounds.right, thumb.GetHeight()));
s.hthumb[status] = Hot3(thumb);
}
}
// DDUMP(Coco_ThemeColor(1));