Revision: 4653
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4653&view=rev
Author:   hofman
Date:     2008-09-18 12:19:02 +0000 (Thu, 18 Sep 2008)

Log Message:
-----------
convenience methods to convert between data and points and rects for scripting.

Modified Paths:
--------------
    trunk/NSData_SKExtensions.h
    trunk/NSData_SKExtensions.m
    trunk/PDFAnnotationLine_SKExtensions.m
    trunk/PDFAnnotation_SKExtensions.m
    trunk/PDFPage_SKExtensions.m

Modified: trunk/NSData_SKExtensions.h
===================================================================
--- trunk/NSData_SKExtensions.h 2008-09-17 14:47:32 UTC (rev 4652)
+++ trunk/NSData_SKExtensions.h 2008-09-18 12:19:02 UTC (rev 4653)
@@ -47,4 +47,10 @@
 
 - (NSString *)xmlString;
 
++ (NSData *)dataWithPointAsQDPoint:(NSPoint)point;
++ (NSData *)dataWithRectAsQDRect:(NSRect)rect;
+
+- (NSPoint)pointValueAsQDPoint;
+- (NSRect)rectValueAsQDRect;
+
 @end

Modified: trunk/NSData_SKExtensions.m
===================================================================
--- trunk/NSData_SKExtensions.m 2008-09-17 14:47:32 UTC (rev 4652)
+++ trunk/NSData_SKExtensions.m 2008-09-18 12:19:02 UTC (rev 4653)
@@ -37,6 +37,7 @@
  */
 
 #import "NSData_SKExtensions.h"
+#import "NSGeometry_SKExtensions.h"
 
 
 @implementation NSData (SKExtensions)
@@ -114,4 +115,34 @@
     return string;
 }
 
+#pragma mark Scripting support
+
++ (NSData *)dataWithPointAsQDPoint:(NSPoint)point {
+    Point qdPoint = SKQDPointFromNSPoint(point);
+    return [self dataWithBytes:&qdPoint length:sizeof(Point)];
+}
+
++ (NSData *)dataWithRectAsQDRect:(NSRect)rect {
+    Rect qdBounds = SKQDRectFromNSRect(rect);
+    return [self dataWithBytes:&qdBounds length:sizeof(Rect)];
+}
+
+- (NSPoint)pointValueAsQDPoint {
+    NSPoint point = NSZeroPoint;
+    if ([self length] == sizeof(Point)) {
+        const Point *qdPoint = (const Point *)[self bytes];
+        point = SKNSPointFromQDPoint(*qdPoint);
+    }
+    return point;
+}
+
+- (NSRect)rectValueAsQDRect {
+    NSRect rect = NSZeroRect;
+    if ([self length] == sizeof(Rect)) {
+        const Rect *qdRect = (const Rect *)[self bytes];
+        rect = SKNSRectFromQDRect(*qdRect);
+    }
+    return rect;
+}
+
 @end

Modified: trunk/PDFAnnotationLine_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationLine_SKExtensions.m      2008-09-17 14:47:32 UTC (rev 
4652)
+++ trunk/PDFAnnotationLine_SKExtensions.m      2008-09-18 12:19:02 UTC (rev 
4653)
@@ -44,6 +44,7 @@
 #import "SKFDFParser.h"
 #import "NSUserDefaults_SKExtensions.h"
 #import "NSGeometry_SKExtensions.h"
+#import "NSData_SKExtensions.h"
 
 
 FourCharCode SKScriptingLineStyleFromLineStyle(PDFLineStyle lineStyle) {
@@ -161,9 +162,8 @@
 }
 
 - (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData {
-    if ([inQDPointAsData length] == sizeof(Point)) {
-        const Point *qdPoint = (const Point *)[inQDPointAsData bytes];
-        NSPoint startPoint = SKNSPointFromQDPoint(*qdPoint);
+    if (inQDPointAsData && [inQDPointAsData isEqual:[NSNull null]] == NO) {
+        NSPoint startPoint = [inQDPointAsData pointValueAsQDPoint];
         
         NSRect bounds = [self bounds];
         NSPoint endPoint = SKIntegralPoint(SKAddPoints([self endPoint], 
bounds.origin));
@@ -194,14 +194,12 @@
     NSPoint startPoint = SKAddPoints([self startPoint], bounds.origin);
     startPoint.x = floorf(startPoint.x);
     startPoint.y = floorf(startPoint.y);
-    Point qdPoint = SKQDPointFromNSPoint(startPoint);
-    return [NSData dataWithBytes:&qdPoint length:sizeof(Point)];
+    return [NSData dataWithPointAsQDPoint:startPoint];
 }
 
 - (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData {
-    if ([inQDPointAsData length] == sizeof(Point)) {
-        const Point *qdPoint = (const Point *)[inQDPointAsData bytes];
-        NSPoint endPoint = SKNSPointFromQDPoint(*qdPoint);
+    if (inQDPointAsData && [inQDPointAsData isEqual:[NSNull null]] == NO) {
+        NSPoint endPoint = [inQDPointAsData pointValueAsQDPoint];
         
         NSRect bounds = [self bounds];
         NSPoint startPoint = SKIntegralPoint(SKAddPoints([self startPoint], 
bounds.origin));
@@ -232,8 +230,7 @@
     NSPoint endPoint = SKAddPoints([self endPoint], bounds.origin);
     endPoint.x = floorf(endPoint.x);
     endPoint.y = floorf(endPoint.y);
-    Point qdPoint = SKQDPointFromNSPoint(endPoint);
-    return [NSData dataWithBytes:&qdPoint length:sizeof(Point)];
+    return [NSData dataWithPointAsQDPoint:endPoint];
 }
 
 - (FourCharCode)scriptingStartLineStyle {

Modified: trunk/PDFAnnotation_SKExtensions.m
===================================================================
--- trunk/PDFAnnotation_SKExtensions.m  2008-09-17 14:47:32 UTC (rev 4652)
+++ trunk/PDFAnnotation_SKExtensions.m  2008-09-18 12:19:02 UTC (rev 4653)
@@ -53,6 +53,7 @@
 #import "PDFSelection_SKExtensions.h"
 #import "SKPDFView.h"
 #import "NSGeometry_SKExtensions.h"
+#import "NSData_SKExtensions.h"
 #import "NSString_SKExtensions.h"
 
 
@@ -367,9 +368,8 @@
 }
 
 - (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData {
-    if ([inQDBoundsAsData length] == sizeof(Rect) && [self isMovable]) {
-        const Rect *qdBounds = (const Rect *)[inQDBoundsAsData bytes];
-        NSRect newBounds = SKNSRectFromQDRect(*qdBounds);
+    if ([self isMovable]) {
+        NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
         if ([self isResizable] == NO) {
             newBounds.size = [self bounds].size;
         } else {
@@ -384,8 +384,7 @@
 }
 
 - (NSData *)boundsAsQDRect {
-    Rect qdBounds = SKQDRectFromNSRect([self bounds]);
-    return [NSData dataWithBytes:&qdBounds length:sizeof(Rect)];
+    return [NSData dataWithRectAsQDRect:[self bounds]];
 }
 
 - (NSString *)fontName {

Modified: trunk/PDFPage_SKExtensions.m
===================================================================
--- trunk/PDFPage_SKExtensions.m        2008-09-17 14:47:32 UTC (rev 4652)
+++ trunk/PDFPage_SKExtensions.m        2008-09-18 12:19:02 UTC (rev 4653)
@@ -47,6 +47,7 @@
 #import "SKStringConstants.h"
 #import "NSCharacterSet_SKExtensions.h"
 #import "NSGeometry_SKExtensions.h"
+#import "NSData_SKExtensions.h"
 #import "SKCFCallBacks.h"
 #import "NSUserDefaults_SKExtensions.h"
 #import "SKMainWindowController.h"
@@ -396,20 +397,18 @@
 }
 
 - (NSData *)boundsAsQDRect {
-    Rect qdBounds = SKQDRectFromNSRect([self 
boundsForBox:kPDFDisplayBoxCropBox]);
-    return [NSData dataWithBytes:&qdBounds length:sizeof(Rect)];
+    return [NSData dataWithRectAsQDRect:[self 
boundsForBox:kPDFDisplayBoxCropBox]];
 }
 
 - (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData {
-    if ([inQDBoundsAsData length] == sizeof(Rect)) {
+    if (inQDBoundsAsData && [inQDBoundsAsData isEqual:[NSNull null]] == NO) {
         NSUndoManager *undoManager = [[self containingDocument] undoManager];
         [[undoManager prepareWithInvocationTarget:self] 
setBoundsAsQDRect:[self boundsAsQDRect]];
         [undoManager setActionName:NSLocalizedString(@"Crop Page", @"Undo 
action name")];
         // this will dirty the document, even though no saveable change has 
been made
         // but we cannot undo the document change count because there may be 
real changes to the document in the script
         
-        const Rect *qdBounds = (const Rect *)[inQDBoundsAsData bytes];
-        NSRect newBounds = SKNSRectFromQDRect(*qdBounds);
+        NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
         if (NSWidth(newBounds) < 0.0)
             newBounds.size.width = 0.0;
         if (NSHeight(newBounds) < 0.0)
@@ -422,20 +421,18 @@
 }
 
 - (NSData *)mediaBoundsAsQDRect {
-    Rect qdBounds = SKQDRectFromNSRect([self 
boundsForBox:kPDFDisplayBoxMediaBox]);
-    return [NSData dataWithBytes:&qdBounds length:sizeof(Rect)];
+    return [NSData dataWithRectAsQDRect:[self 
boundsForBox:kPDFDisplayBoxMediaBox]];
 }
 
 - (void)setMediaBoundsAsQDRect:(NSData *)inQDBoundsAsData {
-    if ([inQDBoundsAsData length] == sizeof(Rect)) {
+    if (inQDBoundsAsData && [inQDBoundsAsData isEqual:[NSNull null]] == NO) {
         NSUndoManager *undoManager = [[self containingDocument] undoManager];
         [[undoManager prepareWithInvocationTarget:self] 
setMediaBoundsAsQDRect:[self mediaBoundsAsQDRect]];
         [undoManager setActionName:NSLocalizedString(@"Crop Page", @"Undo 
action name")];
         // this will dirty the document, even though no saveable change has 
been made
         // but we cannot undo the document change count because there may be 
real changes to the document in the script
         
-        const Rect *qdBounds = (const Rect *)[inQDBoundsAsData bytes];
-        NSRect newBounds = SKNSRectFromQDRect(*qdBounds);
+        NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
         if (NSWidth(newBounds) < 0.0)
             newBounds.size.width = 0.0;
         if (NSHeight(newBounds) < 0.0)
@@ -448,8 +445,7 @@
 }
 
 - (NSData *)contentBoundsAsQDRect {
-    Rect qdBounds = SKQDRectFromNSRect([self foregroundBox]);
-    return [NSData dataWithBytes:&qdBounds length:sizeof(Rect)];
+    return [NSData dataWithRectAsQDRect:[self foregroundBox]];
 }
 
 - (id)richText {


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

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to