viewpdf.app-0.2/0000755000175000017510000000000010404012657012640 5ustar tarDebian-NMviewpdf.app-0.2/AppDelegate.h0000644000175000017510000000165210267527244015202 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import /** * The application's delegate object. */ @interface AppDelegate : NSObject { } - (id) init; @end viewpdf.app-0.2/AppDelegate.m0000644000175000017510000000310510267527244015202 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "AppDelegate.h" #import /** * Non-Public methods. */ @interface AppDelegate (Private) @end @implementation AppDelegate - (id) init { self = [super init]; if (self) { // ... } return self; } - (void) applicationDidFinishLaunching: (NSNotification*)aNotification { // ensure that a shared PDFRenderService exists and is started //TODO: [PDFRenderService sharedService]; } - (void) applicationWillTerminate: (NSNotification*)aNotification { // stop the shared PDFRenderService //TODO: [[PDFRenderService sharedService] stop]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation AppDelegate (Private) @end viewpdf.app-0.2/CenteringClipView.h0000644000175000017510000000216310267527244016406 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import /** * A customized NSClipView that centers it's document vie * instead of shoving it into the corner. * * Credits: * The CenteringClipView is based on an article from bergdesign.com: * http://www.bergdesign.com/missing_cocoa_docs/nsclipview.html */ @interface CenteringClipView : NSClipView { } - (void) centerDocumentView; @end viewpdf.app-0.2/CenteringClipView.m0000644000175000017510000000627510267527244016423 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "CenteringClipView.h" @implementation CenteringClipView - (id) initWithFrame: (NSRect)aFrame { return [super initWithFrame: aFrame]; } - (void) centerDocumentView { NSRect docRect = [[self documentView] frame]; NSRect clipRect = [self bounds]; if(docRect.size.width < clipRect.size.width) { clipRect.origin.x = (docRect.size.width - clipRect.size.width) / 2.0; } if(docRect.size.height < clipRect.size.height) { clipRect.origin.y = (docRect.size.height - clipRect.size.height) / 2.0; } // Probably the most efficient way to move the bounds origin. [self scrollToPoint: clipRect.origin]; // We could use this instead since it allows a scroll view to // coordinate scrolling between multiple clip views. //[[self superview] scrollClipView:self toPoint:clipRect.origin]; } // We need to override this so that the superclass doesn't override our new // origin point. - (NSPoint) constrainScrollPoint: (NSPoint)proposedNewOrigin { NSRect docRect = [[self documentView] frame]; NSRect clipRect = [self bounds]; NSPoint newScrollPoint = proposedNewOrigin; float maxX = docRect.size.width - clipRect.size.width; float maxY = docRect.size.height - clipRect.size.height; // If the clip view is wider than the doc, we can't scroll horizontally if(docRect.size.width < clipRect.size.width) { newScrollPoint.x = maxX / 2.0; } else { newScrollPoint.x = MAX(0, MIN(newScrollPoint.x,maxX)); } // If the clip view is taller than the doc, we can't scroll vertically if(docRect.size.height < clipRect.size.height) { newScrollPoint.y = maxY / 2.0; } else { newScrollPoint.y = MAX(0, MIN(newScrollPoint.y,maxY)); } return newScrollPoint; } - (void) viewBoundsChanged: (NSNotification*)aNotification { [super viewBoundsChanged: aNotification]; [self centerDocumentView]; } - (void) viewFrameChanged: (NSNotification*)aNotification { [super viewFrameChanged: aNotification]; [self centerDocumentView]; } - (void) setFrame: (NSRect)aFrame { [super setFrame: aFrame]; [self centerDocumentView]; } - (void) setFrameOrigin: (NSPoint)aPoint { [super setFrameOrigin: aPoint]; [self centerDocumentView]; } - (void) setFrameSize: (NSSize)aSize { [super setFrameSize: aSize]; [self centerDocumentView]; } - (void) setFrameRotation: (float)anAngle { [super setFrameRotation: anAngle]; [self centerDocumentView]; } @end viewpdf.app-0.2/Controller.h0000644000175000017510000000437510267527244015157 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import "SinglePageView.h" #import "DocumentTools.h" #import "MenuState.h" /** * Controller for Document windows. */ @interface Controller : NSWindowController { IBOutlet NSScrollView* scrollView; SinglePageView* singlePageView; DocumentTools* tools; MenuState* menuState; BOOL windowIsVisible; } /* Navigation */ - (IBAction) nextPage: (id)aSender; - (IBAction) previousPage: (id)aSender; - (IBAction) firstPage: (id)aSender; - (IBAction) lastPage: (id)aSender; - (IBAction) takePageFrom: (id)aSender; - (IBAction) enterPageNumber: (id)aSender; /* Zoom */ - (IBAction) takeZoomFrom: (id)aSender; - (IBAction) zoomIn: (id)aSender; - (IBAction) zoomOut: (id)aSender; - (IBAction) zoomActualSize: (id)aSender; - (IBAction) zoomToFit: (id)aSender; /* Page Resizing */ - (IBAction) toggleFitWidth: (id)aSender; - (IBAction) toggleFitHeight: (id)aSender; - (IBAction) toggleFitPage: (id)aSender; /* Scrolling */ - (IBAction) scrollPageUp: (id)aSender; - (IBAction) scrollPageDown: (id)aSender; - (IBAction) scrollLineUp: (id)aSender; - (IBAction) scrollLineDown: (id)aSender; - (IBAction) scrollToTop: (id)aSender; - (IBAction) scrollToBottom: (id)aSender; - (IBAction) scrollLineLeft: (id)aSender; - (IBAction) scrollLineRight: (id)aSender; - (IBAction) scrollToLeftEdge: (id)aSender; - (IBAction) scrollToRightEdge: (id)aSender; /* Content View */ - (IBAction) goSinglePage: (id)aSender; /* Close */ - (IBAction) close: (id)aSender; @end viewpdf.app-0.2/Controller.m0000644000175000017510000003301610267527244015156 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "Controller.h" #import "Document.h" #import "CenteringClipView.h" /** * Non-Public methods. */ @interface Controller (Private) - (Document*) _myDocument; - (void) _updatePage: (NSNotification*)aNotification; - (void) _zoomFactorUpdated: (NSNotification*)aNotification; - (void) _toggleResizePolicy: (ResizePolicy)aPolicy; - (void) _setResizePolicy: (ResizePolicy)aPolicy; - (void) _setupScrollView; - (void) _addDocumentTools; - (void) _createSinglePageView; - (void) _setInitialWindowSize; - (NSRect) _calcPreferredFrameInFrame: (NSRect)maxFrame withPDFSize: (NSSize)aPDFSize; - (NSSize) _calcPDFContentSize: (NSSize)aSize add: (BOOL)addToSize; @end @implementation Controller - (id) initWithWindow: (NSWindow*)aWindow { self = [super initWithWindow: aWindow]; if (self) { singlePageView = nil; scrollView = nil; tools = nil; menuState = nil; windowIsVisible = NO; } return self; } - (void) dealloc { NSLog(@"dealloc Controller"); [[NSNotificationCenter defaultCenter] removeObserver: self]; [menuState release]; [singlePageView release]; [super dealloc]; } - (void) windowDidLoad { [super windowDidLoad]; [self _setupScrollView]; [self _addDocumentTools]; [self _createSinglePageView]; [self goSinglePage: nil]; // initialize the SinglePageView with the document's // PDFDocument. [singlePageView setDocument: [self _myDocument]]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_zoomFactorUpdated:) name: kZoomFactorChangedNotification object: singlePageView]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_updatePage:) name: kDocumentPageChangedNotification object: [self _myDocument]]; // setup the multipageview //multipageview = [[MultiPageView alloc] initWithFrame: [pdfview frame] // scaleFactor: 25]; //[multipageview setDocument: [[self _myDocument] pdfDocument]]; //[scrollview setDocumentView: multipageview]; [self _setInitialWindowSize]; // trigger initial setup [[self _myDocument] setPageByIndex: 1]; // display initial zoom factor & page count [tools setZoom: [singlePageView zoom]]; [tools setPageCount: [[self _myDocument] countPages]]; // setup a delegate that keeps track of the menu's state menuState = [[MenuState alloc] initWithDocument: [self _myDocument] contentView: singlePageView]; } - (void) windowDidBecomeMain: (NSNotification*)aNotification { // We need to ensure, that the top of the content is visible // right after the window appears on the screen for the first // time. windowDidLoad here doesn"t work because the window manager // may decide to change the window size when it is put on the // screen (which takes place AFTER windowDidLoad) if (!windowIsVisible) { [singlePageView displayContentTop]; windowIsVisible = YES; } [menuState stateChanged]; } - (NSRect) windowWillUseStandardFrame: (NSWindow*)aWindow defaultFrame: (NSRect)aFrame { return [self _calcPreferredFrameInFrame: aFrame withPDFSize: [singlePageView preferredSize]]; } - (IBAction) nextPage: (id)aSender { [[self _myDocument] nextPage]; } - (IBAction) previousPage: (id)aSender { [[self _myDocument] previousPage]; } - (IBAction) firstPage: (id)aSender { [[self _myDocument] setPageByIndex: 1]; } - (IBAction) lastPage: (id)aSender { [[self _myDocument] setPageByIndex: [[self _myDocument] countPages]]; } - (IBAction) takePageFrom: (id)aSender { int page = [aSender intValue]; if ((page > 0) && (page <= [[self _myDocument] countPages])) { [[self _myDocument] setPageByIndex: page]; } else { // if the user entered "0", go to last page NSString* test = [[aSender stringValue] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; if ([test hasPrefix: @"0"]) { [self lastPage: nil]; } else { [self _updatePage: nil]; } } } - (IBAction) enterPageNumber: (id)aSender { [tools focusPageField]; } - (IBAction) takeZoomFrom: (id)aSender { float zoom = [aSender floatValue]; if (zoom > 0) { [singlePageView setZoom: zoom]; } else { [self _zoomFactorUpdated: nil]; } } - (IBAction) zoomIn: (id)aSender { [self _setResizePolicy: ResizePolicyNone]; [singlePageView zoomIn]; } - (IBAction) zoomOut: (id)aSender { [self _setResizePolicy: ResizePolicyNone]; [singlePageView zoomOut]; } - (IBAction) zoomActualSize: (id)aSender { [self _setResizePolicy: ResizePolicyNone]; [singlePageView setZoom: 100.0]; } - (IBAction) zoomToFit: (id)aSender { [self _setResizePolicy: ResizePolicyNone]; [singlePageView zoomContentToFit: [scrollView contentSize]]; } - (IBAction) toggleFitWidth: (id)aSender { [self _toggleResizePolicy: ResizePolicyFitWidth]; } - (IBAction) toggleFitHeight: (id)aSender { [self _toggleResizePolicy: ResizePolicyFitHeight]; } - (IBAction) toggleFitPage: (id)aSender { [self _toggleResizePolicy: ResizePolicyFitPage]; } - (IBAction) scrollPageUp: (id)aSender { [singlePageView scrollUpOnePage]; } - (IBAction) scrollPageDown: (id)aSender { [singlePageView scrollDownOnePage]; } - (IBAction) scrollLineUp: (id)aSender { [singlePageView scrollUpOneLine]; } - (IBAction) scrollLineDown: (id)aSender { [singlePageView scrollDownOneLine]; } - (IBAction) scrollToTop: (id)aSender { [singlePageView displayContentTop]; } - (IBAction) scrollToBottom: (id)aSender { [singlePageView displayContentBottom]; } - (IBAction) scrollLineLeft: (id)aSender { [singlePageView scrollLeftOneLine]; } - (IBAction) scrollLineRight: (id)aSender { [singlePageView scrollRightOneLine]; } - (IBAction) scrollToLeftEdge: (id)aSender { [singlePageView displayContentLeft]; } - (IBAction) scrollToRightEdge: (id)aSender; { [singlePageView displayContentRight]; } - (IBAction) goSinglePage: (id)aSender { [scrollView setDocumentView: singlePageView]; NSAssert([singlePageView paperColor], @"content view does not have a paper color"); [scrollView setBackgroundColor: [singlePageView paperColor]]; } - (IBAction) close: (id)aSender { [self close]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation Controller (Private) - (Document*) _myDocument { return (Document*)[self document]; } - (void) _updatePage: (NSNotification*)aNotification { [tools setPage: [[self _myDocument] pageIndex]]; [singlePageView update]; } - (void) _zoomFactorUpdated: (NSNotification*)aNotification { [tools setZoom: [singlePageView zoom]]; [singlePageView update]; } - (void) _toggleResizePolicy: (ResizePolicy)aPolicy { ResizePolicy newPolicy; if ([singlePageView resizePolicy] == aPolicy) { newPolicy = ResizePolicyNone; } else { newPolicy = aPolicy; } [self _setResizePolicy: newPolicy]; } - (void) _setResizePolicy: (ResizePolicy)aPolicy { if ([singlePageView resizePolicy] == aPolicy) { return; } [singlePageView setResizePolicy: aPolicy]; [tools setResizePolicy: [singlePageView resizePolicy]]; [menuState stateChanged]; } - (void) _setupScrollView { NSAssert(scrollView, @"scrollview not set"); // make the scrollview center it's document view id docView = [[scrollView documentView] retain]; NSRect clipViewFrame = [[scrollView contentView] frame]; NSClipView* newClipView = [[CenteringClipView alloc] initWithFrame: clipViewFrame]; [newClipView setBackgroundColor: [NSColor windowBackgroundColor]]; [scrollView setContentView: newClipView]; [scrollView setDocumentView: docView]; [newClipView release]; [docView release]; [scrollView setHasVerticalScroller: YES]; [scrollView setHasHorizontalScroller: YES]; [scrollView setDrawsBackground: YES]; } - (void) _addDocumentTools { tools = [[DocumentTools alloc] initWithFrame: NSMakeRect(0, 0, 0, 0) target: self]; // we need to re-frame the scrollview such that the tools view // fits underneath it NSRect scrollViewF = [scrollView frame]; [scrollView setFrame: NSMakeRect(NSMinX(scrollViewF), NSMinY(scrollViewF) + NSHeight([tools frame]), NSWidth(scrollViewF), NSHeight(scrollViewF) - NSHeight([tools frame]))]; [[[self window] contentView] addSubview: tools]; [tools release]; } - (void) _createSinglePageView { NSSize viewSize = [scrollView contentSize]; NSRect frame = NSMakeRect(0, 0, viewSize.width, viewSize.height); singlePageView = [[SinglePageView alloc] initWithFrame: frame]; } - (void) _setInitialWindowSize { NSRect screenFrame = [[NSScreen mainScreen] frame]; #ifndef GNUSTEP // Reserve a little space at the top such that the window // does not appear "glued" to the menu bar screenFrame.size.height = NSHeight(screenFrame) - 30; #endif NSRect winFrame = [self _calcPreferredFrameInFrame: screenFrame withPDFSize: [singlePageView preferredSize]]; NSRect contentRect = [NSWindow contentRectForFrameRect: winFrame styleMask: [[self window] styleMask]]; NSSize availableSize = [self _calcPDFContentSize: contentRect.size add: NO]; NSSize usedSize = [singlePageView zoomContentToFit: availableSize]; // recalc frame with actually used size winFrame = [self _calcPreferredFrameInFrame: screenFrame withPDFSize: usedSize]; [[self window] setFrame: winFrame display: YES]; } - (NSRect) _calcPreferredFrameInFrame: (NSRect)maxFrame withPDFSize: (NSSize)aPDFSize { #ifdef GNUSTEP // Reserve a little extra space at the top of the screen. This is necessary // if GNUstep does not draw the window decorations but the window manager. // Otherwise, the window might appear with the titlebar off-screen maxFrame.size.height = NSHeight(maxFrame) - 40; #endif NSSize newContentSize = [self _calcPDFContentSize: aPDFSize add: YES]; NSRect contentRect = [NSWindow contentRectForFrameRect: [[self window] frame] styleMask: [[self window] styleMask]]; contentRect.size = newContentSize; NSRect newFrame = [NSWindow frameRectForContentRect: contentRect styleMask: [[self window] styleMask]]; // constrain the computed frame inside the screen dimensions (aFrame) // (OSX works fine without, but I guess, with GNUstep, we're better of // taking care of this) //NSLog(@"NEW FRAME 1: %f @ %f - %f @ %f", // NSMinX(newFrame), NSMinY(newFrame), NSMaxX(newFrame), NSMaxY(newFrame)); // constrain height if (NSMinY(newFrame) < NSMinY(maxFrame)) { newFrame.origin.x = NSMinY(maxFrame); } if (NSMaxY(newFrame) > NSHeight(maxFrame)) { newFrame.origin.y = NSHeight(maxFrame) - NSHeight(newFrame); if (NSMinY(newFrame) < NSMinY(maxFrame)) { newFrame.origin.y = NSMinY(maxFrame); newFrame.size.height = NSHeight(maxFrame); } } // constrain width if (NSMinX(newFrame) < NSMinX(maxFrame)) { newFrame.origin.y = NSMinX(maxFrame); } if (NSMaxX(newFrame) > NSWidth(maxFrame)) { newFrame.origin.x = NSWidth(maxFrame) - NSWidth(newFrame); if (NSMinX(newFrame) < NSMinX(maxFrame)) { newFrame.origin.x = NSMinX(maxFrame); newFrame.size.width = NSWidth(maxFrame); } } // if the new frame has any anomalies, and return the maximum frame // (otherwise, the window may dissapear from the screen) if ((NSWidth(newFrame) <= 0) || (NSHeight(newFrame) <= 0)) { return maxFrame; } //NSLog(@"NEW FRAME 2: %f @ %f - %f @ %f", // NSMinX(newFrame), NSMinY(newFrame), NSMaxX(newFrame), NSMaxY(newFrame)); return newFrame; } /** Add or subtract the size of additional components in the window (tools, scroller) to or from a rectangle. */ - (NSSize) _calcPDFContentSize: (NSSize)aSize add: (BOOL)addToSize { float factor = (addToSize ? 1 : -1); NSSize newSize = aSize; newSize.height += NSHeight([tools frame]) * factor; newSize.height += NSHeight([[scrollView horizontalScroller] frame]) * factor; newSize.width += NSWidth([[scrollView verticalScroller] frame]) * factor; #ifdef GNUSTEP // add a little extra space, otherwise scrollbars appear // on GNUstep float additionalSpace = 2 * (addToSize ? 1 : -1); newSize.width += additionalSpace; newSize.height += additionalSpace; #endif return newSize; } @end viewpdf.app-0.2/COPYING0000644000175000017510000004313110267527244013707 0ustar tarDebian-NM GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. viewpdf.app-0.2/docs/0000755000175000017510000000000010267527325013602 5ustar tarDebian-NMviewpdf.app-0.2/docs/Contributors.txt0000644000175000017510000000004610267527214017035 0ustar tarDebian-NM Many thanks to Mat Rice for the Iconsviewpdf.app-0.2/Document.h0000644000175000017510000000255210267527244014605 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import extern NSString* kDocumentPageChangedNotification; /** * A Vindaloo PDF Document. */ @interface Document : NSDocument { PopplerDocument* pdfdoc; PopplerPage* page; id renderer; } - (PopplerDocument*) pdfDocument; - (int) countPages; - (void) setPageByIndex: (int)aPageIndex; - (int) pageIndex; - (BOOL) nextPage; - (BOOL) previousPage; - (PopplerPage*) page; - (NSSize) pageSize; - (void) drawPageAtPoint: (NSPoint)aPoint scale: (float)aScale; @end viewpdf.app-0.2/Document.m0000644000175000017510000001106310267527244014607 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "Document.h" #import "Controller.h" #import "Preferences.h" #import #import #import NSString* kDocumentPageChangedNotification = @"DocumentPageChangedNotification"; /** * Non-Public methods. */ @interface Document (Private) - (void) _createRenderer; @end @implementation Document - (id) init { self = [super init]; if (self) { pdfdoc = nil; page = nil; renderer = nil; } return self; } - (void) dealloc { NSLog(@"dealloc Document"); [pdfdoc release]; [(NSObject*)renderer release]; [super dealloc]; } - (NSString*) windowNibName { return @"Document"; } - (void) makeWindowControllers { Controller* ctrl = [[Controller alloc] initWithWindowNibName: [self windowNibName]]; [ctrl autorelease]; [self addWindowController: ctrl]; } - (NSData*) dataRepresentationOfType: (NSString*)aType { return nil; } - (BOOL) readFromFile: (NSString*)aFileName ofType: (NSString*)aType { BOOL success = YES; NS_DURING pdfdoc = [[PopplerDocument alloc] initWithPath: aFileName]; [self setPageByIndex: 1]; [self _createRenderer]; NS_HANDLER success = NO; pdfdoc = nil; NS_ENDHANDLER return success; } - (PopplerDocument*) pdfDocument { return pdfdoc; } - (int) countPages { return [[self pdfDocument] countPages]; } - (void) setPageByIndex: (int)aPageIndex { NSAssert([self pdfDocument], @"document contains no data"); page = [[self pdfDocument] page: aPageIndex]; [[NSNotificationCenter defaultCenter] postNotificationName: kDocumentPageChangedNotification object: self]; } - (int) pageIndex { NSAssert([self pdfDocument], @"document contains no data"); return [page index]; } - (BOOL) nextPage { if ([self pageIndex] >= [self countPages]) { return NO; } [self setPageByIndex: [self pageIndex] + 1]; return YES; } - (BOOL) previousPage { if ([self pageIndex] <= 1) { return NO; } [self setPageByIndex: [self pageIndex] - 1]; return YES; } - (PopplerPage*) page { return page; } - (NSSize) pageSize { NSAssert([self page] > 0, @"no page"); return [[self page] size]; } - (void) drawPageAtPoint: (NSPoint)aPoint scale: (float)aScale { NSAssert(renderer, @"no renderer"); NSAssert([self pdfDocument], @"document contains no data"); [renderer drawPage: [self page] atPoint: aPoint scale: aScale]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation Document (Private) - (void) _createRenderer { id bufferedRenderer; if ([[Preferences sharedPrefs] useCairo] && [PopplerCairoImageRenderer isSupported]) { NSLog(@"use cairo renderering"); bufferedRenderer = [[PopplerCairoImageRenderer alloc] initWithDocument: [self pdfDocument]]; } else { NSLog(@"use generic splash rendering"); bufferedRenderer = [[PopplerSplashRenderer alloc] initWithDocument: [self pdfDocument]]; } NSAssert(bufferedRenderer, @"no buffered renderer created"); unsigned long cacheSize = [[Preferences sharedPrefs] pageCacheSize]; id baseRenderer = nil; if (cacheSize > 0) { baseRenderer = [[PopplerCachingRenderer alloc] initWithRenderer: bufferedRenderer]; [(PopplerCachingRenderer*)baseRenderer setCacheSize: cacheSize]; [(NSObject*)bufferedRenderer release]; } else { baseRenderer = bufferedRenderer; } renderer = [[PopplerDirectBufferedRenderer alloc] initWithRenderer: baseRenderer]; [(NSObject*)baseRenderer release]; } @end viewpdf.app-0.2/DocumentTools.h0000644000175000017510000000462710267527244015633 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import "PDFContentView.h" /** * A view that provides standard tools for a PDF document. * These tools include things like page navigation controls, * zoom controls etc. */ @interface DocumentTools : NSView { id target; NSButton* firstBT; NSButton* previousBT; NSButton* nextBT; NSButton* lastBT; NSTextField* pageTF; NSTextField* nbpageTF; NSButton* zoomInBT; NSTextField* zoomTF; NSButton* zoomOutBT; NSButton* fitPageBT; NSButton* fitWidthBT; NSButton* fitHeightBT; } /** The frame size of the view is calculated automatically during initialization. Thus, the frame's size may be modified to hold all tool views. The frame may be heightened but it is never belittled. You can safley use 0, 0 for the frame's size and rely on the initialization to determine and set the minimum required width. */ - (id) initWithFrame: (NSRect)aFrame target: (id)aTarget; /** A DocumentTools view will send all actions of it's embeded controls to a target object. */ - (void) setTarget: (id)aTarget; /** Set the page number to be displayed in the page field. */ - (void) setPage: (int)aPage; /** Set the number of pages in the displayed document. */ - (void) setPageCount: (int)aPageCount; /** Set the content's for the zoom textfield. */ - (void) setZoom: (float)aFactor; /** Set the actual page resize policy. The state of the buttons which control the policy is modified accordingly. */ - (void) setResizePolicy: (ResizePolicy)aPolicy; /** Transfer focus to page field. */ - (void) focusPageField; @end viewpdf.app-0.2/DocumentTools.m0000644000175000017510000001506510267527244015636 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "DocumentTools.h" #import "ToolViewBuilder.h" /** * Non-Public methods. */ @interface DocumentTools (Private) - (void) _createControls; - (NSButton*) _createButtonWithImage: (NSString*)anImageName; - (NSButton*) _createToggleButtonWithImage: (NSString*)anImageName; @end @implementation DocumentTools - (id) initWithFrame: (NSRect)aFrame target: (id)aTarget { self = [super initWithFrame: aFrame]; if (self) { [self _createControls]; [self setTarget: aTarget]; } return self; } - (void) setTarget: (id)aTarget { target = aTarget; [firstBT setAction: @selector(firstPage:)]; [firstBT setTarget: target]; [previousBT setAction: @selector(previousPage:)]; [previousBT setTarget: target]; [nextBT setAction: @selector(nextPage:)]; [nextBT setTarget: target]; [lastBT setAction: @selector(lastPage:)]; [lastBT setTarget: target]; [pageTF setAction: @selector(takePageFrom:)]; [pageTF setTarget: target]; [zoomTF setAction: @selector(takeZoomFrom:)]; [zoomTF setTarget: target]; [zoomInBT setAction: @selector(zoomIn:)]; [zoomInBT setTarget: target]; [zoomOutBT setAction: @selector(zoomOut:)]; [zoomOutBT setTarget: target]; [fitWidthBT setAction: @selector(toggleFitWidth:)]; [fitWidthBT setTarget: target]; [fitHeightBT setAction: @selector(toggleFitHeight:)]; [fitHeightBT setTarget: target]; [fitPageBT setAction: @selector(toggleFitPage:)]; [fitPageBT setTarget: target]; } - (void) setPage: (int)aPage { [pageTF setStringValue: [NSString stringWithFormat: @"%d", aPage]]; } - (void) setPageCount: (int)aPageCount { [nbpageTF setStringValue: [NSString stringWithFormat:@"of %d", aPageCount]]; } - (void) setZoom: (float)aFactor { NSString* text = [NSString stringWithFormat: @"%.0f %%", aFactor]; [zoomTF setStringValue: text]; } - (void) setResizePolicy: (ResizePolicy)aPolicy { [fitWidthBT setState: (aPolicy == ResizePolicyFitWidth ? NSOnState : NSOffState)]; [fitHeightBT setState: (aPolicy == ResizePolicyFitHeight ? NSOnState : NSOffState)]; [fitPageBT setState: (aPolicy == ResizePolicyFitPage ? NSOnState : NSOffState)]; } - (void) focusPageField { [[self window] makeFirstResponder: pageTF]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation DocumentTools (Private) - (void) _createControls { firstBT = [self _createButtonWithImage: @"First.png"]; previousBT = [self _createButtonWithImage: @"Previous.png"]; nextBT = [self _createButtonWithImage: @"Next.png"]; lastBT = [self _createButtonWithImage: @"Last.png"]; zoomInBT = [self _createButtonWithImage: @"ZoomIn.png"]; zoomOutBT = [self _createButtonWithImage: @"ZoomOut.png"]; fitPageBT = [self _createToggleButtonWithImage: @"FitPage.png"]; fitWidthBT = [self _createToggleButtonWithImage: @"FitWidth.png"]; fitHeightBT = [self _createToggleButtonWithImage: @"FitHeight.png"]; pageTF = [[[NSTextField alloc] initWithFrame: NSZeroRect] autorelease]; [pageTF setFont: [NSFont systemFontOfSize: [NSFont smallSystemFontSize]]]; [pageTF setAlignment: NSCenterTextAlignment]; [pageTF sizeToFit]; [pageTF setFrameSize: NSMakeSize(40, NSHeight([pageTF frame]))]; nbpageTF = [[[NSTextField alloc] initWithFrame: NSZeroRect] autorelease]; [nbpageTF setEditable: NO]; [nbpageTF setSelectable: NO]; [nbpageTF setBordered: NO]; [nbpageTF setBezeled: NO]; [nbpageTF setDrawsBackground: NO]; [nbpageTF setFont: [NSFont systemFontOfSize: [NSFont smallSystemFontSize]]]; [nbpageTF setAlignment: NSLeftTextAlignment]; [nbpageTF setStringValue: @"of 9999"]; [nbpageTF sizeToFit]; zoomTF = [[[NSTextField alloc] initWithFrame: NSZeroRect] autorelease]; [zoomTF setFont: [pageTF font]]; [zoomTF setAlignment: NSCenterTextAlignment]; [zoomTF sizeToFit]; [zoomTF setFrameSize: NSMakeSize(55, NSHeight([zoomTF frame]))]; ToolViewBuilder* builder = [ToolViewBuilder builderWithView: self yBorder: 2.0]; [builder setSpacing: 0.0]; [[builder advance: 5.0] addViewVerticallyCentered: firstBT]; [builder addViewVerticallyCentered: previousBT]; [builder addViewVerticallyCentered: pageTF]; [[builder advance: 2.0] addViewVerticallyCentered: nbpageTF]; [builder addViewVerticallyCentered: nextBT]; [builder addViewVerticallyCentered: lastBT]; [[builder advance: 25.0] addViewVerticallyCentered: zoomOutBT]; [[builder advance: 1.0] addViewVerticallyCentered: zoomTF]; [[builder advance: 1.0] addViewVerticallyCentered: zoomInBT]; [[builder advance: 35.0] addViewVerticallyCentered: fitWidthBT]; [builder addViewVerticallyCentered: fitHeightBT]; [builder addViewVerticallyCentered: fitPageBT]; } - (NSButton*) _createButtonWithImage: (NSString*)anImageName { NSButton* button = [[NSButton alloc] initWithFrame: NSZeroRect]; [button setImage: [NSImage imageNamed: anImageName]]; [button setImagePosition: NSImageOnly]; [button setButtonType: NSMomentaryLight]; [button setBordered: NO]; [button setRefusesFirstResponder: YES]; [button sizeToFit]; // all buttons are size 25 points wide to provide enough // "hit" area for users [button setFrameSize: NSMakeSize(25, NSHeight([button frame]))]; return [button autorelease]; } - (NSButton*) _createToggleButtonWithImage: (NSString*)anImageName { NSButton* button = [self _createButtonWithImage: anImageName]; [button setButtonType: NSToggleButton]; NSString* extension = [anImageName pathExtension]; NSString* base = [anImageName stringByDeletingPathExtension]; NSString* alternateImage = [NSString stringWithFormat: @"%@On.%@", base, extension]; [button setAlternateImage: [NSImage imageNamed: alternateImage]]; return button; } @end viewpdf.app-0.2/DocumentWindow.h0000644000175000017510000000167410267527244016001 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import /** * A window for Vindaloo Documents. * * - handles keyDown events */ @interface DocumentWindow : NSWindow { } @end viewpdf.app-0.2/DocumentWindow.m0000644000175000017510000000616110267527244016002 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "DocumentWindow.h" #import "Controller.h" /** * Non-Public methods. */ @interface DocumentWindow (Private) @end @implementation DocumentWindow - (id) initWithContentRect: (NSRect)aContentRect styleMask: (unsigned int)aStyleMask backing: (NSBackingStoreType) aBackingType defer: (BOOL)defer { self = [super initWithContentRect: aContentRect styleMask: aStyleMask backing: aBackingType defer: defer]; if (self) { // ... } return self; } - (void) dealloc { [super dealloc]; } - (void) keyDown: (NSEvent*)theEvent { NSString* chars = [theEvent characters]; if ([chars length] == 0) { return; } unichar firstChar = [chars characterAtIndex: 0]; BOOL shiftKey = ([theEvent modifierFlags] & NSShiftKeyMask) > 0; BOOL cmdKey = ([theEvent modifierFlags] & NSCommandKeyMask) > 0; switch (firstChar) { case NSPageUpFunctionKey: [[self delegate] scrollPageUp: self]; break; case NSPageDownFunctionKey: [[self delegate] scrollPageDown: self]; break; case 0x20: if (shiftKey) [[self delegate] scrollPageUp: self]; else [[self delegate] scrollPageDown: self]; break; case NSLeftArrowFunctionKey: if (cmdKey) [[self delegate] scrollToLeftEdge: self]; else [[self delegate] scrollLineLeft: self]; break; case NSRightArrowFunctionKey: if (cmdKey) [[self delegate] scrollToRightEdge: self]; else [[self delegate] scrollLineRight: self]; break; case NSUpArrowFunctionKey: if (cmdKey) [[self delegate] scrollToTop: self]; else [[self delegate] scrollLineUp: self]; break; case NSDownArrowFunctionKey: if (cmdKey) [[self delegate] scrollToBottom: self]; else [[self delegate] scrollLineDown: self]; break; // case 27: // ESC } } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation DocumentWindow (Private) @end viewpdf.app-0.2/English.lproj/0000755000175000017510000000000010267527325015370 5ustar tarDebian-NMviewpdf.app-0.2/English.lproj/Document.gorm/0000755000175000017510000000000010267527325020111 5ustar tarDebian-NMviewpdf.app-0.2/English.lproj/Document.gorm/data.classes0000644000175000017510000000053310267527215022400 0ustar tarDebian-NM{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Controller = { Actions = ( ); Outlets = ( scrollView ); Super = NSWindowController; }; DocumentWindow = { Actions = ( ); Outlets = ( ); Super = NSWindow; }; ExtendedScrollView = { Actions = ( ); Outlets = ( ); Super = NSScrollView; }; }viewpdf.app-0.2/English.lproj/Document.gorm/data.info0000644000175000017510000000030410267527215021672 0ustar tarDebian-NMGNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0±& %  Typed Streamviewpdf.app-0.2/English.lproj/Document.gorm/objects.gorm0000644000175000017510000000262210267527215022430 0ustar tarDebian-NMGNUstep archive00002af9:00000015:00000020:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0±& %  Controller0±&% GSCustomClassMap0±&0±&% Window0±&% DocumentWindow°0 1GSWindowTemplate1GSClassSwapper°1NSWindow1 NSResponder%  Cë€ CÔ&% C¹ DL0 1 NSView%  Cë€ CÔ  Cë€ CÔ&0 1 NSMutableArray1 NSArray&0 1 GSCustomView1 GSNibItem0 ±&% ExtendedScrollView  Cë€ CÔ&01NSColor0±&%NSNamedColorSpace0±&% System0±&% windowBackgroundColor0±&% Window0±&% Window0±&%Window ?€ ?€ F@ F@%0±&% GormCustomView° 0± &01NSNibConnector°0±&%NSOwner01NSNibOutletConnector°°01NSMutableString&% window0±°°0±&% delegate0±°0±°°0±& %  scrollView0 1 GSMutableSet1 NSMutableSet1NSSet&° viewpdf.app-0.2/English.lproj/Document.nib/0000755000175000017510000000000010267527325017715 5ustar tarDebian-NMviewpdf.app-0.2/English.lproj/Document.nib/classes.nib0000644000175000017510000000126310267527215022044 0ustar tarDebian-NM{ IBClasses = ( { ACTIONS = {firstPage = id; lastPage = id; nextPage = id; previousPage = id; }; CLASS = Controller; LANGUAGE = ObjC; OUTLETS = { multiPageView = MultiPageView; scrollView = NSScrollView; singlePageView = SinglePageView; }; SUPERCLASS = NSWindowController; }, {CLASS = DocumentWindow; LANGUAGE = Java; SUPERCLASS = NSWindow; }, {CLASS = ExtendedScrollView; LANGUAGE = ObjC; SUPERCLASS = NSScrollView; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } ); IBVersion = 1; }viewpdf.app-0.2/English.lproj/Document.nib/info.nib0000644000175000017510000000070310267527215021340 0ustar tarDebian-NM IBDocumentLocation 35 85 356 240 0 0 1280 1002 IBFramework Version 364.0 IBOpenObjects 5 IBSystem Version 7W98 viewpdf.app-0.2/English.lproj/Document.nib/keyedobjects.nib0000644000175000017510000000401210267527215023055 0ustar tarDebian-NMbplist00Ô Y$archiverX$versionT$topX$objects_NSKeyedArchiver† Ñ ]IB.objectdata€¯; +/067;?FMefjnoqx{…†‡ˆ‘’”•–—š›Ÿ¡¢¤¥§¨«­¯±p¶h·¸¹»ÅÆÇÈÉÊËÌÍU$nullß  !"#$%&'()*[NSNamesKeys[NSFramework_NSObjectsValues]NSNamesValues]NSConnections]NSFontManagerVNSRootYNSNextOid_NSVisibleWindows]NSObjectsKeys]NSClassesKeysZNSOidsKeys\NSOidsValuesV$class_NSClassesValues€)€€(€*€€€ €€&€.€0€1€:€/Ò,-.[NSClassName€€ZControllerÒ1234X$classesZ$classname¢45^NSCustomObjectXNSObject_IBCocoaFrameworkÒ89:ZNS.objects €Ò12<=£=>5\NSMutableSetUNSSetÒ8@E¤ABCD€ € €"€$€ÔGHIJKL"]NSDestinationWNSLabelXNSSource€ €€ÜNOPQRSTUVWXYZ[\]^_`abcd_NSWindowStyleMask_NSWindowBackingYNSMinSize]NSWindowTitle]NSWindowClass\NSWindowRect\NSScreenRectYNSMaxSize\NSWindowViewYNSWTFlags[NSViewClass€€ €€ €€€px€€_{{308, 458}, {439, 357}}ÒghiYNS.stringVWindow€ Ò12kl£lm5_NSMutableStringXNSString^DocumentWindowÒgpiTViewÔrstu!vwZNSSubviews_NSNextResponderWNSFrame€€€Ò8yE¡z€×|}s~,€aa‚ƒ„[NSExtension[NSFrameSize[NSSuperviewXNSvFlags€€€€Z{439, 357}_ExtendedScrollView\NSScrollViewÒ12‰Š¤Š‹Œ5\NSCustomViewVNSView[NSResponderÒ12Ž£5^NSMutableArrayWNSArray_{{1, 9}, {439, 357}}Ò12“‹£‹Œ5_{{0, 0}, {1280, 1002}}Z{213, 129}_{3.40282e+38, 3.40282e+38}Ò12˜™¢™5_NSWindowTemplateVwindowÒ12œ£ž5_NSNibOutletConnector^NSNibConnectorÔGHI" LJ€!XdelegateÔGHIz£L"€#ZscrollViewÔGHIz¦LJ€%_initialFirstResponderÒ8©ª£azJ€'Ò12¬¢5Ò8®ª£Ja"Ò8°ª£z"JÒ8²ª£³´µ€+€,€-\File's OwnerÒ89ªÒ89ªÒ8ºª¨aJz"DACBÒ8¼ª¨½¾¿ÀÁÂÃÄ€2€3€4€5€6€7€8€9   Ò12ÎÏ¢Ï5^NSIBObjectData$)2DILZ\š ÁÍÙëù&9GU`mt†ˆŠŒŽ’”–˜šœž ¢¤©µ·¹ÄÉÒÝàïø #'4:?DFHJLNWemvxz|•©»ÅÓáîû(*,.02468:?AC^cmtv{‘š©®³¼ÇÙáãåçìîðÿ #,.0246AVchmz’–¥­ÄÉÍæñ)059P_hjs|~‰’”¬±µ·¼¿ÄÈÍÑÖÚÜÞàíò÷ü !#%')+-/138;ÐJviewpdf.app-0.2/English.lproj/InfoPlist.strings0000644000175000017510000000041410267527215020707 0ustar tarDebian-NMþÿ/* Localized versions of Info.plist keys */ CFBundleName = "Vindaloo"; NSHumanReadableCopyright = "© Stefan Kleine Stegemann, 2005";viewpdf.app-0.2/English.lproj/Main.gorm/0000755000175000017510000000000010267527325017217 5ustar tarDebian-NMviewpdf.app-0.2/English.lproj/Main.gorm/data.classes0000644000175000017510000000071710267527215021512 0ustar tarDebian-NM{ "## Comment" = "Do NOT change this file, Gorm maintains it"; AppDelegate = { Actions = ( ); Outlets = ( ); Super = NSObject; }; FirstResponder = { Actions = ( "enterPageNumber:", "firstPage:", "lastPage:", "toggleFitHeight:", "nextPage:", "previousPage:", "toggleFitPage:", "toggleFitWidth:", "zoomActualSize:", "zoomIn:", "zoomOut:", "zoomToFit:" ); Super = NSObject; }; }viewpdf.app-0.2/English.lproj/Main.gorm/data.info0000644000175000017510000000030410267527215021000 0ustar tarDebian-NMGNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0±& %  Typed Streamviewpdf.app-0.2/English.lproj/Main.gorm/objects.gorm0000644000175000017510000001613510267527215021542 0ustar tarDebian-NMGNUstep archive00002af9:00000012:000000ff:00000001:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&501NSString& %  MenuItem1901 NSMenuItem0±& %  Next Page0±&% d&&ÿ%01NSImage01NSMutableString&% common_2DCheckMark0 ±0 ±& %  common_2DDash’%0 ±& %  MenuItem300 ±0 ±&%Zoom In0±&%+&&ÿ%°° ’%0±& %  MenuItem310±0±&%Zoom Out0±&%-&&ÿ%°° ’%0±& %  MenuItem320±0±& % Show Page0±&%=&&ÿ%°° ’%0±& %  MenuItem10±0±&% Quit0±&% q&&ÿ%°° ’%0±& %  NSVisible01 NSMutableArray1 NSArray&0±& %  MenuItem20±0±&% Document0 ±&&&ÿ%°° 2submenuAction:%0!1 NSMenu°0"± &0#±0$±&% Open...0%±&% o&&ÿ%°° ’%0&±0'±&% Close0(±&&&ÿ%°° ’%0)± 0*±&%Vindaloo0+± &0,±0-±&% Info0.±&&&ÿ%°° ²%0/± °-00± &01±02±& %  Info Panel...03±&&&ÿ%°° ’%04±05±&% Preferences...06±&&&ÿ%°° ’%07±08±&% Help is not yet available09±&% ?&&ÿ%°° ’%°)°0:±0;±&%Go to0<±&&&ÿ%°° ’%0=± °;0>± &0?±0@±& %  Previous Page0A±&% b&&ÿ%°° ’%°0B±0C±& %  First Page0D±&% 1&&ÿ%°° ’%0E±0F±& %  Last Page0G±&% 0&&ÿ%°° ’%0H±0I±& % Go to Page0J±&%l&&ÿ%°° ’%0K±0L±&%View0M±&&&ÿ%°° ²%0N± °L0O± &0P±0Q±& % Actual Size0R±&%*&&ÿ%°° ’%° °°0S±0T±& % Fit Width0U±&&&ÿ%°° ’%0V±0W±& % Fit Height0X±&&&ÿ%°° ’%0Y±0Z±&%Fit Page0[±&&&ÿ%°° ’%°)0\±0]±&%Windows0^±&&&ÿ%°° ²%0_± °]0`± &0a±0b±&%Arrange In Front0c±&&&ÿ%°° ’%0d±0e±&%Miniaturize Window0f±&%m&&ÿ%°° ’%0g±0h±& % Zoom Window0i±&%z&&ÿ%°° ’%0j±0k±& % Close Window0l±&%w&&ÿ%°° ’%°)0m±0n±&% Hide0o±&% h&&ÿ%°° ’%°0p±& %  MenuItem33° 0q±& %  MenuItem3°#0r±& %  MenuItem34°0s±& %  MenuItem4°,0t±& %  MenuItem35°0u±& %  MenuItem5°10v±& %  MenuItem36°g0w±& %  MenuItem37°:0x±& %  MenuItem6°40y±& %  MenuItem38°?0z±&% MenuItem°m0{±& %  MenuItem7°0|±& %  MenuItem39°S0}±& %  MenuItem8°#0~±& %  MenuItem9°&0±& %  GormNSMenu°!0€±& %  MenuItem20°B0±& %  MenuItem21°E0‚±& %  MenuItem22°B0ƒ±& %  AppDelegate0„1 GSNibItem°ƒ  &0…±& %  MenuItem23°\0†±& %  MenuItem24°a0‡±& %  MenuItem25°d0ˆ±& %  MenuItem26°j0‰±& %  MenuItem27°H0б& %  MenuItem28°K0‹±& %  MenuItem29°P0Œ±& %  MenuItem40°V0±& %  MenuItem41°Y0ޱ& %  GormNSMenu1°/0±& %  GormNSMenu2°=0±& %  GormNSMenu3°_0‘±& %  GormNSMenu4°N0’±& %  MenuItem10°&0“±& % NSWindowsMenu°_0”±&% GSCustomClassMap0•±&0–±& %  MenuItem11°,0—±& %  MenuItem12°10˜±& %  MenuItem13°40™±& %  MenuItem14°70š±&% NSMenu°)0›±& %  MenuItem15°m0œ±& %  MenuItem16°0±&%NSOwner0ž±& %  NSApplication0Ÿ±& %  MenuItem17°:0 ±& %  MenuItem18°?0¡± &??0¢1 NSNibConnector°š0£±&%NSOwner0¤± °›°š0¥1NSNibControlConnector°›0¦±&%NSFirst0§±&% hide:0¨± °œ°š0©±°œ°¦0ª±& %  terminate:0«± °ƒ°£0¬1NSNibOutletConnector°£°ƒ0­±&% delegate0®± °{°š0¯±°{°š0°±&% submenuAction:0±± °°{0²± °}°0³± °’°0´±°’°¦0µ±&% close:0¶± °–°š0·±°–°š0¸±&% submenuAction:0¹± °Ž°–0º± °—°Ž0»±°—°¦0¼±&% orderFrontStandardInfoPanel:0½± °˜°Ž0¾± °™°Ž0¿±°™°¦0À±&% orderFrontHelpPanel:0Á±°}°¦0±& %  openDocument:0ñ °Ÿ°š0ı°Ÿ°š0ű&% submenuAction:0Ʊ °°Ÿ0DZ ° °0ȱ °°0ɱ °‚°0ʱ °°0˱°°¦0̱& %  nextPage:0ͱ°‚°¦0α& %  firstPage:0ϱ°°¦0б& %  lastPage:0ѱ° °¦0Ò±& %  previousPage:0Ó± °…°š0Ô±°…°š0Õ±&%submenuAction:0Ö± °“°…0×± °†°“0ر°†°¦0Ù±&%arrangeInFront:0Ú± °‡°“0Û±°‡°¦0ܱ&%performMiniaturize:0ݱ °ˆ°“0Þ±°ˆ°¦0ß±& % performClose:0à± °‰°0á±°‰°¦0â±&% enterPageNumber:0ã± °Š°š0䱰аš0å±&%submenuAction:0æ± °‘°Š0ç± °‹°‘0è± °p°‘0é± °r°‘0ê± °t°‘0ë±°‹°¦0ì±&% zoomActualSize:0í±°p°¦0î±&% zoomIn:0ï±°r°¦0ð±&% zoomOut:0ñ±°t°¦0ò±& %  zoomToFit:0ó± °v°“0ô±°v°¦0õ±&% zoom:0ö± °|°‘0÷± °Œ°‘0ø± °°‘0ù±°|°¦0ú±&% toggleFitWidth:0û±°Œ°¦0ü±&% toggleFitHeight:0ý±°°¦0þ±&% toggleFitPage:0ÿ1 GSMutableSet1 NSMutableSet1NSSet&°)°„viewpdf.app-0.2/English.lproj/MainMenu.nib/0000755000175000017510000000000010267527325017650 5ustar tarDebian-NMviewpdf.app-0.2/English.lproj/MainMenu.nib/classes.nib0000644000175000017510000000350710267527215022002 0ustar tarDebian-NM{ IBClasses = ( {CLASS = AppDelegate; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = { close = id; enterPageNumber = id; firstPage = id; goSinglePage = id; lastPage = id; nextPage = id; previousPage = id; scrollLineDown = id; scrollLineLeft = id; scrollLineRight = id; scrollLineUp = id; scrollPageDown = id; scrollPageUp = id; scrollToBottom = id; scrollToLeftEdge = id; scrollToRightEdge = id; scrollToTop = id; takePageFrom = id; takeZoomFrom = id; toggleFitHeight = id; toggleFitPage = id; toggleFitWidth = id; zoomActualSize = id; zoomIn = id; zoomOut = id; zoomToFit = id; }; CLASS = Controller; LANGUAGE = ObjC; OUTLETS = {scrollView = NSScrollView; }; SUPERCLASS = NSWindowController; }, { ACTIONS = { enterPageNumber = id; firstPage = id; lastPage = id; nextPage = id; previousPage = id; toggleFitHeight = id; toggleFitPage = id; toggleFitWidth = id; zoomActualSize = id; zoomIn = id; zoomOut = id; zoomToFit = id; }; CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } ); IBVersion = 1; }viewpdf.app-0.2/English.lproj/MainMenu.nib/info.nib0000644000175000017510000000106410267527215021274 0ustar tarDebian-NM IBDocumentLocation 30 29 356 240 0 0 1280 1002 IBEditorPositions 29 469 640 371 44 0 0 1280 1002 IBFramework Version 364.0 IBOpenObjects 29 IBSystem Version 7W98 viewpdf.app-0.2/English.lproj/MainMenu.nib/objects.nib0000644000175000017510000001207610267527215021777 0ustar tarDebian-NM typedstreamè„@„„„NSIBObjectDataà„„NSObject…’„„„NSCustomObject)”„@@„„„NSMutableString„„NSString”„+ NSApplication†…†„iA–„––„™™ AppDelegate†…†•–„„„ NSMenuItemŸ”’„„„NSMenuÌ”„i@@@„™™File†„„„NSMutableArray„„NSArray”š’„’ž„ i@@IIi@@@@:i@„™™Open...†„™™o†‚‚ÿÿÿ…„„„NSCustomResource)”–„™™NSImage†„™™NSMenuCheckmark††…„¨–©„™™NSMenuMixedState††……’…’…†’„’ž „™™ Open Recent†„™™†‚‚ÿÿÿ…§…«„submenuAction:…’…’„Ÿ„˜™ Open Recent†„¢š’„’° „™™ Clear Menu†¯‚‚ÿÿÿ…§…«……’…’…††„™™_NSRecentDocumentsMenu†††’œ’„’ž „™™Close†„™™w†‚‚ÿÿÿ…§…«……’…’…††…† ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†ž–„’„Ÿ„™™Go to†„¢š’„’º „™™ Previous Page†„™™b†‚‚ÿÿÿ…§…«……’…’…†’„’º „™™ Next Page†„™™d†‚‚ÿÿÿ…§…«……’…’…†’¹’„’º „™™ Last Page†„™™0†‚‚ÿÿÿ…§…«……’…’…†’„’º „™™ Page Number†„™™l†‚‚ÿÿÿ…§…«……’…’…††…† „™™ First Page†„™™1†‚‚ÿÿÿ…§…«……’…’…†º–„’„Ÿ„˜™Find†„¢š’„’Ì „™™Find…†„™™f†‚‚ÿÿÿ…§…«……’…’…†’„’Ì „™™ Find Next†„™™g†‚‚ÿÿÿ…§…«……’…’…†’„’Ì „™™ Find Previous†„™™G†‚‚ÿÿÿ…§…«……’…’…†’Ë’„’Ì „™™Jump to Selection†„™™j†‚‚ÿÿÿ…§…«……’…’…††…† „™™Use Selection for Find†„™™e†‚‚ÿÿÿ…§…«……’…’…†Ì–„Ÿ„˜™Services†„¢š†„™™_NSServicesMenu††„’„Ÿ„™™Vindaloo†„¢š ’„’â „™™About Vindaloo†¯‚ÿÿÿ…§…«……’…’…†’„’â ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’„’â „™™Preferences…†„™™,†‚‚ÿÿÿ…§…«……’…’…†’„’â ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’á’„’â ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’„’â „™™ Hide Vindaloo†„™™h†‚‚ÿÿÿ…§…«……’…’…†’„’â „™™ Hide Others†„™™h†‚‚ÿÿÿ…§…«……’…’…†’„’â „™™Show All†¯‚‚ÿÿÿ…§…«……’…’…†’„’â ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’„’â „™™ Quit Vindaloo†„™™q†‚‚ÿÿÿ…§…«……’…’…††„™™ _NSAppleMenu†† „™™Services†¯‚‚ÿÿÿ…§…«¢…’…’݆–óâ–„’„Ÿ„™™View†„¢š’„’ü „™™ Actual Size†„™™*†‚‚ÿÿÿ…§…«……’…’…†’„’ü „™™Zoom In†„™™+†‚‚ÿÿÿ…§…«……’…’…†’û’„’ü „™™ Show Page†„™™=†‚‚ÿÿÿ…§…«……’…’…†’„’ü ‚@¯¯‚‚ÿÿÿ…§…«……’…’…†’„’ü „™™ Fit Width†¯‚‚ÿÿÿ…§…«……’…’…†’„’ü „™™ Fit Height†¯‚‚ÿÿÿ…§…«……’…’…†’„’ü „™™Fit Page†¯‚‚ÿÿÿ…§…«……’…’…††…† „™™Zoom Out†„™™-†‚‚ÿÿÿ…§…«……’…’…†ü–º„’„Ÿ„™™MainMenu†„¢š’„’ „™™Vindaloo†¯‚‚ÿÿÿ…§…«¢…’…’→„’  ¯‚‚ÿÿÿ…§…«¢…’…’ž†’„’ „™™Edit†¯‚‚ÿÿÿ…§…«¢…’…’„Ÿ„¢š’„’ „™™Cut†„™™x†‚‚ÿÿÿ…§…«……’…’…†’„’ „™™Copy†„™™c†‚‚ÿÿÿ…§…«……’…’…†’„’ „™™Paste†„™™v†‚‚ÿÿÿ…§…«……’…’…†’„’ „™™Delete†¯‚‚ÿÿÿ…§…«……’…’…†’„’ „™™ Select All†„™™a†‚‚ÿÿÿ…§…«……’…’…†’„’ ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’„’ „™™Find†¯‚‚ÿÿÿ…§…«¢…’…’̆†…††’’„’ ý¯‚‚ÿÿÿ…§…«¢…’…’ü†’„’ „™™Window†¯‚‚ÿÿÿ…§…«¢…’…’„Ÿ/„¢š’„’0 „™™Zoom†„™™z†‚‚ÿÿÿ…§…«……’…’…†’„’0 „™™Minimize†„™™m†‚‚ÿÿÿ…§…«……’…’…†’„’0 ‚À¯¯‚‚ÿÿÿ…§…«……’…’…†’„’0 „™™Bring All to Front†¯‚‚ÿÿÿ…§…«……’…’…††„™™_NSWindowsMenu†††’„’ „™™Help†¯‚‚ÿÿÿ…§…«¢…’…’„Ÿ=„¢š’„’> „™™Help not yet available†„™™?†‚‚ÿÿÿ…§…«……’…’…††…†††„™™ _NSMainMenu†† »¯‚‚ÿÿÿ…§…«¢…’…’º†–'––.–-–ÏÌ–90–â–°­––ëâ– ü–ü-–0.–¶ž––20–ú–•–ØÌ––õâ–ìâ–½º–ü–åâ–*–ÒÌ–³°–ž–ÿü– ü–íâ–¤ž–"–öâ––ƺ–çâ–+–Àº–ÕÌ–50–ü–<–ü–áâ–ðâ–%––><–Ì+–èâ–80– ü–@>–­ž–š–œ„˜™7†–„˜™†–>„˜™2†–„™™ NSMenuItem†–„˜™MainMenu†–*„™™ NSMenuItem12†–%„™™ NSMenuItem4†–@E–„™™ NSMenuItem1†–Õ„™™ NSMenuItem3†–Ï„™™ NSMenuItem†–Ø„™™ NSMenuItem1†–žE–8E–¶„˜™1†–+„™™ NSMenuItem7†–„™™NSMenu†–'„™™ NSMenuItem10†–¤E–š›–è„™™121†–"„™™ NSMenuItem9†–Ò„™™ NSMenuItem4†–Ë„™™ NSMenuItem2†–<„˜™1†–Ì„™™NSMenu†–„™™ NSMenuItem3†–•„˜™ File's Owner†–ö„™™1111†’„„„ NSMutableSet„„NSSet”„I†’„¢š#’„„„NSNibControlConnectorÏ„„NSNibConnector”„@@@5…„˜™performMiniaturize:††’„a¨9…„˜™arrangeInFront:††’„a¨@…„˜™ showHelp:††’„a¨³…„˜™clearRecentDocuments:††’„a¨ö•„˜™ terminate:††’„a¨å•„˜™orderFrontStandardAboutPanel:††’„a¨ð•„™™hideOtherApplications:††’„a¨í•„™™hide:††’„a¨ó•„™™unhideAllApplications:††’„a¨…„˜™cut:††’„a¨"…„˜™paste:††’„a¨'…„˜™ selectAll:††’„a¨…„˜™copy:††’„a¨¶…„™™ performClose:††’„a¨%…„™™delete:††’„a¨Ï…„™™performFindPanelAction:††’„a¨Ò…„™™performFindPanelAction:††’„a¨Õ…„™™performFindPanelAction:††’„a¨Ë…„™™performFindPanelAction:††’„a¨Ø…„™™centerSelectionInVisibleArea:††’„„„NSNibOutletConnectorÏb¨•š„™™delegate††’„a¨¤…„™™ openDocument:††’„a¨½…„™™ previousPage:††’„a¨À…„™™ nextPage:††’„a¨¹…„™™ firstPage:††’„a¨Ã…„™™ lastPage:††’„a¨Æ…„™™enterPageNumber:††’„a¨ÿ…„™™zoomActualSize:††’„a¨…„™™zoomIn:††’„a¨û…„™™zoomOut:††’„a¨…„™™ zoomToFit:††’„a¨2…„™™ performZoom:††’„a¨ …„™™toggleFitWidth:††’„a¨ …„™™toggleFitHeight:††’„a¨ …„™™toggleFitPage:†††’…še„@ip˜ª~êÀÒªªSª ýª.ªœOª£ÿª©ª>jª+¨ª›õªÿðªõ•ªâ9ª“ת݂ªr™ªèªŠÍªÆÛªí†ªlŽª÷ª†Êª°}ªÏšªË¡ª@oª€Çªx³ªhª-ñª¥ªѪ%¤ªöª½Ïª0ª•ت9ªt¯ª üªÎª5ªÃÔªó–ªûóªv°ªáƒªd'ªÕ¢ª£ªzµªˆËª2ùª§ª‚ȪŸøªöˆª|ÁªžQª*®ª—ܪ ªºÐªÌŸªÕªšÌªçĪ"«ªå:ªª þª¶Iª•ª¹Óª­|ªòª #import /** * Extends NSScrollView with some application-specific * functionality: * - send a scrollViewDidResize message to the scrollview's * document view (only if the document view implements this * method). */ @interface ExtendedScrollView : NSScrollView { } @end @interface NSObject (ScrollViewNotification) - (void) scrollViewDidResize: (NSScrollView*)aScrollView; @end viewpdf.app-0.2/ExtendedScrollView.m0000644000175000017510000000312710267527244016605 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "ExtendedScrollView.h" /** * Non-Public methods. */ @interface ExtendedScrollView (Private) - (void) _notifyDocumentView; @end @implementation ExtendedScrollView - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize { [super resizeWithOldSuperviewSize: oldBoundsSize]; if (![self inLiveResize]) { [self _notifyDocumentView]; } } - (void) viewDidEndLiveResize { [self _notifyDocumentView]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation ExtendedScrollView (Private) - (void) _notifyDocumentView { if ([[self documentView] respondsToSelector: @selector(scrollViewDidResize:)]) { [[self documentView] scrollViewDidResize: self]; } } @end viewpdf.app-0.2/GNUmakefile0000644000175000017510000000213410267527244014724 0ustar tarDebian-NM# # GNUmakefile - Generated by ProjectCenter # include $(GNUSTEP_MAKEFILES)/common.make # # Application # VERSION = 0.2 PACKAGE_NAME = Vindaloo APP_NAME = Vindaloo Vindaloo_APPLICATION_ICON = Vindaloo_MAIN_MODEL_FILE = Main # # Used Libraries # Vindaloo_LIB_DIRS = Vindaloo_GUI_LIBS = -lPopplerKit # # Global Resource files # Vindaloo_RESOURCE_FILES = \ Images/First.png \ Images/Last.png \ Images/Next.png \ Images/Previous.png \ Images/ZoomIn.png \ Images/ZoomOut.png \ Images/Fit*.png # # Language Resources # Vindaloo_LANGUAGES = English Vindaloo_LOCALIZED_RESOURCE_FILES = \ Main.gorm \ Document.gorm # # Class files # Vindaloo_OBJC_FILES = \ AppDelegate.m \ CenteringClipView.m \ Controller.m \ Document.m \ DocumentTools.m \ DocumentWindow.m \ ExtendedScrollView.m \ main.m \ MenuState.m \ NSView+Scrolling.m \ PDFContentView.m \ Preferences.m \ SinglePageView.m \ ToolViewBuilder.m \ ZoomFactor.m # # C files # Vindaloo_C_FILES = # # Makefiles # -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble viewpdf.app-0.2/GNUmakefile.postamble0000644000175000017510000000124410267527244016712 0ustar tarDebian-NM# # GNUmakefile.postamble - Generated by ProjectCenter # # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning # after-distclean:: # Things to do before checking # before-check:: # Things to do after checking # after-check:: viewpdf.app-0.2/Images/0000755000175000017510000000000010267527325014057 5ustar tarDebian-NMviewpdf.app-0.2/Images/acrobat-inner.svg0000644000175000017510000001326710267527216017334 0ustar tarDebian-NM image/svg+xml viewpdf.app-0.2/Images/acrobat.svg0000644000175000017510000001520510267527216016215 0ustar tarDebian-NM image/svg+xml pdf viewpdf.app-0.2/Images/acrobat2.svg0000644000175000017510000001744110267527216016303 0ustar tarDebian-NM image/svg+xml pdf viewpdf.app-0.2/Images/First.png0000644000175000017510000000613510267527216015660 0ustar tarDebian-NM‰PNG  IHDRVÎŽW pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFzIDATxÚ¬”=HBQ†ßs¹ˆýP‘Ò"ýbØ!•T .WŠh*„¢Eu+1‹AêºN‚KA -EIÚ’C‘8øµHD?z¯uàã çã9‡çå;€0ªU˜ˆ §µäõÇÉë’°HêôFæ s1ÆZcŽÎî¤cÉcŸwn€‹— Ye·g0Ya¶P(”g¼DÀ €MµF»n[pA­Ñ~ëá%@Ü …2`¶0˜¬`ÜÏ6ø:€I®á1ç¬}ª®žºò¿@„¶v•8c[ÆÈè„$üqMoŸ8=·m¿^r²ã— "¢láñÎq’!wuþ·Qâõ¥4u|´}(Æ(=?Éwô –aŒeîs ão興‚•Jy(Š…¢Š…|ó²‰è†ˆ6Š…üZ4âC:C¥Rn>5"Ú§jµõâì4x°ãÆíõ¥¼Yû{àaŒeÄXÀ¥Óívñ_Ûûy¸é™Ç+rIEND®B`‚viewpdf.app-0.2/Images/FitHeight.png0000644000175000017510000000550510267527216016444 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbIDATxÚÜ”1À m‹ÿ9Ánƒš ‰èd%PhÖ€ªï’PÒäJ À”&ØÆêbΉ¤™p ,$ÙÜ$?ƒ´}õ]‚y^­[©;_”ˆÖÖ>1–'~¶gª )GµÌÎIEND®B`‚viewpdf.app-0.2/Images/FitHeightOn.png0000644000175000017510000000552110267527216016737 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFnIDATxÚb177ÿÏ@!`a```èéé!Û€’’&BŠlmm ÄDŒ„ b"Öø bÁ%qøða¸f›,ï BÈôsÉ03„âKR$äWt3›>ð¥&bÅÉž˜ËH’ 0¤s!v:å˜IEND®B`‚viewpdf.app-0.2/Images/FitPage.png0000644000175000017510000000550510267527216016110 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbIDATxÚÌ”Q !DçÝÿÐî×.¤‘ëWàôбD’©H2³sCeù|çH³„Œ€t§cÈÎ¥Yï ¯dÔ8Hfä*ß_I›'ÿqû‹-ÿVO¶÷Iu³=}d‚()JIEND®B`‚viewpdf.app-0.2/Images/FitPageOn.png0000644000175000017510000000555610267527216016413 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF‹IDATxÚ¬TÁ !ÃÆ|±•c¸ƒÝ½¼EáT^D°ÐÖRJF$"*¥läœ V3›@ðX@ðn°г‚ˆ|—k¾Eǰhô[h´ð× ­Z™Uaûž¤][DýY›cÅßrn*¬%¤6èŠÅÑã@Ígtáå½Ò Ÿ½Ç±pãg{Æ4?s+Œ‹dIEND®B`‚viewpdf.app-0.2/Images/FitWidth.png0000644000175000017510000000550410267527216016312 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFaIDATxÚì”A€0wˆÿÿ2Þ ¡*¤Ö[÷D`2—nŠ$×Ç’ä>ïdZ-iH€ò5^%•à‰³»0€yçK çîCó.ΖÁN2gйïÆþ$aÅÏvÿÿH#%·ƒÏIEND®B`‚viewpdf.app-0.2/Images/FitWidthOn.png0000644000175000017510000000551110267527216016605 0ustar tarDebian-NM‰PNG  IHDRv¥æñ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFfIDATxÚb177ÿÏ@!`a```èéé!Û€’’&*€QCˆ0ÄÖÖ¯lòL¤€K6 [[[ …èbÈl¸!‡f@f#ó±‰!³™ÐÐÕ1R@ŒühŠ¥‘!ŒÔ(Ù©£$rNL8ÑIEND®B`‚viewpdf.app-0.2/Images/Last.png0000644000175000017510000000614310267527216015473 0ustar tarDebian-NM‰PNG  IHDRVÎŽW pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF€IDATxÚ¬”K(ÄQ‡¿óO“W%fgA"6òŠ¥•š Ãf³G!“²°0¢™XHJ“HŠ!¥dCä±°CÊ#¯f1dž’Â\ùêÔ­[_¿û;uQU€ZUÅd ïãðåæ—)08 DÚÕЮž€j-5õ8]GRrÚ¼ˆô‰H†X‡¬œBÚ¼”V8:ŲžE¤ñO"›-–Ê*îæ^2ì™Ã"2("ÙÆ¢2외›{©¬rµÚl±§"Òù›(æ» ±,J+ää•°ë‘"À¯ªQ'úLJj:N—‡êºöú„Ä”u©5Jô•¼‚râã“X[ž˜‘bãDÑu¢£ƒ-VÆyz¼sªêžˆ˜‰în¯Y Žq~²?ùSÙߊ4aw{‘ÍÐ4áð«GU½ÆO»º¼`aÆÏÕåÅ0 ªgF…ïl†¦ÙÝ^D#‘&U1.ûüdŸ¥¹Qîo¼@·ª¾˜nÍ?;Ùßr|¸|/3ø§ýÿ×Çö6lzö¯ök«IEND®B`‚viewpdf.app-0.2/Images/Next.png0000644000175000017510000000610410267527216015503 0ustar tarDebian-NM‰PNG  IHDRk\ï1 pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFaIDATxÚœ“=HBa†ßs‰‹Y˜A¤›C!I-Q9: -ZË¢ªMi tŠ"±!$ˆˆ¤¥Tʰ!AÂ%,7 ‹~ä÷´ˆ 7}à>8ï9˜\ÌŒv쌌N3€3ÎvD^Û8d·äg]ßèVü2dÇÂJV›ÓG‚ðED‹hPÿE ì o£)BD[D4¬*þa0šàñ`wHË¢¨y$"_cMW³VH`µ9a¶L!‰h@˜™oš&Ö£ï„[òcvnu¾§WMD®–‰XÆf ÕêpuqpLD“:ä߉÷·¸Lìãó£êfæ;U±úúŒT<Šb!T¿œ¦"+ rÙ$2éd¹ægæj«•r ‰“0*åÒ6€Mf~j9£,×IÇË&ÁвÄÌ»ªË)ò8?ÝÃûÛKÀ:3«ÍßÙYuzÈ?þRr]pIEND®B`‚viewpdf.app-0.2/Images/Previous.png0000644000175000017510000000604510267527216016405 0ustar tarDebian-NM‰PNG  IHDRk\ï1 pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFBIDATxÚbøÿÿ?)˜!äÿÿÿ ¤hðf``Ø¢¡mþŸa18ºøøEþ‡Æ”ý¯hZþŸá? ÀÈȘÆÈÄ4ÓÔ“ÁÆ)„.Ç‚Cƒ C¾¸„|ŽWP&ƒ¸„<†,šJÙØ8ºlœBL-<™˜°º†Iƒ=C¦²ša¸«wƒ€ >_@4222†pó¬vñŠcÐÔ±d °022KH)®vt‹fWÒf 01 ˜þÿÿöųû¡›ÖLa¸~å8i6þÿÿÍ×/6®š´rõ’.†ï_ö#Œñÿÿÿƒ Ï>~p`t`ˆþÿÿ¿ûׯªûv,™²`FÃˉœÿÿÿßùÿÿîËǪ́bØ·c ï_?0‘•Èi—­pedÀši! F°”ÈIEND®B`‚viewpdf.app-0.2/Images/ZoomIn.png0000644000175000017510000000616210267527217016005 0ustar tarDebian-NM‰PNG  IHDR;mGú pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚ¬”1‹âP…¿—'€•…lé„€˜.•••Õ’–­ö ²ì˜jÒÛoe•Ê*VÚ„¬½°HänóFÔdØbç–ïÝs8ç¾{žnK)õ,€0<àì °‘?w˜[¥Ô7àG’$ã(Š‚×u©ªŠ¢(Èóœ4MÀ‹ˆ¼µH”RÏÀÏ,Ë”ïû|TeY2ŸÏXŠÈ¯+‰QðºÛíÔp8ä_u:ÃP€ï"ò¦€'àw–eãG“ÉÛ¶ÑZ³Ýn»€¯°H’dÜeÁ¶mƒ£Ñ¨uçû>I’Œ…Ì¢(ê”­µÆqúý~ç½ÁÍzÀ4‚N Žã µ Žc꺦iš«5ƒ›öÏuÝ–…wÛ¶ïÎ/—˵×à< 8VUÕiáVI—5ƒ;ö€}Q_<ϸ{…8ޝÖV«Uk&EQì-`“çyçàêºæ|>¸/·±€u𦇲,[MMÓÜÍàqOLÖŸ²±€ Ó2 CéRô¨À,ßCø¹)þŸÿäïÐDÐþí=ªëIEND®B`‚viewpdf.app-0.2/Images/ZoomOut.png0000644000175000017510000000613410267527216016204 0ustar tarDebian-NM‰PNG  IHDR;mGú pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFyIDATxÚ¬”1kÛ@Å'À“©AÇØŒµiò¤)SO:ŠÒÉ_ ˜Ò/੊N™nò$Æ^%SÃÁÍÞÿ]Î&¥8v’¾õîýxïžK)5n 02`ì€ð "yžC”R_Y]×7eY’ç9išb­ÅCÓ4,—Ë'`!"÷ÿ@”RwÀw­µ‡œSÛ¶TU%À\D~œ >ÁÏív«’$á’œsE!À7¹üÌ´ÖW’$Ak­€™Rj_êºþ‡ÃáÃf³ù“²,y‹¼oÒÆyžŸF£Q†áYóz½ÀûÆ KÓôt!Š"z½q_Lâ}YØ[k?fY@†ÄqL·Û½±Öì;ÀÎs‚£^#c À.VMÓ¼éa½o¥€ðKk}óRSÏ4÷ øø1-ªªçÜUçܱú y ü˜æEQHÛ¶øÊÏ#ü¿+~Ïògî¶ØFÍ$ãIEND®B`‚viewpdf.app-0.2/GNUmakefile.preamble0000644000175000017510000000102710267527244016512 0ustar tarDebian-NM# # GNUmakefile.preamble - Generated by ProjectCenter # # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to Objective C compiler ADDITIONAL_OBJCFLAGS += -Wall -Wno-import -DGNUSTEP # Additional flags to pass to C compiler ADDITIONAL_CFLAGS += # Additional flags to pass to the linker ADDITIONAL_LDFLAGS += # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += viewpdf.app-0.2/Info.plist0000644000175000017510000000215610267527244014626 0ustar tarDebian-NM CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions pdf, PDF CFBundleTypeName PDF CFBundleTypeRole Viewer NSDocumentClass Document CFBundleExecutable Vindaloo CFBundleIconFile CFBundleIdentifier de.stefankst.Vindaloo CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature stefankst CFBundleVersion 0.2 NSMainNibFile MainMenu NSPrincipalClass NSApplication viewpdf.app-0.2/main.m0000644000175000017510000000164110267527244013756 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv); } viewpdf.app-0.2/MenuState.h0000644000175000017510000000320610267527244014731 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import "PDFContentView.h" #import "Document.h" // Main Menu Tags typedef enum { MainMenuTagApplication = 1, MainMenuTagFile = 2, MainMenuTagEdit = 3, MainMenuTagGoto = 4, MainMenuTagView = 5, MainMenuTagWindow = 6, MainMenuTagHelp = 7 } MainMenuTags; // View Menu Tags typedef enum { ViewMenuTagActualSize = 1, ViewMenuTagZoomIn = 2, ViewMenuTagZoomOut = 3, ViewMenuTagShowAll = 4, ViewMenuTagFitWidth = 5, ViewMenuTagFitHeight = 6, ViewMenuTagFitPage = 7 } ViewMenuTags; /** * Keeps track of the application's main menu state. */ @interface MenuState : NSObject { id contentView; Document* document; } - (id) initWithDocument: (Document*)aDocument contentView: (id)aContentView; - (void) stateChanged; @end viewpdf.app-0.2/MenuState.m0000644000175000017510000000445510267527244014745 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "MenuState.h" /** * Non-Public methods. */ @interface MenuState (Private) - (void) _updateResizePolicy; @end @implementation MenuState - (id) initWithDocument: (Document*)aDocument contentView: (id)aContentView { NSAssert(aDocument, @"nil document"); NSAssert(aContentView, @"nil content view"); self = [super init]; if (self) { document = aDocument; contentView = aContentView; [self stateChanged]; } return self; } - (void) stateChanged { [self _updateResizePolicy]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation MenuState (Private) - (void) _updateResizePolicy { NSMenuItem* viewMenu = [[NSApp mainMenu] itemWithTag: MainMenuTagView]; if (!viewMenu) { NSLog(@"WARNING: view menu not found!"); return; } ResizePolicy policy = [contentView resizePolicy]; NSMenuItem* fitWidthItem = [[viewMenu submenu] itemWithTag: ViewMenuTagFitWidth]; [fitWidthItem setState: (policy == ResizePolicyFitWidth ? NSOnState : NSOffState)]; NSMenuItem* fitHeightItem = [[viewMenu submenu] itemWithTag: ViewMenuTagFitHeight]; [fitHeightItem setState: (policy == ResizePolicyFitHeight ? NSOnState: NSOffState)]; NSMenuItem* fitPageItem = [[viewMenu submenu] itemWithTag: ViewMenuTagFitPage]; [fitPageItem setState: (policy == ResizePolicyFitPage ? NSOnState : NSOffState)]; } @end viewpdf.app-0.2/MessageRenderer.h0000644000175000017510000000225110267527244016076 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import extern NSString* kMessageUpdatedNotification; /** * Display error messages transparent over another view. */ @interface MessageRenderer : NSObject { NSView* view; NSString* message; } - (id) init; - (void) setMessage: (NSString*)aMessage; - (void) setView: (NSView*)aView; - (NSView*) view; - (void) draw; @end viewpdf.app-0.2/MultiPageView.h0000644000175000017510000000315210267527244015546 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import #import /** * A view which displays multiple pages of a PDF document, * side by side in a raster. */ @interface MultiPageView : NSView { PDFDocument* pdfdoc; NSMutableArray* pages; unsigned scaleFactor; float vspace; float hspace; NSColor* background; } - (id) initWithFrame: (NSRect)aFrame scaleFactor: (unsigned)aScaleFactor; - (void) setDocument: (PDFDocument*)aDocument; - (PDFDocument*) document; - (void) setScaleFactor: (unsigned)aScaleFactor; - (unsigned) scaleFactor; - (void) setVerticalSpace: (float)aSpace; - (float) verticalSpace; - (void) setHorizontalSpace: (float)aSpace; - (float) horizontalSpace; - (void) setBackground: (NSColor*)aColor; - (NSColor*) background; @end viewpdf.app-0.2/MultiPageView.m0000644000175000017510000002052410267527244015555 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "MultiPageView.h" #import #import #import #import /** * Non-Public methods. */ @interface MultiPageView (Private) - (void) _updateFrame; - (float) _preflightLayout; - (void) _drawPagesInRect: (NSRect)aRect; - (float) _findMaxRowHeight: (int)firstPage; - (void) _rebuildPages; - (NSSize) _scaledSizeForPage: (int)aPage; - (void) _pdfPageReadyNotification: (NSNotification*)aNotification; @end @implementation MultiPageView - (id) initWithFrame: (NSRect)aFrame scaleFactor: (unsigned)aScaleFactor { self = [super initWithFrame: aFrame]; if (self) { pdfdoc = nil; background = nil; pages = nil; [self setVerticalSpace: 10.0]; [self setHorizontalSpace: 10.0]; [self setScaleFactor: aScaleFactor]; [self setBackground: [NSColor whiteColor]]; } return self; } - (void) dealloc { [self setDocument: nil]; [self setBackground: nil]; [super dealloc]; } - (void) setDocument: (PDFDocument*)aDocument { [pdfdoc release]; pdfdoc = [aDocument retain]; [self _rebuildPages]; [self _updateFrame]; } - (PDFDocument*) document { return pdfdoc; } - (void) setScaleFactor: (unsigned)aScaleFactor { NSAssert(aScaleFactor > 0, @"zero or negative scale factor"); if (scaleFactor != aScaleFactor) { scaleFactor = aScaleFactor; [self _updateFrame]; } } - (unsigned) scaleFactor { return scaleFactor; } - (void) setVerticalSpace: (float)aSpace { NSAssert(aSpace >= 0, @"negative space"); if (vspace != aSpace) { vspace = aSpace; [self _updateFrame]; } } - (float) verticalSpace { return vspace; } - (void) setHorizontalSpace: (float)aSpace { NSAssert(aSpace >= 0, @"negative space"); if (hspace != aSpace) { hspace = aSpace; [self _updateFrame]; } } - (float) horizontalSpace { return hspace; } - (void) setBackground: (NSColor*)aColor { [background release]; background = [aColor retain]; [self setNeedsDisplay: YES]; } - (NSColor*) background { return background; } - (BOOL) isFlipped { return NO; } - (BOOL) isOpaque { return YES; } - (void) drawRect: (NSRect)aRect { NSRect contentRect; contentRect = NSMakeRect(0, 0, [self frame].size.width, [self frame].size.height); [[self background] set]; [NSBezierPath fillRect: contentRect]; if (![self document]) { return; } [self _drawPagesInRect: aRect]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation MultiPageView (Private) - (void) _updateFrame { NSRect newFrame; float yMax; if (![self document]) { return; } // pages may have different sizes, so we do a preflight // and see where the pages go yMax = [self _preflightLayout]; // the rect is not considered in preflight mode // update the frame rectangle with the new height newFrame = [self frame]; newFrame.size.height = yMax + [self verticalSpace]; [self setFrame: newFrame]; [self setNeedsDisplay: YES]; } - (float) _preflightLayout { float xPos; float yPos; float rowHeight; int i; NSAssert([self document], @"no document"); xPos = [self horizontalSpace]; yPos = [self verticalSpace]; rowHeight = 0; for (i = 1; i <= [[self document] countPages]; i++) { NSSize pSize = [self _scaledSizeForPage: i]; if ((xPos + pSize.width + [self verticalSpace]) >= NSWidth([self frame])) { // next row xPos = [self horizontalSpace]; yPos = yPos + rowHeight + [self verticalSpace]; rowHeight = 0; } if (pSize.height > rowHeight) { rowHeight = pSize.height; } xPos = xPos + pSize.width + [self horizontalSpace]; } // we need to add the space required for the last row yPos = yPos + rowHeight; return yPos; } - (void) _drawPagesInRect: (NSRect)aRect { // the view has to be properly sized for this to work NSRect pageRect; PDFImageRep* imageRep; float xPos; float yPos; float rowHeight; int i; int pagesDrawn; if (![self document]) { return; } [[NSColor blackColor] set]; xPos = [self horizontalSpace]; yPos = NSHeight([self frame]) - [self verticalSpace]; rowHeight = [self _findMaxRowHeight: 1]; pagesDrawn = 0; for (i = 1; i <= [[self document] countPages]; i++) { NSSize pSize = [self _scaledSizeForPage: i]; if ((xPos + pSize.width + [self verticalSpace]) >= NSWidth([self frame])) { // next row xPos = [self horizontalSpace]; yPos = yPos - rowHeight - [self verticalSpace]; rowHeight = [self _findMaxRowHeight: i]; // TODO (i + 1)???? } //TODO: get row height first and center pages vertically pageRect = NSMakeRect(xPos, yPos - pSize.height, pSize.width, pSize.height); // update image representation imageRep = [pages objectAtIndex: (i - 1)]; [imageRep setResolutionBySize: pSize]; // check if the page is in the rect if (NSIntersectsRect(aRect, pageRect)) { [NSBezierPath strokeRect: pageRect]; [imageRep drawInRect: pageRect]; pagesDrawn++; } else { // release the data hold by the imageRep [imageRep passivate]; } xPos = xPos + pSize.width + [self horizontalSpace]; } NSLog(@"%d pages drawn", pagesDrawn); } - (float) _findMaxRowHeight: (int)firstPage { int i; float xPos; float rowHeight; xPos = [self horizontalSpace]; rowHeight = 0; for (i = firstPage; i <= [[self document] countPages]; i++) { NSSize pSize = [self _scaledSizeForPage: i]; if (pSize.height > rowHeight) { rowHeight = pSize.height; } if ((xPos + pSize.width + [self verticalSpace]) >= NSWidth([self frame])) { // row completed break; } xPos = xPos + pSize.width + [self horizontalSpace]; } return rowHeight; } - (void) _rebuildPages { int i; PDFImageRep* imageRep; // passivate pages (cancel renderings in progress and free memory) for (i = 0; i < [pages count]; i++) { [[pages objectAtIndex: i] passivate]; } [pages release]; [[NSNotificationCenter defaultCenter] removeObserver: self]; if (![self document]) { pages = nil; return; } pages = [[NSMutableArray alloc] init]; for (i = 1; i <= [[self document] countPages]; i++) { imageRep = [[PDFImageRep alloc] initWithDocument: [self document] renderInBackground: YES]; [imageRep setPageNum: i]; [pages addObject: imageRep]; [imageRep release]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_pdfPageReadyNotification:) name: kPDFPageReadyNotification object: imageRep]; } } - (NSSize) _scaledSizeForPage: (int)aPage { float m; NSAssert([self document], @"_scaledSizeForPage called without document"); m = (float)[self scaleFactor] / 100.0; return NSMakeSize([[self document] paperSize: aPage].width * m, [[self document] paperSize: aPage].height * m); } - (void) _pdfPageReadyNotification: (NSNotification*)aNotification { [self setNeedsDisplay: YES]; // TODO: only if the page is visible } @end viewpdf.app-0.2/NSView+Scrolling.h0000644000175000017510000000634510267527244016136 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import /** * Adds some handy scrolling methods to NSView. All methods * return and leave a view's scrolling state unmodfied if * the receiving view is not embedded in an NSScrollView. */ @interface NSView (Scrolling) /** Make the top of the view visible. Preserves the scrolling state of the x axis. */ - (void) scrollToTop; /** Make the bottom of the view visible. Preserves the scrolling state of the x axis. */ - (void) scrollToBottom; /** Scroll up by an amount that corresponds to the "PageUp" key. Returns NO if the view cannot be scrolled up any further, YES otherwise. */ - (BOOL) scrollPageUp; /** Scroll down by an amount that corresponds to the "PageDown" key. Returns NO if the view cannot be scrolled down any further, YES otherwise. */ - (BOOL) scrollPageDown; /** Scroll up by an amount that corresponds to the "Arrow Up" key. Returns NO if the view cannot be scrolled up any further, YES otherwise. */ - (BOOL) scrollLineUp; /** Scroll down by an amount that corresponds to the "Arrow Down" key. Returns NO if the view cannot be scrolled down any further, YES otherwise. */ - (BOOL) scrollLineDown; /** Scroll up by a given amount. Returns NO if the view cannot be scrolled up any further, YES otherwise. */ - (BOOL) scrollUp: (float)amount; /** Scroll down by a given amount. Returns NO if the view cannot be scrolled down any further, YES otherwise. */ - (BOOL) scrollDown: (float)amount; /** Make the leftmost part of the view visible. Preserves the scrolling state of the y axis. */ - (void) scrollToLeftEdge; /** Make the rightmost part of the view visible. Preserves the scrolling state of the y axis. */ - (void) scrollToRightEdge; /** Scroll left by an amount that corresponds to the "Arrow Left" key. Returns NO if the view cannot be scrolled to the left side any further, YES otherwise. */ - (BOOL) scrollLineLeft; /** Scroll right by an amount that corresponds to the "Arrow Right" key. Returns NO if the view cannot be scrolled to the right side any further, YES otherwise. */ - (BOOL) scrollLineRight; /** Scroll left by a given amount. Returns NO if the view cannot be scrolled to the left side any further, YES otherwise. */ - (BOOL) scrollLeft: (float)amount; /** Scroll right by a given amount. Returns NO if the view cannot be scrolled to the right side any further, YES otherwise. */ - (BOOL) scrollRight: (float)amount; @end viewpdf.app-0.2/NSView+Scrolling.m0000644000175000017510000001220210267527244016130 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "NSView+Scrolling.h" @implementation NSView (Scrolling) - (void) scrollToTop { if (![self enclosingScrollView]) { return; } NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; [self scrollPoint: NSMakePoint(NSMinX(visibleRect), NSHeight([self frame]))]; } - (void) scrollToBottom { if (![self enclosingScrollView]) { return; } NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; [self scrollPoint: NSMakePoint(NSMinX(visibleRect), 0)]; } - (BOOL) scrollPageUp { if (![self enclosingScrollView]) { return NO; } return [self scrollUp: [[self enclosingScrollView] verticalPageScroll]]; } - (BOOL) scrollPageDown { if (![self enclosingScrollView]) { return NO; } return [self scrollDown: [[self enclosingScrollView] verticalPageScroll]]; } - (BOOL) scrollLineUp { if (![self enclosingScrollView]) { return NO; } return [self scrollUp: [[self enclosingScrollView] verticalLineScroll]]; } - (BOOL) scrollLineDown { if (![self enclosingScrollView]) { return NO; } return [self scrollDown: [[self enclosingScrollView] verticalLineScroll]]; } - (BOOL) scrollUp: (float)amount { if (![self enclosingScrollView]) { return NO; } NSAssert(amount > 0, @"negative amount"); NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(NSMinX(visibleRect), NSMinY(visibleRect) + amount); float maxY = NSHeight([self frame]) - NSHeight(visibleRect); if (targetPoint.y > maxY) { targetPoint.y = maxY; } [self scrollPoint: targetPoint]; return !NSEqualRects(visibleRect, [[self enclosingScrollView] documentVisibleRect]); } - (BOOL) scrollDown: (float)amount { if (![self enclosingScrollView]) { return NO; } NSAssert(amount > 0, @"negative amount"); NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(NSMinX(visibleRect), NSMinY(visibleRect) - amount); if (targetPoint.y < 0) { targetPoint.y = 0; } [self scrollPoint: targetPoint]; return !NSEqualRects(visibleRect, [[self enclosingScrollView] documentVisibleRect]); } - (void) scrollToLeftEdge { if (![self enclosingScrollView]) { return; } NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(0, NSMinY(visibleRect)); [self scrollPoint: targetPoint]; } - (void) scrollToRightEdge { if (![self enclosingScrollView]) { return; } NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(NSWidth([self frame]) - NSWidth(visibleRect), NSMinY(visibleRect)); [self scrollPoint: targetPoint]; } - (BOOL) scrollLineLeft { if (![self enclosingScrollView]) { return NO; } return [self scrollLeft: [[self enclosingScrollView] horizontalLineScroll]]; } - (BOOL) scrollLineRight { if (![self enclosingScrollView]) { return NO; } return [self scrollRight: [[self enclosingScrollView] horizontalLineScroll]]; } - (BOOL) scrollLeft: (float)amount { if (![self enclosingScrollView]) { return NO; } NSAssert(amount > 0, @"negative amount"); NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(NSMinX(visibleRect) - amount, NSMinY(visibleRect)); if (targetPoint.x < 0) { targetPoint.x = 0; } [self scrollPoint: targetPoint]; return !NSEqualRects(visibleRect, [[self enclosingScrollView] documentVisibleRect]); } - (BOOL) scrollRight: (float)amount { if (![self enclosingScrollView]) { return NO; } NSAssert(amount > 0, @"negative amount"); NSRect visibleRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint targetPoint = NSMakePoint(NSMinX(visibleRect) + amount, NSMinY(visibleRect)); float maxX = NSWidth([self frame]) - NSWidth(visibleRect); if (targetPoint.x > maxX) { targetPoint.x = maxX; } [self scrollPoint: targetPoint]; return !NSEqualRects(visibleRect, [[self enclosingScrollView] documentVisibleRect]); } @end viewpdf.app-0.2/PDFContentView.h0000644000175000017510000001142610267527244015626 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "Document.h" #import // Notifications to be issued by PDFContentViews // /** Each time a PDFContentView changes it's zoom factor. */ extern NSString* kZoomFactorChangedNotification; /** Possible resize policies for live resizing. */ typedef enum { ResizePolicyNone, ResizePolicyFitPage, ResizePolicyFitWidth, ResizePolicyFitHeight } ResizePolicy; /** * The PDFContentView defines the interface for views which are able * to display PDF content. The controller of a PDF document only sees * PDFContentView's. */ @protocol PDFContentView /** Set the document to be displayed in the view. As a result, the view should display the current page of the document. */ - (void) setDocument: (Document*)aDocument; /** Get the view's preferred size. This size should be determined such that as much of the content as possible is visible. The preferred size can change over time depending on various factors, like zoom or the size of the current page. */ - (NSSize) preferredSize; /** Set the paper color. This is the color that has to be used for the content background. A view may decide to ignore a custom paper color. Each view must maintain an initial paper color, it cannot assume that the color is set from outside. */ - (void) setPaperColor: (NSColor*)aColor; /** Get the current paper color. A view must return a valid color. See setPaperColor: for further details. */ - (NSColor*) paperColor; /** Set the view's zoom factor in percent. The view is not required to update itself. The caller has to ensure that the view is redisplayed when appropriate. */ - (void) setZoom: (float)aFactor; /** Increase the zoom factor. It is up to the view to decide about the amount. */ - (void) zoomIn; /** Decrease the zoom factor. It is up to the view to decide about about the amount. */ - (void) zoomOut; /** Get the view's current zoom factor in percent. */ - (float) zoom; /** Zoom the view's contents to fit the given size. If the view cannot zoom, do nothing and simply return the aSize. Otherwise, the view should zoom it's contents and return the content's size after zooming. This size may be smaller than the given size but it must not be larger. */ - (NSSize) zoomContentToFit: (NSSize)aSize; /** Set the resize policy for this view. If the view supports the policy, it has to adjust it's zoom factor each time the window that hosts the view is resized. */ - (void) setResizePolicy: (ResizePolicy)aPolicy; /** Get the current resize policy for this view. Views which do not support auto resizing can return ResizePolicyNone. */ - (ResizePolicy) resizePolicy; /** Scroll up by the amount of a "page". */ - (void) scrollUpOnePage; /** Scroll down by the amount of a "page". */ - (void) scrollDownOnePage; /** Scroll up by the amount of a "line". */ - (void) scrollUpOneLine; /** Scroll down by the amount of a "line". */ - (void) scrollDownOneLine; /** Scroll left by the amount of a "line". */ - (void) scrollLeftOneLine; /** Scroll right by the amount of a "line". */ - (void) scrollRightOneLine; /** Ensure that the top of the content is visible. The receiver has to update it's scrolling state such that the enclosing scrollview shows the beginning of the content. */ - (void) displayContentTop; /** Ensure that the bottom of the content is visible. The receiver has to update it's scrolling state such that the enclosing scrollview shows the bottom of the content. */ - (void) displayContentBottom; /** Ensure that the left side of the content is visible. The receiver has to update it's scrolling state such that the encolsing scrollview shows the leftmost part of the content. */ - (void) displayContentLeft; /** Ensure that the right side of the content is visible. The receiver has to update it's scrolling state such that the encolsing scrollview shows the rightmost part of the content. */ - (void) displayContentRight; /** Redisplay the content's with the document's current state. */ - (void) update; @end viewpdf.app-0.2/PDFContentView.m0000644000175000017510000000155710267527244015637 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "PDFContentView.h" NSString* kZoomFactorChangedNotification = @"ZoomFactorChangedNotification"; viewpdf.app-0.2/Preferences.h0000644000175000017510000000243210267527244015265 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import extern NSString* kPageCacheSizePref; extern NSString* kUseCairoPref; extern NSString* kMarkPageBoundaries; /** * Vindaloo Preferences. */ @interface Preferences : NSObject { long pageCacheSize; BOOL useCairo; BOOL markPageBoundaries; } + (Preferences*) sharedPrefs; - (unsigned long) pageCacheSize; - (void) setPageCacheSize: (unsigned long)aSize; - (BOOL) useCairo; - (void) setUseCairo: (BOOL)aFlag; - (BOOL) markPageBoundaries; - (void) setMarkPageBoundaries: (BOOL)aFlag; @end viewpdf.app-0.2/Preferences.m0000644000175000017510000000556210267527244015301 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "Preferences.h" #import // Preferences constants NSString* kPageCacheSizePref = @"PageCacheSize"; NSString* kUseCairoPref = @"UseCairo"; NSString* kMarkPageBoundaries = @"MarkPageBoundaries"; // shared instance static Preferences* sharedPrefs = nil; /** * Non-Public methods. */ @interface Preferences (Private) @end @implementation Preferences + (void) initialize { static BOOL done = NO; if (!done) { NSMutableDictionary* stdDefs = [NSMutableDictionary dictionary]; unsigned long defaultCacheSize = [PopplerCachingRenderer defaultCacheSize]; [stdDefs setObject: [NSNumber numberWithUnsignedLong: defaultCacheSize] forKey: kPageCacheSizePref]; [stdDefs setObject: [NSNumber numberWithBool: NO] forKey: kUseCairoPref]; [stdDefs setObject: [NSNumber numberWithBool: YES] forKey: kMarkPageBoundaries]; [[NSUserDefaults standardUserDefaults] registerDefaults: stdDefs]; done = YES; } } - (id) init { self = [super init]; if (self) { NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; pageCacheSize = [[defs objectForKey: kPageCacheSizePref] unsignedLongValue]; useCairo = [[defs objectForKey: kUseCairoPref] boolValue]; markPageBoundaries = [[defs objectForKey: kMarkPageBoundaries] boolValue]; } return self; } + (Preferences*) sharedPrefs { if (!sharedPrefs) { sharedPrefs = [[Preferences alloc] init]; } return sharedPrefs; } - (unsigned long) pageCacheSize { return pageCacheSize; } - (void) setPageCacheSize: (unsigned long)aSize { pageCacheSize = aSize; } - (BOOL) useCairo { return useCairo; } - (void) setUseCairo: (BOOL)aFlag { useCairo = aFlag; } - (BOOL) markPageBoundaries { return markPageBoundaries; } - (void) setMarkPageBoundaries: (BOOL)aFlag { markPageBoundaries = aFlag; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation Preferences (Private) @end viewpdf.app-0.2/SinglePageView.h0000644000175000017510000000224610267527244015700 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import #import "PDFContentView.h" #import "ZoomFactor.h" /** * A SinglePageView displays one or more pages from a PDF * document. */ @interface SinglePageView : NSView { Document* document; NSColor* paperColor; ZoomFactorRange* zoom; ResizePolicy resizePolicy; } - (id) initWithFrame: (NSRect)aFrame; @end viewpdf.app-0.2/SinglePageView.m0000644000175000017510000002230510267527244015703 0ustar tarDebian-NM/* * Copyright (C) 2005 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "SinglePageView.h" #import "NSView+Scrolling.h" #import "ExtendedScrollView.h" #import "Preferences.h" #include /** * Non-Public methods. */ @interface SinglePageView (Private) - (NSSize) _zoomedSize; - (void) _drawPageBoundaries; - (void) _applyResizePolicy; - (NSArray*) _buildZoomFactors; - (void) _documentPageDidChange: (NSNotification*)aNotification; @end @implementation SinglePageView - (id) initWithFrame: (NSRect)aFrame { self = [super initWithFrame: aFrame]; if (self) { document = nil; zoom = [[ZoomFactorRange alloc] initWithFactors: [self _buildZoomFactors]]; [zoom setDelegate: self]; resizePolicy = ResizePolicyNone; paperColor = nil; [self setPaperColor: [NSColor whiteColor]]; } return self; } - (void) dealloc { NSLog(@"dealloc SinglePageView"); [self setDocument: nil]; [self setPaperColor: nil]; [zoom release]; [super dealloc]; } - (void) setDocument: (Document*)aDocument { [[NSNotificationCenter defaultCenter] removeObserver: self]; [document release]; document = [aDocument retain]; if (document) { [self setFrameSize: [self _zoomedSize]]; [self displayContentTop]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_documentPageDidChange:) name: kDocumentPageChangedNotification object: document]; } } - (NSSize) preferredSize { return [self _zoomedSize]; } - (void) setPaperColor: (NSColor*)aColor { [paperColor release]; paperColor = [aColor retain]; [self setNeedsDisplay: YES]; } - (NSColor*) paperColor { return paperColor; } - (void) setZoom: (float)aFactor { [zoom setFactor: [ZoomFactor factorWithValue: aFactor]]; } - (void) zoomIn { [zoom increment]; } - (void) zoomOut { [zoom decrement]; } - (float) zoom { return [[zoom factor] value]; } - (NSSize) zoomContentToFit: (NSSize)aSize { NSSize normalized = [document pageSize]; float xFactor = aSize.width / normalized.width; float yFactor = aSize.height / normalized.height; float factor = (xFactor < yFactor ? xFactor : yFactor); [zoom setFactor: [ZoomFactor factorWithValue: 100.0 * factor]]; return [self _zoomedSize]; } - (void) setResizePolicy: (ResizePolicy)aPolicy { resizePolicy = aPolicy; [self _applyResizePolicy]; } - (ResizePolicy) resizePolicy { return resizePolicy; } - (void) scrollUpOnePage { if (![self scrollPageUp]) { if ([document previousPage]) { [self scrollToBottom]; } } } - (void) scrollDownOnePage { if (![self scrollPageDown]) { [document nextPage]; } } - (void) scrollUpOneLine { [self scrollLineUp]; // NSView+Scrolling } - (void) scrollDownOneLine { [self scrollLineDown]; // NSView+Scrolling } - (void) scrollLeftOneLine { [self scrollLineLeft]; // NSView+Scrolling } - (void) scrollRightOneLine { [self scrollLineRight]; // NSView+Scrolling } - (void) displayContentTop { [self scrollToTop]; // NSView+Scrolling } - (void) displayContentBottom { [self scrollToBottom]; // NSView+Scrolling } - (void) displayContentLeft { [self scrollToLeftEdge]; // NSView+Scrolling } - (void) displayContentRight { [self scrollToRightEdge]; // NSView+Scrolling } - (void) update { [self setNeedsDisplay: YES]; [[self enclosingScrollView] setNeedsDisplay: YES]; } - (BOOL) isOpaque { return ([self paperColor] != nil); } - (void) drawRect: (NSRect)aRect { NSRect contentRect; contentRect = NSMakeRect(0, 0, [self frame].size.width, [self frame].size.height); // background if ([self isOpaque]) { [[self paperColor] set]; [NSBezierPath fillRect: contentRect]; } // page [document drawPageAtPoint: contentRect.origin scale: [[zoom factor] asScale]]; // mark page boundaries if ([[Preferences sharedPrefs] markPageBoundaries]) { [self _drawPageBoundaries]; } } - (void) viewDidMoveToSuperview { if ([self enclosingScrollView]) { [[self enclosingScrollView] setVerticalPageScroll: 200]; // TODO: possibly use a ratio that is proportional to // the size of the page? } } - (void) scrollViewDidResize: (NSScrollView*)aScrollView { NSLog(@"scrollViewDidResize"); [self _applyResizePolicy]; } - (void) zoomFactorChanged: (ZoomFactorRange*)aRange withOldFactor: (ZoomFactor*)anOldFactor { ZoomFactor* oldFactor = (anOldFactor != nil ? anOldFactor : [aRange factor]); NSRect oldVRect = [[self enclosingScrollView] documentVisibleRect]; NSRect normRect = [oldFactor normalizeRect: oldVRect]; [self setFrameSize: [self _zoomedSize]]; NSRect scaledRect = [[zoom factor] translateRect: normRect]; NSRect vRect = [[self enclosingScrollView] documentVisibleRect]; NSPoint origin = NSMakePoint(NSMidX(scaledRect) - (NSWidth(vRect) / 2), NSMidY(scaledRect) - (NSHeight(vRect) / 2)); [self scrollPoint: origin]; [[NSNotificationCenter defaultCenter] postNotificationName: kZoomFactorChangedNotification object: self]; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation SinglePageView (Private) - (NSSize) _zoomedSize { return [[zoom factor] translateSize: [document pageSize]]; } - (void) _drawPageBoundaries { // draw only if the enclosing clipview is bigger than // this view NSRect clipRect = [[[self enclosingScrollView] contentView] bounds]; NSRect selfRect = [self frame]; float diffWidth = NSWidth(clipRect) - NSWidth(selfRect); float diffHeight = NSHeight(clipRect) - NSHeight(selfRect); if ((diffWidth <= 2) && (diffHeight <= 2)) { return; } // draw edges [[NSColor lightGrayColor] set]; NSSize pageSize = [self _zoomedSize]; float minX = 1.0; float minY = 1.0; float maxX = (minX + pageSize.width) - 2.0; float maxY = (minY + pageSize.height) - 2.0; NSBezierPath* path = [NSBezierPath bezierPath]; [path setLineWidth: 1.0]; // lower left edge [path moveToPoint: NSMakePoint(minX, minY + 10)]; [path lineToPoint: NSMakePoint(minX, minY)]; [path lineToPoint: NSMakePoint(minX + 10, minY)]; // lower right edge [path moveToPoint: NSMakePoint(maxX - 10, minY)]; [path lineToPoint: NSMakePoint(maxX, minY)]; [path lineToPoint: NSMakePoint(maxX, minY + 10)]; // upper left edge [path moveToPoint: NSMakePoint(minX, maxY - 10)]; [path lineToPoint: NSMakePoint(minX, maxY)]; [path lineToPoint: NSMakePoint(minX + 10, maxY)]; // upper right edge [path moveToPoint: NSMakePoint(maxX, maxY - 10)]; [path lineToPoint: NSMakePoint(maxX, maxY)]; [path lineToPoint: NSMakePoint(maxX - 10, maxY)]; [path stroke]; } - (void) _applyResizePolicy { NSSize contentSize = [[self enclosingScrollView] contentSize]; switch (resizePolicy) { case ResizePolicyFitWidth: [self zoomContentToFit: NSMakeSize(contentSize.width, FLT_MAX)]; break; case ResizePolicyFitHeight: [self zoomContentToFit: NSMakeSize(FLT_MAX, contentSize.height)]; break; case ResizePolicyFitPage: [self zoomContentToFit: contentSize]; break; case ResizePolicyNone: default: // do nothing break; } } - (NSArray*) _buildZoomFactors { return [NSArray arrayWithObjects: [ZoomFactor factorWithValue: 10.0], [ZoomFactor factorWithValue: 25.0], [ZoomFactor factorWithValue: 33.0], [ZoomFactor factorWithValue: 50.0], [ZoomFactor factorWithValue: 66.0], [ZoomFactor factorWithValue: 75.0], [ZoomFactor factorWithValue: 88.0], [ZoomFactor factorWithValue: 100.0], [ZoomFactor factorWithValue: 115.0], [ZoomFactor factorWithValue: 125.0], [ZoomFactor factorWithValue: 150.0], [ZoomFactor factorWithValue: 175.0], [ZoomFactor factorWithValue: 200.0], [ZoomFactor factorWithValue: 250.0], [ZoomFactor factorWithValue: 300.0], [ZoomFactor factorWithValue: 350.0], nil]; } - (void) _documentPageDidChange: (NSNotification*)aNotification { // scroll to the top of the page whenever a new page // is displayed [self displayContentTop]; } @end viewpdf.app-0.2/ToolViewBuilder.h0000644000175000017510000000476610267527244016117 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import extern const float kDefaulToolViewSpacing; /** * A helper to put items on a view in a simple, toolbar * like manner from left to right. */ @interface ToolViewBuilder : NSObject { float spacing; float yBorder; NSView* view; float runningX; float requiredWidth; BOOL isFirstSubview; NSMutableSet* verticallyCenteredViews; } - (id) initWithView: (NSView*)aView; - (id) initWithView: (NSView*)aView yBorder: (float)points; + (ToolViewBuilder*) builderWithView: (NSView*)aView; + (ToolViewBuilder*) builderWithView: (NSView*)aView yBorder: (float)points; /** Get the target view */ - (NSView*) view; /** Spacing between two elements (subviews) on the ToolView. Defaults to kDefaulToolViewSpacing. Changing this property has only effect on subviews which are added subsequently. */ - (ToolViewBuilder*) setSpacing: (float)aSpacing; - (float) spacing; /** The guaranteed border (free space) above and below the subviews in points. */ - (float) yBorder; /** Advance the current position on the X axis by n points. */ - (ToolViewBuilder*) advance: (float)points; /** Get the current position on the X axis. */ - (float) xPos; /** Get the minimum width that is required for the builder's' target view to show all subviews. */ - (float) requiredWidth; /* Adding subviews. */ - (ToolViewBuilder*) addView: (NSView*)aView; - (ToolViewBuilder*) addViewVerticallyCentered: (NSView*)aView; /** Ensure that all subviews, which have been added vertically centered are centered properly. This method is usefull if you change the height of the builder's target view. */ - (ToolViewBuilder*) recenterViewsVertically; @end viewpdf.app-0.2/ToolViewBuilder.m0000644000175000017510000001051610267527244016112 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include const float kDefaulToolViewSpacing = 5.0; /** * Non-Public methods. */ @interface ToolViewBuilder (Private) - (void) _centerViewVertically: (NSView*)aView; - (void) _ensureViewFitsInTargetView: (NSView*)aView; @end @implementation ToolViewBuilder - (id) initWithView: (NSView*)aView yBorder: (float)points { self = [super init]; if (self) { [self setSpacing: kDefaulToolViewSpacing]; yBorder = points; view = aView; runningX = 0.0; requiredWidth = 0.0; isFirstSubview = YES; verticallyCenteredViews = [[NSMutableSet alloc] init]; } return self; } - (id) initWithView: (NSView*)aView { return [self initWithView: aView yBorder: 0.0]; } - (void) dealloc { [verticallyCenteredViews release]; [super dealloc]; } + (ToolViewBuilder*) builderWithView: (NSView*)aView { return [self builderWithView: aView yBorder: 0.0]; } + (ToolViewBuilder*) builderWithView: (NSView*)aView yBorder: (float)points { return [[[self alloc] initWithView: aView yBorder: points] autorelease]; } - (NSView*) view { return view; } - (ToolViewBuilder*) setSpacing: (float)aSpacing { NSAssert(aSpacing >= 0, @"negative spacing"); spacing = aSpacing; return self; } - (float) spacing { return spacing; } - (float) yBorder { return yBorder; } - (ToolViewBuilder*) advance: (float)points { runningX = runningX + points; requiredWidth = requiredWidth + points; return self; } - (float) xPos { return runningX; } - (float) requiredWidth { return requiredWidth; } - (ToolViewBuilder*) addView: (NSView*)aView { if (!isFirstSubview) { [self advance: [self spacing]]; } else { isFirstSubview = NO; } [aView setFrameOrigin: NSMakePoint([self xPos], NSMinY([aView frame]))]; [[self view] addSubview: aView]; runningX = runningX + NSWidth([aView frame]); requiredWidth = requiredWidth + NSWidth([aView frame]); [self _ensureViewFitsInTargetView: aView]; return self; } - (ToolViewBuilder*) addViewVerticallyCentered: (NSView*)aView { [self _centerViewVertically: aView]; [verticallyCenteredViews addObject: aView]; return [self addView: aView]; } - (ToolViewBuilder*) recenterViewsVertically { NSEnumerator* e = [verticallyCenteredViews objectEnumerator]; NSView* aView; while ((aView = [e nextObject])) { [self _centerViewVertically: aView]; } return self; } @end /* ----------------------------------------------------- */ /* Category Private */ /* ----------------------------------------------------- */ @implementation ToolViewBuilder (Private) - (void) _centerViewVertically: (NSView*)aView { NSRect viewFrame = [aView frame]; [aView setFrameOrigin: NSMakePoint(NSMinX(viewFrame), (NSHeight([[self view] frame]) / 2) - (NSHeight(viewFrame) / 2))]; } - (void) _ensureViewFitsInTargetView: (NSView*)aView { BOOL needsRecenter = NO; NSRect actualFrame = [[self view] frame]; NSSize newSize = actualFrame.size; if ([self requiredWidth] > NSWidth(actualFrame)) { newSize.width = [self requiredWidth]; } float minRequiredHeight = NSHeight([aView frame]) + ([self yBorder] * 2); if (minRequiredHeight > NSHeight(actualFrame)) { newSize.height = minRequiredHeight; needsRecenter = YES; } if (!NSEqualSizes(actualFrame.size, newSize)) { [[self view] setFrameSize: newSize]; if (needsRecenter) { [self recenterViewsVertically]; } } } @end viewpdf.app-0.2/version.plist0000644000175000017510000000071210267527244015414 0ustar tarDebian-NM BuildVersion 92 CFBundleVersion 1.0 ProductBuildVersion 7K571 ProjectName NibPBTemplates SourceVersion 1200000 viewpdf.app-0.2/Vindaloo.xcode/0000755000175000017510000000000010267527325015526 5ustar tarDebian-NMviewpdf.app-0.2/Vindaloo.xcode/project.pbxproj0000644000175000017510000006233510267527215020611 0ustar tarDebian-NM// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 080E96DDFE201D6D7F000001 = { children = ( F857F623088467530033CA82, F857F62008845CFB0033CA82, F864DB45087478BD0065A111, F864DB46087478BD0065A111, F8D2BF0208696226009E1A02, F8D2BF0308696226009E1A02, F8AB42B00868BB4D00266E5E, F8AB42B10868BB4D00266E5E, F831C072084D0063009BD5DA, F831C073084D0063009BD5DA, F831C06E084CC85D009BD5DA, F831C06F084CC85D009BD5DA, F831C061084C8020009BD5DA, F831C062084C8020009BD5DA, F855965C0832301B0080599C, F855965D0832301B0080599C, F8C4D44E08322C0C00DA869B, F8C4D44F08322C0C00DA869B, F8C4EF8908315C0500351D9E, F8C4EF8A08315C0500351D9E, F8C4EF8B08315C0500351D9E, F8C4EF8C08315C0500351D9E, F8C4EF8D08315C0500351D9E, F8C4EF8E08315C0500351D9E, F8C4EF9108315C0500351D9E, F8267F70083D4480001F8F22, F8C4EF9208315C0500351D9E, F8C4EF9308315C0500351D9E, ); isa = PBXGroup; name = Classes; refType = 4; sourceTree = ""; }; 089C165CFE840E0CC02AAC07 = { children = ( 089C165DFE840E0CC02AAC07, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; sourceTree = ""; }; 089C165DFE840E0CC02AAC07 = { fileEncoding = 10; isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //100 //101 //102 //103 //104 1058C7A0FEA54F0111CA2CBB = { children = ( F831C01F084C7947009BD5DA, 1058C7A1FEA54F0111CA2CBB, ); isa = PBXGroup; name = "Linked Frameworks"; refType = 4; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; refType = 0; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB = { children = ( 29B97325FDCFA39411CA2CEA, 29B97324FDCFA39411CA2CEA, ); isa = PBXGroup; name = "Other Frameworks"; refType = 4; sourceTree = ""; }; //100 //101 //102 //103 //104 //190 //191 //192 //193 //194 19C28FACFE9D520D11CA2CBB = { children = ( 8D1107320486CEB800E47090, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //190 //191 //192 //193 //194 //290 //291 //292 //293 //294 29B97313FDCFA39411CA2CEA = { buildSettings = { }; buildStyles = ( 4A9504CCFFE6A4B311CA0CBA, 4A9504CDFFE6A4B311CA0CBA, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 29B97314FDCFA39411CA2CEA; projectDirPath = ""; targets = ( 8D1107260486CEB800E47090, F82F1FA00856587C00929369, F82F200008565CC100929369, ); }; 29B97314FDCFA39411CA2CEA = { children = ( 080E96DDFE201D6D7F000001, 29B97315FDCFA39411CA2CEA, 29B97317FDCFA39411CA2CEA, 29B97323FDCFA39411CA2CEA, 19C28FACFE9D520D11CA2CBB, ); isa = PBXGroup; name = Vindaloo; path = ""; refType = 4; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA = { children = ( 32CA4F630368D1EE00C91783, 29B97316FDCFA39411CA2CEA, ); isa = PBXGroup; name = "Other Sources"; path = ""; refType = 4; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; refType = 4; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA = { children = ( F873FB1F0884531E00290239, F873FB200884531E00290239, F8A773A90884513C00C8E059, F85D799008844D0000B59A04, F85D799108844D0000B59A04, F816D5D0087C746E0023CD6D, F8A1E338083D414100EF7DFA, F8A1E339083D414100EF7DFA, F8CA9B86083D24BE007F8786, F8CA9B87083D24BE007F8786, F84A23B6083261BB00C74C2F, F84A23B7083261BB00C74C2F, 8D1107310486CEB800E47090, 089C165CFE840E0CC02AAC07, 29B97318FDCFA39411CA2CEA, F828B4A108316600006A2E5C, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; sourceTree = ""; }; 29B97318FDCFA39411CA2CEA = { children = ( 29B97319FDCFA39411CA2CEA, ); isa = PBXVariantGroup; name = MainMenu.nib; path = ""; refType = 4; sourceTree = ""; }; 29B97319FDCFA39411CA2CEA = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; refType = 4; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA = { children = ( 1058C7A0FEA54F0111CA2CBB, 1058C7A2FEA54F0111CA2CBB, ); isa = PBXGroup; name = Frameworks; path = ""; refType = 4; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; refType = 0; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; refType = 0; sourceTree = ""; }; //290 //291 //292 //293 //294 //320 //321 //322 //323 //324 32CA4F630368D1EE00C91783 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vindaloo_Prefix.pch; refType = 4; sourceTree = ""; }; //320 //321 //322 //323 //324 //4A0 //4A1 //4A2 //4A3 //4A4 4A9504CCFFE6A4B311CA0CBA = { buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; ZERO_LINK = YES; }; isa = PBXBuildStyle; name = Development; }; 4A9504CDFFE6A4B311CA0CBA = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //4A0 //4A1 //4A2 //4A3 //4A4 //8D0 //8D1 //8D2 //8D3 //8D4 8D1107260486CEB800E47090 = { buildPhases = ( 8D1107290486CEB800E47090, 8D11072C0486CEB800E47090, 8D11072E0486CEB800E47090, F83E6B61085646FE00C17A6C, ); buildRules = ( ); buildSettings = { FRAMEWORK_SEARCH_PATHS = /Users/stefan/swe/gsimageapps/Frameworks/PopplerKit/build; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Vindaloo_Prefix.pch; GCC_WARN_PEDANTIC = NO; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = Vindaloo; WARNING_CFLAGS = "-Wall"; WRAPPER_EXTENSION = app; }; dependencies = ( ); isa = PBXNativeTarget; name = Vindaloo; productInstallPath = "$(HOME)/Applications"; productName = Vindaloo; productReference = 8D1107320486CEB800E47090; productType = "com.apple.product-type.application"; }; 8D1107290486CEB800E47090 = { buildActionMask = 2147483647; files = ( 8D11072A0486CEB800E47090, 8D11072B0486CEB800E47090, F8C4EF9408315C0500351D9E, F8C4EF9608315C0500351D9E, F8C4EF9808315C0500351D9E, F8C4EF9C08315C0500351D9E, F8C4EF9D08315C0500351D9E, F828B4A308316600006A2E5C, F8C4D45008322C0C00DA869B, F855965E0832301B0080599C, F84A23B8083261BB00C74C2F, F84A23B9083261BB00C74C2F, F8CA9B88083D24BE007F8786, F8CA9B89083D24BE007F8786, F8A1E33A083D414100EF7DFA, F8A1E33B083D414100EF7DFA, F831C063084C8020009BD5DA, F831C070084CC85D009BD5DA, F831C074084D0063009BD5DA, F8AB42B20868BB4D00266E5E, F8D2BF0408696226009E1A02, F864DB47087478BD0065A111, F816D5D1087C746E0023CD6D, F85D799208844D0000B59A04, F85D799308844D0000B59A04, F8A773AA0884513C00C8E059, F873FB210884531E00290239, F873FB220884531E00290239, F857F62108845CFB0033CA82, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D11072A0486CEB800E47090 = { fileRef = 29B97318FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; 8D11072B0486CEB800E47090 = { fileRef = 089C165CFE840E0CC02AAC07; isa = PBXBuildFile; settings = { }; }; 8D11072C0486CEB800E47090 = { buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090, F8C4EF9508315C0500351D9E, F8C4EF9708315C0500351D9E, F8C4EF9908315C0500351D9E, F8C4EF9E08315C0500351D9E, F8C4D45108322C0C00DA869B, F855965F0832301B0080599C, F8267F71083D4480001F8F22, F831C064084C8020009BD5DA, F831C071084CC85E009BD5DA, F831C075084D0063009BD5DA, F8AB42B30868BB4D00266E5E, F8D2BF0508696226009E1A02, F864DB48087478BD0065A111, F857F624088467530033CA82, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D11072D0486CEB800E47090 = { fileRef = 29B97316FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { ATTRIBUTES = ( ); }; }; 8D11072E0486CEB800E47090 = { buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090, F831C020084C7947009BD5DA, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 8D11072F0486CEB800E47090 = { fileRef = 1058C7A1FEA54F0111CA2CBB; isa = PBXBuildFile; settings = { }; }; 8D1107310486CEB800E47090 = { fileEncoding = 4; isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; refType = 4; sourceTree = ""; }; 8D1107320486CEB800E47090 = { explicitFileType = wrapper.application; includeInIndex = 0; isa = PBXFileReference; path = Vindaloo.app; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; //8D0 //8D1 //8D2 //8D3 //8D4 //F80 //F81 //F82 //F83 //F84 F816D5D0087C746E0023CD6D = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitPage.png; path = Images/FitPage.png; refType = 4; sourceTree = ""; }; F816D5D1087C746E0023CD6D = { fileRef = F816D5D0087C746E0023CD6D; isa = PBXBuildFile; settings = { }; }; F8267F70083D4480001F8F22 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PDFContentView.m; refType = 4; sourceTree = ""; }; F8267F71083D4480001F8F22 = { fileRef = F8267F70083D4480001F8F22; isa = PBXBuildFile; settings = { }; }; F828B4A108316600006A2E5C = { children = ( F828B4A208316600006A2E5C, ); isa = PBXVariantGroup; name = Document.nib; path = ""; refType = 4; sourceTree = ""; }; F828B4A208316600006A2E5C = { isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Document.nib; refType = 4; sourceTree = ""; }; F828B4A308316600006A2E5C = { fileRef = F828B4A108316600006A2E5C; isa = PBXBuildFile; settings = { }; }; F82F1F9F0856587C00929369 = { buildActionMask = 2147483647; files = ( ); inputPaths = ( ); isa = PBXShellScriptBuildPhase; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "# shell script goes here\ncd ${BUILD_DIR}\n../../../build_tools/mkdmg.pl Vindaloo.dmg.gz Vindaloo.app"; }; F82F1FA00856587C00929369 = { buildPhases = ( F82F1F9F0856587C00929369, ); buildSettings = { OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = "Disk Image"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; }; comments = "Create a disk image (dmg) with Vindaloo.app"; dependencies = ( ); isa = PBXAggregateTarget; name = "Disk Image"; productName = "Disk Image"; }; F82F200008565CC100929369 = { buildPhases = ( ); buildSettings = { OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = Release; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; }; dependencies = ( F82F200208565CCB00929369, F82F200408565CD000929369, ); isa = PBXAggregateTarget; name = Release; productName = Release; }; F82F200108565CCB00929369 = { containerPortal = 29B97313FDCFA39411CA2CEA; isa = PBXContainerItemProxy; proxyType = 1; remoteGlobalIDString = 8D1107260486CEB800E47090; remoteInfo = Vindaloo; }; F82F200208565CCB00929369 = { isa = PBXTargetDependency; target = 8D1107260486CEB800E47090; targetProxy = F82F200108565CCB00929369; }; F82F200308565CD000929369 = { containerPortal = 29B97313FDCFA39411CA2CEA; isa = PBXContainerItemProxy; proxyType = 1; remoteGlobalIDString = F82F1FA00856587C00929369; remoteInfo = "Disk Image"; }; F82F200408565CD000929369 = { isa = PBXTargetDependency; target = F82F1FA00856587C00929369; targetProxy = F82F200308565CD000929369; }; F831C01F084C7947009BD5DA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PopplerKit.framework; path = /Users/stefan/swe/gsimageapps/Frameworks/PopplerKit/build/PopplerKit.framework; refType = 0; sourceTree = ""; }; F831C020084C7947009BD5DA = { fileRef = F831C01F084C7947009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C061084C8020009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZoomFactor.h; refType = 4; sourceTree = ""; }; F831C062084C8020009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ZoomFactor.m; refType = 4; sourceTree = ""; }; F831C063084C8020009BD5DA = { fileRef = F831C061084C8020009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C064084C8020009BD5DA = { fileRef = F831C062084C8020009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C06E084CC85D009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DocumentWindow.h; refType = 4; sourceTree = ""; }; F831C06F084CC85D009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DocumentWindow.m; refType = 4; sourceTree = ""; }; F831C070084CC85D009BD5DA = { fileRef = F831C06E084CC85D009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C071084CC85E009BD5DA = { fileRef = F831C06F084CC85D009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C072084D0063009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSView+Scrolling.h"; refType = 4; sourceTree = ""; }; F831C073084D0063009BD5DA = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSView+Scrolling.m"; refType = 4; sourceTree = ""; }; F831C074084D0063009BD5DA = { fileRef = F831C072084D0063009BD5DA; isa = PBXBuildFile; settings = { }; }; F831C075084D0063009BD5DA = { fileRef = F831C073084D0063009BD5DA; isa = PBXBuildFile; settings = { }; }; F83E6B61085646FE00C17A6C = { buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( F83E6B66085647A200C17A6C, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F83E6B66085647A200C17A6C = { fileRef = F831C01F084C7947009BD5DA; isa = PBXBuildFile; settings = { }; }; F84A23B6083261BB00C74C2F = { isa = PBXFileReference; lastKnownFileType = image.png; name = Next.png; path = Images/Next.png; refType = 4; sourceTree = ""; }; F84A23B7083261BB00C74C2F = { isa = PBXFileReference; lastKnownFileType = image.png; name = Previous.png; path = Images/Previous.png; refType = 4; sourceTree = ""; }; F84A23B8083261BB00C74C2F = { fileRef = F84A23B6083261BB00C74C2F; isa = PBXBuildFile; settings = { }; }; F84A23B9083261BB00C74C2F = { fileRef = F84A23B7083261BB00C74C2F; isa = PBXBuildFile; settings = { }; }; F855965C0832301B0080599C = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DocumentTools.h; refType = 4; sourceTree = ""; }; F855965D0832301B0080599C = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DocumentTools.m; refType = 4; sourceTree = ""; }; F855965E0832301B0080599C = { fileRef = F855965C0832301B0080599C; isa = PBXBuildFile; settings = { }; }; F855965F0832301B0080599C = { fileRef = F855965D0832301B0080599C; isa = PBXBuildFile; settings = { }; }; F857F62008845CFB0033CA82 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MenuState.h; refType = 4; sourceTree = ""; }; F857F62108845CFB0033CA82 = { fileRef = F857F62008845CFB0033CA82; isa = PBXBuildFile; settings = { }; }; F857F623088467530033CA82 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MenuState.m; refType = 4; sourceTree = ""; }; F857F624088467530033CA82 = { fileRef = F857F623088467530033CA82; isa = PBXBuildFile; settings = { }; }; F85D799008844D0000B59A04 = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitHeight.png; path = Images/FitHeight.png; refType = 4; sourceTree = ""; }; F85D799108844D0000B59A04 = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitWidth.png; path = Images/FitWidth.png; refType = 4; sourceTree = ""; }; F85D799208844D0000B59A04 = { fileRef = F85D799008844D0000B59A04; isa = PBXBuildFile; settings = { }; }; F85D799308844D0000B59A04 = { fileRef = F85D799108844D0000B59A04; isa = PBXBuildFile; settings = { }; }; F864DB45087478BD0065A111 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExtendedScrollView.h; refType = 4; sourceTree = ""; }; F864DB46087478BD0065A111 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtendedScrollView.m; refType = 4; sourceTree = ""; }; F864DB47087478BD0065A111 = { fileRef = F864DB45087478BD0065A111; isa = PBXBuildFile; settings = { }; }; F864DB48087478BD0065A111 = { fileRef = F864DB46087478BD0065A111; isa = PBXBuildFile; settings = { }; }; F873FB1F0884531E00290239 = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitHeightOn.png; path = Images/FitHeightOn.png; refType = 4; sourceTree = ""; }; F873FB200884531E00290239 = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitWidthOn.png; path = Images/FitWidthOn.png; refType = 4; sourceTree = ""; }; F873FB210884531E00290239 = { fileRef = F873FB1F0884531E00290239; isa = PBXBuildFile; settings = { }; }; F873FB220884531E00290239 = { fileRef = F873FB200884531E00290239; isa = PBXBuildFile; settings = { }; }; F8A1E338083D414100EF7DFA = { isa = PBXFileReference; lastKnownFileType = image.png; name = ZoomIn.png; path = Images/ZoomIn.png; refType = 4; sourceTree = ""; }; F8A1E339083D414100EF7DFA = { isa = PBXFileReference; lastKnownFileType = image.png; name = ZoomOut.png; path = Images/ZoomOut.png; refType = 4; sourceTree = ""; }; F8A1E33A083D414100EF7DFA = { fileRef = F8A1E338083D414100EF7DFA; isa = PBXBuildFile; settings = { }; }; F8A1E33B083D414100EF7DFA = { fileRef = F8A1E339083D414100EF7DFA; isa = PBXBuildFile; settings = { }; }; F8A773A90884513C00C8E059 = { isa = PBXFileReference; lastKnownFileType = image.png; name = FitPageOn.png; path = Images/FitPageOn.png; refType = 4; sourceTree = ""; }; F8A773AA0884513C00C8E059 = { fileRef = F8A773A90884513C00C8E059; isa = PBXBuildFile; settings = { }; }; F8AB42B00868BB4D00266E5E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Preferences.h; refType = 4; sourceTree = ""; }; F8AB42B10868BB4D00266E5E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Preferences.m; refType = 4; sourceTree = ""; }; F8AB42B20868BB4D00266E5E = { fileRef = F8AB42B00868BB4D00266E5E; isa = PBXBuildFile; settings = { }; }; F8AB42B30868BB4D00266E5E = { fileRef = F8AB42B10868BB4D00266E5E; isa = PBXBuildFile; settings = { }; }; F8C4D44E08322C0C00DA869B = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToolViewBuilder.h; refType = 4; sourceTree = ""; }; F8C4D44F08322C0C00DA869B = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ToolViewBuilder.m; refType = 4; sourceTree = ""; }; F8C4D45008322C0C00DA869B = { fileRef = F8C4D44E08322C0C00DA869B; isa = PBXBuildFile; settings = { }; }; F8C4D45108322C0C00DA869B = { fileRef = F8C4D44F08322C0C00DA869B; isa = PBXBuildFile; settings = { }; }; F8C4EF8908315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; refType = 4; sourceTree = ""; }; F8C4EF8A08315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; refType = 4; sourceTree = ""; }; F8C4EF8B08315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Controller.h; refType = 4; sourceTree = ""; }; F8C4EF8C08315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Controller.m; refType = 4; sourceTree = ""; }; F8C4EF8D08315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Document.h; refType = 4; sourceTree = ""; }; F8C4EF8E08315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Document.m; refType = 4; sourceTree = ""; }; F8C4EF9108315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PDFContentView.h; refType = 4; sourceTree = ""; }; F8C4EF9208315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SinglePageView.h; refType = 4; sourceTree = ""; }; F8C4EF9308315C0500351D9E = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SinglePageView.m; refType = 4; sourceTree = ""; }; F8C4EF9408315C0500351D9E = { fileRef = F8C4EF8908315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9508315C0500351D9E = { fileRef = F8C4EF8A08315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9608315C0500351D9E = { fileRef = F8C4EF8B08315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9708315C0500351D9E = { fileRef = F8C4EF8C08315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9808315C0500351D9E = { fileRef = F8C4EF8D08315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9908315C0500351D9E = { fileRef = F8C4EF8E08315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9C08315C0500351D9E = { fileRef = F8C4EF9108315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9D08315C0500351D9E = { fileRef = F8C4EF9208315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8C4EF9E08315C0500351D9E = { fileRef = F8C4EF9308315C0500351D9E; isa = PBXBuildFile; settings = { }; }; F8CA9B86083D24BE007F8786 = { isa = PBXFileReference; lastKnownFileType = image.png; name = First.png; path = Images/First.png; refType = 4; sourceTree = ""; }; F8CA9B87083D24BE007F8786 = { isa = PBXFileReference; lastKnownFileType = image.png; name = Last.png; path = Images/Last.png; refType = 4; sourceTree = ""; }; F8CA9B88083D24BE007F8786 = { fileRef = F8CA9B86083D24BE007F8786; isa = PBXBuildFile; settings = { }; }; F8CA9B89083D24BE007F8786 = { fileRef = F8CA9B87083D24BE007F8786; isa = PBXBuildFile; settings = { }; }; F8D2BF0208696226009E1A02 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CenteringClipView.h; refType = 4; sourceTree = ""; }; F8D2BF0308696226009E1A02 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CenteringClipView.m; refType = 4; sourceTree = ""; }; F8D2BF0408696226009E1A02 = { fileRef = F8D2BF0208696226009E1A02; isa = PBXBuildFile; settings = { }; }; F8D2BF0508696226009E1A02 = { fileRef = F8D2BF0308696226009E1A02; isa = PBXBuildFile; settings = { }; }; }; rootObject = 29B97313FDCFA39411CA2CEA; } viewpdf.app-0.2/Vindaloo_Prefix.pch0000644000175000017510000000022310267527244016433 0ustar tarDebian-NM// // Prefix header for all source files of the 'Vindaloo' target in the 'Vindaloo' project // #ifdef __OBJC__ #import #endif viewpdf.app-0.2/VindalooInfo.plist0000644000175000017510000000126310267527244016320 0ustar tarDebian-NM{ ApplicationDescription = "A spicy PDF Reader."; ApplicationIcon = Vindaloo; ApplicationName = Vindaloo; ApplicationRelease = "0.2"; ApplicationURL = "http://home.gna.org/gsimageapps/"; Authors = ("Stefan Kleine Stegemann"); Copyright = "Copyright \U00a9 2005 Stefan Kleine Stegemann"; CopyrightDescription = "Released under the GNU GPL."; FullVersionID = "1.0"; NSTypes = ( { NSName = "pdf"; NSHumanReadableName = "PDF Document"; NSUnixExtensions = (pdf,PDF); NSDOSExtensions = (pdf); NSMIMETypes = ("application/pdf"); NSRole = Editor; NSDocumentClass = Document; }); } viewpdf.app-0.2/ZoomFactor.h0000644000175000017510000000413610267527244015112 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import /** * Maintains the ZoomFactor for views. The factor is given * in percent. */ @interface ZoomFactor : NSObject { float value; } /** Designated initializer. */ - (id) initWithValue: (float)aValue; /** Init with 100% */ - (id) init; + (ZoomFactor*) factorWithValue: (float)aValue; - (float) value; - (float) asScale; - (float) translate: (float)aValue; - (NSSize) translateSize: (NSSize)aSize; - (NSRect) translateRect: (NSRect)aRect; - (NSRect) normalizeRect: (NSRect)aRect; @end /** * Maintains a range of ZoomFactors. */ @interface ZoomFactorRange : NSObject { ZoomFactor* actual; id delegate; NSArray* factors; } /** Designated initializer. */ - (id) initWithFactors: (NSArray*)aFactors actualFactor: (ZoomFactor*)aFactor; /** Initialize with an actual factor of 100%. */ - (id) initWithFactors: (NSArray*)aFactors; - (ZoomFactor*) factor; - (void) setFactor: (ZoomFactor*)aFactor; - (void) setDelegate: (id)aDelegate; - (BOOL) isMin; - (BOOL) isMax; - (void) increment; - (void) decrement; - (ZoomFactor*) minFactor; - (ZoomFactor*) maxFactor; @end /** * Informal protocol for ZoomFactorRange delegate objects. */ @interface NSObject (ZoomFactorRangeDelegate) - (void) zoomFactorChanged: (ZoomFactorRange*)aRange withOldFactor: (ZoomFactor*)anOldFactor; @end viewpdf.app-0.2/ZoomFactor.m0000644000175000017510000001437510267527244015125 0ustar tarDebian-NM/* * Copyright (C) 2004 Stefan Kleine Stegemann * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import "ZoomFactor.h" @implementation ZoomFactor - (id) initWithValue: (float)aValue { if (aValue <= 0.0) { [NSException raise: NSInvalidArgumentException format: @"negative zoom factor %f", aValue]; } self = [super init]; if (self) { value = aValue; } return self; } - (id) init { return [self initWithValue: 100.0]; } + (ZoomFactor*) factorWithValue: (float)aValue { return [[[ZoomFactor alloc] initWithValue: aValue] autorelease]; } - (float) value { return value; } - (NSComparisonResult) compare: (ZoomFactor*)aFactor { if (!aFactor) { return NSOrderedDescending; } if ([self value] < [aFactor value]) { return NSOrderedAscending; } else if ([self value] > [aFactor value]) { return NSOrderedDescending; } return NSOrderedSame; } - (float) asScale { return [self value] / 100; } - (float) translate: (float)aValue { return aValue * [self asScale]; } - (NSSize) translateSize: (NSSize)aSize { return NSMakeSize([self translate: aSize.width], [self translate: aSize.height]); } - (NSRect) translateRect: (NSRect)aRect { return NSMakeRect([self translate: NSMinX(aRect)], [self translate: NSMinY(aRect)], [self translate: NSWidth(aRect)], [self translate: NSHeight(aRect)]); } - (NSRect) normalizeRect: (NSRect)aRect { return NSMakeRect(NSMinX(aRect) / [self asScale], NSMinY(aRect) / [self asScale], NSWidth(aRect) / [self asScale], NSHeight(aRect) / [self asScale]); } @end /* ----------------------------------------------------- */ /* Class ZoomFactorRange */ /* ----------------------------------------------------- */ /** * Non-Public methods. */ @interface ZoomFactorRange (Private) - (unsigned) _indexForFactor: (ZoomFactor*)aFactor; @end @implementation ZoomFactorRange - (id) initWithFactors: (NSArray*)aFactors actualFactor: (ZoomFactor*)aFactor { NSAssert(aFactors && ([aFactors count] > 0), @"no zoom factors"); self = [super init]; if (self) { delegate = nil; actual = nil; factors = [[aFactors sortedArrayUsingSelector: @selector(compare:)] retain]; [self setFactor: aFactor]; } return self; } - (id) initWithFactors: (NSArray*)aFactors { return [self initWithFactors: aFactors actualFactor: [ZoomFactor factorWithValue: 100.0]]; } - (void) dealloc { [actual release]; [factors release]; [super dealloc]; } - (void) setDelegate: (id)aDelegate { delegate = aDelegate; } - (void) setFactor: (ZoomFactor*)aFactor { NSAssert(aFactor, @"nil factor"); ZoomFactor* old = [actual retain]; [actual release]; // align factor to upper/lower bound if ([aFactor value] < [[self minFactor] value]) { actual = [[self minFactor] retain]; } else if ([aFactor value] > [[self maxFactor] value]) { actual = [[self maxFactor] retain]; } else { actual = [aFactor retain]; } [delegate zoomFactorChanged: self withOldFactor: old]; [old release]; } - (ZoomFactor*) factor { return actual; } - (BOOL) isMin { return [[self factor] value] <= [[self minFactor] value]; } - (BOOL) isMax { return [[self factor] value] >= [[self maxFactor] value]; } - (void) increment { unsigned factorIdx = [self _indexForFactor: [self factor]]; unsigned maxIdx = [factors count] - 1; unsigned nextIdx = (factorIdx == maxIdx ? maxIdx : factorIdx + 1); [self setFactor: [factors objectAtIndex: nextIdx]]; } - (void) decrement { unsigned factorIdx = [self _indexForFactor: [self factor]]; unsigned nextIdx = (factorIdx == 0 ? 0 : factorIdx - 1); [self setFactor: [factors objectAtIndex: nextIdx]]; } - (ZoomFactor*) minFactor { return [factors objectAtIndex: 0]; } - (ZoomFactor*) maxFactor { unsigned last = [factors count] - 1; return [factors objectAtIndex: last]; } @end /* ----------------------------------------------------- */ /* Category Private of ZoomFactorRange */ /* ----------------------------------------------------- */ @implementation ZoomFactorRange (Private) - (unsigned) _indexForFactor: (ZoomFactor*)aFactor { // find the factor in factors with the lowest distance to // aFactor and return it's index (factors is sorted in // ascending order!) // boundaries if ([aFactor value] <= [[self minFactor] value]) { return 0; } else if ([aFactor value] >= [[self maxFactor] value]) { return [factors count] - 1; } // find the indices of two factors s.t. // factors[iLower] <= aFactor <= factors[iUpper] unsigned iLower = 0; unsigned iUpper = 0; unsigned i; for (i = 0; i < ([factors count] - 1); i++) { // factors is sorted in ascending order, so we can // simply increment i as long as factors[i] > aFactor if ([aFactor value] <= [(ZoomFactor*)[factors objectAtIndex: i] value]) { iLower = i - 1; iUpper = i; break; } } NSAssert(i < ([factors count] - 1), @"_indexForFactor: should not happen"); // from iLower, iUpper select the index that points to // the factor with the lowest (absolute) distance to aFactor float d1 = [aFactor value] - [(ZoomFactor*)[factors objectAtIndex: iLower] value]; float d2 = [(ZoomFactor*)[factors objectAtIndex: iUpper] value] - [aFactor value]; return (d1 <= d2 ? iLower : iUpper); } @end