summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
authorculler <culler>2019-03-26 18:11:17 (GMT)
committerculler <culler>2019-03-26 18:11:17 (GMT)
commit549747a2a8c86ef81e37f32f1d96cb94b6b99a95 (patch)
treeb2181787dc94b87fe5d7e115c417f4bfa2611238 /macosx
parent7ffe9f76440019f4fea87c29f2b42a543066ea3b (diff)
downloadtk-549747a2a8c86ef81e37f32f1d96cb94b6b99a95.zip
tk-549747a2a8c86ef81e37f32f1d96cb94b6b99a95.tar.gz
tk-549747a2a8c86ef81e37f32f1d96cb94b6b99a95.tar.bz2
Added a drawing procedure for dark mode comboboxes.
Diffstat (limited to 'macosx')
-rw-r--r--macosx/tkMacOSXColor.c7
-rw-r--r--macosx/ttkMacOSXTheme.c82
2 files changed, 61 insertions, 28 deletions
diff --git a/macosx/tkMacOSXColor.c b/macosx/tkMacOSXColor.c
index f0bcb7c..91f0578 100644
--- a/macosx/tkMacOSXColor.c
+++ b/macosx/tkMacOSXColor.c
@@ -203,10 +203,11 @@ static const struct SystemColorMapEntry systemColorMap[] = {
{ "ControlTextColor", semantic, 3 }, /* 177 */
{ "DisabledControlTextColor", semantic, 4 }, /* 178 */
{ "TextBackgroundColor", semantic, 5 }, /* 179 */
+ { "SelectedTextBackgroundColor", semantic, 6 }, /* 180 */
{ NULL, 0, 0 }
};
#define FIRST_SEMANTIC_COLOR 166
-#define MAX_PIXELCODE 179
+#define MAX_PIXELCODE 180
/*
*----------------------------------------------------------------------
@@ -313,6 +314,10 @@ SetCGColorComponents(
color = [[NSColor textBackgroundColor] colorUsingColorSpace:
[NSColorSpace deviceRGBColorSpace]];
break;
+ case 6:
+ color = [[NSColor selectedTextBackgroundColor] colorUsingColorSpace:
+ [NSColorSpace deviceRGBColorSpace]];
+ break;
default:
if ([NSApp macMinorVersion] < 10) {
color = [[NSColor textColor] colorUsingColorSpace:
diff --git a/macosx/ttkMacOSXTheme.c b/macosx/ttkMacOSXTheme.c
index 6d6e90c..47bea73 100644
--- a/macosx/ttkMacOSXTheme.c
+++ b/macosx/ttkMacOSXTheme.c
@@ -373,6 +373,41 @@ static void HighlightButtonBorder(
CFRelease(topGradient);
}
+
+static void DrawUpDownArrows(
+ CGRect bounds,
+ CGContextRef context)
+{
+ CGFloat x, y;
+ CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
+ CGContextSetLineWidth(context, 1.5);
+ x = bounds.origin.x + 5;
+ y = bounds.origin.y + trunc(bounds.size.height/2);
+ CGContextBeginPath(context);
+ CGPoint bottomArrow[3] = {{x, y+2}, {x+3.5, y+5.5}, {x+7, y+2}};
+ CGContextAddLines(context, bottomArrow, 3);
+ CGPoint topArrow[3] = {{x, y-2}, {x+3.5, y-5.5}, {x+7, y-2}};
+ CGContextAddLines(context, topArrow, 3);
+ CGContextStrokePath(context);
+ CGContextRestoreGState(context);
+}
+
+static void DrawDownArrow(
+ CGRect bounds,
+ CGContextRef context)
+{
+ CGFloat x, y;
+ CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
+ CGContextSetLineWidth(context, 1.5);
+ x = bounds.origin.x + 5;
+ y = bounds.origin.y + trunc(bounds.size.height/2);
+ CGContextBeginPath(context);
+ CGPoint bottomArrow[3] = {{x, y-3}, {x+3.5, y+3}, {x+7, y-3}};
+ CGContextAddLines(context, bottomArrow, 3);
+ CGContextStrokePath(context);
+ CGContextRestoreGState(context);
+}
+
/*
* DrawDarkButton --
*
@@ -424,8 +459,7 @@ static void DrawDarkButton(
* If this is a popup, draw the arrow button.
*/
- if (kind == kThemePopupButton) {
- CGFloat x, y;
+ if (kind == kThemePopupButton | kind == kThemeComboBox) {
CGRect arrowBounds = bounds;
arrowBounds.size.width = 16;
arrowBounds.origin.x += bounds.size.width - 16;
@@ -439,29 +473,18 @@ static void DrawDarkButton(
GradientFillRoundedRectangle(context, arrowBounds, 4,
darkSelectedGradient, 2);
}
-
- /*
- * Stroke the arrows.
- */
-
- CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
- CGContextSetLineWidth(context, 1.5);
- x = arrowBounds.origin.x + 5;
- y = arrowBounds.origin.y + trunc(arrowBounds.size.height/2);
- CGContextBeginPath(context);
- CGPoint bottomArrow[3] = {{x, y+2}, {x+3.5, y+5.5}, {x+7, y+2}};
- CGContextAddLines(context, bottomArrow, 3);
- CGPoint topArrow[3] = {{x, y-2}, {x+3.5, y-5.5}, {x+7, y-2}};
- CGContextAddLines(context, topArrow, 3);
- CGContextStrokePath(context);
- CGContextRestoreGState(context);
+ if (kind == kThemePopupButton) {
+ DrawUpDownArrows(arrowBounds, context);
+ } else {
+ DrawDownArrow(arrowBounds, context);
+ }
}
HighlightButtonBorder(context, bounds);
}
/*
- * DrawDarkButton --
+ * DrawDarkBevelButton --
*
* This is a standalone drawing procedure which draws
* RoundedBevelButtons in the Dark Mode style.
@@ -1264,16 +1287,19 @@ static void ComboboxElementDraw(
};
BEGIN_DRAWING(d)
+ bounds.origin.y += 1;
if (TkMacOSXInDarkMode(tkwin)) {
bounds.size.height += 1;
- } else if ((state & TTK_STATE_BACKGROUND) &&
- !(state & TTK_STATE_DISABLED)) {
- NSColor *background = [NSColor textBackgroundColor];
- CGRect innerBounds = CGRectInset(bounds, 1, 2);
- SolidFillRoundedRectangle(dc.context, innerBounds, 4, background);
+ DrawDarkButton(bounds, info.kind, state, dc.context);
+ } else {
+ if ((state & TTK_STATE_BACKGROUND) &&
+ !(state & TTK_STATE_DISABLED)) {
+ NSColor *background = [NSColor textBackgroundColor];
+ CGRect innerBounds = CGRectInset(bounds, 1, 2);
+ SolidFillRoundedRectangle(dc.context, innerBounds, 4, background);
+ }
+ ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL);
}
- bounds.origin.y += 1;
- ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL);
END_DRAWING
}
@@ -1918,10 +1944,12 @@ static void DisclosureElementDraw(
Drawable d, Ttk_Box b, Ttk_State state)
{
if (!(state & TTK_TREEVIEW_STATE_LEAF)) {
+ int triangleState = TkMacOSXInDarkMode(tkwin) ?
+ kThemeStateInactive : kThemeStateActive;
CGRect bounds = BoxToRect(d, b);
const HIThemeButtonDrawInfo info = {
.version = 0,
- .state = Ttk_StateTableLookup(ThemeStateTable, state),
+ .state = triangleState,
.kind = kThemeDisclosureTriangle,
.value = Ttk_StateTableLookup(DisclosureValueTable, state),
.adornment = kThemeAdornmentDrawIndicatorOnly,