Revision: 12873
          http://sourceforge.net/p/skim-app/code/12873
Author:   hofman
Date:     2022-05-03 17:07:55 +0000 (Tue, 03 May 2022)
Log Message:
-----------
Add separator in topbarview as box above the background, no need for special 
view subclass

Modified Paths:
--------------
    trunk/SKTopBarView.h
    trunk/SKTopBarView.m

Modified: trunk/SKTopBarView.h
===================================================================
--- trunk/SKTopBarView.h        2022-05-03 16:40:18 UTC (rev 12872)
+++ trunk/SKTopBarView.h        2022-05-03 17:07:55 UTC (rev 12873)
@@ -38,11 +38,11 @@
 
 #import <Cocoa/Cocoa.h>
 
-@class SKEdgeView;
 
 @interface SKTopBarView : NSView {
-    SKEdgeView *contentView;
+    NSView *contentView;
     NSVisualEffectView *backgroundView;
+    NSBox *separatorView;
     NSArray *backgroundColors;
     NSArray *alternateBackgroundColors;
     BOOL hasSeparator;
@@ -49,7 +49,7 @@
     BOOL wantsSubviews;
 }
 
-@property (nonatomic, readonly) SKEdgeView *contentView;
+@property (nonatomic, readonly) NSView *contentView;
 @property (nonatomic, copy) NSArray *backgroundColors, 
*alternateBackgroundColors;
 @property (nonatomic) BOOL hasSeparator;
 

Modified: trunk/SKTopBarView.m
===================================================================
--- trunk/SKTopBarView.m        2022-05-03 16:40:18 UTC (rev 12872)
+++ trunk/SKTopBarView.m        2022-05-03 17:07:55 UTC (rev 12873)
@@ -45,14 +45,6 @@
 
 #define SEPARATOR_WIDTH 1.0
 
-@interface SKEdgeView : NSView {
-    BOOL hasSeparator;
-}
-@property (nonatomic) BOOL hasSeparator;
-@end
-
-#pragma mark -
-
 @implementation SKTopBarView
 
 @synthesize contentView, backgroundColors, alternateBackgroundColors, 
hasSeparator;
@@ -66,7 +58,7 @@
             backgroundView = [[NSVisualEffectView alloc] initWithFrame:[self 
bounds]];
             [super addSubview:backgroundView];
         }
-        contentView = [[SKEdgeView alloc] initWithFrame:[self bounds]];
+        contentView = [[NSView alloc] initWithFrame:[self bounds]];
         [super addSubview:contentView];
         wantsSubviews = NO;
         [self applyDefaultBackground];
@@ -81,6 +73,7 @@
                // this decodes only the reference, the actual view should 
already be decoded as a subview
         contentView = [[decoder decodeObjectForKey:@"contentView"] retain];
         backgroundView = [[decoder decodeObjectForKey:@"backgroundView"] 
retain];
+        separatorView = [[decoder decodeObjectForKey:@"separatorView"] retain];
         backgroundColors = [[decoder decodeObjectForKey:@"backgroundColors"] 
retain];
         alternateBackgroundColors = [[decoder 
decodeObjectForKey:@"alternateBackgroundColors"] retain];
         hasSeparator = [decoder decodeBoolForKey:@"hasSeparator"];
@@ -103,6 +96,7 @@
     [[NSNotificationCenter defaultCenter] removeObserver:self];
     SKDESTROY(contentView);
     SKDESTROY(backgroundView);
+    SKDESTROY(separatorView);
     SKDESTROY(backgroundColors);
     SKDESTROY(alternateBackgroundColors);
        [super dealloc];
@@ -113,6 +107,7 @@
     NSRect rect = [self bounds];
     [backgroundView setFrame:rect];
     [contentView setFrame:rect];
+    [separatorView setFrame:SKSliceRect(rect, SEPARATOR_WIDTH, NSMinYEdge)];
 }
 
 - (void)addSubview:(NSView *)aView {
@@ -146,8 +141,9 @@
         return;
     
     NSRect rect = [self bounds];
+    NSRect sepRect = NSZeroRect;
     if (hasSeparator)
-        rect = SKShrinkRect(rect, 1.0, NSMinYEdge);
+        NSDivideRect(rect, &sepRect, &rect, SEPARATOR_WIDTH, NSMinYEdge);
     
     [NSGraphicsContext saveGraphicsState];
     
@@ -160,6 +156,11 @@
         [NSBezierPath fillRect:rect];
     }
     
+    if (RUNNING_BEFORE(10_14) && hasSeparator) {
+        [[NSColor colorWithGenericGamma22White:0.8 alpha:1.0] setFill];
+        [NSBezierPath fillRect:rect];
+    }
+    
     [NSGraphicsContext restoreGraphicsState];
 }
 
@@ -197,8 +198,26 @@
 - (void)setHasSeparator:(BOOL)flag {
        if (flag != hasSeparator) {
                hasSeparator = flag;
-        [contentView setHasSeparator:hasSeparator];
-               [self setNeedsDisplay:YES];
+        if (RUNNING_AFTER(10_13)) {
+            if (separatorView == nil && hasSeparator) {
+                separatorView = [[NSBox alloc] initWithFrame:SKSliceRect([self 
bounds], SEPARATOR_WIDTH, NSMinYEdge)];
+                [separatorView setBoxType:NSBoxCustom];
+                [separatorView setBorderType:NSNoBorder];
+                [separatorView setTitlePosition:NSNoTitle];
+                [separatorView setBorderWidth:0.0];
+                [separatorView setContentViewMargins:NSZeroSize];
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "-Wpartial-availability"
+                [separatorView setFillColor:[NSColor separatorColor]];
+    #pragma clang diagnostic pop
+                wantsSubviews = YES;
+                [super addSubview:separatorView positioned:NSWindowBelow 
relativeTo:contentView];
+                wantsSubviews = NO;
+            }
+            [separatorView setHidden:hasSeparator == NO];
+        } else {
+            [self setNeedsDisplay:YES];
+        }
        }
 }
 
@@ -243,44 +262,3 @@
 }
 
 @end
-
-#pragma mark -
-
-@implementation SKEdgeView
-
-@synthesize hasSeparator;
-
-- (id)initWithCoder:(NSCoder *)decoder {
-    self = [super initWithCoder:decoder];
-    if (self) {
-        hasSeparator = [decoder decodeBoolForKey:@"hasSeparator"];
-    }
-    return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)coder {
-    [super encodeWithCoder:coder];
-    [coder encodeBool:hasSeparator forKey:@"hasSeparator"];
-}
-
-- (void)setHasSeparator:(BOOL)flag {
-    if (flag != hasSeparator) {
-        hasSeparator = flag;
-        [self setNeedsDisplay:YES];
-    }
-}
-
-- (void)drawRect:(NSRect)dirtyRect {
-    if ([self hasSeparator]) {
-        if (RUNNING_AFTER(10_13))
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wpartial-availability"
-            [[NSColor separatorColor] setFill];
-#pragma clang diagnostic pop
-        else
-            [[NSColor colorWithGenericGamma22White:0.8 alpha:1.0] setFill];
-        [NSBezierPath fillRect:SKSliceRect([self bounds], SEPARATOR_WIDTH, 
NSMinYEdge)];
-    }
-}
-
-@end

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to