From cbf64d097d44d575af8a5fac7dbced297bd80434 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 15 Sep 2018 09:35:07 +0000 Subject: [PATCH] CtrlLib: ChCoco git-svn-id: svn://ultimatepp.org/upp/trunk@12279 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlCore/cocotodo.txt | 2 +- uppsrc/CtrlLib/ChCoco.cpp | 81 ++++++++++++++++++++++++++---------- uppsrc/CtrlLib/ChCoco.h | 2 + uppsrc/CtrlLib/ChCocoMM.h | 2 + uppsrc/CtrlLib/ChCocoMM.mm | 21 +++++++--- uppsrc/ide/ide.lay | 6 +-- 6 files changed, 81 insertions(+), 33 deletions(-) diff --git a/uppsrc/CtrlCore/cocotodo.txt b/uppsrc/CtrlCore/cocotodo.txt index 85b33ca32..30a2732c7 100644 --- a/uppsrc/CtrlCore/cocotodo.txt +++ b/uppsrc/CtrlCore/cocotodo.txt @@ -1,7 +1,7 @@ sooner: - Information etc.. Images - +- Ctrl gets stuck - fix package organiser link options (joining link options missing space) later: diff --git a/uppsrc/CtrlLib/ChCoco.cpp b/uppsrc/CtrlLib/ChCoco.cpp index 390b88671..86c712e1e 100644 --- a/uppsrc/CtrlLib/ChCoco.cpp +++ b/uppsrc/CtrlLib/ChCoco.cpp @@ -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)); diff --git a/uppsrc/CtrlLib/ChCoco.h b/uppsrc/CtrlLib/ChCoco.h index 7fb9b5a41..2dfe59a5d 100644 --- a/uppsrc/CtrlLib/ChCoco.h +++ b/uppsrc/CtrlLib/ChCoco.h @@ -6,6 +6,8 @@ namespace Upp { +Image Coco_ThemeImage(Color bg, int cx, int cy, int margin, int type, + int value = 0, int state = CTRL_NORMAL, bool focus = false); Image Coco_ThemeImage(int cx, int cy, int margin, int type, int value = 0, int state = CTRL_NORMAL, bool focus = false); diff --git a/uppsrc/CtrlLib/ChCocoMM.h b/uppsrc/CtrlLib/ChCocoMM.h index 6de394715..b20c40bc9 100644 --- a/uppsrc/CtrlLib/ChCocoMM.h +++ b/uppsrc/CtrlLib/ChCocoMM.h @@ -5,6 +5,8 @@ enum ChCocoControlTypes { COCO_BUTTON, COCO_CHECKBOX, COCO_RADIOBUTTON, + COCO_BEVELBUTTON, + COCO_ROUNDEDBUTTON, COCO_SCROLLTHUMB, COCO_SCROLLTRACK, COCO_BRUSH, diff --git a/uppsrc/CtrlLib/ChCocoMM.mm b/uppsrc/CtrlLib/ChCocoMM.mm index 018f30453..7cad221e8 100644 --- a/uppsrc/CtrlLib/ChCocoMM.mm +++ b/uppsrc/CtrlLib/ChCocoMM.mm @@ -1,10 +1,11 @@ -#include +#include #ifdef PLATFORM_COCOA #include -#include "ChCocoMM.h" #include +#include +#include "ChCocoMM.h" void Coco_ThemePaint(void *cgcontext, const Upp::Rect& r, int type, int value, int state, bool focus) { @@ -72,13 +73,15 @@ void Coco_ThemePaint(void *cgcontext, const Upp::Rect& r, int type, int value, i tdi.kind = kThemeScrollBarMedium; tdi.bounds = cr; tdi.min = 0; - tdi.max = 100; + tdi.max = 1; tdi.value = 0; tdi.attributes = kThemeTrackNoScrollBarArrows| - (type == COCO_SCROLLTHUMB ? kThemeTrackHideTrack|kThemeTrackShowThumb : 0); + (type == COCO_SCROLLTHUMB ? kThemeTrackHideTrack|kThemeTrackShowThumb : 0)| + (value * kThemeTrackHorizontal); tdi.enableState = state == Upp::CTRL_DISABLED ? kThemeTrackDisabled : kThemeTrackActive; - tdi.trackInfo.scrollbar.viewsize = 50; - tdi.trackInfo.scrollbar.pressState = state == Upp::CTRL_PRESSED ? kThemeThumbPressed : 0; + tdi.trackInfo.scrollbar.viewsize = 200; + if(type == COCO_SCROLLTHUMB && state == Upp::CTRL_HOT || state == Upp::CTRL_PRESSED) + tdi.trackInfo.scrollbar.pressState |= kThemeThumbPressed; HIThemeDrawTrack(&tdi, &cr, cg, kHIThemeOrientationNormal); } @@ -89,7 +92,13 @@ void Coco_ThemePaint(void *cgcontext, const Upp::Rect& r, int type, int value, i bdi.state = st; bdi.kind = Upp::decode(type, COCO_CHECKBOX, (int)kThemeCheckBox, COCO_RADIOBUTTON, (int)kThemeRadioButton, + COCO_BEVELBUTTON, (int)kThemeBevelButtonMedium, + COCO_ROUNDEDBUTTON, (int)kThemeRoundedBevelButton, (int)kThemePushButtonNormal); + #ifdef _DEBUG + if(type < 0) + bdi.kind = -type; + #endif bdi.adornment = focus ? kThemeAdornmentFocus : kThemeAdornmentNone; HIThemeDrawButton(&cr, &bdi, cg, kHIThemeOrientationNormal, 0); diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index 0209626d5..e42f8a1b4 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -296,9 +296,9 @@ LAYOUT(OutputModeLayout, 672, 480) ITEM(LabelBox, dv___8, SetLabel(t_("Export project")).LeftPosZ(8, 656).TopPosZ(392, 48)) ITEM(Label, dv___9, SetLabel(t_("To directory")).LeftPosZ(12, 68).TopPosZ(408, 21)) ITEM(EditString, export_dir, LeftPosZ(80, 368).TopPosZ(409, 19)) - ITEM(Button, export_used, SetLabel(t_("Used")).LeftPosZ(456, 64).TopPosZ(404, 24)) - ITEM(Button, export_all, SetLabel(t_("All")).LeftPosZ(524, 64).TopPosZ(404, 24)) - ITEM(Button, export_makefile, SetLabel(t_("Makefile")).LeftPosZ(592, 64).TopPosZ(404, 24)) + ITEM(Button, export_used, SetLabel(t_("Used")).LeftPosZ(456, 64).TopPosZ(407, 24)) + ITEM(Button, export_all, SetLabel(t_("All")).LeftPosZ(524, 64).TopPosZ(407, 24)) + ITEM(Button, export_makefile, SetLabel(t_("Makefile")).LeftPosZ(592, 64).TopPosZ(407, 24)) ITEM(Button, reset_blitz, SetLabel(t_("Reset BLITZ")).LeftPosZ(8, 88).TopPosZ(448, 24)) ITEM(Button, cmd_options, SetLabel(t_("Command line &options..")).LeftPosZ(100, 140).TopPosZ(448, 24)) ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(532, 64).TopPosZ(448, 24))