Revision: 15642
          http://sourceforge.net/p/skim-app/code/15642
Author:   hofman
Date:     2025-07-11 15:49:35 +0000 (Fri, 11 Jul 2025)
Log Message:
-----------
Let pdfview set the frame for the text note editor. Declare pdfview as 
NSResponder conforming to delegate protocol.

Modified Paths:
--------------
    trunk/SKPDFView.m
    trunk/SKTextNoteEditor.h
    trunk/SKTextNoteEditor.m

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2025-07-11 14:51:46 UTC (rev 15641)
+++ trunk/SKPDFView.m   2025-07-11 15:49:35 UTC (rev 15642)
@@ -188,7 +188,7 @@
 - (void)enableSwipeGestures:(BOOL)flag;
 @end
 
-@interface SKPDFView () <SKReadingBarDelegate, SKLayerDelegate>
+@interface SKPDFView () <SKReadingBarDelegate, SKLayerDelegate, 
SKTextNoteEditorDelegate>
 @property (strong) SKReadingBar *readingBar;
 @property (strong) SKSyncDot *syncDot;
 @end
@@ -415,7 +415,7 @@
     [self resetPDFToolTipRects];
     if (editor) {
         if ([self isPageAtIndexDisplayed:[currentAnnotation pageIndex]])
-            [editor updateFrame];
+            [self textNoteEditorSetFrame:editor];
         else
             [self commitEditing];
     }
@@ -2774,7 +2774,7 @@
     if ([self isEditingAnnotation:currentAnnotation])
         return;
     
-    editor = [[SKTextNoteEditor alloc] initWithPDFView:self 
annotation:currentAnnotation];
+    editor = [[SKTextNoteEditor alloc] initWithAnnotation:currentAnnotation 
delegate:self];
     [[self documentView] addSubview:editor];
     [editor startEditingWithEvent:theEvent];
     
@@ -2781,6 +2781,13 @@
     [self updatedAnnotation:currentAnnotation];
 }
 
+- (void)textNoteEditorSetFrame:(SKTextNoteEditor *)textNoteEditor {
+    NSRect frame = [self convertRect:[currentAnnotation bounds] 
fromPage:[currentAnnotation page]];
+    frame = [self backingAlignedRect:frame options:NSAlignAllEdgesNearest];
+    frame = [self convertRect:frame toView:[self documentView]];
+    [editor setFrame:frame];
+}
+
 - (void)textNoteEditorDidBeginEditing:(SKTextNoteEditor *)textNoteEditor {
     if ([[self delegate] 
respondsToSelector:@selector(PDFViewDidBeginEditing:)])
         [[self delegate] PDFViewDidBeginEditing:self];
@@ -3152,7 +3159,7 @@
         [self resetPDFToolTipRects];
     } else if ([self isEditingAnnotation:annotation]) {
         if ([self isPageAtIndexDisplayed:[annotation pageIndex]])
-            [editor updateFrame];
+            [self textNoteEditorSetFrame:editor];
         else
             [self commitEditing];
     }
@@ -3193,7 +3200,7 @@
 - (void)handleScaleChangedNotification:(NSNotification *)notification {
     [self resetPDFToolTipRects];
     [self updatePacer];
-    [editor updateFrame];
+    [self textNoteEditorSetFrame:editor];
 }
 
 - (void)handleUpdateTrackingAreasNotification:(NSNotification *)notification {

Modified: trunk/SKTextNoteEditor.h
===================================================================
--- trunk/SKTextNoteEditor.h    2025-07-11 14:51:46 UTC (rev 15641)
+++ trunk/SKTextNoteEditor.h    2025-07-11 15:49:35 UTC (rev 15642)
@@ -41,24 +41,26 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+@protocol SKTextNoteEditorDelegate;
+
 @interface SKTextNoteEditor : NSView <NSTextViewDelegate> {
     NSTextView *textView;
-    __weak PDFView *pdfView;
+    __weak NSResponder<SKTextNoteEditorDelegate> *delegate;
     PDFAnnotation *annotation;
     NSUndoManager *undoManager;
 }
 
-- (instancetype)initWithPDFView:(PDFView *)aPDFView annotation:(PDFAnnotation 
*)anAnnotation;
+- (instancetype)initWithAnnotation:(PDFAnnotation *)anAnnotation 
delegate:(NSResponder<SKTextNoteEditorDelegate> *)aDelegate;
 
 @property (nonatomic, nullable, weak, readonly) NSString *currentString;
 
 - (void)startEditingWithEvent:(nullable NSEvent *)event;
 - (void)endEditingWithCommit:(BOOL)commit;
-- (void)updateFrame;
 
 @end
 
-@interface PDFView (SKTextNoteEditor)
+@protocol SKTextNoteEditorDelegate <NSObject>;
+- (void)textNoteEditorSetFrame:(SKTextNoteEditor *)textNoteEditor;
 - (void)textNoteEditorDidBeginEditing:(SKTextNoteEditor *)textNoteEditor;
 - (void)textNoteEditorDidEndEditing:(SKTextNoteEditor *)textNoteEditor;
 @end

Modified: trunk/SKTextNoteEditor.m
===================================================================
--- trunk/SKTextNoteEditor.m    2025-07-11 14:51:46 UTC (rev 15641)
+++ trunk/SKTextNoteEditor.m    2025-07-11 15:49:35 UTC (rev 15642)
@@ -37,9 +37,7 @@
  */
 
 #import "SKTextNoteEditor.h"
-#import "PDFView_SKExtensions.h"
 #import "PDFAnnotation_SKExtensions.h"
-#import "NSView_SKExtensions.h"
 #import "NSEvent_SKExtensions.h"
 #import "SKChainedUndoManager.h"
 #import "SKStringConstants.h"
@@ -60,10 +58,10 @@
     return @[SKNPDFAnnotationBoundsKey, SKNPDFAnnotationFontKey, 
SKNPDFAnnotationFontColorKey, SKNPDFAnnotationAlignmentKey, 
SKNPDFAnnotationColorKey, SKNPDFAnnotationBorderKey, SKNPDFAnnotationStringKey];
 }
 
-- (instancetype)initWithPDFView:(PDFView *)aPDFView annotation:(PDFAnnotation 
*)anAnnotation {
+- (instancetype)initWithAnnotation:(PDFAnnotation *)anAnnotation 
delegate:(NSResponder<SKTextNoteEditorDelegate> *)aDelegate {
     self = [super initWithFrame:[annotation bounds]];
     if (self) {
-        pdfView = aPDFView;
+        delegate = aDelegate;
         annotation = anAnnotation;
         
         for (NSString *key in [[self class] keysToObserve])
@@ -89,12 +87,6 @@
     return [textView string] ?: [annotation string];
 }
 
-- (void)updateFrame {
-    NSRect frame = [pdfView backingAlignedRect:[pdfView 
convertRect:[annotation bounds] fromPage:[annotation page]] 
options:NSAlignAllEdgesNearest];
-    frame = [pdfView convertRect:frame toView:[self superview]];
-    [self setFrame:frame];
-}
-
 - (void)updateParagraphStyle {
     NSFont *font = [annotation font];
     NSMutableParagraphStyle *parStyle = [[NSMutableParagraphStyle alloc] init];
@@ -165,24 +157,24 @@
     [textView setDelegate:nil];
     
     if ([self superview]) {
-        BOOL wasFirstResponder = (textView && [[pdfView window] 
firstResponder] == textView);
+        NSWindow *window = [self window];
+        BOOL wasFirstResponder = (textView && [window firstResponder] == 
textView);
         [self removeFromSuperview];
-        [[pdfView window] recalculateKeyViewLoop];
+        [window recalculateKeyViewLoop];
         if (wasFirstResponder)
-            [[pdfView window] makeFirstResponder:pdfView];
+            [window makeFirstResponder:delegate];
     }
     
-    PDFView *thePdfView = pdfView;
-    pdfView = nil;
+    NSResponder<SKTextNoteEditorDelegate> *theDelegate = delegate;
+    delegate = nil;
     
-    if ([thePdfView 
respondsToSelector:@selector(textNoteEditorDidEndEditing:)])
-        [thePdfView textNoteEditorDidEndEditing:self];
+    [theDelegate textNoteEditorDidEndEditing:self];
 }
 
 - (void)startEditingWithEvent:(NSEvent *)event {
-    [self updateFrame];
+    [delegate textNoteEditorSetFrame:self];
     [self setUpTextView];
-    [[pdfView window] recalculateKeyViewLoop];
+    [[self window] recalculateKeyViewLoop];
     [textView scrollPoint:NSZeroPoint];
     [annotation setShouldDisplay:NO];
     if (event) {
@@ -207,8 +199,7 @@
 }
 
 - (void)textDidBeginEditing:(NSNotification *)notification {
-    if ([pdfView respondsToSelector:@selector(textNoteEditorDidBeginEditing:)])
-        [pdfView textNoteEditorDidBeginEditing:self];
+    [delegate textNoteEditorDidBeginEditing:self];
 }
 
 - (void)textDidEndEditing:(NSNotification *)notification {
@@ -217,7 +208,7 @@
 
 - (NSUndoManager *)undoManagerForTextView:(NSTextView *)view {
     if (undoManager == nil)
-        undoManager = [[SKChainedUndoManager alloc] 
initWithNextUndoManager:[pdfView undoManager]];
+        undoManager = [[SKChainedUndoManager alloc] 
initWithNextUndoManager:[delegate undoManager]];
     return undoManager;
 }
 
@@ -224,7 +215,7 @@
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context {
     if (context == &SKPDFAnnotationPropertiesObservationContext) {
         if ([keyPath isEqualToString:SKNPDFAnnotationBoundsKey]) {
-            [self updateFrame];
+            [delegate textNoteEditorSetFrame:self];
         } else if ([keyPath isEqualToString:SKNPDFAnnotationFontKey]) {
             [textView setFont:[annotation font]];
             [self updateParagraphStyle];

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