Revision: 4627
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4627&view=rev
Author:   hofman
Date:     2008-09-14 21:28:00 +0000 (Sun, 14 Sep 2008)

Log Message:
-----------
More code for ink note support. Add images for ink note. Implement drawing 
code, use a temporary path to draw and after mouseup add a new note. Fix color 
of ink note to red.

Modified Paths:
--------------
    trunk/InitialUserDefaults.plist
    trunk/NSImage_SKExtensions.h
    trunk/NSImage_SKExtensions.m
    trunk/NSString_SKExtensions.m
    trunk/SKAnnotationTypeImageCell.m
    trunk/SKMainWindowController_UI.m
    trunk/SKPDFView.h
    trunk/SKPDFView.m

Modified: trunk/InitialUserDefaults.plist
===================================================================
--- trunk/InitialUserDefaults.plist     2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/InitialUserDefaults.plist     2008-09-14 21:28:00 UTC (rev 4627)
@@ -129,6 +129,11 @@
         BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm
         ZmZmAAABAYY=
         </data>
+        <key>SKInkNoteColor</key>
+        <data>
+        BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm
+        ZmZmAQAAAYY=
+        </data>
         <key>SKCircleNoteInteriorColor</key>
         <data>
         BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMDhAJm
@@ -144,11 +149,6 @@
         BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm
         ZmZmAAAAAYY=
         </data>
-        <key>SKInkNoteColor</key>
-        <data>
-        BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMDhAJm
-        ZgAAhg==
-        </data>
         <key>SKFreeTextNoteLineWidth</key>
         <real>1.0</real>
         <key>SKFreeTextNoteLineStyle</key>

Modified: trunk/NSImage_SKExtensions.h
===================================================================
--- trunk/NSImage_SKExtensions.h        2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/NSImage_SKExtensions.h        2008-09-14 21:28:00 UTC (rev 4627)
@@ -70,6 +70,7 @@
 extern NSString *SKImageNameToolbarUnderlineNote;
 extern NSString *SKImageNameToolbarStrikeOutNote;
 extern NSString *SKImageNameToolbarLineNote;
+extern NSString *SKImageNameToolbarInkNote;
 extern NSString *SKImageNameToolbarTextNoteMenu;
 extern NSString *SKImageNameToolbarAnchoredNoteMenu;
 extern NSString *SKImageNameToolbarCircleNoteMenu;
@@ -78,6 +79,7 @@
 extern NSString *SKImageNameToolbarUnderlineNoteMenu;
 extern NSString *SKImageNameToolbarStrikeOutNoteMenu;
 extern NSString *SKImageNameToolbarLineNoteMenu;
+extern NSString *SKImageNameToolbarInkNoteMenu;
 extern NSString *SKImageNameToolbarAddTextNote;
 extern NSString *SKImageNameToolbarAddAnchoredNote;
 extern NSString *SKImageNameToolbarAddCircleNote;
@@ -86,6 +88,7 @@
 extern NSString *SKImageNameToolbarAddUnderlineNote;
 extern NSString *SKImageNameToolbarAddStrikeOutNote;
 extern NSString *SKImageNameToolbarAddLineNote;
+extern NSString *SKImageNameToolbarAddInkNote;
 extern NSString *SKImageNameToolbarAddTextNoteMenu;
 extern NSString *SKImageNameToolbarAddAnchoredNoteMenu;
 extern NSString *SKImageNameToolbarAddCircleNoteMenu;
@@ -94,6 +97,7 @@
 extern NSString *SKImageNameToolbarAddUnderlineNoteMenu;
 extern NSString *SKImageNameToolbarAddStrikeOutNoteMenu;
 extern NSString *SKImageNameToolbarAddLineNoteMenu;
+extern NSString *SKImageNameToolbarAddInkNoteMenu;
 extern NSString *SKImageNameToolbarTextTool;
 extern NSString *SKImageNameToolbarMoveTool;
 extern NSString *SKImageNameToolbarMagnifyTool;
@@ -115,6 +119,7 @@
 extern NSString *SKImageNameUnderlineNoteAdorn;
 extern NSString *SKImageNameStrikeOutNoteAdorn;
 extern NSString *SKImageNameLineNoteAdorn;
+extern NSString *SKImageNameInkNoteAdorn;
 
 extern NSString *SKImageNameResizeRightDownCursor;
 extern NSString *SKImageNameResizeLeftDownCursor;

Modified: trunk/NSImage_SKExtensions.m
===================================================================
--- trunk/NSImage_SKExtensions.m        2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/NSImage_SKExtensions.m        2008-09-14 21:28:00 UTC (rev 4627)
@@ -74,6 +74,7 @@
 NSString *SKImageNameToolbarUnderlineNote = @"ToolbarUnderlineNote";
 NSString *SKImageNameToolbarStrikeOutNote = @"ToolbarStrikeOutNote";
 NSString *SKImageNameToolbarLineNote = @"ToolbarLineNote";
+NSString *SKImageNameToolbarInkNote = @"ToolbarInkNote";
 NSString *SKImageNameToolbarTextNoteMenu = @"ToolbarTextNoteMenu";
 NSString *SKImageNameToolbarAnchoredNoteMenu = @"ToolbarAnchoredNoteMenu";
 NSString *SKImageNameToolbarCircleNoteMenu = @"ToolbarCircleNoteMenu";
@@ -82,6 +83,7 @@
 NSString *SKImageNameToolbarUnderlineNoteMenu = @"ToolbarUnderlineNoteMenu";
 NSString *SKImageNameToolbarStrikeOutNoteMenu = @"ToolbarStrikeOutNoteMenu";
 NSString *SKImageNameToolbarLineNoteMenu = @"ToolbarLineNoteMenu";
+NSString *SKImageNameToolbarInkNoteMenu = @"ToolbarInkNoteMenu";
 NSString *SKImageNameToolbarAddTextNote = @"ToolbarAddTextNote";
 NSString *SKImageNameToolbarAddAnchoredNote = @"ToolbarAddAnchoredNote";
 NSString *SKImageNameToolbarAddCircleNote = @"ToolbarAddCircleNote";
@@ -90,6 +92,7 @@
 NSString *SKImageNameToolbarAddUnderlineNote = @"ToolbarAddUnderlineNote";
 NSString *SKImageNameToolbarAddStrikeOutNote = @"ToolbarAddStrikeOutNote";
 NSString *SKImageNameToolbarAddLineNote = @"ToolbarAddLineNote";
+NSString *SKImageNameToolbarAddInkNote = @"ToolbarAddInkNote";
 NSString *SKImageNameToolbarAddTextNoteMenu = @"ToolbarAddTextNoteMenu";
 NSString *SKImageNameToolbarAddAnchoredNoteMenu = 
@"ToolbarAddAnchoredNoteMenu";
 NSString *SKImageNameToolbarAddCircleNoteMenu = @"ToolbarAddCircleNoteMenu";
@@ -98,6 +101,7 @@
 NSString *SKImageNameToolbarAddUnderlineNoteMenu = 
@"ToolbarAddUnderlineNoteMenu";
 NSString *SKImageNameToolbarAddStrikeOutNoteMenu = 
@"ToolbarAddStrikeOutNoteMenu";
 NSString *SKImageNameToolbarAddLineNoteMenu = @"ToolbarAddLineNoteMenu";
+NSString *SKImageNameToolbarAddInkNoteMenu = @"ToolbarAddInkNoteMenu";
 NSString *SKImageNameToolbarTextTool = @"ToolbarTextTool";
 NSString *SKImageNameToolbarMoveTool = @"ToolbarMoveTool";
 NSString *SKImageNameToolbarMagnifyTool = @"ToolbarMagnifyTool";
@@ -119,6 +123,7 @@
 NSString *SKImageNameUnderlineNoteAdorn = @"UnderlineNoteAdorn";
 NSString *SKImageNameStrikeOutNoteAdorn = @"StrikeOutNoteAdorn";
 NSString *SKImageNameLineNoteAdorn = @"LineNoteAdorn";
+NSString *SKImageNameInkNoteAdorn = @"InkNoteAdorn";
 
 NSString *SKImageNameResizeRightDownCursor = @"ResizeRightDownCursor";
 NSString *SKImageNameResizeLeftDownCursor = @"ResizeLeftDownCursor";
@@ -245,6 +250,7 @@
     static NSImage *toolbarUnderlineNoteImage = nil;
     static NSImage *toolbarStrikeOutNoteImage = nil;
     static NSImage *toolbarLineNoteImage = nil;
+    static NSImage *toolbarInkNoteImage = nil;
     static NSImage *toolbarTextNoteMenuImage = nil;
     static NSImage *toolbarAnchoredNoteMenuImage = nil;
     static NSImage *toolbarCircleNoteMenuImage = nil;
@@ -253,6 +259,7 @@
     static NSImage *toolbarUnderlineNoteMenuImage = nil;
     static NSImage *toolbarStrikeOutNoteMenuImage = nil;
     static NSImage *toolbarLineNoteMenuImage = nil;
+    static NSImage *toolbarInkNoteMenuImage = nil;
     static NSImage *toolbarAddTextNoteImage = nil;
     static NSImage *toolbarAddAnchoredNoteImage = nil;
     static NSImage *toolbarAddCircleNoteImage = nil;
@@ -261,6 +268,7 @@
     static NSImage *toolbarAddUnderlineNoteImage = nil;
     static NSImage *toolbarAddStrikeOutNoteImage = nil;
     static NSImage *toolbarAddLineNoteImage = nil;
+    static NSImage *toolbarAddInkNoteImage = nil;
     static NSImage *toolbarAddTextNoteMenuImage = nil;
     static NSImage *toolbarAddAnchoredNoteMenuImage = nil;
     static NSImage *toolbarAddCircleNoteMenuImage = nil;
@@ -269,6 +277,7 @@
     static NSImage *toolbarAddUnderlineNoteMenuImage = nil;
     static NSImage *toolbarAddStrikeOutNoteMenuImage = nil;
     static NSImage *toolbarAddLineNoteMenuImage = nil;
+    static NSImage *toolbarAddInkNoteMenuImage = nil;
     static NSImage *toolbarTextToolImage = nil;
     static NSImage *toolbarMoveToolImage = nil;
     static NSImage *toolbarMagnifyToolImage = nil;
@@ -1239,7 +1248,34 @@
     
     toolbarAddLineNoteMenuImage = [toolbarAddLineNoteImage copyWithMenuBadge];
     [toolbarAddLineNoteMenuImage setName:SKImageNameToolbarAddLineNoteMenu];
+
+    toolbarInkNoteImage = [[NSImage alloc] initWithSize:NSMakeSize(27.0, 
19.0)];
+    [toolbarInkNoteImage lockFocus];
+    [NSGraphicsContext saveGraphicsState];
+    [[NSColor clearColor] setFill];
+    NSRectFill(NSMakeRect(0.0, 0.0, 27.0, 19.0));
+    [shadow2 set];
+    [[NSColor colorWithCalibratedRed:0.706 green:0.0 blue:0.0 alpha:1.0] 
setStroke];
+    path = [NSBezierPath bezierPath];
+    [path moveToPoint:NSMakePoint(6.0, 10.0)];
+    [path curveToPoint:NSMakePoint(12.0, 10.0) controlPoint1:NSMakePoint(9.0, 
5.0) controlPoint2:NSMakePoint(9.0, 5.0)];
+    [path curveToPoint:NSMakePoint(18.0, 10.0) controlPoint1:NSMakePoint(15.0, 
16.0) controlPoint2:NSMakePoint(15.0, 16.0)];
+    [path setLineWidth:2.0];
+    [path stroke];
+    [path setLineWidth:1.0];
+    [NSGraphicsContext restoreGraphicsState];
+    [toolbarInkNoteImage unlockFocus];
+    [toolbarInkNoteImage setName:SKImageNameToolbarInkNote];
     
+    toolbarInkNoteMenuImage = [toolbarInkNoteImage copyWithMenuBadge];
+    [toolbarInkNoteMenuImage setName:SKImageNameToolbarInkNoteMenu];
+    
+    toolbarAddInkNoteImage = [toolbarInkNoteImage copyWithAddBadge];
+    [toolbarAddInkNoteImage setName:SKImageNameToolbarAddInkNote];
+    
+    toolbarAddInkNoteMenuImage = [toolbarAddInkNoteImage copyWithMenuBadge];
+    [toolbarAddInkNoteMenuImage setName:SKImageNameToolbarAddInkNoteMenu];
+    
     toolbarTextToolImage = [[NSImage alloc] initWithSize:NSMakeSize(27.0, 
19.0)];
     [toolbarTextToolImage lockFocus];
     [NSGraphicsContext saveGraphicsState];
@@ -1420,6 +1456,7 @@
     static NSImage *underlineNoteAdornImage = nil;
     static NSImage *strikeOutNoteAdornImage = nil;
     static NSImage *lineNoteAdornImage = nil;
+    static NSImage *inkNoteAdornImage = nil;
     
     if (outlineViewAdornImage)
         return;
@@ -1800,6 +1837,22 @@
     [lineNoteAdornImage unlockFocus];
     [lineNoteAdornImage setName:SKImageNameLineNoteAdorn];
     
+    inkNoteAdornImage = [[NSImage alloc] initWithSize:noteSize];
+    [inkNoteAdornImage lockFocus];
+    [NSGraphicsContext saveGraphicsState];
+    [[NSColor clearColor] setFill];
+    NSRectFill(noteRect);
+    [shadow1 set];
+    [[NSColor colorWithCalibratedWhite:0.0 alpha:0.70] setStroke];
+    path = [NSBezierPath bezierPath];
+    [path moveToPoint:NSMakePoint(2.0, 5.5)];
+    [path curveToPoint:NSMakePoint(7.5, 5.5) controlPoint1:NSMakePoint(4.5, 
5.5) controlPoint2:NSMakePoint(5.0, 5.5)];
+    [path curveToPoint:NSMakePoint(13.0, 5.5) controlPoint1:NSMakePoint(10.0, 
5.5) controlPoint2:NSMakePoint(10.5, 5.5)];
+    [path stroke];
+    [NSGraphicsContext restoreGraphicsState];
+    [inkNoteAdornImage unlockFocus];
+    [inkNoteAdornImage setName:SKImageNameInkNoteAdorn];
+    
     [shadow1 release];
 }
 

Modified: trunk/NSString_SKExtensions.m
===================================================================
--- trunk/NSString_SKExtensions.m       2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/NSString_SKExtensions.m       2008-09-14 21:28:00 UTC (rev 4627)
@@ -415,8 +415,8 @@
         imageName = SKImageNameStrikeOutNoteAdorn;
     else if ([self isEqualToString:SKNLineString])
         imageName = SKImageNameLineNoteAdorn;
-    //else if ([self isEqualToString:SKNInkString])
-    //    imageName = SKImageNameInkNoteAdorn;
+    else if ([self isEqualToString:SKNInkString])
+        imageName = SKImageNameInkNoteAdorn;
     
     if (imageName) {
         NSImage *image = [NSImage imageNamed:imageName];

Modified: trunk/SKAnnotationTypeImageCell.m
===================================================================
--- trunk/SKAnnotationTypeImageCell.m   2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/SKAnnotationTypeImageCell.m   2008-09-14 21:28:00 UTC (rev 4627)
@@ -100,8 +100,8 @@
     if (noteImages == nil) {
         CIFilter *filter = [CIFilter filterWithName:@"CIColorInvert"];
         
-        noteImages = [[NSMutableDictionary alloc] initWithCapacity:8];
-        invertedNoteImages = [[NSMutableDictionary alloc] initWithCapacity:8];
+        noteImages = [[NSMutableDictionary alloc] initWithCapacity:9];
+        invertedNoteImages = [[NSMutableDictionary alloc] initWithCapacity:9];
         
         SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameTextNoteAdorn, SKNFreeTextString, filter);
         SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameAnchoredNoteAdorn, SKNNoteString, filter);
@@ -111,7 +111,7 @@
         SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameUnderlineNoteAdorn, SKNUnderlineString, filter);
         SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameStrikeOutNoteAdorn, SKNStrikeOutString, filter);
         SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameLineNoteAdorn, SKNLineString, filter);
-        //SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameInkNoteAdorn, SKNInkString, filter);
+        SKAddNamedAndFilteredImageForKey(noteImages, invertedNoteImages, 
SKImageNameInkNoteAdorn, SKNInkString, filter);
     }
     
     BOOL isSelected = [self isHighlighted] && [[controlView window] 
isKeyWindow] && [[[controlView window] firstResponder] isEqual:controlView];

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/SKMainWindowController_UI.m   2008-09-14 21:28:00 UTC (rev 4627)
@@ -70,7 +70,7 @@
 static NSString *SKMainWindowTypeColumnIdentifer = @"type";
 static NSString *SKMainWindowImageColumnIdentifer = @"image";
 
-static NSString *noteToolImageNames[] = {@"ToolbarTextNoteMenu", 
@"ToolbarAnchoredNoteMenu", @"ToolbarCircleNoteMenu", @"ToolbarSquareNoteMenu", 
@"ToolbarHighlightNoteMenu", @"ToolbarUnderlineNoteMenu", 
@"ToolbarStrikeOutNoteMenu", @"ToolbarLineNoteMenu"};
+static NSString *noteToolImageNames[] = {@"ToolbarTextNoteMenu", 
@"ToolbarAnchoredNoteMenu", @"ToolbarCircleNoteMenu", @"ToolbarSquareNoteMenu", 
@"ToolbarHighlightNoteMenu", @"ToolbarUnderlineNoteMenu", 
@"ToolbarStrikeOutNoteMenu", @"ToolbarLineNoteMenu", @"ToolbarInkNoteMenu"};
 
 static NSString *SKDisableTableToolTipsKey = @"SKDisableTableToolTips";
 

Modified: trunk/SKPDFView.h
===================================================================
--- trunk/SKPDFView.h   2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/SKPDFView.h   2008-09-14 21:28:00 UTC (rev 4627)
@@ -125,6 +125,8 @@
     BOOL didSelect;
     BOOL mouseDownInAnnotation;
     int dragMask;
+    NSBezierPath *bezierPath;
+    unsigned int pathPageIndex;
     
     int trackingRect;
     CFMutableArrayRef PDFToolTipRects;

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2008-09-14 17:40:55 UTC (rev 4626)
+++ trunk/SKPDFView.m   2008-09-14 21:28:00 UTC (rev 4627)
@@ -341,6 +341,13 @@
     [self transformCGContext:context forPage:pdfPage];
     SKCGContextSetDefaultRGBColorSpace(context);
     
+    if (bezierPath && pathPageIndex == [pdfPage pageIndex]) {
+        [NSGraphicsContext saveGraphicsState];
+        [[[NSUserDefaults standardUserDefaults] colorForKey:SKInkNoteColorKey] 
setStroke];
+        [bezierPath stroke];
+        [NSGraphicsContext restoreGraphicsState];
+    }
+    
     NSArray *allAnnotations = [pdfPage annotations];
     
     if (allAnnotations) {
@@ -1908,6 +1915,17 @@
         case SKLineNote:
             newAnnotation = [[PDFAnnotationLine alloc] 
initSkimNoteWithBounds:bounds];
             break;
+        case SKInkNote:
+            if (bezierPath) {
+                newAnnotation = [[PDFAnnotationInk alloc] 
initSkimNoteWithBounds:bounds];
+                NSBezierPath *path = [bezierPath copy];
+                NSAffineTransform *transform = [NSAffineTransform transform];
+                [transform translateXBy:-NSMinX(bounds) yBy:-NSMinY(bounds)];
+                [path transformUsingAffineTransform:transform];
+                [(PDFAnnotationInk *)newAnnotation addBezierPath:path];
+                [path release];
+            }
+            break;
        }
     if (newAnnotation) {
         if (text == nil)
@@ -2955,7 +2973,7 @@
             newActiveAnnotation = newAnnotation;
             [newAnnotation release];
         } else if (toolMode == SKNoteToolMode && newActiveAnnotation == nil &&
-                   annotationMode != SKHighlightNote && annotationMode != 
SKUnderlineNote && annotationMode != SKStrikeOutNote &&
+                   annotationMode != SKHighlightNote && annotationMode != 
SKUnderlineNote && annotationMode != SKStrikeOutNote && annotationMode != 
SKInkNote &&
                    NSPointInRect(pagePoint, [page boundsForBox:[self 
displayBox]])) {
             // add a new annotation immediately, unless this is just a click
             if (annotationMode == SKAnchoredNote || NSLeftMouseDragged == 
[[NSApp nextEventMatchingMask:(NSLeftMouseUpMask | NSLeftMouseDraggedMask) 
untilDate:[NSDate distantFuture] inMode:NSEventTrackingRunLoopMode dequeue:NO] 
type]) {
@@ -3067,6 +3085,34 @@
         }
         
         return YES;
+    } else if (toolMode == SKNoteToolMode && annotationMode == SKInkNote && 
hideNotes == NO) {
+        BOOL didDraw = NO;
+        bezierPath = [[NSBezierPath alloc] init];
+        [bezierPath setLineWidth:[[NSUserDefaults standardUserDefaults] 
floatForKey:SKInkNoteLineWidthKey]];
+        if ([bezierPath lineWidth] > 0.0 && [[NSUserDefaults 
standardUserDefaults] integerForKey:SKInkNoteLineStyleKey] == 
kPDFBorderStyleDashed) {
+            NSArray *dashPattern = [[NSUserDefaults standardUserDefaults] 
objectForKey:SKInkNoteDashPatternKey];
+            int count = [dashPattern count];
+            float pattern[count];
+            for (i = 0; i < count; i++)
+                pattern[i] = [[dashPattern objectAtIndex:i] floatValue];
+            [bezierPath setLineDash:pattern count:count phase:0.0];
+        }
+        [bezierPath moveToPoint:pagePoint];
+        pathPageIndex = [page pageIndex];
+        while (YES) {
+            theEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask 
| NSLeftMouseDraggedMask];
+            [bezierPath lineToPoint:[self convertPoint:[self 
convertPoint:[theEvent locationInWindow] fromView:nil] toPage:page]];
+            [self setNeedsDisplayInRect:[self 
convertRect:NSInsetRect([bezierPath bounds], -8.0, -8.0) fromPage:page]];
+            if ([theEvent type] == NSLeftMouseUp)
+                break;
+            didDraw = YES;
+        }
+        if (didDraw)
+            [self addAnnotationWithType:SKInkNote contents:nil page:page 
bounds:NSInsetRect([bezierPath bounds], -8.0, -8.0)];
+        [bezierPath release];
+        bezierPath = nil;
+        
+        return YES;
     } else {
         // no new active annotation
         return NO;


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