diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-09-24 14:03:35 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-09-24 14:03:35 (GMT) |
commit | 60091ce863fdbfbf444d6970d44fb50166ccd6fe (patch) | |
tree | 01d9762601541ddc55b930c28b3d547c496b3d67 /macosx/ttkMacOSXTheme.c | |
parent | e59d11829980b85d1a4c263d108f0a601fce5e5b (diff) | |
parent | 5a024656faa09acb77aa34603e41b1cd5e38fbe5 (diff) | |
download | tk-60091ce863fdbfbf444d6970d44fb50166ccd6fe.zip tk-60091ce863fdbfbf444d6970d44fb50166ccd6fe.tar.gz tk-60091ce863fdbfbf444d6970d44fb50166ccd6fe.tar.bz2 |
Merge 8.6. Change macro names
Diffstat (limited to 'macosx/ttkMacOSXTheme.c')
-rw-r--r-- | macosx/ttkMacOSXTheme.c | 78 |
1 files changed, 73 insertions, 5 deletions
diff --git a/macosx/ttkMacOSXTheme.c b/macosx/ttkMacOSXTheme.c index df597f4..3541dd8 100644 --- a/macosx/ttkMacOSXTheme.c +++ b/macosx/ttkMacOSXTheme.c @@ -303,9 +303,10 @@ static void GetBackgroundColor( /*---------------------------------------------------------------------- - * +++ Single Arrow Buttons -- + * +++ Single Arrow Images -- * - * Used in ListHeaders and Comboboxes. + * Used in ListHeaders and Comboboxes as well as disclosure triangles in + * macOS 11. */ static void DrawDownArrow( @@ -352,6 +353,48 @@ static void DrawUpArrow( CGContextStrokePath(context); } +static void DrawClosedDisclosure( + CGContextRef context, + CGRect bounds, + CGFloat inset, + CGFloat size, + CGFloat *rgba) +{ + CGFloat x, y; + + CGContextSetRGBStrokeColor(context, rgba[0], rgba[1], rgba[2], rgba[3]); + CGContextSetLineWidth(context, 1.5); + x = bounds.origin.x + inset; + y = bounds.origin.y + trunc(bounds.size.height / 2); + CGContextBeginPath(context); + CGPoint arrow[3] = { + {x, y - size / 4 - 1}, {x + size / 2, y}, {x, y + size / 4 + 1} + }; + CGContextAddLines(context, arrow, 3); + CGContextStrokePath(context); +} + +static void DrawOpenDisclosure( + CGContextRef context, + CGRect bounds, + CGFloat inset, + CGFloat size, + CGFloat *rgba) +{ + CGFloat x, y; + + CGContextSetRGBStrokeColor(context, rgba[0], rgba[1], rgba[2], rgba[3]); + CGContextSetLineWidth(context, 1.5); + x = bounds.origin.x + inset; + y = bounds.origin.y + trunc(bounds.size.height / 2); + CGContextBeginPath(context); + CGPoint arrow[3] = { + {x, y - size / 4}, {x + size / 2, y + size / 2}, {x + size, y - size / 4} + }; + CGContextAddLines(context, arrow, 3); + CGContextStrokePath(context); +} + /*---------------------------------------------------------------------- * +++ Double Arrow Buttons -- * @@ -2101,10 +2144,16 @@ static void TrackElementDraw( Tcl_GetDoubleFromObj(NULL, elem->valueObj, &value); factor = RangeToFactor(to); + /* + * HIThemeTrackDrawInfo uses 2-byte alignment; assigning to a separate + * bounds variable avoids UBSan (-fsanitize=alignment) complaints. + */ + + CGRect bounds = BoxToRect(d, b); HIThemeTrackDrawInfo info = { .version = 0, .kind = data->kind, - .bounds = BoxToRect(d, b), + .bounds = bounds, .min = from * factor, .max = to * factor, .value = value * factor, @@ -2239,13 +2288,19 @@ static void PbarElementDraw( Tcl_GetIntFromObj(NULL, pbar->phaseObj, &phase); factor = RangeToFactor(maximum); + /* + * HIThemeTrackDrawInfo uses 2-byte alignment; assigning to a separate + * bounds variable avoids UBSan (-fsanitize=alignment) complaints. + */ + + CGRect bounds = BoxToRect(d, b); HIThemeTrackDrawInfo info = { .version = 0, .kind = (!strcmp("indeterminate", Tcl_GetString(pbar->modeObj)) && value) ? kThemeIndeterminateBar : kThemeProgressBar, - .bounds = BoxToRect(d, b), + .bounds = bounds, .min = 0, .max = maximum * factor, .value = value * factor, @@ -3001,8 +3056,21 @@ static void DisclosureElementDraw( }; BEGIN_DRAWING(d) - ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, + if ([NSApp macOSVersion] >= 110000) { + CGFloat rgba[4]; + NSColorSpace *deviceRGB = [NSColorSpace deviceRGBColorSpace]; + NSColor *stroke = [[NSColor textColor] + colorUsingColorSpace: deviceRGB]; + [stroke getComponents: rgba]; + if (state & TTK_TREEVIEW_STATE_OPEN) { + DrawOpenDisclosure(dc.context, bounds, 2, 8, rgba); + } else { + DrawClosedDisclosure(dc.context, bounds, 2, 12, rgba); + } + } else { + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + } END_DRAWING } } |