Revision: 15020
http://sourceforge.net/p/skim-app/code/15020
Author: hofman
Date: 2025-03-25 18:12:07 +0000 (Tue, 25 Mar 2025)
Log Message:
-----------
Fix layout of color swatch background with large size. Make radius of color
swatches dependent on size.
Modified Paths:
--------------
trunk/SKColorSwatch.m
Modified: trunk/SKColorSwatch.m
===================================================================
--- trunk/SKColorSwatch.m 2025-03-24 17:09:26 UTC (rev 15019)
+++ trunk/SKColorSwatch.m 2025-03-25 18:12:07 UTC (rev 15020)
@@ -58,15 +58,22 @@
#define COLOR_KEY @"color"
-#define BEZEL_INSET_LEFTRIGHT 1.0
-#define BEZEL_INSET_TOP 1.0
-#define BEZEL_INSET_BOTTOM 2.0
-#define COLOR_INSET 2.0
+#define BEZEL_INSET_LEFT 1.0
+#define BEZEL_INSET_RIGHT 1.0
+#define BEZEL_INSET_TOP 1.0
+#define BEZEL_INSET_BOTTOM 2.0
+#define COLOR_INSET 2.0
-#define LARGE_SIZE_HEIGHT_OFFSET 10.0
-#define LARGE_SIZE_WIDTH_OUTSET 6.0
-#define REGULAR_BEZEL_WIDTH_OFFSET 4.0
+#define LARGE_SIZE_HEIGHT_OUTSET 4.5
+#define LARGE_SIZE_WIDTH_OUTSET 5.0
+#define BEZEL_WIDTH_OFFSET_REGULAR 4.0
+#define BEZEL_WIDTH_OFFSET_SMALL 0.0
+#define BEZEL_WIDTH_OFFSET_MINI 0.0
+#define BEZEL_WIDTH_OFFSET_LARGE 2.0
+
+#define SKControlSizeLarge 3
+
@interface SKColorSwatchBackgroundView : NSControl
@property (nonatomic) CGFloat bezelWidth;
@end
@@ -257,7 +264,7 @@
}
- (NSEdgeInsets)alignmentRectInsets {
- return NSEdgeInsetsMake(BEZEL_INSET_TOP, BEZEL_INSET_LEFTRIGHT,
BEZEL_INSET_BOTTOM, BEZEL_INSET_LEFTRIGHT);
+ return NSEdgeInsetsMake(BEZEL_INSET_TOP, BEZEL_INSET_LEFT,
BEZEL_INSET_BOTTOM, BEZEL_INSET_RIGHT);
}
- (void)updateSubviewLayout {
@@ -269,10 +276,8 @@
- (void)updateBezelHeight {
CGFloat height = [[backgroundView cell] cellSize].height - BEZEL_INSET_TOP
- BEZEL_INSET_BOTTOM;
- if (@available(macOS 11.0, *)) {
- if ([backgroundView controlSize] == NSControlSizeLarge)
- height -= LARGE_SIZE_HEIGHT_OFFSET;
- }
+ if ([backgroundView controlSize] == SKControlSizeLarge)
+ height -= 2.0 * LARGE_SIZE_HEIGHT_OUTSET;
if (fabs(height - bezelHeight) > 0.0) {
bezelHeight = height;
[self updateSubviewLayout];
@@ -286,7 +291,12 @@
if (controlSize != [self controlSize]) {
[super setControlSize:controlSize];
[backgroundView setControlSize:controlSize];
- [backgroundView setFrame:controlSize == 3 ? NSInsetRect([self bounds],
-LARGE_SIZE_WIDTH_OUTSET, 0.0) : [self bounds]];
+ NSRect bgFrame = [self bounds];
+ if (controlSize == SKControlSizeLarge) {
+ bgFrame = NSInsetRect(bgFrame, -LARGE_SIZE_WIDTH_OUTSET,
-LARGE_SIZE_HEIGHT_OUTSET);
+ bgFrame.origin.y = ceil(bgFrame.origin.y);
+ }
+ [backgroundView setFrame:bgFrame];
[self updateBezelHeight];
}
}
@@ -302,9 +312,12 @@
- (void)drawFocusRingMask {
NSRect rect = [self focusRingMaskBounds];
if (NSIsEmptyRect(rect) == NO) {
- CGFloat r = 2.0;
+ CGFloat r = 3.0;
if (@available(macOS 11.0, *))
- r = 3.0;
+ r = ceil(0.25 * bezelHeight) - 3.0;
+ else
+ r = floor(0.25 * bezelHeight) - 3.0;
+ r = fmax(0.5, r);
[[NSBezierPath bezierPathWithRoundedRect:rect xRadius:r yRadius:r]
fill];
}
}
@@ -601,7 +614,7 @@
for (SKColorSwatchItemView *itemView in itemViews)
[[itemView animator] setFrame:[self frameForItemViewAtIndex:i++
collapsedIndex:collapsedIndex]];
if (NSEqualSizes(size, NSZeroSize) == NO) {
- [[backgroundView animator] setBezelWidth:size.width - 2.0 *
BEZEL_INSET_LEFTRIGHT];
+ [[backgroundView animator] setBezelWidth:size.width - BEZEL_INSET_LEFT
- BEZEL_INSET_RIGHT];
if (autoResizes)
[[self animator] setFrameSize:size];
}
@@ -875,7 +888,7 @@
NSSegmentedCell *cell = [[NSSegmentedCell alloc] init];
[cell setSegmentCount:1];
[cell setSegmentStyle:NSSegmentStyleTexturedSquare];
- [cell setWidth:fmax(0.0, NSWidth(frameRect) -
REGULAR_BEZEL_WIDTH_OFFSET - 2.0 * BEZEL_INSET_LEFTRIGHT) forSegment:0];
+ [cell setWidth:fmax(0.0, NSWidth(frameRect) -
BEZEL_WIDTH_OFFSET_REGULAR - BEZEL_INSET_LEFT - BEZEL_INSET_RIGHT)
forSegment:0];
[self setCell:cell];
}
return self;
@@ -883,14 +896,22 @@
- (BOOL)canBecomeKeyView { return NO; }
-#define BEZEL_WIDTH_OFFSET ([self controlSize] == NSControlSizeRegular ?
REGULAR_BEZEL_WIDTH_OFFSET : 0.0)
+- (CGFloat)bezelWidthOffset {
+ switch ([self controlSize]) {
+ case NSControlSizeRegular: return BEZEL_WIDTH_OFFSET_REGULAR;
+ case NSControlSizeSmall: return BEZEL_WIDTH_OFFSET_SMALL;
+ case NSControlSizeMini: return BEZEL_WIDTH_OFFSET_MINI;
+ case SKControlSizeLarge: return BEZEL_WIDTH_OFFSET_LARGE;
+ default: return BEZEL_WIDTH_OFFSET_REGULAR;
+ }
+}
- (CGFloat)bezelWidth {
- return [[self cell] widthForSegment:0] + BEZEL_WIDTH_OFFSET;
+ return [[self cell] widthForSegment:0] + [self bezelWidthOffset];
}
- (void)setBezelWidth:(CGFloat)width {
- [[self cell] setWidth:width - BEZEL_WIDTH_OFFSET forSegment:0];
+ [[self cell] setWidth:width - [self bezelWidthOffset] forSegment:0];
[self setNeedsDisplay:YES];
}
@@ -964,9 +985,12 @@
if (NSWidth(rect) < 5.0)
return;
rect = NSInsetRect(rect, 2.0, 2.0);
- CGFloat r = 2.0;
+ CGFloat r = 3.0;
if (@available(macOS 11.0, *))
- r = 3.0;
+ r = ceil(0.25 * NSHeight(rect)) - 2.0;
+ else
+ r = floor(0.25 * NSHeight(rect) - 2.0);
+ r = fmax(0.5, r);
BOOL disabled = NO;
if (@available(macOS 10.14, *))
disabled = [[self window] isMainWindow] == NO && [[self window]
isKeyWindow] == NO && ([self isDescendantOf:[[self window] contentView]] == NO
|| [[self window] isKindOfClass:NSClassFromString(@"NSToolbarSnapshotWindow")]);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit