Revision: 3520 http://skim-app.svn.sourceforge.net/skim-app/?rev=3520&view=rev Author: hofman Date: 2008-03-20 11:50:58 -0700 (Thu, 20 Mar 2008)
Log Message: ----------- Store row heights for note table in a custom dictionary rather than in an ivar in the notes. Modified Paths: -------------- trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/SKNoteOutlineView.h trunk/SKPDFAnnotationNote.h trunk/SKPDFAnnotationNote.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/SKCFDictionaryCallBacks.h trunk/SKCFDictionaryCallBacks.m Added: trunk/SKCFDictionaryCallBacks.h =================================================================== --- trunk/SKCFDictionaryCallBacks.h (rev 0) +++ trunk/SKCFDictionaryCallBacks.h 2008-03-20 18:50:58 UTC (rev 3520) @@ -0,0 +1,57 @@ +// +// SKCFDictionaryCallBacks.h +// Skim +// +// Created by Christiaan Hofman on 3/20/08. +/* + This software is Copyright (c) 2008 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Carbon/Carbon.h> + +extern const void *SKNSObjectRetain(CFAllocatorRef allocator, const void *value); + +extern void SKNSObjectRelease(CFAllocatorRef allocator, const void *value); + +extern CFStringRef SKNSObjectCopyDescription(const void *value); + +extern const void *SKFloatRetain(CFAllocatorRef allocator, const void *value); + +extern void SKFloatRelease(CFAllocatorRef allocator, const void *value); + +extern CFStringRef SKFloatCopyDescription(const void *value); + +extern Boolean SKFloatEqual(const void *value1, const void *value2); + +extern const CFDictionaryKeyCallBacks SKPointerEqualObjectDictionaryKeyCallbacks; + +extern const CFDictionaryValueCallBacks SKFloatDictionaryValueCallbacks; Added: trunk/SKCFDictionaryCallBacks.m =================================================================== --- trunk/SKCFDictionaryCallBacks.m (rev 0) +++ trunk/SKCFDictionaryCallBacks.m 2008-03-20 18:50:58 UTC (rev 3520) @@ -0,0 +1,87 @@ +// +// SKCFDictionaryCallBacks.m +// Skim +// +// Created by Christiaan Hofman on 3/20/08. +/* + This software is Copyright (c) 2008 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "SKCFDictionaryCallBacks.h" + + +const void *SKNSObjectRetain(CFAllocatorRef allocator, const void *value) { + return [(id)value retain]; +} + +void SKNSObjectRelease(CFAllocatorRef allocator, const void *value) { + [(id)value release]; +} + +CFStringRef SKNSObjectCopyDescription(const void *value) { + return (CFStringRef)[[(id)value description] retain]; +} + +const void *SKFloatRetain(CFAllocatorRef allocator, const void *value) { + float *floatPtr = (float *)CFAllocatorAllocate(allocator, sizeof(float), 0); + *floatPtr = *(float *)value; + return floatPtr; +} + +void SKFloatRelease(CFAllocatorRef allocator, const void *value) { + CFAllocatorDeallocate(allocator, (float *)value); +} + +CFStringRef SKFloatCopyDescription(const void *value) { + return CFStringCreateWithFormat(NULL, NULL, CFSTR("%f"), *(float *)value); +} + +Boolean SKFloatEqual(const void *value1, const void *value2) { + return fabsf(*(float *)value1 - *(float *)value2) < 0.00000001; +} + +const CFDictionaryKeyCallBacks SKPointerEqualObjectDictionaryKeyCallbacks = { + 0, // version + SKNSObjectRetain, + SKNSObjectRelease, + SKNSObjectCopyDescription, + NULL, // equal + NULL // hash +}; + +const CFDictionaryValueCallBacks SKFloatDictionaryValueCallbacks = { + 0, // version + SKFloatRetain, + SKFloatRelease, + SKFloatCopyDescription, + SKFloatEqual +}; Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/SKMainWindowController.h 2008-03-20 18:50:58 UTC (rev 3520) @@ -142,6 +142,7 @@ IBOutlet SKNoteOutlineView *noteOutlineView; IBOutlet NSView *noteView; NSMutableArray *notes; + CFMutableDictionaryRef rowHeights; BOOL updatingNoteSelection; IBOutlet NSArrayController *snapshotArrayController; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/SKMainWindowController.m 2008-03-20 18:50:58 UTC (rev 3520) @@ -83,6 +83,7 @@ #import "SKSheetController.h" #import "OBUtilities.h" #import "SKApplicationController.h" +#import "SKCFDictionaryCallbacks.h" #define WINDOW_X_DELTA 0.0 #define WINDOW_Y_DELTA 70.0 @@ -284,6 +285,7 @@ lastViewedPages = [[NSMutableArray alloc] init]; // @@ remove or set to nil for Leopard? pdfOutlineItems = [[NSMutableArray alloc] init]; + rowHeights = CFDictionaryCreateMutable(NULL, 0, &SKPointerEqualObjectDictionaryKeyCallbacks, &SKFloatDictionaryValueCallbacks); savedNormalSetup = [[NSMutableDictionary alloc] init]; leftSidePaneState = SKThumbnailSidePaneState; rightSidePaneState = SKNoteSidePaneState; @@ -314,6 +316,7 @@ [notes release]; [snapshots release]; [pageLabels release]; + CFRelease(rowHeights); [lastViewedPages release]; [leftSideWindow release]; [rightSideWindow release]; @@ -1218,6 +1221,10 @@ } } + if ([[note texts] count]) + CFDictionaryRemoveValue(rowHeights, (const void *)[[note texts] lastObject]); + CFDictionaryRemoveValue(rowHeights, (const void *)note); + [notes removeObjectAtIndex:theIndex]; } @@ -3831,9 +3838,10 @@ - (float)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item { float rowHeight = 0.0; if ([ov isEqual:noteOutlineView]) { - // the item is an opaque wrapper object used for binding. The actual note is is given by -observedeObject. I don't know of any alternative (read public) way to get the actual item - if ([item respondsToSelector:@selector(rowHeight)]) - rowHeight = [item rowHeight]; + if (CFDictionaryContainsKey(rowHeights, (const void *)item)) + rowHeight = *(float *)CFDictionaryGetValue(rowHeights, (const void *)item); + else if ([item type] == nil) + rowHeight = 85.0; return rowHeight > 0.0 ? rowHeight : [ov rowHeight] + 2.0; } return rowHeight > 0.0 ? rowHeight : [ov rowHeight]; @@ -3841,16 +3849,13 @@ - (BOOL)outlineView:(NSOutlineView *)ov canResizeRowByItem:(id)item { if ([ov isEqual:noteOutlineView]) { - if ([item respondsToSelector:@selector(setRowHeight:)] == NO) - return NO; - else - return YES; + return YES; } return NO; } -- (void)outlineView:(NSOutlineView *)ov setHeightOfRow:(int)newHeight byItem:(id)item { - [item setRowHeight:newHeight]; +- (void)outlineView:(NSOutlineView *)ov setHeightOfRow:(float)newHeight byItem:(id)item { + CFDictionarySetValue(rowHeights, (const void *)item, &newHeight); } - (NSArray *)noteItems:(NSArray *)items { @@ -3998,7 +4003,8 @@ [cell setObjectValue:[item string]]; NSAttributedString *attrString = [cell attributedStringValue]; NSRect rect = [attrString boundingRectWithSize:[item type] ? size : smallSize options:NSStringDrawingUsesLineFragmentOrigin]; - [item setRowHeight:fmaxf(NSHeight(rect) + 3.0, rowHeight + 2.0)]; + float height = fmaxf(NSHeight(rect) + 3.0, rowHeight + 2.0); + CFDictionarySetValue(rowHeights, (const void *)item, &height); row = [noteOutlineView rowForItem:item]; if (row != -1) [rowIndexes addIndex:row]; Modified: trunk/SKNoteOutlineView.h =================================================================== --- trunk/SKNoteOutlineView.h 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/SKNoteOutlineView.h 2008-03-20 18:50:58 UTC (rev 3520) @@ -59,7 +59,7 @@ @interface NSObject (SKNoteOutlineViewDelegate) - (BOOL)outlineView:(NSOutlineView *)anOutlineView canResizeRowByItem:(id)item; -- (void)outlineView:(NSOutlineView *)anOutlineView setHeightOfRow:(int)newHeight byItem:(id)item; +- (void)outlineView:(NSOutlineView *)anOutlineView setHeightOfRow:(float)newHeight byItem:(id)item; - (void)outlineViewNoteTypesDidChange:(NSOutlineView *)anOutlineView; - (void)outlineViewCommandKeyPressedDuringNavigation:(NSOutlineView *)anOutlineView; @end Modified: trunk/SKPDFAnnotationNote.h =================================================================== --- trunk/SKPDFAnnotationNote.h 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/SKPDFAnnotationNote.h 2008-03-20 18:50:58 UTC (rev 3520) @@ -106,25 +106,19 @@ #pragma mark - [EMAIL PROTECTED] SKPDFAnnotationCircle : PDFAnnotationCircle { - float rowHeight; -} [EMAIL PROTECTED] SKPDFAnnotationCircle : PDFAnnotationCircle @end #pragma mark - [EMAIL PROTECTED] SKPDFAnnotationSquare : PDFAnnotationSquare { - float rowHeight; -} [EMAIL PROTECTED] SKPDFAnnotationSquare : PDFAnnotationSquare @end #pragma mark - [EMAIL PROTECTED] SKPDFAnnotationMarkup : PDFAnnotationMarkup -{ [EMAIL PROTECTED] SKPDFAnnotationMarkup : PDFAnnotationMarkup { NSRect *lineRects; unsigned numberOfLines; - float rowHeight; } - (id)initWithSelection:(PDFSelection *)selection markupType:(int)type; @@ -134,9 +128,7 @@ #pragma mark - [EMAIL PROTECTED] SKPDFAnnotationFreeText : PDFAnnotationFreeText { - float rowHeight; -} [EMAIL PROTECTED] SKPDFAnnotationFreeText : PDFAnnotationFreeText - (void)setFontName:(NSString *)fontName; - (void)setFontSize:(float)pointSize; @@ -159,7 +151,6 @@ NSTextStorage *textStorage; NSAttributedString *text; NSArray *texts; - float rowHeight; } - (void)setImage:(NSImage *)newImage; @@ -172,9 +163,8 @@ #pragma mark - [EMAIL PROTECTED] SKPDFAnnotationLine : PDFAnnotationLine { - float rowHeight; -} [EMAIL PROTECTED] SKPDFAnnotationLine : PDFAnnotationLine + - (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData; - (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData; - (void)setAsStartLineStyle:(int)style; @@ -191,7 +181,6 @@ @interface SKNoteText : NSObject { PDFAnnotation *annotation; - float rowHeight; } - (id)initWithAnnotation:(PDFAnnotation *)anAnnotation; @@ -205,9 +194,6 @@ - (unsigned int)pageIndex; - (NSAttributedString *)string; -- (float)rowHeight; -- (void)setRowHeight:(float)newRowHeight; - - (void)handleAnnotationDidChangeNotification:(NSNotification *)notification; @end Modified: trunk/SKPDFAnnotationNote.m =================================================================== --- trunk/SKPDFAnnotationNote.m 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/SKPDFAnnotationNote.m 2008-03-20 18:50:58 UTC (rev 3520) @@ -691,7 +691,6 @@ [[self border] setLineWidth:[[NSUserDefaults standardUserDefaults] floatForKey:SKCircleNoteLineWidthKey]]; [[self border] setDashPattern:[[NSUserDefaults standardUserDefaults] arrayForKey:SKCircleNoteDashPatternKey]]; [[self border] setStyle:[[NSUserDefaults standardUserDefaults] floatForKey:SKCircleNoteLineStyleKey]]; - rowHeight = 0.0; } return self; } @@ -734,14 +733,6 @@ object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"interiorColor", @"key", nil]]; } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - #pragma mark Scripting support - (NSDictionary *)scriptingProperties { @@ -786,7 +777,6 @@ [[self border] setLineWidth:[[NSUserDefaults standardUserDefaults] floatForKey:SKSquareNoteLineWidthKey]]; [[self border] setDashPattern:[[NSUserDefaults standardUserDefaults] arrayForKey:SKSquareNoteDashPatternKey]]; [[self border] setStyle:[[NSUserDefaults standardUserDefaults] floatForKey:SKSquareNoteLineStyleKey]]; - rowHeight = 0.0; } return self; } @@ -829,14 +819,6 @@ object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"interiorColor", @"key", nil]]; } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - #pragma mark Scripting support - (NSDictionary *)scriptingProperties { @@ -943,8 +925,6 @@ [quadPoints release]; numberOfLines = 0; lineRects = NULL; - - rowHeight = 0.0; } return self; } @@ -1159,14 +1139,6 @@ } } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - #pragma mark Scripting support - (NSDictionary *)scriptingProperties { @@ -1221,7 +1193,6 @@ [border setStyle:[[NSUserDefaults standardUserDefaults] floatForKey:SKFreeTextNoteLineStyleKey]]; originalSetBorder(self, @selector(setBorder:), [border lineWidth] > 0.0 ? border : nil); [border release]; - rowHeight = 0.0; } return self; } @@ -1268,14 +1239,6 @@ object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"font", @"key", nil]]; } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - #pragma mark Scripting support - (NSDictionary *)scriptingProperties { @@ -1348,7 +1311,6 @@ textStorage = [[NSTextStorage allocWithZone:[self zone]] init]; [textStorage setDelegate:self]; text = [[NSAttributedString alloc] init]; - rowHeight = 0.0; } return self; } @@ -1509,14 +1471,6 @@ object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"text", @"key", nil]]; } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - // override these Leopard methods to avoid showing the standard tool tips over our own - (NSString *)toolTip { return nil; } - (NSString *)toolTipNoLabel { return nil; } @@ -1603,7 +1557,6 @@ [border setStyle:[[NSUserDefaults standardUserDefaults] floatForKey:SKLineNoteLineStyleKey]]; originalSetBorder(self, @selector(setBorder:), [border lineWidth] > 0.0 ? border : nil); [border release]; - rowHeight = 0.0; } return self; } @@ -1750,14 +1703,6 @@ } } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - #pragma mark Scripting support - (NSDictionary *)scriptingProperties { @@ -1899,7 +1844,6 @@ - (id)initWithAnnotation:(PDFAnnotation *)anAnnotation { if (self = [super init]) { annotation = anAnnotation; - rowHeight = 85.0; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAnnotationDidChangeNotification:) name:SKAnnotationDidChangeNotification object:annotation]; } @@ -1925,14 +1869,6 @@ - (NSAttributedString *)string { return [annotation text]; } -- (float)rowHeight { - return rowHeight; -} - -- (void)setRowHeight:(float)newRowHeight { - rowHeight = newRowHeight; -} - - (void)handleAnnotationDidChangeNotification:(NSNotification *)notification { if ([[[notification userInfo] objectForKey:@"key"] isEqualToString:@"text"]) { [self willChangeValueForKey:@"string"]; Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2008-03-20 17:35:14 UTC (rev 3519) +++ trunk/Skim.xcodeproj/project.pbxproj 2008-03-20 18:50:58 UTC (rev 3520) @@ -119,6 +119,7 @@ CE5F71560C8CDF9A008BE480 /* NSCell_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5F71540C8CDF9A008BE480 /* NSCell_SKExtensions.m */; }; CE5FA1680C909886008BE480 /* SKFDFParser.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5FA1660C909886008BE480 /* SKFDFParser.m */; }; CE64E81A0D92BB97000AD050 /* ToolbarFontsBlack.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE64E8190D92BB97000AD050 /* ToolbarFontsBlack.tiff */; }; + CE64E8A30D92E670000AD050 /* SKCFDictionaryCallBacks.m in Sources */ = {isa = PBXBuildFile; fileRef = CE64E8A20D92E670000AD050 /* SKCFDictionaryCallBacks.m */; }; CE67BB260BC44AC9007B6929 /* ZoomValues.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE67BB240BC44AC9007B6929 /* ZoomValues.strings */; }; CE6A5B9E0D663491003B7CC3 /* ToolbarCustomize.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE6A5B9D0D663491003B7CC3 /* ToolbarCustomize.tiff */; }; CE6A5BB20D663771003B7CC3 /* ToolbarPrint.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE6A5BB10D663771003B7CC3 /* ToolbarPrint.tiff */; }; @@ -579,6 +580,8 @@ CE5FA1650C909886008BE480 /* SKFDFParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKFDFParser.h; sourceTree = "<group>"; }; CE5FA1660C909886008BE480 /* SKFDFParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKFDFParser.m; sourceTree = "<group>"; }; CE64E8190D92BB97000AD050 /* ToolbarFontsBlack.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = ToolbarFontsBlack.tiff; path = Images/ToolbarFontsBlack.tiff; sourceTree = "<group>"; }; + CE64E8A10D92E670000AD050 /* SKCFDictionaryCallBacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKCFDictionaryCallBacks.h; sourceTree = "<group>"; }; + CE64E8A20D92E670000AD050 /* SKCFDictionaryCallBacks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKCFDictionaryCallBacks.m; sourceTree = "<group>"; }; CE67BB250BC44AC9007B6929 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/ZoomValues.strings; sourceTree = "<group>"; }; CE67BB290BC44AD5007B6929 /* Dutch */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/ZoomValues.strings; sourceTree = "<group>"; }; CE68C62F0CEF891B00B082F1 /* German */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = German; path = German.lproj/InfoWindow.nib; sourceTree = "<group>"; }; @@ -1012,6 +1015,8 @@ CE070EC10B89063400733CC8 /* Categories */ = { isa = PBXGroup; children = ( + CE64E8A10D92E670000AD050 /* SKCFDictionaryCallBacks.h */, + CE64E8A20D92E670000AD050 /* SKCFDictionaryCallBacks.m */, CE4EC8810B7E6E920091F228 /* CIImage_BDSKExtensions.h */, CE4EC8820B7E6E920091F228 /* CIImage_BDSKExtensions.m */, CEBF85DF0CCE2DE70057A050 /* NSAffineTransform_SKExtensions.h */, @@ -1876,6 +1881,7 @@ CE6DC77B0D687272003A072F /* SKPrintAccessoryViewController.m in Sources */, CE6DC7BB0D689138003A072F /* PDFDocument_SKExtensions.m in Sources */, CEA8FCD60D89C34A00E8A6F4 /* SKAnimatedBorderlessWindow.m in Sources */, + CE64E8A30D92E670000AD050 /* SKCFDictionaryCallBacks.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 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: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit