summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--macosx/ttkMacOSXTheme.c75
1 files changed, 72 insertions, 3 deletions
diff --git a/macosx/ttkMacOSXTheme.c b/macosx/ttkMacOSXTheme.c
index a1d13de..d8af0cb 100644
--- a/macosx/ttkMacOSXTheme.c
+++ b/macosx/ttkMacOSXTheme.c
@@ -75,6 +75,15 @@ static CGFloat darkDisabledButtonFace[4] = {
static CGFloat darkInactiveSelectedTab[4] = {
159.0 / 255, 160.0 / 255, 161.0 / 255, 1.0
};
+static CGFloat darkFocusRing[4] = {
+ 38.0 / 255, 113.0 / 255, 159.0 / 255, 1.0
+};
+static CGFloat darkFocusRingTop[4] = {
+ 50.0 / 255, 124.0 / 255, 171.0 / 255, 1.0
+};
+static CGFloat darkFocusRingBottom[4] = {
+ 57.0 / 255, 130.0 / 255, 176.0 / 255, 1.0
+};
static CGFloat darkTabSeparator[4] = {0.0, 0.0, 0.0, 0.25};
static CGFloat darkTrack[4] = {1.0, 1.0, 1.0, 0.25};
static CGFloat darkFrameTop[4] = {1.0, 1.0, 1.0, 0.0625};
@@ -1012,6 +1021,54 @@ static void DrawDarkSeparator(
}
/*----------------------------------------------------------------------
+ * +++ DrawDarkFocusRing --
+ *
+ * This is a standalone drawing procedure which draws a focus ring around
+ * an Entry widget in Dark Mode.
+ */
+
+static void DrawDarkFocusRing(
+ CGRect bounds,
+ CGContextRef context)
+{
+ NSColorSpace *deviceRGB = [NSColorSpace deviceRGBColorSpace];
+ NSColor *strokeColor;
+ NSColor *fillColor = [NSColor colorWithColorSpace:deviceRGB
+ components:darkFocusRing
+ count:4];
+ CGFloat x = bounds.origin.x, y = bounds.origin.y;
+ CGFloat w = bounds.size.width, h = bounds.size.height;
+ CGPoint topPart[4] = {
+ {x, y + h}, {x, y + 1}, {x + w - 1, y + 1}, {x + w - 1, y + h}
+ };
+ CGPoint bottom[2] = {{x, y + h}, {x + w, y + h}};
+ CGRect outerRect = CGRectInset(bounds, -3, -3);
+
+ CGContextSaveGState(context);
+ CGContextSetShouldAntialias(context, false);
+ CGContextBeginPath(context);
+ strokeColor = [NSColor colorWithColorSpace: deviceRGB
+ components: darkFocusRingTop
+ count: 4];
+ CGContextSetStrokeColorWithColor(context, CGCOLOR(strokeColor));
+ CGContextAddLines(context, topPart, 4);
+ CGContextStrokePath(context);
+ strokeColor = [NSColor colorWithColorSpace: deviceRGB
+ components: darkFocusRingBottom
+ count: 4];
+ CGContextSetStrokeColorWithColor(context, CGCOLOR(strokeColor));
+ CGContextAddLines(context, bottom, 2);
+ CGContextStrokePath(context);
+ CGContextSetShouldAntialias(context, true);
+ CGContextSetFillColorWithColor(context, CGCOLOR(fillColor));
+ CGPathRef path = CGPathCreateWithRoundedRect(outerRect, 4, 4, NULL);
+ CGContextBeginPath(context);
+ CGContextAddPath(context, path);
+ CGContextAddRect(context, bounds);
+ CGContextEOFillPath(context);
+ CGContextRestoreGState(context);
+}
+/*----------------------------------------------------------------------
* +++ DrawDarkFrame --
*
* This is a standalone drawing procedure which draws various
@@ -1030,7 +1087,7 @@ static void DrawDarkFrame(
CGFloat x = bounds.origin.x, y = bounds.origin.y;
CGFloat w = bounds.size.width, h = bounds.size.height;
CGPoint topPart[4] = {
- {x, y + h - 1}, {x, y}, {x + w, y}, {x + w, y + h - 1}
+ {x, y + h - 1}, {x, y + 1}, {x + w, y + 1}, {x + w, y + h - 1}
};
CGPoint bottom[2] = {{x, y + h}, {x + w, y + h}};
CGPoint accent[2] = {{x, y + 1}, {x + w, y + 1}};
@@ -1613,7 +1670,7 @@ static void EntryElementSize(
int *minHeight,
Ttk_Padding *paddingPtr)
{
- *paddingPtr = Ttk_UniformPadding(5);
+ *paddingPtr = Ttk_MakePadding(7, 5, 7, 6);
}
static void EntryElementDraw(
@@ -1636,12 +1693,24 @@ static void EntryElementDraw(
NSColorSpace *deviceRGB = [NSColorSpace deviceRGBColorSpace];
CGFloat fill[4];
GetBackgroundColor(dc.context, tkwin, 1, fill);
+
+ /*
+ * Lighten the background to provide contrast.
+ */
+
+ for (int i = 0; i < 3; i++) {
+ fill[i] += 9.0 / 255.0;
+ }
background = [NSColor colorWithColorSpace: deviceRGB
components: fill
count: 4];
CGContextSetFillColorWithColor(dc.context, CGCOLOR(background));
CGContextFillRect(dc.context, bounds);
- DrawDarkFrame(bounds, dc.context, kHIThemeFrameTextFieldSquare);
+ if (state & TTK_STATE_FOCUS) {
+ DrawDarkFocusRing(bounds, dc.context);
+ } else {
+ DrawDarkFrame(bounds, dc.context, kHIThemeFrameTextFieldSquare);
+ }
END_DRAWING
} else {
const HIThemeFrameDrawInfo info = {