You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
(23) |
Apr
(254) |
May
(252) |
Jun
(209) |
Jul
(198) |
Aug
(192) |
Sep
(207) |
Oct
(120) |
Nov
(179) |
Dec
(52) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(48) |
Feb
(69) |
Mar
(129) |
Apr
(250) |
May
(113) |
Jun
(177) |
Jul
(228) |
Aug
(155) |
Sep
(218) |
Oct
(185) |
Nov
(109) |
Dec
(88) |
2009 |
Jan
(83) |
Feb
(39) |
Mar
(70) |
Apr
(47) |
May
(48) |
Jun
(67) |
Jul
(61) |
Aug
(97) |
Sep
(221) |
Oct
(141) |
Nov
(70) |
Dec
(61) |
2010 |
Jan
(45) |
Feb
(76) |
Mar
(178) |
Apr
(106) |
May
(57) |
Jun
(32) |
Jul
(64) |
Aug
(98) |
Sep
(96) |
Oct
(19) |
Nov
(34) |
Dec
(117) |
2011 |
Jan
(55) |
Feb
(48) |
Mar
(64) |
Apr
(21) |
May
(39) |
Jun
(53) |
Jul
(99) |
Aug
(56) |
Sep
(39) |
Oct
(26) |
Nov
(19) |
Dec
(69) |
2012 |
Jan
(17) |
Feb
(40) |
Mar
(17) |
Apr
|
May
(2) |
Jun
(8) |
Jul
(2) |
Aug
(10) |
Sep
(10) |
Oct
(38) |
Nov
(48) |
Dec
(70) |
2013 |
Jan
(43) |
Feb
(47) |
Mar
(39) |
Apr
(37) |
May
(25) |
Jun
(6) |
Jul
(20) |
Aug
(49) |
Sep
(33) |
Oct
(34) |
Nov
(75) |
Dec
(6) |
2014 |
Jan
(32) |
Feb
(10) |
Mar
(17) |
Apr
|
May
|
Jun
(26) |
Jul
(5) |
Aug
|
Sep
(4) |
Oct
(23) |
Nov
(80) |
Dec
(48) |
2015 |
Jan
(80) |
Feb
(50) |
Mar
(58) |
Apr
(20) |
May
(11) |
Jun
(16) |
Jul
(24) |
Aug
(27) |
Sep
(56) |
Oct
(30) |
Nov
(16) |
Dec
(6) |
2016 |
Jan
(31) |
Feb
(14) |
Mar
(23) |
Apr
(17) |
May
(40) |
Jun
(12) |
Jul
(17) |
Aug
(9) |
Sep
(32) |
Oct
(36) |
Nov
(23) |
Dec
(9) |
2017 |
Jan
(37) |
Feb
(23) |
Mar
(65) |
Apr
(22) |
May
(6) |
Jun
(3) |
Jul
|
Aug
|
Sep
(3) |
Oct
(22) |
Nov
(63) |
Dec
(71) |
2018 |
Jan
(83) |
Feb
(21) |
Mar
(35) |
Apr
(44) |
May
(14) |
Jun
(12) |
Jul
(8) |
Aug
(18) |
Sep
(10) |
Oct
(145) |
Nov
(144) |
Dec
(76) |
2019 |
Jan
(18) |
Feb
(28) |
Mar
(5) |
Apr
(208) |
May
(291) |
Jun
(158) |
Jul
(27) |
Aug
(8) |
Sep
(10) |
Oct
(83) |
Nov
(41) |
Dec
(31) |
2020 |
Jan
(16) |
Feb
(46) |
Mar
(100) |
Apr
(78) |
May
(69) |
Jun
(71) |
Jul
(28) |
Aug
(131) |
Sep
(176) |
Oct
(89) |
Nov
(147) |
Dec
(19) |
2021 |
Jan
(19) |
Feb
(25) |
Mar
(91) |
Apr
(98) |
May
(14) |
Jun
(44) |
Jul
(8) |
Aug
(3) |
Sep
(38) |
Oct
(57) |
Nov
(97) |
Dec
(74) |
2022 |
Jan
(89) |
Feb
(47) |
Mar
(15) |
Apr
(50) |
May
(54) |
Jun
(56) |
Jul
(80) |
Aug
(12) |
Sep
(11) |
Oct
(60) |
Nov
(48) |
Dec
(4) |
2023 |
Jan
(75) |
Feb
(49) |
Mar
(84) |
Apr
(24) |
May
(13) |
Jun
(74) |
Jul
(32) |
Aug
(66) |
Sep
(50) |
Oct
(38) |
Nov
(105) |
Dec
(181) |
2024 |
Jan
(21) |
Feb
(49) |
Mar
(77) |
Apr
(84) |
May
(20) |
Jun
(71) |
Jul
(53) |
Aug
(33) |
Sep
(54) |
Oct
(124) |
Nov
(151) |
Dec
(73) |
2025 |
Jan
(61) |
Feb
(17) |
Mar
(136) |
Apr
(72) |
May
(200) |
Jun
(238) |
Jul
(91) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ho...@us...> - 2007-04-21 11:37:21
|
Revision: 1875 http://skim-app.svn.sourceforge.net/skim-app/?rev=1875&view=rev Author: hofman Date: 2007-04-21 04:37:20 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Add method to get the Skim notes. Modified Paths: -------------- SkimNotesAgent/SkimNotesAgent.h SkimNotesAgent/SkimNotesAgent.m Modified: SkimNotesAgent/SkimNotesAgent.h =================================================================== --- SkimNotesAgent/SkimNotesAgent.h 2007-04-21 11:32:35 UTC (rev 1874) +++ SkimNotesAgent/SkimNotesAgent.h 2007-04-21 11:37:20 UTC (rev 1875) @@ -37,6 +37,7 @@ @protocol SKAgentListenerProtocol +- (bycopy NSData *)SkimNotesAtPath:(in bycopy NSString *)aFile; - (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; - (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; Modified: SkimNotesAgent/SkimNotesAgent.m =================================================================== --- SkimNotesAgent/SkimNotesAgent.m 2007-04-21 11:32:35 UTC (rev 1874) +++ SkimNotesAgent/SkimNotesAgent.m 2007-04-21 11:37:20 UTC (rev 1875) @@ -83,6 +83,15 @@ [super dealloc]; } +- (bycopy NSData *)SkimNotesAtPath:(in bycopy NSString *)aFile; +{ + NSError *error; + NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; + if (nil == data && [error code] != ENOATTR) + fprintf(stderr, "SkimNotesAgent pid %d: error getting Skim notes (%s)\n", getpid(), [[error description] UTF8String]); + return data; +} + - (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; { NSError *error; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 11:32:36
|
Revision: 1874 http://skim-app.svn.sourceforge.net/skim-app/?rev=1874&view=rev Author: hofman Date: 2007-04-21 04:32:35 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Add help on saving notes as RTF. Modified Paths: -------------- trunk/Dutch.lproj/Skim Help/skim.texi trunk/English.lproj/Skim Help/skim.texi Modified: trunk/Dutch.lproj/Skim Help/skim.texi =================================================================== --- trunk/Dutch.lproj/Skim Help/skim.texi 2007-04-21 11:19:12 UTC (rev 1873) +++ trunk/Dutch.lproj/Skim Help/skim.texi 2007-04-21 11:32:35 UTC (rev 1874) @@ -1001,7 +1001,7 @@ @topic Als ik een PDF-bestand email verlies ik de notities en markeringen -Notities en markeringen die aan een PDF-bestabd zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). Deze gaan meestal verloren als het bestand via email word verstuurd. +Notities en markeringen die aan een PDF-bestand zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). Deze gaan meestal verloren als het bestand via email word verstuurd. Er zijn een aantal manieren om notities te behouden. Sommige compressie-methoden behouden uitgebreide attributen. Apple's 'Maak archief aan' commando behoudt ze helaas niet. U kunt zelf een bestand met notities comprimeren en uitpakken om uit te testen of ze worden behouden. U kunt ook een schijfkopie aanmaken om het PDF-bestand in te pakken. Comprimeren met tar en gzip behoudt de notities ook. @@ -1037,9 +1037,9 @@ @topic Notities en markeringen in een apart bestand bewaren -Notities en markeringen die aan een PDF-bestabd zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). Deze kunnen soms verloren gaan als het bestand gecomprimeerd wordt of via email word verstuurd. +Notities en markeringen die aan een PDF-bestand zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). Deze kunnen soms verloren gaan als het bestand gecomprimeerd wordt of via email word verstuurd. -U kunt de notities en markeringen in een apart .sim-bestand bewaren, voor backup of om met een email mee te sturen. +U kunt de notities en markeringen in een apart .skim-bestand bewaren, voor backup of om met een email mee te sturen. @box{taskbox} @heading Om de notities in een apart bestand te bewaren: @@ -1055,6 +1055,7 @@ @menu * Notities en markeringen uit een apart Skim notities-bestand toevoegen:: * Als ik een PDF-bestand email verlies ik de notities en markeringen:: +* Notities en markeringen als tekst bewaren:: * Notities aan een PDF-document toevoegen:: * Gedeelten van een PDF-document markeren:: @end menu @@ -1089,7 +1090,7 @@ @topic PDF-bestanden met de notities en markeringen inbegrepen bewaren -Normaal worden notities en markeringen die aan een PDF-bestabd zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). U kunt in Skim ook een kopie van het PDF-bestand bewaren dat de notities in de PDF-data insluit. Daarmee kunt u de notities ook in andere PDF-vertoningsprogrammas bekijken. +Normaal worden notities en markeringen die aan een PDF-bestand zijn toegevoegd worden niet bewaard in de PDF-data, maar worden toegevoegd als 'uitgebreide attributen' (extended attributes). U kunt in Skim ook een kopie van het PDF-bestand bewaren dat de notities in de PDF-data insluit. Daarmee kunt u de notities ook in andere PDF-vertoningsprogrammas bekijken. @box{taskbox} @heading Om een kopie van een PDF-document met de notities inbegrepen te bewaren: @@ -1125,6 +1126,27 @@ @c ====================================================================================== +@topic Notities en markeringen als tekst bewaren + +U kunt de notities en markeringen apart in een door mensen leesbare vorm in een 'Rich Text Format' (RTF) bestand bewaren. + +@box{taskbox} +@heading Om de notities in een RTF-bestand te bewaren: +@enumerate +@item Kies File > Exporteer@dots{}. +@item Selecteer "Notities als RTF" van de Structuur popup, kies een locatie om de notities te bewaren, en druk op de OK-knop. +@end enumerate +@endbox + +@heading Zie ook +@menu +* Notities en markeringen in een apart bestand bewaren:: +* Notities aan een PDF-document toevoegen:: +* Gedeelten van een PDF-document markeren:: +@end menu + +@c ====================================================================================== + @node Meer informatie @chapter Meer informatie @abstract{Vind meer help} Modified: trunk/English.lproj/Skim Help/skim.texi =================================================================== --- trunk/English.lproj/Skim Help/skim.texi 2007-04-21 11:19:12 UTC (rev 1873) +++ trunk/English.lproj/Skim Help/skim.texi 2007-04-21 11:32:35 UTC (rev 1874) @@ -1049,6 +1049,7 @@ @menu * Adding notes and highlights from a separate Skim notes file:: * Emailing a PDF file loses notes or highlights:: +* Saving notes and highlights as text:: * Adding notes to a PDF document:: * Highlighting sections of a PDF document:: @end menu @@ -1119,6 +1120,27 @@ @c ====================================================================================== +@topic Saving notes and highlights as text + +You can save notes added in Skim to a separately in human readable form to a Rich Text Format (RTF) file. + +@box{taskbox} +@heading To save the notes as RTF: +@enumerate +@item Choose File > Export@dots{}. +@item Select "Notes as RTF" from the File Format popup, choose a location to save the notes to, and press OK. +@end enumerate +@endbox + +@heading See also +@menu +* Saving notes and highlights to a separate file:: +* Adding notes to a PDF document:: +* Highlighting sections of a PDF document:: +@end menu + +@c ====================================================================================== + @node More information @chapter More information @abstract{Getting more help} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 11:19:14
|
Revision: 1873 http://skim-app.svn.sourceforge.net/skim-app/?rev=1873&view=rev Author: hofman Date: 2007-04-21 04:19:12 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Add help on adding arrows. Modified Paths: -------------- trunk/Dutch.lproj/Skim Help/skim.texi trunk/English.lproj/Skim Help/skim.texi Modified: trunk/Dutch.lproj/Skim Help/skim.texi =================================================================== --- trunk/Dutch.lproj/Skim Help/skim.texi 2007-04-21 09:46:57 UTC (rev 1872) +++ trunk/Dutch.lproj/Skim Help/skim.texi 2007-04-21 11:19:12 UTC (rev 1873) @@ -530,6 +530,7 @@ @heading Zie ook @menu * Gedeelten van een PDF-document markeren:: +* Pijlen aan een PDF-document toevoegen:: * De kleur van notities en markeringen wijzigen:: * Het lettertype en de lettergrootte van textnotities wijzigen:: @end menu @@ -561,23 +562,53 @@ @heading Zie ook @menu * Notities aan een PDF-document toevoegen:: +* Pijlen aan een PDF-document toevoegen:: * De kleur van notities en markeringen wijzigen:: @end menu @c ====================================================================================== +@topic Pijlen aan een PDF-document toevoegen + +U kunt uw pijlen toevoegen aan een PDF-document om relaties tussen secties aan te geven. + +De pijlen worden bewaard bij het document en zijn zichtbaar voor andere gebruikers van Skim. De pijlen worden niet bewaard in de PDF-data zelf, zodat u de pijlen niet kunt zien in de meeste andere PDF vertoningsprogrammas. + +@box{taskbox} +@heading Om een pijl toe te voegen: +@enumerate +@item Kies Extra's > Tekstfunctie. +@item Kies Notities > Pijl. +@item Sleep de pijl of \x8E\x8En van zijn eindpunten in het document tot deze op de gewenste plaats is en naar de juiste postie wijst. +@end enumerate +@endbox + +U kunt pijlen ook toevoegen met behulp van een knop op de knoppenbalk. Om de knop aan de knoppenbalk toe te voegen, kiest u Weergave > 'Pas knoppenbalk aan' en sleept u de knop naar de knoppenbalk. + +U kunt pijlen wijzigen en verwijderen. Om een pijl of \x8E\x8En van zijn eindpunten te verplaatsen, kies Extra's > Tekstfunctie, en gebruik de muis om te selecteren en te slepen. Sleep een zwarte vierkantje om een eindpunt te verplaatsen. Om de kleur van de pijl te wijzigen, kies Extra's > 'Toon kleuren'. Om een pijl te verwijderen, kies Extra's > Textfunctie, selecteer de pijl, en druk op de Delete-toets. + +@heading Zie ook +@menu +* Notities aan een PDF-document toevoegen:: +* Gedeelten van een PDF-document markeren:: +* De kleur van notities en markeringen wijzigen:: +* Het lettertype en de lettergrootte van textnotities wijzigen:: +@end menu + +@c ====================================================================================== + @topic De kleur van notities en markeringen wijzigen -In Skim kunt u de kleur van een notitie of markering die u met Skim heeft aangebracht wijzigen. U kunt ook de standaardkleuren die gebruikt worden voor nieuwe notities en markeringen instellen. +In Skim kunt u de kleur van een notitie, markering of pijl die u met Skim heeft aangebracht wijzigen. U kunt ook de standaardkleuren die gebruikt worden voor nieuwe notities, markeringen en pijlen instellen. @box{taskbox} -@heading Om de standaardkleuren voor notities of markeringen te wijzigen: +@heading Om de standaardkleuren voor notities, markeringenen pijlen te wijzigen: @itemize -@item Kies Skim > Voorkeuren, selecteer Notities, en klik op een kleur behorende bij de type notitie of markering die u wilt veranderen. +@item Kies Skim > Voorkeuren, selecteer Notities, en klik op een kleur behorende bij de type notitie, markering orfpijl die u wilt veranderen. @end itemize -@heading Om de kleur van een enkele notitie of markering te wijzigen: +@heading Om de kleur van een enkele notitie, markering of pijl te wijzigen: @itemize -@item Selecteer de notitie of markering in de PDF en kies Extra's > Toon kleuren. +@item Selecteer de notitie, markering of pijl in de PDF en kies Extra's > Toon kleuren. @end itemize @endbox @@ -585,6 +616,7 @@ @menu * Notities aan een PDF-document toevoegen:: * Gedeelten van een PDF-document markeren:: +* Pijlen aan een PDF-document toevoegen:: * Het lettertype en de lettergrootte van textnotities wijzigen:: @end menu @@ -607,6 +639,7 @@ @menu * Notities aan een PDF-document toevoegen:: * Gedeelten van een PDF-document markeren:: +* Pijlen aan een PDF-document toevoegen:: * De kleur van notities en markeringen wijzigen:: @end menu Modified: trunk/English.lproj/Skim Help/skim.texi =================================================================== --- trunk/English.lproj/Skim Help/skim.texi 2007-04-21 09:46:57 UTC (rev 1872) +++ trunk/English.lproj/Skim Help/skim.texi 2007-04-21 11:19:12 UTC (rev 1873) @@ -528,6 +528,7 @@ @heading See also @menu * Highlighting sections of a PDF document:: +* Adding arrows to a PDF document:: * Changing the color for notes and highlights:: * Changing the font of text notes:: @end menu @@ -559,23 +560,52 @@ @heading See also @menu * Adding notes to a PDF document:: +* Adding arrows to a PDF document:: * Changing the color for notes and highlights:: @end menu @c ====================================================================================== +@topic Adding arrows to a PDF document + +You can add arrows to a PDF document, to highlight relations between sections. + +The arrows are saved with the document, so also other Skim users can see them. The arrows are not saved in the PDF data itself, therefore other PDF viewers will probably not be able to show the arrows. + +@box{taskbox} +@heading To add an arrow: +@enumerate +@item Choose Tools > Text Tool. +@item Choose Notes > Arrow. +@item Drag in the document until the arrow, and drag the end points until it points where you want. +@end enumerate +@endbox + +You can also use toolbar buttons to add arrows. To add an arrow button to the toolbar, choose View > Customize Toolbar and drag the button to the toolbar. + +You can edit or delete the arrow. To move the arrow or its end points, choose Tools > Text Tool, and use the mouse. Drag a black box to move an end point. To change the color used for the arrow, choose Tools > Show Colors. To delete the arrow, choose Tools > Text Tool, select the arrow, and press Delete. + +@heading See also +@menu +* Adding notes to a PDF document:: +* Highlighting sections of a PDF document:: +* Changing the color for notes and highlights:: +@end menu + +@c ====================================================================================== + @topic Changing the color for notes and highlights -Skim allows you can change the color of a note or highlight you have added using Skim. You can also change the default colors that are used for new notes and highlights. +Skim allows you can change the color of a note, highlight or arrow you have added using Skim. You can also change the default colors that are used for new notes, highlights and arrows. @box{taskbox} -@heading To change the default color for notes or highlights: +@heading To change the default color for notes, highlights and arrows: @itemize -@item Choose Skim > Preferences, select Notes, and click a color for the type of note or highlight you want to change. +@item Choose Skim > Preferences, select Notes, and click a color for the type of note, highlight or arrow you want to change. @end itemize -@heading To change the color of a single note or highlight: +@heading To change the color of a single note, highlight or arrow: @itemize -@item Select the note or highlight in the PDF and choose Tools > Show Colors. +@item Select the note, highlight or arrow in the PDF and choose Tools > Show Colors. @end itemize @endbox @@ -583,6 +613,7 @@ @menu * Adding notes to a PDF document:: * Highlighting sections of a PDF document:: +* Adding arrows to a PDF document:: * Changing the font of text notes:: @end menu @@ -605,6 +636,7 @@ @menu * Adding notes to a PDF document:: * Highlighting sections of a PDF document:: +* Adding arrows to a PDF document:: * Changing the color for notes and highlights:: @end menu This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 09:56:12
|
Revision: 1872 http://skim-app.svn.sourceforge.net/skim-app/?rev=1872&view=rev Author: hofman Date: 2007-04-21 02:46:57 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Use localized stopwords for help indexing, if available. Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2007-04-21 09:19:02 UTC (rev 1871) +++ trunk/Skim.xcodeproj/project.pbxproj 2007-04-21 09:46:57 UTC (rev 1872) @@ -1013,7 +1013,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if [ ${BUILD_STYLE} = \"Debug\" ]; then\nexit 0\nfi\nif [ -d /Developer/Applications/Utilities/Help\\ Indexer.app/ ]; then\necho \"*** Indexing Tiger Help ***\"\nfor LOC_DIR in ${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/*.lproj; do \\\n/Developer/Applications/Utilities/Help\\ Indexer.app/Contents/MacOS/Help\\ Indexer \\\n${LOC_DIR}/Skim\\ Help \\\n-Tokenizer 1 \\\n-ShowProgress NO \\\n-LogStyle 2 \\\n-IndexAnchors YES \\\n-TigerIndexing YES \\\n-GenerateSummaries YES \\\n-Stopwords en \\\n-MinTermLength 3;\\\ndone\nfi\nexit 0"; + shellScript = "if [ ${BUILD_STYLE} = \"Debug\" ]; then\nexit 0\nfi\nif [ -d /Developer/Applications/Utilities/Help\\ Indexer.app/ ]; then\necho \"*** Indexing Tiger Help ***\"\ncd ${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\nfor LOC_DIR in *.lproj; do \\\nif [ \"${LOC_DIR}\" = \"French.lproj\" ]; then LANG=\"fr\"; \\\nelif [ \"${LOC_DIR}\" = \"German.lproj\" ]; then LANG=\"de\"; \\\nelif [ \"${LOC_DIR}\" = \"Hungarian.lproj\" ]; then LANG=\"hu\"; \\\nelif [ \"${LOC_DIR}\" = \"Italian.lproj\" ]; then LANG=\"it\"; \\\nelif [ \"${LOC_DIR}\" = \"Spanish.lproj\" ]; then LANG=\"es\"; \\\nelif [ \"${LOC_DIR}\" = \"Swedish.lproj\" ]; then LANG=\"sv\"; \\\nelse LANG=\"en\"; \\\nfi; \\\n/Developer/Applications/Utilities/Help\\ Indexer.app/Contents/MacOS/Help\\ Indexer \\\n${LOC_DIR}/Skim\\ Help \\\n-Tokenizer 1 \\\n-ShowProgress NO \\\n-LogStyle 2 \\\n-IndexAnchors YES \\\n-TigerIndexing YES \\\n-GenerateSummaries YES \\\n-Stopwords \"${LANG}\" \\\n-MinTermLength 3;\\\ndone\nfi\nexit 0"; }; CE592C630B9239E300C113DF /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -1039,7 +1039,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#\n# Run the genstrings build phase\n# This takes a while to generate, so it's not worth\n# the wait for development builds.\n#\nif [ ${BUILD_STYLE} = \"Debug\" ]; then\nexit 0\nfi\ncd ${SOURCE_ROOT}\n/usr/bin/genstrings -o ${SOURCE_ROOT}/English.lproj `/usr/bin/find . -type file -name \"*.[mh]\"`"; + shellScript = "#\n# Run the genstrings build phase\n# This takes a while to generate, so it's not worth\n# the wait for development builds.\n#\nif [ ${BUILD_STYLE} = \"Debug\" ]; then\nexit 0\nfi\ncd ${SOURCE_ROOT}\n/usr/bin/genstrings -o ${SOURCE_ROOT}/English.lproj -skipTable Sparkle `/usr/bin/find . -type file -name \"*.[mh]\"`"; }; /* End PBXShellScriptBuildPhase section */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 09:19:04
|
Revision: 1871 http://skim-app.svn.sourceforge.net/skim-app/?rev=1871&view=rev Author: hofman Date: 2007-04-21 02:19:02 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Update localization Modified Paths: -------------- trunk/Dutch.lproj/Localizable.strings trunk/Dutch.lproj/MainWindow.nib/data.dependency trunk/Dutch.lproj/MainWindow.nib/info.nib trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib trunk/English.lproj/Localizable.strings Modified: trunk/Dutch.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/MainWindow.nib/data.dependency =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-04-21 09:18:05 UTC (rev 1870) +++ trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-04-21 09:19:02 UTC (rev 1871) @@ -4,6 +4,7 @@ <dict> <key>IBPaletteDependency</key> <array> + <string>Controllers</string> <string>PDFKit</string> </array> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-04-21 09:18:05 UTC (rev 1870) +++ trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-04-21 09:19:02 UTC (rev 1871) @@ -7,7 +7,7 @@ <key>IBEditorPositions</key> <dict> <key>168</key> - <string>584 557 287 167 0 0 1440 938 </string> + <string>584 557 271 167 0 0 1440 938 </string> <key>224</key> <string>610 420 220 442 0 0 1440 938 </string> <key>256</key> Modified: trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/Localizable.strings =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 09:18:10
|
Revision: 1870 http://skim-app.svn.sourceforge.net/skim-app/?rev=1870&view=rev Author: hofman Date: 2007-04-21 02:18:05 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Declare selector to silence compiler. Modified Paths: -------------- trunk/SKApplication.h Modified: trunk/SKApplication.h =================================================================== --- trunk/SKApplication.h 2007-04-21 08:49:51 UTC (rev 1869) +++ trunk/SKApplication.h 2007-04-21 09:18:05 UTC (rev 1870) @@ -42,3 +42,8 @@ @interface SKApplication : NSApplication @end + + +@interface NSResponder (SKMagnifyWheel) +- (void)magnifyWheel:(NSEvent *)theEvent; +@end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-21 08:49:56
|
Revision: 1869 http://skim-app.svn.sourceforge.net/skim-app/?rev=1869&view=rev Author: hofman Date: 2007-04-21 01:49:51 -0700 (Sat, 21 Apr 2007) Log Message: ----------- Add Arrow note to RTF. Modified Paths: -------------- trunk/SKDocument.m trunk/SKNotesDocument.m Modified: trunk/SKDocument.m =================================================================== --- trunk/SKDocument.m 2007-04-20 18:11:16 UTC (rev 1868) +++ trunk/SKDocument.m 2007-04-21 08:49:51 UTC (rev 1869) @@ -643,18 +643,23 @@ tmpString = NSLocalizedString(@"Underline", @"Description for export"); else if ([type isEqualToString:@"StrikeOut"]) tmpString = NSLocalizedString(@"Strike Out", @"Description for export"); + else if ([type isEqualToString:@"Arrow"]) + tmpString = NSLocalizedString(@"Arrow", @"Description for export"); tmpString = [NSString stringWithFormat:NSLocalizedString(@"%C %@, page %i", @"Description for export"), 0x2022, tmpString, [note pageIndex] + 1]; tmpAttrString = [[NSAttributedString alloc] initWithString:tmpString attributes:[NSDictionary dictionaryWithObjectsAndKeys:standardFont, NSFontAttributeName, nil]]; [attrString appendAttributedString:tmpAttrString]; [tmpAttrString release]; [attrString appendAttributedString:newlinesAttrString]; - tmpAttrString = [[NSAttributedString alloc] initWithString:contents ? contents : @"" attributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil]]; - [attrString appendAttributedString:tmpAttrString]; - [tmpAttrString release]; - [attrString appendAttributedString:newlinesAttrString]; + if ([contents length]) { + tmpAttrString = [[NSAttributedString alloc] initWithString:contents ? contents : @"" attributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil]]; + [attrString appendAttributedString:tmpAttrString]; + [tmpAttrString release]; + [attrString appendAttributedString:newlinesAttrString]; + } - if (tmpAttrString = [note text]) { + tmpAttrString = [note text]; + if ([tmpAttrString length]) { [attrString appendAttributedString:tmpAttrString]; [attrString appendAttributedString:newlinesAttrString]; } Modified: trunk/SKNotesDocument.m =================================================================== --- trunk/SKNotesDocument.m 2007-04-20 18:11:16 UTC (rev 1868) +++ trunk/SKNotesDocument.m 2007-04-21 08:49:51 UTC (rev 1869) @@ -144,18 +144,23 @@ tmpString = NSLocalizedString(@"Underline", @"Description for export"); else if ([type isEqualToString:@"StrikeOut"]) tmpString = NSLocalizedString(@"Strike Out", @"Description for export"); + else if ([type isEqualToString:@"Arrow"]) + tmpString = NSLocalizedString(@"Arrow", @"Description for export"); tmpString = [NSString stringWithFormat:NSLocalizedString(@"%C %@, page %i", @"Description for export"), 0x2022, tmpString, [[note valueForKey:@"pageIndex"] unsignedIntValue] + 1]; tmpAttrString = [[NSAttributedString alloc] initWithString:tmpString attributes:[NSDictionary dictionaryWithObjectsAndKeys:standardFont, NSFontAttributeName, nil]]; [attrString appendAttributedString:tmpAttrString]; [tmpAttrString release]; [attrString appendAttributedString:newlinesAttrString]; - tmpAttrString = [[NSAttributedString alloc] initWithString:contents ? contents : @"" attributes:[NSDictionary dictionaryWithObjectsAndKeys:font ? font : standardFont, NSFontAttributeName, nil]]; - [attrString appendAttributedString:tmpAttrString]; - [tmpAttrString release]; - [attrString appendAttributedString:newlinesAttrString]; + if ([contents length]) { + tmpAttrString = [[NSAttributedString alloc] initWithString:contents ? contents : @"" attributes:[NSDictionary dictionaryWithObjectsAndKeys:font ? font : standardFont, NSFontAttributeName, nil]]; + [attrString appendAttributedString:tmpAttrString]; + [tmpAttrString release]; + [attrString appendAttributedString:newlinesAttrString]; + } - if (tmpAttrString = [note valueForKey:@"text"]) { + tmpAttrString = [note valueForKey:@"text"]; + if ([tmpAttrString length]) { [attrString appendAttributedString:tmpAttrString]; [attrString appendAttributedString:newlinesAttrString]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-20 18:11:17
|
Revision: 1868 http://skim-app.svn.sourceforge.net/skim-app/?rev=1868&view=rev Author: hofman Date: 2007-04-20 11:11:16 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Applescript support for new arrow notes. Modified Paths: -------------- trunk/SKPDFAnnotationNote.h trunk/SKPDFAnnotationNote.m trunk/Skim.sdef Modified: trunk/SKPDFAnnotationNote.h =================================================================== --- trunk/SKPDFAnnotationNote.h 2007-04-20 16:22:12 UTC (rev 1867) +++ trunk/SKPDFAnnotationNote.h 2007-04-20 18:11:16 UTC (rev 1868) @@ -73,6 +73,8 @@ - (id)richText; - (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData; - (NSData *)boundsAsQDRect; +- (NSData *)startPointAsQDPoint; +- (NSData *)endPointAsQDPoint; - (id)handleGoToScriptCommand:(NSScriptCommand *)command; @end @@ -109,6 +111,10 @@ @end @interface SKPDFAnnotationLine : PDFAnnotationLine + +- (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData; +- (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData; + @end @interface SKPDFAnnotationTemporary : PDFAnnotationCircle @@ -157,3 +163,20 @@ rect.size.height = (float)(qdRect.top - qdRect.bottom); return rect; } + + +static inline +Point PointFromNSPoint(NSPoint point) { + Point qdPoint; + qdPoint.h = round(point.x); + qdPoint.v = round(point.y); + return qdPoint; +} + +static inline +NSPoint NSPointFromPoint(Point qdPoint) { + NSPoint point; + point.x = (float)qdPoint.h; + point.y = (float)qdPoint.v; + return point; +} Modified: trunk/SKPDFAnnotationNote.m =================================================================== --- trunk/SKPDFAnnotationNote.m 2007-04-20 16:22:12 UTC (rev 1867) +++ trunk/SKPDFAnnotationNote.m 2007-04-20 18:11:16 UTC (rev 1868) @@ -203,12 +203,8 @@ annotation = [[SKPDFAnnotationCircle alloc] initWithBounds:NSMakeRect(100.0, 100.0, 64.0, 64.0)]; else if (type == SKASSquareNote) annotation = [[SKPDFAnnotationSquare alloc] initWithBounds:NSMakeRect(100.0, 100.0, 64.0, 64.0)]; - else if (type == SKASHighlightNote) - annotation = [[SKPDFAnnotationMarkup alloc] initWithBounds:NSMakeRect(100.0, 100.0, 64.0, 64.0) markupType:kPDFMarkupTypeHighlight quadrilateralPointsAsStrings:nil]; - else if (type == SKASStrikeOutNote) - annotation = [[SKPDFAnnotationMarkup alloc] initWithBounds:NSMakeRect(100.0, 100.0, 64.0, 64.0) markupType:kPDFMarkupTypeStrikeOut quadrilateralPointsAsStrings:nil]; - else if (type == SKASUnderlineNote) - annotation = [[SKPDFAnnotationMarkup alloc] initWithBounds:NSMakeRect(100.0, 100.0, 64.0, 64.0) markupType:kPDFMarkupTypeUnderline quadrilateralPointsAsStrings:nil]; + else if (type == SKASArrowNote) + annotation = [[SKPDFAnnotationLine alloc] initWithBounds:NSMakeRect(100.0, 100.0, 16.0, 16.0)]; self = annotation; } @@ -239,9 +235,9 @@ return SKASHighlightNote; else if ([[self type] isEqualToString:@"Underline"]) return SKASUnderlineNote; + else if ([[self type] isEqualToString:@"StrikeOut"]) + return SKASStrikeOutNote; else if ([[self type] isEqualToString:@"Line"]) - return SKASStrikeOutNote; - else if ([[self type] isEqualToString:@"StrikeOut"]) return SKASArrowNote; return 0; } @@ -283,6 +279,14 @@ return [NSData dataWithBytes:&qdBounds length:sizeof(Rect)]; } +- (NSData *)startPointAsQDPoint { + return (id)[NSNull null]; +} + +- (NSData *)endPointAsQDPoint { + return (id)[NSNull null]; +} + - (id)handleGoToScriptCommand:(NSScriptCommand *)command { [[[[self page] containingDocument] pdfView] scrollAnnotationToVisible:self]; return nil; @@ -918,6 +922,42 @@ } } +#pragma mark Scripting support + +- (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData { + if ([inQDPointAsData length] == sizeof(Rect)) { + const Point *qdPoint = (const Point *)[inQDPointAsData bytes]; + SKPDFView *pdfView = [[[self page] containingDocument] pdfView]; + NSPoint newPoint = NSPointFromPoint(*qdPoint); + [pdfView setNeedsDisplayForAnnotation:self]; + [self setStartPoint:newPoint]; + [pdfView setNeedsDisplayForAnnotation:self]; + } + +} + +- (NSData *)startPointAsQDPoint { + Point qdPoint = PointFromNSPoint([self startPoint]); + return [NSData dataWithBytes:&qdPoint length:sizeof(Point)]; +} + +- (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData { + if ([inQDPointAsData length] == sizeof(Rect)) { + const Point *qdPoint = (const Point *)[inQDPointAsData bytes]; + SKPDFView *pdfView = [[[self page] containingDocument] pdfView]; + NSPoint newPoint = NSPointFromPoint(*qdPoint); + [pdfView setNeedsDisplayForAnnotation:self]; + [self setEndPoint:newPoint]; + [pdfView setNeedsDisplayForAnnotation:self]; + } + +} + +- (NSData *)endPointAsQDPoint { + Point qdPoint = PointFromNSPoint([self endPoint]); + return [NSData dataWithBytes:&qdPoint length:sizeof(Point)]; +} + @end #pragma mark - Modified: trunk/Skim.sdef =================================================================== --- trunk/Skim.sdef 2007-04-20 16:22:12 UTC (rev 1867) +++ trunk/Skim.sdef 2007-04-20 18:11:16 UTC (rev 1868) @@ -546,9 +546,17 @@ <cocoa key="boundsAsQDRect"/> </property> <property name="extended text" code="XTxt" type="rich text" - description="The rich extended text of the note. Only for anchored notes."> + description="The rich extended text of an anchored note."> <cocoa key="richText"/> </property> + <property name="start point" code="SPnt" type="point" + description="The start point of an arrow. Relative to its bounding rectangle."> + <cocoa key="startPointAsQDPoint"/> + </property> + <property name="end point" code="EPnt" type="point" + description="The end point of an arrow. Relative to its bounding rectangle."> + <cocoa key="endPointAsQDPoint"/> + </property> <responds-to name="go to"> <cocoa method="handleGoToScriptCommand:"/> </responds-to> @@ -569,6 +577,8 @@ description="Strike out highlight."/> <enumerator name="underline note" code="NUnd" description="Underline highlight."/> + <enumerator name="arrow note" code="NArr" + description="Arrow."/> </enumeration> <command name="go to" code="SKIMGoTo" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-20 16:22:49
|
Revision: 1867 http://skim-app.svn.sourceforge.net/skim-app/?rev=1867&view=rev Author: hofman Date: 2007-04-20 09:22:12 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Hide hover window when removing active link. Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-20 15:59:48 UTC (rev 1866) +++ trunk/SKPDFView.m 2007-04-20 16:22:12 UTC (rev 1867) @@ -756,8 +756,10 @@ if (page) annotation = [page annotationAtPoint:[self convertPoint:p toPage:page]]; - if ([[activeAnnotation type] isEqualToString:@"Link"]) + if ([[activeAnnotation type] isEqualToString:@"Link"]) { + [[SKPDFHoverWindow sharedHoverWindow] hide]; [self setActiveAnnotation:nil]; + } // in presentation mode only show the navigation window only by moving the mouse to the bottom edge BOOL shouldShowNavWindow = hasNavigation && (autohidesCursor == NO || [theEvent locationInWindow].y < 5.0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-20 15:59:53
|
Revision: 1866 http://skim-app.svn.sourceforge.net/skim-app/?rev=1866&view=rev Author: hofman Date: 2007-04-20 08:59:48 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Use tracking rects for hover window. This allows showing the hover window also when the PDFView is not first responder. Always show using a timer; when it's already showing use a small time interval. This allows dropping hovers when moving the mouse over a series of rects, which is better than having them queued. Modified Paths: -------------- trunk/Dutch.lproj/MainWindow.nib/classes.nib trunk/Dutch.lproj/MainWindow.nib/data.dependency trunk/Dutch.lproj/MainWindow.nib/info.nib trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib trunk/English.lproj/MainWindow.nib/classes.nib trunk/English.lproj/MainWindow.nib/info.nib trunk/English.lproj/MainWindow.nib/keyedobjects.nib trunk/Italian.lproj/MainWindow.nib/classes.nib trunk/Italian.lproj/MainWindow.nib/info.nib trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib trunk/SKFullScreenWindow.m trunk/SKMainWindowController.m trunk/SKPDFHoverWindow.h trunk/SKPDFHoverWindow.m trunk/SKPDFView.h trunk/SKPDFView.m Modified: trunk/Dutch.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -32,6 +32,7 @@ SUPERCLASS = NSImageCell; }, {CLASS = SKFullScreenWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, + {CLASS = SKMainWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, { ACTIONS = { changeColor = id; Modified: trunk/Dutch.lproj/MainWindow.nib/data.dependency =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-04-20 15:59:48 UTC (rev 1866) @@ -4,7 +4,6 @@ <dict> <key>IBPaletteDependency</key> <array> - <string>Controllers</string> <string>PDFKit</string> </array> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -25,10 +25,6 @@ <array> <integer>208</integer> </array> - <key>IBOpenObjects</key> - <array> - <integer>585</integer> - </array> <key>IBSystem Version</key> <string>8P135</string> </dict> Modified: trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/classes.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/English.lproj/MainWindow.nib/classes.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -32,6 +32,7 @@ SUPERCLASS = NSImageCell; }, {CLASS = SKFullScreenWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, + {CLASS = SKMainWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, { ACTIONS = { changeColor = id; Modified: trunk/English.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/English.lproj/MainWindow.nib/info.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/English.lproj/MainWindow.nib/info.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -27,17 +27,17 @@ </array> <key>IBOpenObjects</key> <array> + <integer>502</integer> <integer>511</integer> + <integer>539</integer> + <integer>168</integer> + <integer>224</integer> + <integer>553</integer> + <integer>314</integer> + <integer>585</integer> <integer>208</integer> <integer>5</integer> - <integer>224</integer> - <integer>585</integer> - <integer>314</integer> - <integer>502</integer> - <integer>168</integer> - <integer>539</integer> <integer>256</integer> - <integer>553</integer> </array> <key>IBSystem Version</key> <string>8P135</string> Modified: trunk/English.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/MainWindow.nib/classes.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -32,6 +32,7 @@ SUPERCLASS = NSImageCell; }, {CLASS = SKFullScreenWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, + {CLASS = SKMainWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, { ACTIONS = { changeColor = id; Modified: trunk/Italian.lproj/MainWindow.nib/info.nib =================================================================== --- trunk/Italian.lproj/MainWindow.nib/info.nib 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/Italian.lproj/MainWindow.nib/info.nib 2007-04-20 15:59:48 UTC (rev 1866) @@ -3,7 +3,7 @@ <plist version="1.0"> <dict> <key>IBDocumentLocation</key> - <string>3 91 564 296 0 0 1024 746 </string> + <string>32 110 564 296 0 0 1440 938 </string> <key>IBEditorPositions</key> <dict> <key>168</key> @@ -25,10 +25,6 @@ <array> <integer>208</integer> </array> - <key>IBOpenObjects</key> - <array> - <integer>585</integer> - </array> <key>IBSystem Version</key> <string>8P135</string> </dict> Modified: trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/SKFullScreenWindow.m =================================================================== --- trunk/SKFullScreenWindow.m 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKFullScreenWindow.m 2007-04-20 15:59:48 UTC (rev 1866) @@ -38,6 +38,7 @@ #import "SKFullScreenWindow.h" #import "SKMainWindowController.h" +#import "SKPDFHoverWindow.h" @implementation SKFullScreenWindow @@ -86,4 +87,20 @@ [[self contentView] addSubview:view]; } +- (void)sendEvent:(NSEvent *)theEvent { + if ([theEvent type] == NSLeftMouseDown || [theEvent type] == NSRightMouseDown) + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super sendEvent:theEvent]; +} + +- (void)resignMainWindow { + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super resignMainWindow]; +} + +- (void)resignKeyWindow { + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super resignKeyWindow]; +} + @end Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKMainWindowController.m 2007-04-20 15:59:48 UTC (rev 1866) @@ -66,6 +66,7 @@ #import "SKThumbnailTableView.h" #import "BDSKImagePopUpButton.h" #import "NSWindowController_SKExtensions.h" +#import "SKPDFHoverWindow.h" #define SEGMENTED_CONTROL_HEIGHT 25.0 #define WINDOW_X_DELTA 0.0 @@ -3289,3 +3290,27 @@ } @end + + +@interface SKMainWindow : NSWindow +@end + +@implementation SKMainWindow + +- (void)sendEvent:(NSEvent *)theEvent { + if ([theEvent type] == NSLeftMouseDown || [theEvent type] == NSRightMouseDown) + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super sendEvent:theEvent]; +} + +- (void)resignMainWindow { + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super resignMainWindow]; +} + +- (void)resignKeyWindow { + [[SKPDFHoverWindow sharedHoverWindow] orderOut:nil]; + [super resignKeyWindow]; +} + +@end Modified: trunk/SKPDFHoverWindow.h =================================================================== --- trunk/SKPDFHoverWindow.h 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKPDFHoverWindow.h 2007-04-20 15:59:48 UTC (rev 1866) @@ -47,13 +47,14 @@ NSFont *labelFont; NSColor *labelColor; PDFAnnotation *annotation; + NSPoint point; NSViewAnimation *animation; NSTimer *timer; } + (id)sharedHoverWindow; -- (void)showForAnnotation:(PDFAnnotation *)annotation atPoint:(NSPoint)point; +- (void)showForAnnotation:(PDFAnnotation *)annotation atPoint:(NSPoint)aPoint; - (void)hide; - (void)handleApplicationWillResignActiveNotification:(NSNotification *)notification; Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKPDFHoverWindow.m 2007-04-20 15:59:48 UTC (rev 1866) @@ -79,6 +79,11 @@ labelFont = [[NSFont boldSystemFontOfSize:11.0] retain]; labelColor = [[NSColor colorWithCalibratedWhite:0.5 alpha:0.8] retain]; + annotation = nil; + point = NSZeroPoint; + animation = nil; + timer = nil; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationWillResignActiveNotification:) name:NSApplicationWillResignActiveNotification object:NSApp]; } @@ -164,6 +169,7 @@ [self setAlphaValue:ALPHA_VALUE]; [annotation release]; annotation = nil; + point = NSZeroPoint; [super orderOut:sender]; } @@ -182,47 +188,17 @@ return [self frameRectForContentRect:rect]; } -- (void)fadeIn:(NSTimer *)aTimer { - [self stopTimer]; - - NSDictionary *fadeInDict = [[NSDictionary alloc] initWithObjectsAndKeys:self, NSViewAnimationTargetKey, NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil]; - - animation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:fadeInDict, nil]]; - [fadeInDict release]; - - [self setAlphaValue:0.0]; - [super orderFront:self]; - - [animation setAnimationBlockingMode:NSAnimationNonblocking]; - [animation setDuration:0.3]; - [animation setDelegate:self]; - [animation startAnimation]; -} - -- (void)showForAnnotation:(PDFAnnotation *)note atPoint:(NSPoint)point { - if ([note isEqual:annotation]) { - if (timer) { - NSRect contentRect = [self contentRectForFrameRect:[self frame]]; - contentRect.origin.x = point.x; - contentRect.origin.y = point.y - NSHeight(contentRect) - WINDOW_OFFSET; - [self setFrame:[self hoverWindowRectFittingScreenFromRect:contentRect] display:NO]; - // Should we reset the timer? - } - return; - } - - [self stopTimer]; - - [annotation release]; - annotation = [note retain]; - +- (void)timerFired:(NSTimer *)aTimer { + NSPoint thePoint = NSEqualPoints(point, NSZeroPoint) ? [NSEvent mouseLocation] : point; NSRect rect = NSZeroRect; - NSRect contentRect = NSMakeRect(point.x, point.y - WINDOW_OFFSET, WINDOW_WIDTH, WINDOW_HEIGHT); + NSRect contentRect = NSMakeRect(thePoint.x, thePoint.y - WINDOW_OFFSET, WINDOW_WIDTH, WINDOW_HEIGHT); NSImage *image = nil; NSAttributedString *text = nil; NSString *string = nil; NSColor *color = nil; + [self stopTimer]; + if ([[annotation type] isEqualToString:@"Link"]) { PDFDestination *dest = [annotation destination]; @@ -334,19 +310,23 @@ [[imageView enclosingScrollView] setBackgroundColor:color]; - if (animation) { - [animation stopAnimation]; - if ([self alphaValue] > 0.9) - [self orderFront:self]; - else - [self fadeIn:nil]; - } else if ([self isVisible] == NO) { - [super orderOut:self]; - timer = [[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(fadeIn:) userInfo:NULL repeats:NO] retain]; - } else { + [animation stopAnimation]; + if ([self isVisible] && [self alphaValue] > 0.9) { [self orderFront:self]; + } else { + NSDictionary *fadeInDict = [[NSDictionary alloc] initWithObjectsAndKeys:self, NSViewAnimationTargetKey, NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil]; + + animation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:fadeInDict, nil]]; + [fadeInDict release]; + + [self setAlphaValue:0.0]; + [super orderFront:self]; + + [animation setAnimationBlockingMode:NSAnimationNonblocking]; + [animation setDuration:0.3]; + [animation setDelegate:self]; + [animation startAnimation]; } - } else { [self hide]; @@ -354,6 +334,24 @@ } } +- (void)showForAnnotation:(PDFAnnotation *)note atPoint:(NSPoint)aPoint { + point = aPoint; + + if ([note isEqual:annotation] == NO) { + [self stopTimer]; + + if ([self isVisible] && [self alphaValue] > 0.9) + [animation stopAnimation]; + + [annotation release]; + annotation = [note retain]; + + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:[self isVisible] ? 0.1 : 1.5]; + timer = [[NSTimer alloc] initWithFireDate:date interval:0 target:self selector:@selector(timerFired:) userInfo:NULL repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; + } +} + - (void)hide { if (annotation == nil) return; @@ -363,6 +361,7 @@ [annotation release]; annotation = nil; + point = NSZeroPoint; NSDictionary *fadeOutDict = [[NSDictionary alloc] initWithObjectsAndKeys:self, NSViewAnimationTargetKey, NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil]; Modified: trunk/SKPDFView.h =================================================================== --- trunk/SKPDFView.h 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKPDFView.h 2007-04-20 15:59:48 UTC (rev 1866) @@ -90,6 +90,8 @@ BOOL mouseDownInAnnotation; int trackingRect; + NSMutableArray *hoverRects; + int hoverRect; } - (SKToolMode)toolMode; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-19 23:37:34 UTC (rev 1865) +++ trunk/SKPDFView.m 2007-04-20 15:59:48 UTC (rev 1866) @@ -69,6 +69,11 @@ @interface SKPDFView (Private) +- (NSRange)visiblePageIndexRange; + +- (void)resetHoverRects; +- (void)removeHoverRects; + - (NSRect)resizeThumbForRect:(NSRect) rect rotation:(int)rotation; - (NSRect)resizeThumbForRect:(NSRect) rect point:(NSPoint)point; - (void)transformCGContext:(CGContextRef)context forPage:(PDFPage *)page; @@ -173,15 +178,19 @@ [[NSNotificationCenter defaultCenter] removeObserver:self]; [self doAutohide:NO]; // invalidates and releases the timer [[SKPDFHoverWindow sharedHoverWindow] orderOut:self]; + [self removeHoverRects]; + [hoverRects release]; [navWindow release]; [readingBar release]; [super dealloc]; } -// Fix a bug in Tiger's PDFKit, tooltips lead to a crash when you reload a PDFDocument in a PDFView -// see http://www.cocoabuilder.com/archive/message/cocoa/2007/3/12/180190 -- (void)scheduleAddingToolips {} +- (void)resetCursorRects { + [super resetCursorRects]; + [self resetHoverRects]; +} + #pragma mark Drawing - (void)drawPage:(PDFPage *)pdfPage { @@ -314,7 +323,9 @@ - (void)setDocument:(PDFDocument *)document { [readingBar release]; readingBar = nil; + [self removeHoverRects]; [super setDocument:document]; + [self resetHoverRects]; } - (SKToolMode)toolMode { @@ -421,15 +432,27 @@ } - (void)mouseEntered:(NSEvent *)theEvent { + NSTrackingRectTag trackingNumber = [theEvent trackingNumber]; [super mouseEntered:theEvent]; - if ([theEvent trackingNumber] == trackingRect) + if (trackingNumber == trackingRect) { [[self window] setAcceptsMouseMovedEvents:YES]; + } else if (NSNotFound != [hoverRects indexOfObject:(id)trackingNumber]) { + [[SKPDFHoverWindow sharedHoverWindow] showForAnnotation:(id)[theEvent userData] atPoint:NSZeroPoint]; + hoverRect = trackingNumber; + } } - (void)mouseExited:(NSEvent *)theEvent { + NSTrackingRectTag trackingNumber = [theEvent trackingNumber]; [super mouseExited:theEvent]; - if ([theEvent trackingNumber] == trackingRect) + if (trackingNumber == trackingRect) { [[self window] setAcceptsMouseMovedEvents:NO]; + } else if (NSNotFound != [hoverRects indexOfObject:(id)trackingNumber]) { + if (hoverRect == trackingNumber) { + [[SKPDFHoverWindow sharedHoverWindow] hide]; + hoverRect = 0; + } + } } #pragma mark Actions @@ -571,7 +594,6 @@ } - (void)mouseDown:(NSEvent *)theEvent{ - [[SKPDFHoverWindow sharedHoverWindow] orderOut:self]; if ([[activeAnnotation type] isEqualToString:@"Link"]) [self setActiveAnnotation:nil]; @@ -734,11 +756,6 @@ if (page) annotation = [page annotationAtPoint:[self convertPoint:p toPage:page]]; - if ([[annotation type] isEqualToString:@"Link"] || [annotation text]) - [[SKPDFHoverWindow sharedHoverWindow] showForAnnotation:annotation atPoint:[[self window] convertBaseToScreen:[theEvent locationInWindow]]]; - else - [[SKPDFHoverWindow sharedHoverWindow] hide]; - if ([[activeAnnotation type] isEqualToString:@"Link"]) [self setActiveAnnotation:nil]; @@ -1400,6 +1417,67 @@ } } +- (void)doAutohide:(BOOL)flag { + if (autohideTimer) { + [autohideTimer invalidate]; + [autohideTimer release]; + autohideTimer = nil; + } + if (flag) + autohideTimer = [[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(autohideTimerFired:) userInfo:nil repeats:NO] retain]; +} + +- (NSRange)visiblePageIndexRange { + NSRect visibleRect = [[[self documentView] superview] convertRect:[[[self documentView] superview] visibleRect] toView:self]; + PDFPage *page; + unsigned first, last; + + page = [self pageForPoint:NSMakePoint(NSMinX(visibleRect), NSMaxY(visibleRect)) nearest:YES]; + first = [[self document] indexForPage:page]; + page = [self pageForPoint:NSMakePoint(NSMaxX(visibleRect), NSMinY(visibleRect)) nearest:YES]; + last = [[self document] indexForPage:page]; + + return NSMakeRange(first, last - first + 1); +} + +#pragma mark Hover-rects + +// Fix a bug in Tiger's PDFKit, tooltips lead to a crash when you reload a PDFDocument in a PDFView +// see http://www.cocoabuilder.com/archive/message/cocoa/2007/3/12/180190 +- (void)scheduleAddingToolips {} + +- (void)removeHoverRects { + CFIndex idx = [hoverRects count]; + while (idx--) { + [self removeTrackingRect:(NSTrackingRectTag)[hoverRects objectAtIndex:idx]]; + [hoverRects removeObjectAtIndex:idx]; + } +} + +- (void)resetHoverRects { + if (hoverRects == nil) + hoverRects = (NSMutableArray *)CFArrayCreateMutable(NULL, 0, NULL); + else + [self removeHoverRects]; + + NSRange range = [self visiblePageIndexRange]; + int i, iMax = NSMaxRange(range); + NSRect visibleRect = [[[self documentView] superview] convertRect:[[[self documentView] superview] visibleRect] toView:self]; + + for (i = 0; i < iMax; i++) { + PDFPage *page = [[self document] pageAtIndex:i]; + NSArray *annotations = [page annotations]; + unsigned j, jMax = [annotations count]; + for (j = 0; j < jMax; j++) { + PDFAnnotation *annotation = [annotations objectAtIndex:j]; + NSRect rect = NSIntersectionRect([self convertRect:[annotation bounds] fromPage:page], visibleRect); + if (NSIsEmptyRect(rect)) continue; + NSTrackingRectTag tag = [self addTrackingRect:rect owner:self userData:annotation assumeInside:NO]; + [hoverRects addObject:(id)tag]; + } + } +} + #pragma mark Autohide timer - (void)autohideTimerFired:(NSTimer *)aTimer { @@ -1411,16 +1489,6 @@ [navWindow hide]; } -- (void)doAutohide:(BOOL)flag { - if (autohideTimer) { - [autohideTimer invalidate]; - [autohideTimer release]; - autohideTimer = nil; - } - if (flag) - autohideTimer = [[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(autohideTimerFired:) userInfo:nil repeats:NO] retain]; -} - #pragma mark Event handling - (PDFDestination *)destinationForEvent:(NSEvent *)theEvent isLink:(BOOL *)isLink { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-19 23:37:35
|
Revision: 1865 http://skim-app.svn.sourceforge.net/skim-app/?rev=1865&view=rev Author: hofman Date: 2007-04-19 16:37:34 -0700 (Thu, 19 Apr 2007) Log Message: ----------- Simplify code: let the annotation decide when it's hit. Modified Paths: -------------- trunk/SKPDFAnnotationNote.h trunk/SKPDFAnnotationNote.m trunk/SKPDFView.m Modified: trunk/SKPDFAnnotationNote.h =================================================================== --- trunk/SKPDFAnnotationNote.h 2007-04-19 23:20:07 UTC (rev 1864) +++ trunk/SKPDFAnnotationNote.h 2007-04-19 23:37:34 UTC (rev 1865) @@ -64,6 +64,8 @@ - (BOOL)isMovable; - (BOOL)isEditable; +- (BOOL)hitTest:(NSPoint)point; + - (NSScriptObjectSpecifier *)objectSpecifier; - (int)noteType; - (id)textContents; @@ -88,7 +90,6 @@ } - (id)initWithBounds:(NSRect)bounds markupType:(int)type quadrilateralPointsAsStrings:(NSArray *)pointStrings; - (id)initWithSelection:(PDFSelection *)selection markupType:(int)type; -- (BOOL)linesContainPoint:(NSPoint)point; @end @interface SKPDFAnnotationFreeText : PDFAnnotationFreeText @@ -108,7 +109,6 @@ @end @interface SKPDFAnnotationLine : PDFAnnotationLine -- (BOOL)pointNearLine:(NSPoint)point; @end @interface SKPDFAnnotationTemporary : PDFAnnotationCircle Modified: trunk/SKPDFAnnotationNote.m =================================================================== --- trunk/SKPDFAnnotationNote.m 2007-04-19 23:20:07 UTC (rev 1864) +++ trunk/SKPDFAnnotationNote.m 2007-04-19 23:37:34 UTC (rev 1865) @@ -166,6 +166,10 @@ - (BOOL)isEditable { return NO; } +- (BOOL)hitTest:(NSPoint)point { + return NSPointInRect(point, [self bounds]); +} + #pragma mark Scripting support - (id)init { @@ -575,16 +579,20 @@ } } -// this allows more precise hit testing of these annotations, since markup may not cover the entire bounds -- (BOOL)linesContainPoint:(NSPoint)point { +- (BOOL)hitTest:(NSPoint)point { + if ([super hitTest:point] == NO) + return NO; + // archived annotations (or annotations we didn't create) won't have these if (0 == numberOfLines) [self regenerateLineRects]; unsigned i = numberOfLines; BOOL isContained = NO; + while (i-- && NO == isContained) isContained = NSPointInRect(point, lineRects[i]); + return isContained; } @@ -885,20 +893,29 @@ object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"color", @"key", nil]]; } -- (BOOL)pointNearLine:(NSPoint)point { +- (BOOL)hitTest:(NSPoint)point { + NSRect bounds = [self bounds]; NSPoint startPoint = [self startPoint]; NSPoint endPoint = [self endPoint]; - NSPoint relPoint = NSMakePoint(endPoint.x - startPoint.x, endPoint.y - startPoint.y); - NSRect bounds = [self bounds]; - float lengthSquared = relPoint.x * relPoint.x + relPoint.y * relPoint.y; - float extProduct; - if (lengthSquared < 16.0) - return YES; - - extProduct = (point.x - NSMinX(bounds) - startPoint.x) * relPoint.y - (point.y - NSMinY(bounds) - startPoint.y) * relPoint.x; - - return extProduct * extProduct < 16.0 * lengthSquared; + if ([super hitTest:point]) { + NSPoint relPoint = NSMakePoint(endPoint.x - startPoint.x, endPoint.y - startPoint.y); + float lengthSquared = relPoint.x * relPoint.x + relPoint.y * relPoint.y; + float extProduct; + + if (lengthSquared < 16.0) + return YES; + + extProduct = (point.x - NSMinX(bounds) - startPoint.x) * relPoint.y - (point.y - NSMinY(bounds) - startPoint.y) * relPoint.x; + + return extProduct * extProduct < 16.0 * lengthSquared; + } else { + point.x -= NSMinX(bounds); + point.y -= NSMinY(bounds); + + return (fabs(point.x - startPoint.x) < 4.0 && fabs(point.y - startPoint.y) < 4.0) || + (fabs(point.x - endPoint.x) < 4.0 && fabs(point.y - endPoint.y) < 4.0); + } } @end Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-19 23:20:07 UTC (rev 1864) +++ trunk/SKPDFView.m 2007-04-19 23:37:34 UTC (rev 1865) @@ -1830,40 +1830,16 @@ i = [annotations count]; while (i-- > 0) { - NSRect annotationBounds; PDFAnnotation *annotationHit = [annotations objectAtIndex:i]; // Hit test annotation. - annotationBounds = [annotationHit bounds]; - if (NSPointInRect(pagePoint, annotationBounds)) { - if ([annotationHit isNoteAnnotation]) { - mouseDownInAnnotation = YES; - - if ([annotationHit respondsToSelector:@selector(linesContainPoint:)]) { - // markup annotations aren't necessarily defined by a box - if ([(SKPDFAnnotationMarkup *)annotationHit linesContainPoint:pagePoint]) { - newActiveAnnotation = annotationHit; - break; - } - } else if ([annotationHit respondsToSelector:@selector(pointNearLine:)] == NO || - [(SKPDFAnnotationLine *)annotationHit pointNearLine:pagePoint]) { - // We count this one. - newActiveAnnotation = annotationHit; - - // Remember click point relative to annotation origin. - clickDelta.x = pagePoint.x - annotationBounds.origin.x; - clickDelta.y = pagePoint.y - annotationBounds.origin.y; - break; - } - } - } else if ([[annotationHit type] isEqualToString:@"Line"] && - (NSPointInRect(pagePoint, [self resizeThumbForRect:annotationBounds point:[(SKPDFAnnotationLine *)annotationHit endPoint]]) || - NSPointInRect(pagePoint, [self resizeThumbForRect:annotationBounds point:[(SKPDFAnnotationLine *)annotationHit startPoint]]))) { + if ([annotationHit isNoteAnnotation] && [annotationHit hitTest:pagePoint]) { + mouseDownInAnnotation = YES; newActiveAnnotation = annotationHit; - // Remember click point relative to annotation origin. - clickDelta.x = pagePoint.x - annotationBounds.origin.x; - clickDelta.y = pagePoint.y - annotationBounds.origin.y; + clickDelta.x = pagePoint.x - NSMinX([annotationHit bounds]); + clickDelta.y = pagePoint.y - NSMinY([annotationHit bounds]); + break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-19 23:20:08
|
Revision: 1864 http://skim-app.svn.sourceforge.net/skim-app/?rev=1864&view=rev Author: hofman Date: 2007-04-19 16:20:07 -0700 (Thu, 19 Apr 2007) Log Message: ----------- Select line annotation from resize handles. Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-19 22:11:41 UTC (rev 1863) +++ trunk/SKPDFView.m 2007-04-19 23:20:07 UTC (rev 1864) @@ -1856,6 +1856,14 @@ break; } } + } else if ([[annotationHit type] isEqualToString:@"Line"] && + (NSPointInRect(pagePoint, [self resizeThumbForRect:annotationBounds point:[(SKPDFAnnotationLine *)annotationHit endPoint]]) || + NSPointInRect(pagePoint, [self resizeThumbForRect:annotationBounds point:[(SKPDFAnnotationLine *)annotationHit startPoint]]))) { + newActiveAnnotation = annotationHit; + + // Remember click point relative to annotation origin. + clickDelta.x = pagePoint.x - annotationBounds.origin.x; + clickDelta.y = pagePoint.y - annotationBounds.origin.y; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-19 22:11:47
|
Revision: 1863 http://skim-app.svn.sourceforge.net/skim-app/?rev=1863&view=rev Author: hofman Date: 2007-04-19 15:11:41 -0700 (Thu, 19 Apr 2007) Log Message: ----------- Add new arrow note type. Can be added through the main menu item, context menu item, and toolbar item. Can be dragged and end points can be moved separately. Add icons for arrow. Modified Paths: -------------- trunk/Dutch.lproj/Localizable.strings trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/English.lproj/Localizable.strings trunk/English.lproj/MainMenu.nib/keyedobjects.nib trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/InitialUserDefaults.plist trunk/SKMainWindowController.m trunk/SKNoteOutlineView.m trunk/SKPDFAnnotationNote.h trunk/SKPDFAnnotationNote.m trunk/SKPDFView.h trunk/SKPDFView.m trunk/SKStringConstants.h trunk/SKStringConstants.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/Images/ArrowNoteAdorn.tiff trunk/Images/ToolbarArrowNote.tiff Modified: trunk/Dutch.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Added: trunk/Images/ArrowNoteAdorn.tiff =================================================================== (Binary files differ) Property changes on: trunk/Images/ArrowNoteAdorn.tiff ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Images/ToolbarArrowNote.tiff =================================================================== (Binary files differ) Property changes on: trunk/Images/ToolbarArrowNote.tiff ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/InitialUserDefaults.plist =================================================================== --- trunk/InitialUserDefaults.plist 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/InitialUserDefaults.plist 2007-04-19 22:11:41 UTC (rev 1863) @@ -116,6 +116,11 @@ BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmAQAAAYY= </data> + <key>SKArrowNoteColor</key> + <data> + BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm + ZmZmAAABAYY= + </data> <key>SUCheckAtStartup</key> <false/> <key>SUScheduledCheckInterval</key> @@ -161,6 +166,7 @@ <string>SKHighlightNoteColor</string> <string>SKUnderlineNoteColor</string> <string>SKStrikeOutNoteColor</string> + <string>SKArrowNoteColor</string> <string>SKTextNoteFontName</string> <string>SKTextNoteFontSize</string> </array> Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKMainWindowController.m 2007-04-19 22:11:41 UTC (rev 1863) @@ -91,6 +91,7 @@ static NSString *SKDocumentToolbarNewNoteItemIdentifier = @"SKDocumentToolbarNewNoteItemIdentifier"; static NSString *SKDocumentToolbarNewCircleNoteItemIdentifier = @"SKDocumentToolbarNewCircleNoteItemIdentifier"; static NSString *SKDocumentToolbarNewMarkupItemIdentifier = @"SKDocumentToolbarNewMarkupItemIdentifier"; +static NSString *SKDocumentToolbarNewArrowItemIdentifier = @"SKDocumentToolbarNewArrowItemIdentifier"; static NSString *SKDocumentToolbarInfoItemIdentifier = @"SKDocumentToolbarInfoItemIdentifier"; static NSString *SKDocumentToolbarToolModeItemIdentifier = @"SKDocumentToolbarToolModeItemIdentifier"; static NSString *SKDocumentToolbarDisplayBoxItemIdentifier = @"SKDocumentToolbarDisplayBoxItemIdentifier"; @@ -2848,6 +2849,17 @@ [toolbarItems setObject:item forKey:SKDocumentToolbarNewMarkupItemIdentifier]; [item release]; + item = [[SKToolbarItem alloc] initWithItemIdentifier:SKDocumentToolbarNewArrowItemIdentifier]; + [item setLabel:NSLocalizedString(@"Add Arrow", @"Toolbar item label")]; + [item setPaletteLabel:NSLocalizedString(@"Add Arrow", @"Toolbar item label")]; + [item setToolTip:NSLocalizedString(@"Add New Arrow", @"Tool tip message")]; + [item setTag:SKArrowNote]; + [item setTarget:self]; + [item setAction:@selector(createNewNote:)]; + [item setImage:[NSImage imageNamed:@"ToolbarArrowNote"]]; + [toolbarItems setObject:item forKey:SKDocumentToolbarNewArrowItemIdentifier]; + [item release]; + [markupPopUpButton setArrowImage:downArrow]; [markupPopUpButton setShowsMenuWhenIconClicked:NO]; [[markupPopUpButton cell] setAltersStateOfSelectedItem:YES]; @@ -2985,6 +2997,7 @@ SKDocumentToolbarNewNoteItemIdentifier, SKDocumentToolbarNewCircleNoteItemIdentifier, SKDocumentToolbarNewMarkupItemIdentifier, + SKDocumentToolbarNewArrowItemIdentifier, SKDocumentToolbarInfoItemIdentifier, SKDocumentToolbarContentsPaneItemIdentifier, SKDocumentToolbarNotesPaneItemIdentifier, Modified: trunk/SKNoteOutlineView.m =================================================================== --- trunk/SKNoteOutlineView.m 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKNoteOutlineView.m 2007-04-19 22:11:41 UTC (rev 1863) @@ -232,6 +232,7 @@ static NSImage *highlightImage = nil; static NSImage *strikeOutImage = nil; static NSImage *underlineImage = nil; + static NSImage *arrowImage = nil; static NSImage *invertedTextImage = nil; static NSImage *invertedNoteImage = nil; static NSImage *invertedCircleImage = nil; @@ -239,6 +240,7 @@ static NSImage *invertedHighlightImage = nil; static NSImage *invertedStrikeOutImage = nil; static NSImage *invertedUnderlineImage = nil; + static NSImage *invertedArrowImage = nil; if (textImage == nil) { CIFilter *filter = [CIFilter filterWithName:@"CIColorInvert"]; @@ -250,6 +252,7 @@ highlightImage = [[NSImage imageNamed:@"HighlightNoteAdorn"] retain]; strikeOutImage = [[NSImage imageNamed:@"StrikeOutNoteAdorn"] retain]; underlineImage = [[NSImage imageNamed:@"UnderlineNoteAdorn"] retain]; + arrowImage = [[NSImage imageNamed:@"ArrowNoteAdorn"] retain]; invertedTextImage = createFilteredImage(textImage, filter); invertedNoteImage = createFilteredImage(noteImage, filter); invertedCircleImage = createFilteredImage(circleImage, filter); @@ -257,6 +260,7 @@ invertedHighlightImage = createFilteredImage(highlightImage, filter); invertedStrikeOutImage = createFilteredImage(strikeOutImage, filter); invertedUnderlineImage = createFilteredImage(underlineImage, filter); + invertedArrowImage = createFilteredImage(arrowImage, filter); } BOOL isSelected = [self isHighlighted] && [[controlView window] isKeyWindow] && [[[controlView window] firstResponder] isEqual:controlView]; @@ -276,6 +280,8 @@ image = isSelected ? invertedStrikeOutImage : strikeOutImage; else if ([type isEqualToString:@"Underline"]) image = isSelected ? invertedUnderlineImage : underlineImage; + else if ([type isEqualToString:@"Line"]) + image = isSelected ? invertedArrowImage : arrowImage; if (active) { [[NSGraphicsContext currentContext] saveGraphicsState]; Modified: trunk/SKPDFAnnotationNote.h =================================================================== --- trunk/SKPDFAnnotationNote.h 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKPDFAnnotationNote.h 2007-04-19 22:11:41 UTC (rev 1863) @@ -107,6 +107,10 @@ @end +@interface SKPDFAnnotationLine : PDFAnnotationLine +- (BOOL)pointNearLine:(NSPoint)point; +@end + @interface SKPDFAnnotationTemporary : PDFAnnotationCircle @end Modified: trunk/SKPDFAnnotationNote.m =================================================================== --- trunk/SKPDFAnnotationNote.m 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKPDFAnnotationNote.m 2007-04-19 22:11:41 UTC (rev 1863) @@ -48,7 +48,8 @@ SKASSquareNote = 'NSqu', SKASHighlightNote = 'NHil', SKASUnderlineNote = 'NUnd', - SKASStrikeOutNote = 'NStr' + SKASStrikeOutNote = 'NStr', + SKASArrowNote = 'NArr' }; NSString *SKAnnotationWillChangeNotification = @"SKAnnotationWillChangeNotification"; @@ -109,6 +110,13 @@ self = [[SKPDFAnnotationMarkup alloc] initWithBounds:bounds markupType:kPDFMarkupTypeUnderline quadrilateralPointsAsStrings:[dict objectForKey:@"quadrilateralPoints"]]; } else if ([type isEqualToString:@"StrikeOut"]) { self = [[SKPDFAnnotationMarkup alloc] initWithBounds:bounds markupType:kPDFMarkupTypeStrikeOut quadrilateralPointsAsStrings:[dict objectForKey:@"quadrilateralPoints"]]; + } else if ([type isEqualToString:@"Line"]) { + self = [[SKPDFAnnotationLine alloc] initWithBounds:bounds]; + NSString *point; + if (point = [dict objectForKey:@"startPoint"]) + [(SKPDFAnnotationLine *)self setStartPoint:NSPointFromString(point)]; + if (point = [dict objectForKey:@"endPoint"]) + [(SKPDFAnnotationLine *)self setEndPoint:NSPointFromString(point)]; } else { self = nil; } @@ -227,8 +235,10 @@ return SKASHighlightNote; else if ([[self type] isEqualToString:@"Underline"]) return SKASUnderlineNote; + else if ([[self type] isEqualToString:@"Line"]) + return SKASStrikeOutNote; else if ([[self type] isEqualToString:@"StrikeOut"]) - return SKASStrikeOutNote; + return SKASArrowNote; return 0; } @@ -815,6 +825,86 @@ #pragma mark - +@implementation SKPDFAnnotationLine + +- (id)initWithBounds:(NSRect)bounds { + if (self = [super initWithBounds:bounds]) { + [self setColor:[NSUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:SKArrowNoteColorKey]]]; + [self setStartLineStyle:kPDFLineStyleNone]; + [self setEndLineStyle:kPDFLineStyleOpenArrow]; + [self setStartPoint:NSZeroPoint]; + [self setEndPoint:NSMakePoint(NSWidth(bounds), NSHeight(bounds))]; + } + return self; +} + +- (NSDictionary *)dictionaryValue { + NSMutableDictionary *dict = (NSMutableDictionary *)[super dictionaryValue]; + [dict setValue:NSStringFromPoint([self startPoint]) forKey:@"startPoint"]; + [dict setValue:NSStringFromPoint([self endPoint]) forKey:@"endPoint"]; + return dict; +} + +- (BOOL)isNoteAnnotation { return YES; } + +- (BOOL)isResizable { return YES; } + +- (BOOL)isMovable { return YES; } + +- (BOOL)shouldPrint { return YES; } + +- (void)setStartPoint:(NSPoint)point { + [super setStartPoint:point]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationDidChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"startPoint", @"key", nil]]; +} + +- (void)setEndPoint:(NSPoint)point { + [super setEndPoint:point]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationDidChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"endPoint", @"key", nil]]; +} + +- (void)setBounds:(NSRect)bounds { + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationWillChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"bounds", @"key", nil]]; + [super setBounds:bounds]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationDidChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"bounds", @"key", nil]]; +} + +- (void)setContents:(NSString *)contents { + [super setContents:contents]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationDidChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"contents", @"key", nil]]; +} + +- (void)setColor:(NSColor *)color { + [super setColor:color]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKAnnotationDidChangeNotification + object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"color", @"key", nil]]; +} + +- (BOOL)pointNearLine:(NSPoint)point { + NSPoint startPoint = [self startPoint]; + NSPoint endPoint = [self endPoint]; + NSPoint relPoint = NSMakePoint(endPoint.x - startPoint.x, endPoint.y - startPoint.y); + NSRect bounds = [self bounds]; + float lengthSquared = relPoint.x * relPoint.x + relPoint.y * relPoint.y; + float extProduct; + + if (lengthSquared < 16.0) + return YES; + + extProduct = (point.x - NSMinX(bounds) - startPoint.x) * relPoint.y - (point.y - NSMinY(bounds) - startPoint.y) * relPoint.x; + + return extProduct * extProduct < 16.0 * lengthSquared; +} + +@end + +#pragma mark - + // useful for highlighting things; isTemporaryAnnotation is so we know to remove it @implementation SKPDFAnnotationTemporary Modified: trunk/SKPDFView.h =================================================================== --- trunk/SKPDFView.h 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKPDFView.h 2007-04-19 22:11:41 UTC (rev 1863) @@ -61,7 +61,8 @@ SKSquareNote, SKHighlightNote, SKUnderlineNote, - SKStrikeOutNote + SKStrikeOutNote, + SKArrowNote } SKNoteType; @class SKReadingBar; @@ -79,10 +80,13 @@ PDFAnnotation *activeAnnotation; PDFAnnotationTextWidget *editAnnotation; NSRect wasBounds; + NSPoint wasStartPoint; + NSPoint wasEndPoint; NSPoint mouseDownLoc; NSPoint clickDelta; BOOL resizingAnnotation; BOOL draggingAnnotation; + BOOL draggingStartPoint; BOOL mouseDownInAnnotation; int trackingRect; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKPDFView.m 2007-04-19 22:11:41 UTC (rev 1863) @@ -70,6 +70,7 @@ @interface SKPDFView (Private) - (NSRect)resizeThumbForRect:(NSRect) rect rotation:(int)rotation; +- (NSRect)resizeThumbForRect:(NSRect) rect point:(NSPoint)point; - (void)transformCGContext:(CGContextRef)context forPage:(PDFPage *)page; - (void)autohideTimerFired:(NSTimer *)aTimer; @@ -236,6 +237,14 @@ CGContextAddPath(context, path); CGContextStrokePath(context); CGPathRelease(path); + } else if ([[activeAnnotation type] isEqualToString:@"Line"]) { + color[3] = 0.7; + rect = NSIntegralRect([self resizeThumbForRect:bounds point:[(SKPDFAnnotationLine *)activeAnnotation startPoint]]); + CGContextSetFillColor(context, color); + CGContextFillRect(context, *(CGRect *)&rect); + rect = NSIntegralRect([self resizeThumbForRect:bounds point:[(SKPDFAnnotationLine *)activeAnnotation endPoint]]); + CGContextSetFillColor(context, color); + CGContextFillRect(context, *(CGRect *)&rect); } else { CGContextSetStrokeColor(context, color); CGContextStrokeRectWithWidth(context, *(CGRect *)&rect, lineWidth); @@ -294,6 +303,8 @@ if ([[annotation type] isEqualToString:@"Underline"]) { bounds.origin.y -= 0.03 * NSHeight(bounds); bounds.size.height *= 1.03; + } else if ([[annotation type] isEqualToString:@"Line"] && [annotation isEqual:activeAnnotation]) { + bounds = NSInsetRect(bounds, -4.0, -4.0); } [self setNeedsDisplayInRect:bounds ofPage:[annotation page]]; } @@ -606,7 +617,7 @@ mouseDownInAnnotation = NO; if (draggingAnnotation) { draggingAnnotation = NO; - if ([activeAnnotation isEditable] == NO) { + if ([[activeAnnotation type] isEqualToString:@"Square"] || [[activeAnnotation type] isEqualToString:@"Square"]) { NSString *selString = [[[[activeAnnotation page] selectionForRect:[activeAnnotation bounds]] string] stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; [activeAnnotation setContents:selString]; } @@ -845,6 +856,11 @@ [item setTarget:self]; } + item = [submenu addItemWithTitle:NSLocalizedString(@"Arrow", @"Menu item title") action:@selector(addAnnotationFromMenu:) keyEquivalent:@""]; + [item setRepresentedObject:[NSValue valueWithPoint:point]]; + [item setTag:SKArrowNote]; + [item setTarget:self]; + item = [menu addItemWithTitle:NSLocalizedString(@"New Note", @"Menu item title") action:NULL keyEquivalent:@""]; [item setSubmenu:submenu]; [submenu release]; @@ -1005,12 +1021,16 @@ case SKStrikeOutNote: newAnnotation = [[SKPDFAnnotationMarkup alloc] initWithSelection:[self currentSelection] markupType:kPDFMarkupTypeStrikeOut]; break; + case SKArrowNote: + newAnnotation = [[SKPDFAnnotationLine alloc] initWithBounds:bounds]; + break; } if (text == nil) text = [[[page selectionForRect:bounds] string] stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; - - [newAnnotation setContents:text]; + if ([[activeAnnotation type] isEqualToString:@"Line"] == NO) + [newAnnotation setContents:text]; + [page addAnnotation:newAnnotation]; [[NSNotificationCenter defaultCenter] postNotificationName:SKPDFViewDidAddAnnotationNotification object:self @@ -1345,6 +1365,19 @@ return thumb; } +- (NSRect)resizeThumbForRect:(NSRect) rect point:(NSPoint)point +{ + NSRect thumb = rect; + float size = 8.0; + + thumb.size = NSMakeSize(size, size); + + thumb.origin.x = NSMinX(rect) + point.x - 0.5 * size; + thumb.origin.y = NSMinY(rect) + point.y - 0.5 * size; + + return thumb; +} + - (void)transformCGContext:(CGContextRef)context forPage:(PDFPage *)page { NSRect boxRect = [page boundsForBox:[self displayBox]]; @@ -1491,7 +1524,7 @@ if (NSEqualRects(bounds, newBounds) == NO) { [activeAnnotation setBounds:newBounds]; - if ([activeAnnotation isEditable] == NO) { + if ([[activeAnnotation type] isEqualToString:@"Square"] || [[activeAnnotation type] isEqualToString:@"Square"]) { NSString *selString = [[[[activeAnnotation page] selectionForRect:newBounds] string] stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; [activeAnnotation setContents:selString]; } @@ -1504,130 +1537,253 @@ PDFPage *page = [activeAnnotation page]; NSRect pageBounds = [page boundsForBox:[self displayBox]]; - switch ([page rotation]) { - case 0: - if (eventChar == NSRightArrowFunctionKey) { - if (NSMaxX(bounds) + delta <= NSMaxX(pageBounds)) { - newBounds.size.width += delta; - } else if (NSMaxX(bounds) < NSMaxX(pageBounds)) { - newBounds.size.width += NSMaxX(pageBounds) - NSMaxX(bounds); + if ([[activeAnnotation type] isEqualToString:@"Line"]) { + + SKPDFAnnotationLine *annotation = (SKPDFAnnotationLine *)activeAnnotation; + NSPoint oldEndPoint = [annotation endPoint]; + NSPoint endPoint; + NSPoint startPoint = [annotation startPoint]; + startPoint.x += NSMinX(bounds); + startPoint.y += NSMinY(bounds); + oldEndPoint.x += NSMinX(bounds); + oldEndPoint.y += NSMinY(bounds); + endPoint = oldEndPoint; + + // Resize the annotation. + switch ([page rotation]) { + case 0: + if (eventChar == NSRightArrowFunctionKey) { + endPoint.x += delta; + if (endPoint.x > NSMaxX(pageBounds)) + endPoint.x = NSMaxX(pageBounds); + } else if (eventChar == NSLeftArrowFunctionKey) { + endPoint.x -= delta; + if (endPoint.x < NSMinX(pageBounds)) + endPoint.x = NSMinX(pageBounds); + } else if (eventChar == NSUpArrowFunctionKey) { + endPoint.y += delta; + if (endPoint.y > NSMaxY(pageBounds)) + endPoint.y = NSMaxY(pageBounds); + } else if (eventChar == NSDownArrowFunctionKey) { + endPoint.y -= delta; + if (endPoint.y < NSMinY(pageBounds)) + endPoint.y = NSMinY(pageBounds); } - } else if (eventChar == NSLeftArrowFunctionKey) { - newBounds.size.width -= delta; - if (NSWidth(newBounds) < 8.0) { - newBounds.size.width = 8.0; + break; + case 90: + if (eventChar == NSRightArrowFunctionKey) { + endPoint.y += delta; + if (endPoint.y > NSMaxY(pageBounds)) + endPoint.y = NSMaxY(pageBounds); + } else if (eventChar == NSLeftArrowFunctionKey) { + endPoint.y -= delta; + if (endPoint.y < NSMinY(pageBounds)) + endPoint.y = NSMinY(pageBounds); + } else if (eventChar == NSUpArrowFunctionKey) { + endPoint.x -= delta; + if (endPoint.x < NSMinX(pageBounds)) + endPoint.x = NSMinX(pageBounds); + } else if (eventChar == NSDownArrowFunctionKey) { + endPoint.x += delta; + if (endPoint.x > NSMaxX(pageBounds)) + endPoint.x = NSMaxX(pageBounds); } - } else if (eventChar == NSUpArrowFunctionKey) { - newBounds.origin.y += delta; - newBounds.size.height -= delta; - if (NSHeight(newBounds) < 8.0) { - newBounds.origin.y += NSHeight(newBounds) - 8.0; - newBounds.size.height = 8.0; + break; + case 180: + if (eventChar == NSRightArrowFunctionKey) { + endPoint.x -= delta; + if (endPoint.x < NSMinX(bounds)) + endPoint.x = NSMinX(bounds); + } else if (eventChar == NSLeftArrowFunctionKey) { + endPoint.x += delta; + if (endPoint.x > NSMaxX(bounds)) + endPoint.x = NSMaxX(bounds); + } else if (eventChar == NSUpArrowFunctionKey) { + endPoint.y -= delta; + if (endPoint.y < NSMinY(bounds)) + endPoint.y = NSMinY(bounds); + } else if (eventChar == NSDownArrowFunctionKey) { + endPoint.y += delta; + if (endPoint.y > NSMaxY(bounds)) + endPoint.y = NSMaxY(bounds); } - } else if (eventChar == NSDownArrowFunctionKey) { - if (NSMinY(bounds) - delta >= NSMinY(pageBounds)) { - newBounds.origin.y -= delta; - newBounds.size.height += delta; - } else if (NSMinY(bounds) > NSMinY(pageBounds)) { - newBounds.origin.y -= NSMinY(bounds) - NSMinY(pageBounds); - newBounds.size.height += NSMinY(bounds) - NSMinY(pageBounds); + break; + case 270: + if (eventChar == NSRightArrowFunctionKey) { + endPoint.y -= delta; + if (endPoint.y < NSMinY(bounds)) + endPoint.y = NSMinY(bounds); + } else if (eventChar == NSLeftArrowFunctionKey) { + endPoint.y += delta; + if (endPoint.y > NSMaxY(bounds)) + endPoint.y = NSMaxY(bounds); + } else if (eventChar == NSUpArrowFunctionKey) { + endPoint.x += delta; + if (endPoint.x > NSMaxX(bounds)) + endPoint.x = NSMaxX(bounds); + } else if (eventChar == NSDownArrowFunctionKey) { + endPoint.x -= delta; + if (endPoint.x < NSMinX(bounds)) + endPoint.x = NSMinX(bounds); } + break; + } + + endPoint.x = roundf(endPoint.x); + endPoint.y = roundf(endPoint.y); + + if (NSEqualPoints(endPoint, oldEndPoint) == NO) { + newBounds.origin.x = fmin(startPoint.x, endPoint.x); + newBounds.size.width = fabs(endPoint.x - startPoint.x); + newBounds.origin.y = fmin(startPoint.y, endPoint.y); + newBounds.size.height = fabs(endPoint.y - startPoint.y); + + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + newBounds.origin.x = floorf(0.5 * (startPoint.x + endPoint.x)) - 4.0; } - break; - case 90: - if (eventChar == NSRightArrowFunctionKey) { - if (NSMinY(bounds) + delta <= NSMaxY(pageBounds)) { - newBounds.size.height += delta; - } else if (NSMinY(bounds) < NSMaxY(pageBounds)) { - newBounds.size.height += NSMaxY(pageBounds) - NSMinY(bounds); - } - } else if (eventChar == NSLeftArrowFunctionKey) { - newBounds.size.height -= delta; - if (NSHeight(newBounds) < 8.0) { - newBounds.size.height = 8.0; - } - } else if (eventChar == NSUpArrowFunctionKey) { - newBounds.size.width -= delta; - if (NSWidth(newBounds) < 8.0) { - newBounds.size.width = 8.0; - } - } else if (eventChar == NSDownArrowFunctionKey) { - if (NSMaxX(bounds) + delta <= NSMaxX(pageBounds)) { - newBounds.size.width += delta; - } else if (NSMaxX(bounds) < NSMaxX(pageBounds)) { - newBounds.size.width += NSMaxX(pageBounds) - NSMaxX(bounds); - } + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + newBounds.origin.y = floorf(0.5 * (startPoint.y + endPoint.y)) - 4.0; } - break; - case 180: - if (eventChar == NSRightArrowFunctionKey) { - if (NSMinX(bounds) - delta >= NSMinX(pageBounds)) { - newBounds.origin.x -= delta; - newBounds.size.width += delta; - } else if (NSMinX(bounds) > NSMinX(pageBounds)) { - newBounds.origin.x -= NSMinX(bounds) - NSMinX(pageBounds); - newBounds.size.width += NSMinX(bounds) - NSMinX(pageBounds); + + startPoint.x -= NSMinX(newBounds); + startPoint.y -= NSMinY(newBounds); + endPoint.x -= NSMinX(newBounds); + endPoint.y -= NSMinY(newBounds); + + [annotation setBounds:newBounds]; + [annotation setStartPoint:startPoint]; + [annotation setEndPoint:endPoint]; + } + + } else { + + switch ([page rotation]) { + case 0: + if (eventChar == NSRightArrowFunctionKey) { + if (NSMaxX(bounds) + delta <= NSMaxX(pageBounds)) { + newBounds.size.width += delta; + } else if (NSMaxX(bounds) < NSMaxX(pageBounds)) { + newBounds.size.width += NSMaxX(pageBounds) - NSMaxX(bounds); + } + } else if (eventChar == NSLeftArrowFunctionKey) { + newBounds.size.width -= delta; + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + } + } else if (eventChar == NSUpArrowFunctionKey) { + newBounds.origin.y += delta; + newBounds.size.height -= delta; + if (NSHeight(newBounds) < 8.0) { + newBounds.origin.y += NSHeight(newBounds) - 8.0; + newBounds.size.height = 8.0; + } + } else if (eventChar == NSDownArrowFunctionKey) { + if (NSMinY(bounds) - delta >= NSMinY(pageBounds)) { + newBounds.origin.y -= delta; + newBounds.size.height += delta; + } else if (NSMinY(bounds) > NSMinY(pageBounds)) { + newBounds.origin.y -= NSMinY(bounds) - NSMinY(pageBounds); + newBounds.size.height += NSMinY(bounds) - NSMinY(pageBounds); + } } - } else if (eventChar == NSLeftArrowFunctionKey) { - newBounds.origin.x += delta; - newBounds.size.width -= delta; - if (NSWidth(newBounds) < 8.0) { - newBounds.origin.x += NSWidth(newBounds) - 8.0; - newBounds.size.width = 8.0; + break; + case 90: + if (eventChar == NSRightArrowFunctionKey) { + if (NSMinY(bounds) + delta <= NSMaxY(pageBounds)) { + newBounds.size.height += delta; + } else if (NSMinY(bounds) < NSMaxY(pageBounds)) { + newBounds.size.height += NSMaxY(pageBounds) - NSMinY(bounds); + } + } else if (eventChar == NSLeftArrowFunctionKey) { + newBounds.size.height -= delta; + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + } + } else if (eventChar == NSUpArrowFunctionKey) { + newBounds.size.width -= delta; + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + } + } else if (eventChar == NSDownArrowFunctionKey) { + if (NSMaxX(bounds) + delta <= NSMaxX(pageBounds)) { + newBounds.size.width += delta; + } else if (NSMaxX(bounds) < NSMaxX(pageBounds)) { + newBounds.size.width += NSMaxX(pageBounds) - NSMaxX(bounds); + } } - } else if (eventChar == NSUpArrowFunctionKey) { - newBounds.size.height -= delta; - if (NSHeight(newBounds) < 8.0) { - newBounds.size.height = 8.0; + break; + case 180: + if (eventChar == NSRightArrowFunctionKey) { + if (NSMinX(bounds) - delta >= NSMinX(pageBounds)) { + newBounds.origin.x -= delta; + newBounds.size.width += delta; + } else if (NSMinX(bounds) > NSMinX(pageBounds)) { + newBounds.origin.x -= NSMinX(bounds) - NSMinX(pageBounds); + newBounds.size.width += NSMinX(bounds) - NSMinX(pageBounds); + } + } else if (eventChar == NSLeftArrowFunctionKey) { + newBounds.origin.x += delta; + newBounds.size.width -= delta; + if (NSWidth(newBounds) < 8.0) { + newBounds.origin.x += NSWidth(newBounds) - 8.0; + newBounds.size.width = 8.0; + } + } else if (eventChar == NSUpArrowFunctionKey) { + newBounds.size.height -= delta; + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + } + } else if (eventChar == NSDownArrowFunctionKey) { + if (NSMaxY(bounds) + delta <= NSMaxY(pageBounds)) { + newBounds.size.height += delta; + } else if (NSMaxY(bounds) < NSMaxY(pageBounds)) { + newBounds.size.height += NSMaxY(pageBounds) - NSMaxY(bounds); + } } - } else if (eventChar == NSDownArrowFunctionKey) { - if (NSMaxY(bounds) + delta <= NSMaxY(pageBounds)) { - newBounds.size.height += delta; - } else if (NSMaxY(bounds) < NSMaxY(pageBounds)) { - newBounds.size.height += NSMaxY(pageBounds) - NSMaxY(bounds); + break; + case 270: + if (eventChar == NSRightArrowFunctionKey) { + if (NSMinY(bounds) - delta >= NSMinY(pageBounds)) { + newBounds.origin.y -= delta; + newBounds.size.height += delta; + } else if (NSMinY(bounds) > NSMinY(pageBounds)) { + newBounds.origin.y -= NSMinY(bounds) - NSMinY(pageBounds); + newBounds.size.height += NSMinY(bounds) - NSMinY(pageBounds); + } + } else if (eventChar == NSLeftArrowFunctionKey) { + newBounds.origin.y += delta; + newBounds.size.height -= delta; + if (NSHeight(newBounds) < 8.0) { + newBounds.origin.y += NSHeight(newBounds) - 8.0; + newBounds.size.height = 8.0; + } + } else if (eventChar == NSUpArrowFunctionKey) { + newBounds.origin.x += delta; + newBounds.size.width -= delta; + if (NSWidth(newBounds) < 8.0) { + newBounds.origin.x += NSWidth(newBounds) - 8.0; + newBounds.size.width = 8.0; + } + } else if (eventChar == NSDownArrowFunctionKey) { + if (NSMinX(bounds) - delta >= NSMinX(pageBounds)) { + newBounds.origin.x -= delta; + newBounds.size.width += delta; + } else if (NSMinX(bounds) > NSMinX(pageBounds)) { + newBounds.origin.x -= NSMinX(bounds) - NSMinX(pageBounds); + newBounds.size.width += NSMinX(bounds) - NSMinX(pageBounds); + } } + break; + } + + if (NSEqualRects(bounds, newBounds) == NO) { + [activeAnnotation setBounds:newBounds]; + if ([[activeAnnotation type] isEqualToString:@"Square"] || [[activeAnnotation type] isEqualToString:@"Square"]) { + NSString *selString = [[[[activeAnnotation page] selectionForRect:newBounds] string] stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; + [activeAnnotation setContents:selString]; } - break; - case 270: - if (eventChar == NSRightArrowFunctionKey) { - if (NSMinY(bounds) - delta >= NSMinY(pageBounds)) { - newBounds.origin.y -= delta; - newBounds.size.height += delta; - } else if (NSMinY(bounds) > NSMinY(pageBounds)) { - newBounds.origin.y -= NSMinY(bounds) - NSMinY(pageBounds); - newBounds.size.height += NSMinY(bounds) - NSMinY(pageBounds); - } - } else if (eventChar == NSLeftArrowFunctionKey) { - newBounds.origin.y += delta; - newBounds.size.height -= delta; - if (NSHeight(newBounds) < 8.0) { - newBounds.origin.y += NSHeight(newBounds) - 8.0; - newBounds.size.height = 8.0; - } - } else if (eventChar == NSUpArrowFunctionKey) { - newBounds.origin.x += delta; - newBounds.size.width -= delta; - if (NSWidth(newBounds) < 8.0) { - newBounds.origin.x += NSWidth(newBounds) - 8.0; - newBounds.size.width = 8.0; - } - } else if (eventChar == NSDownArrowFunctionKey) { - if (NSMinX(bounds) - delta >= NSMinX(pageBounds)) { - newBounds.origin.x -= delta; - newBounds.size.width += delta; - } else if (NSMinX(bounds) > NSMinX(pageBounds)) { - newBounds.origin.x -= NSMinX(bounds) - NSMinX(pageBounds); - newBounds.size.width += NSMinX(bounds) - NSMinX(pageBounds); - } - } - break; - } - - if (NSEqualRects(bounds, newBounds) == NO) { - [activeAnnotation setBounds:newBounds]; - if ([activeAnnotation isEditable] == NO) { - NSString *selString = [[[[activeAnnotation page] selectionForRect:newBounds] string] stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines]; - [activeAnnotation setContents:selString]; } } } @@ -1689,7 +1845,8 @@ newActiveAnnotation = annotationHit; break; } - } else { + } else if ([annotationHit respondsToSelector:@selector(pointNearLine:)] == NO || + [(SKPDFAnnotationLine *)annotationHit pointNearLine:pagePoint]) { // We count this one. newActiveAnnotation = annotationHit; @@ -1760,12 +1917,29 @@ // Old (current) annotation location. wasBounds = [activeAnnotation bounds]; + if ([[activeAnnotation type] isEqualToString:@"Line"]) { + wasStartPoint = [(SKPDFAnnotationLine *)activeAnnotation startPoint]; + wasEndPoint = [(SKPDFAnnotationLine *)activeAnnotation endPoint]; + } + // Force redisplay. [self setNeedsDisplayForAnnotation:activeAnnotation]; draggingAnnotation = [activeAnnotation isMovable]; // Hit-test for resize box. - resizingAnnotation = [[activeAnnotation type] isEqualToString:@"Note"] == NO && NSPointInRect(pagePoint, [self resizeThumbForRect:wasBounds rotation:[activePage rotation]]); + if ([[activeAnnotation type] isEqualToString:@"Line"]) { + if (NSPointInRect(pagePoint, [self resizeThumbForRect:wasBounds point:[(SKPDFAnnotationLine *)activeAnnotation endPoint]])) { + resizingAnnotation = YES; + draggingStartPoint = NO; + } else if (NSPointInRect(pagePoint, [self resizeThumbForRect:wasBounds point:[(SKPDFAnnotationLine *)activeAnnotation startPoint]])) { + resizingAnnotation = YES; + draggingStartPoint = YES; + } else { + resizingAnnotation = NO; + } + } else { + resizingAnnotation = [activeAnnotation isResizable] && NSPointInRect(pagePoint, [self resizeThumbForRect:wasBounds rotation:[activePage rotation]]); + } } return newActiveAnnotation != nil; @@ -1783,60 +1957,143 @@ NSPoint relPoint = NSMakePoint(endPt.x - startPoint.x, endPt.y - startPoint.y); newBounds = wasBounds; - // Resize the annotation. - switch ([activePage rotation]) { - case 0: - newBounds.origin.y += relPoint.y; - newBounds.size.width += relPoint.x; - newBounds.size.height -= relPoint.y; - if (NSWidth(newBounds) < 8.0) { - newBounds.size.width = 8.0; - } - if (NSHeight(newBounds) < 8.0) { - newBounds.origin.y += NSHeight(newBounds) - 8.0; - newBounds.size.height = 8.0; - } - break; - case 90: - newBounds.size.width += relPoint.x; - newBounds.size.height += relPoint.y; - if (NSWidth(newBounds) < 8.0) { - newBounds.size.width = 8.0; - } - if (NSHeight(newBounds) < 8.0) { - newBounds.size.height = 8.0; - } - break; - case 180: - newBounds.origin.x += relPoint.x; - newBounds.size.width -= relPoint.x; - newBounds.size.height += relPoint.y; - if (NSWidth(newBounds) < 8.0) { - newBounds.origin.x += NSWidth(newBounds) - 8.0; - newBounds.size.width = 8.0; - } - if (NSHeight(newBounds) < 8.0) { - newBounds.size.height = 8.0; - } - break; - case 270: - newBounds.origin.x += relPoint.x; - newBounds.origin.y += relPoint.y; - newBounds.size.width -= relPoint.x; - newBounds.size.height -= relPoint.y; - if (NSWidth(newBounds) < 8.0) { - newBounds.origin.x += NSWidth(newBounds) - 8.0; - newBounds.size.width = 8.0; - } - if (NSHeight(newBounds) < 8.0) { - newBounds.origin.y += NSHeight(newBounds) - 8.0; - newBounds.size.height = 8.0; - } - break; + if ([[activeAnnotation type] isEqualToString:@"Line"]) { + + SKPDFAnnotationLine *annotation = (SKPDFAnnotationLine *)activeAnnotation; + NSPoint endPoint = wasEndPoint; + endPoint.x += NSMinX(wasBounds); + endPoint.y += NSMinY(wasBounds); + startPoint = wasStartPoint; + startPoint.x += NSMinX(wasBounds); + startPoint.y += NSMinY(wasBounds); + + // Resize the annotation. + switch ([activePage rotation]) { + case 0: + if (draggingStartPoint) { + startPoint.x += relPoint.x; + startPoint.y += relPoint.y; + } else { + endPoint.x += relPoint.x; + endPoint.y += relPoint.y; + } + break; + case 90: + if (draggingStartPoint) { + startPoint.x += relPoint.y; + startPoint.y -= relPoint.x; + } else { + endPoint.x += relPoint.y; + endPoint.y -= relPoint.x; + } + break; + case 180: + if (draggingStartPoint) { + startPoint.x -= relPoint.x; + startPoint.y -= relPoint.y; + } else { + endPoint.x -= relPoint.x; + endPoint.y -= relPoint.y; + } + break; + case 270: + if (draggingStartPoint) { + startPoint.x -= relPoint.y; + startPoint.y += relPoint.x; + } else { + endPoint.x -= relPoint.y; + endPoint.y += relPoint.x; + } + break; + } + + if (draggingStartPoint) { + startPoint.x = roundf(startPoint.x); + startPoint.y = roundf(startPoint.y); + } else { + endPoint.x = roundf(endPoint.x); + endPoint.y = roundf(endPoint.y); + } + + newBounds.origin.x = fmin(startPoint.x, endPoint.x); + newBounds.size.width = fabs(endPoint.x - startPoint.x); + newBounds.origin.y = fmin(startPoint.y, endPoint.y); + newBounds.size.height = fabs(endPoint.y - startPoint.y); + + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + newBounds.origin.x = floorf(0.5 * (startPoint.x + endPoint.x)) - 4.0; + } + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + newBounds.origin.y = floorf(0.5 * (startPoint.y + endPoint.y)) - 4.0; + } + + startPoint.x -= NSMinX(newBounds); + startPoint.y -= NSMinY(newBounds); + endPoint.x -= NSMinX(newBounds); + endPoint.y -= NSMinY(newBounds); + + [annotation setStartPoint:startPoint]; + [annotation setEndPoint:endPoint]; + + } else { + + switch ([activePage rotation]) { + case 0: + newBounds.origin.y += relPoint.y; + newBounds.size.width += relPoint.x; + newBounds.size.height -= relPoint.y; + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + } + if (NSHeight(newBounds) < 8.0) { + newBounds.origin.y += NSHeight(newBounds) - 8.0; + newBounds.size.height = 8.0; + } + break; + case 90: + newBounds.size.width += relPoint.x; + newBounds.size.height += relPoint.y; + if (NSWidth(newBounds) < 8.0) { + newBounds.size.width = 8.0; + } + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + } + break; + case 180: + newBounds.origin.x += relPoint.x; + newBounds.size.width -= relPoint.x; + newBounds.size.height += relPoint.y; + if (NSWidth(newBounds) < 8.0) { + newBounds.origin.x += NSWidth(newBounds) - 8.0; + newBounds.size.width = 8.0; + } + if (NSHeight(newBounds) < 8.0) { + newBounds.size.height = 8.0; + } + break; + case 270: + newBounds.origin.x += relPoint.x; + newBounds.origin.y += relPoint.y; + newBounds.size.width -= relPoint.x; + newBounds.size.height -= relPoint.y; + if (NSWidth(newBounds) < 8.0) { + newBounds.origin.x += NSWidth(newBounds) - 8.0; + newBounds.size.width = 8.0; + } + if (NSHeight(newBounds) < 8.0) { + newBounds.origin.y += NSHeight(newBounds) - 8.0; + newBounds.size.height = 8.0; + } + break; + } + + // Keep integer. + newBounds = NSIntegralRect(newBounds); + } - - // Keep integer. - newBounds = NSIntegralRect(newBounds); } else { // Move annotation. [[self documentView] autoscroll:theEvent]; @@ -1879,9 +2136,6 @@ // Change annotation's location. [activeAnnotation setBounds:newBounds]; - - // Force redraw. - [self setNeedsDisplayInRect:NSUnionRect(currentBounds, newBounds) ofPage:activePage]; } - (void)dragWithEvent:(NSEvent *)theEvent { Modified: trunk/SKStringConstants.h =================================================================== --- trunk/SKStringConstants.h 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKStringConstants.h 2007-04-19 22:11:41 UTC (rev 1863) @@ -67,4 +67,5 @@ extern NSString *SKHighlightNoteColorKey; extern NSString *SKUnderlineNoteColorKey; extern NSString *SKStrikeOutNoteColorKey; +extern NSString *SKArrowNoteColorKey; extern NSString *SKDefaultPDFDisplaySettingsKey; Modified: trunk/SKStringConstants.m =================================================================== --- trunk/SKStringConstants.m 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/SKStringConstants.m 2007-04-19 22:11:41 UTC (rev 1863) @@ -68,4 +68,5 @@ NSString *SKHighlightNoteColorKey = @"SKHighlightNoteColor"; NSString *SKUnderlineNoteColorKey = @"SKUnderlineNoteColor"; NSString *SKStrikeOutNoteColorKey = @"SKStrikeOutNoteColor"; +NSString *SKArrowNoteColorKey = @"SKArrowNoteColor"; NSString *SKDefaultPDFDisplaySettingsKey = @"SKDefaultPDFDisplaySettings"; Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2007-04-19 15:35:58 UTC (rev 1862) +++ trunk/Skim.xcodeproj/project.pbxproj 2007-04-19 22:11:41 UTC (rev 1863) @@ -131,6 +131,8 @@ CE7468810B7F3C0000CBF969 /* zoomInCursor.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE7467540B7F321100CBF969 /* zoomInCursor.tiff */; }; CE7468820B7F3C0000CBF969 /* zoomOutCursor.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE7467550B7F321A00CBF969 /* zoomOutCursor.tiff */; }; CE7469180B7F40B700CBF969 /* Skim.icns in Resources */ = {isa = PBXBuildFile; fileRef = CE7469170B7F40B600CBF969 /* Skim.icns */; }; + CE7C5D050BD8062C0011315D /* ArrowNoteAdorn.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE7C5D040BD8062C0011315D /* ArrowNoteAdorn.tiff */; }; + CE7C5D190BD8086C0011315D /* ToolbarArrowNote.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE7C5D180BD8086C0011315D /* ToolbarArrowNote.tiff */; }; CE9C423C0B8B5633004AD8CF /* PreferenceWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = CE9C42360B8B5633004AD8CF /* PreferenceWindow.nib */; }; CE9DC2E90B9F131900D64F28 /* HighlightNoteAdorn.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE9DC2E70B9F131800D64F28 /* HighlightNoteAdorn.tiff */; }; CE9DC2EA0B9F131900D64F28 /* ToolbarHighlightNote.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CE9DC2E80B9F131800D64F28 /* ToolbarHighlightNote.tiff */; }; @@ -391,6 +393,8 @@ CE7467540B7F321100CBF969 /* zoomInCursor.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = zoomInCursor.tiff; path = Images/zoomInCursor.tiff; sourceTree = "<group>"; }; CE7467550B7F321A00CBF969 /* zoomOutCursor.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = zoomOutCursor.tiff; path = Images/zoomOutCursor.tiff; sourceTree = "<group>"; }; CE7469170B7F40B600CBF969 /* Skim.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Skim.icns; path = Images/Skim.icns; sourceTree = "<group>"; }; + CE7C5D040BD8062C0011315D /* ArrowNoteAdorn.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = ArrowNoteAdorn.tiff; path = Images/ArrowNoteAdorn.tiff; sourceTree = "<group>"; }; + CE7C5D180BD8086C0011315D /* ToolbarArrowNote.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = ToolbarArrowNote.tiff; path = Images/ToolbarArrowNote.tiff; sourceTree = "<group>"; }; CE87EF690BA9FF5A0027BBDD /* skimhelp.css */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 30; name = skimhelp.css; path = "English.lproj/Skim Help/sty/skimhelp.css"; sourceTree = "<group>"; }; CE9C42370B8B5633004AD8CF /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/PreferenceWindow.nib; sourceTree = "<group>"; }; CE9DC2E70B9F131800D64F28 /* HighlightNoteAdorn.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = HighlightNoteAdorn.tiff; path = Images/HighlightNoteAdorn.tiff; sourceTree = "<group>"; }; @@ -756,6 +760,7 @@ CE5478B80B33456300F8AFB6 /* BackAdorn.tiff */, CE5478B90B33456300F8AFB6 /* ForwardAdorn.tiff */, CE3A42340B7927D3006B64D3 /* AnchoredNoteAdorn.tiff */, + CE7C5D040BD8062C0011315D /* ArrowNoteAdorn.tiff */, CE3A42330B7927D3006B64D3 /* CircleNoteAdorn.tiff */, CE9DC2E70B9F131800D64F28 /* HighlightNoteAdorn.tiff */, CE1583280BA073FF00D5B03F /* StrikeOutNoteAdorn.tiff */, @@ -769,6 +774,7 @@ CE4EB8220B7B96D00091F228 /* OutlineViewAdorn.tiff */, CE380C610B837B6100A1B779 /* SnapshotViewAdorn.tiff */, CE4EB8230B7B96D00091F228 /* ThumbnailViewAdorn.tiff */, + CE7C5D180BD8086C0011315D /* ToolbarArrowNote.tiff */, CE4190C20B94963A00ECF819 /* ToolbarCircleNote.tiff */, CE5478BA0B33456300F8AFB6 /* ToolbarFullScreen.tiff */, CE9DC2E80B9F131800D64F28 /* ToolbarHighlightNote.tiff */, @@ -966,6 +972,8 @@ CE4F9DEE0BC1BE3A005BE0A1 /* Localizable.strings in Resources */, CE67BB260BC44AC9007B6929 /* ZoomValues.strings in Resources */, CEE1065E0BCBBE1300BF2D3E /* NotesDocument.nib in Resources */, + CE7C5D050BD8062C0011315D /* ArrowNoteAdorn.tiff in Resources */, + CE7C5D190BD8086C0011315D /* ToolbarArrowNote.tiff in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-19 15:35:59
|
Revision: 1862 http://skim-app.svn.sourceforge.net/skim-app/?rev=1862&view=rev Author: hofman Date: 2007-04-19 08:35:58 -0700 (Thu, 19 Apr 2007) Log Message: ----------- Scalefactor of 0 should choose auto-scale. Modified Paths: -------------- trunk/BDSKZoomablePDFView.m Modified: trunk/BDSKZoomablePDFView.m =================================================================== --- trunk/BDSKZoomablePDFView.m 2007-04-19 15:29:13 UTC (rev 1861) +++ trunk/BDSKZoomablePDFView.m 2007-04-19 15:35:58 UTC (rev 1862) @@ -273,15 +273,19 @@ - (void)setScaleFactor:(float)newScaleFactor adjustPopup:(BOOL)flag { if (flag) { - unsigned cnt = 1, numberOfDefaultItems = (sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float)); - - // We only work with some preset zoom values, so choose one of the appropriate values - while (cnt < numberOfDefaultItems - 1 && newScaleFactor > 0.5 * (BDSKDefaultScaleMenuFactors[cnt] + BDSKDefaultScaleMenuFactors[cnt + 1])) cnt++; - [scalePopUpButton selectItemAtIndex:cnt]; - newScaleFactor = BDSKDefaultScaleMenuFactors[cnt]; + if (newScaleFactor < 0.01) { + newScaleFactor = 0.0; + } else { + unsigned cnt = 1, numberOfDefaultItems = (sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float)); + + // We only work with some preset zoom values, so choose one of the appropriate values + while (cnt < numberOfDefaultItems - 1 && newScaleFactor > 0.5 * (BDSKDefaultScaleMenuFactors[cnt] + BDSKDefaultScaleMenuFactors[cnt + 1])) cnt++; + [scalePopUpButton selectItemAtIndex:cnt]; + newScaleFactor = BDSKDefaultScaleMenuFactors[cnt]; + } } - if(fabs(newScaleFactor) < 0.01) + if(newScaleFactor < 0.01) [self setAutoScales:YES]; else [super setScaleFactor:newScaleFactor]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-19 15:29:15
|
Revision: 1861 http://skim-app.svn.sourceforge.net/skim-app/?rev=1861&view=rev Author: hofman Date: 2007-04-19 08:29:13 -0700 (Thu, 19 Apr 2007) Log Message: ----------- Send modified scrollwheel event only to a single receiver, determined through targetForAction:. Modified Paths: -------------- trunk/SKApplication.h trunk/SKApplication.m trunk/SKPDFView.h trunk/SKPDFView.m Modified: trunk/SKApplication.h =================================================================== --- trunk/SKApplication.h 2007-04-18 23:05:50 UTC (rev 1860) +++ trunk/SKApplication.h 2007-04-19 15:29:13 UTC (rev 1861) @@ -39,7 +39,6 @@ #import <Cocoa/Cocoa.h> extern NSString *SKApplicationWillTerminateNotification; -extern NSString *SKScrollMagnifyNotification; @interface SKApplication : NSApplication @end Modified: trunk/SKApplication.m =================================================================== --- trunk/SKApplication.m 2007-04-18 23:05:50 UTC (rev 1860) +++ trunk/SKApplication.m 2007-04-19 15:29:13 UTC (rev 1861) @@ -42,7 +42,6 @@ #import "SKDocument.h" NSString *SKApplicationWillTerminateNotification = @"SKApplicationWillTerminateNotification"; -NSString *SKScrollMagnifyNotification = @"SKScrollMagnifyNotification"; @interface NSMenu (SKExtensions) - (int)indexOfItemWithTarget:(id)target; @@ -63,8 +62,11 @@ @implementation SKApplication - (void)sendEvent:(NSEvent *)anEvent { + id target = nil; if ([anEvent type] == NSScrollWheel && [anEvent modifierFlags] & NSAlternateKeyMask) - [[NSNotificationCenter defaultCenter] postNotificationName:SKScrollMagnifyNotification object:anEvent]; + target = [self targetForAction:@selector(magnifyWheel:)]; + if (target) + [target performSelector:@selector(magnifyWheel:) withObject:anEvent]; else [super sendEvent:anEvent]; } Modified: trunk/SKPDFView.h =================================================================== --- trunk/SKPDFView.h 2007-04-18 23:05:50 UTC (rev 1860) +++ trunk/SKPDFView.h 2007-04-19 15:29:13 UTC (rev 1861) @@ -123,6 +123,5 @@ - (void)handleAnnotationWillChangeNotification:(NSNotification *)notification; - (void)handleAnnotationDidChangeNotification:(NSNotification *)notification; - (void)handleWindowWillCloseNotification:(NSNotification *)notification; -- (void)handleScrollMagnifyNotification:(NSNotification *)note; @end Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-18 23:05:50 UTC (rev 1860) +++ trunk/SKPDFView.m 2007-04-19 15:29:13 UTC (rev 1861) @@ -148,8 +148,6 @@ name:SKAnnotationWillChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAnnotationDidChangeNotification:) name:SKAnnotationDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScrollMagnifyNotification:) - name:SKScrollMagnifyNotification object:nil]; [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeys: [NSArray arrayWithObjects:SKReadingBarColorKey, SKReadingBarTransparencyKey, SKReadingBarInvertKey, nil]]; } @@ -898,8 +896,8 @@ return menu; } -- (void)handleScrollMagnifyNotification:(NSNotification *)note { - float dy = [[note object] deltaY]; +- (void)magnifyWheel:(NSEvent *)theEvent { + float dy = [theEvent deltaY]; dy = dy > 0 ? MIN(0.2, dy) : MAX(-0.2, dy); [self setScaleFactor:[self scaleFactor] + 0.5 * dy]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 23:05:52
|
Revision: 1860 http://skim-app.svn.sourceforge.net/skim-app/?rev=1860&view=rev Author: hofman Date: 2007-04-18 16:05:50 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Update release notes. Modified Paths: -------------- trunk/Dutch.lproj/ReleaseNotes.rtf trunk/English.lproj/ReleaseNotes.rtf trunk/Italian.lproj/ReleaseNotes.rtf Modified: trunk/Dutch.lproj/ReleaseNotes.rtf =================================================================== --- trunk/Dutch.lproj/ReleaseNotes.rtf 2007-04-18 22:50:43 UTC (rev 1859) +++ trunk/Dutch.lproj/ReleaseNotes.rtf 2007-04-18 23:05:50 UTC (rev 1860) @@ -34,16 +34,23 @@ {\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid29} {\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid30} {\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid31} -{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}} +{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32} +{\list\listtemplateid33\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid33} +{\list\listtemplateid34\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid34} +{\list\listtemplateid35\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid35} +{\list\listtemplateid36\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid36} +{\list\listtemplateid37\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid37} +{\list\listtemplateid38\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid38} +{\list\listtemplateid39\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid39}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}{\listoverride\listid36\listoverridecount0\ls36}{\listoverride\listid37\listoverridecount0\ls37}{\listoverride\listid38\listoverridecount0\ls38}{\listoverride\listid39\listoverridecount0\ls39}} \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\fs60 \cf0 Skim Release Notes\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f1\fs22 \cf0 \ -Last update: 12 April 2007 (rev -\f2\fs20 1811 +Last update: 19 April 2007 (rev +\f2\fs20 1859 \f1\fs22 )\ \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -99,36 +106,50 @@ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \ls20\ilvl0\cf0 {\listtext \'a5 }Skim can now automatically backup a skim notes file whenever it saves a PDF file.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls21\ilvl0\cf0 {\listtext \'a5 }You can now resize the current note using the arrow keys, when you hold down the Control key.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls22\ilvl0\cf0 {\listtext \'a5 }Notes are now ordered according to page and location in page.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls23\ilvl0\cf0 {\listtext \'a5 }Several improvements of tool tips.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls24\ilvl0\cf0 {\listtext \'a5 }Add a menu item to select the search field.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \f3\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f4\i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls21\ilvl0 +\ls25\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'a5 }We now don't edit new text notes, so they can be moved, resized or deleted.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls22\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ +\ls26\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls23\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ +\ls27\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls24\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ +\ls28\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls25\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ +\ls29\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls26\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ +\ls30\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls27\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ +\ls31\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls28\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ +\ls32\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls29\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ +\ls33\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls30\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ +\ls34\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls31\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ +\ls35\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls32\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\ls36\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls37\ilvl0\cf0 {\listtext \'a5 }Remember the width of notes pane.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls38\ilvl0\cf0 {\listtext \'a5 }Fix leaks leading to excessive memory use.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls39\ilvl0\cf0 {\listtext \'a5 }Fix back-tabbing through notes and links.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f3\b\fs28 \cf0 \ Modified: trunk/English.lproj/ReleaseNotes.rtf =================================================================== --- trunk/English.lproj/ReleaseNotes.rtf 2007-04-18 22:50:43 UTC (rev 1859) +++ trunk/English.lproj/ReleaseNotes.rtf 2007-04-18 23:05:50 UTC (rev 1860) @@ -2,7 +2,7 @@ {\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fnil\fcharset77 LucidaGrande;\f2\fnil\fcharset77 LucidaSans-Typewriter; \f3\fswiss\fcharset77 Helvetica-Bold;\f4\fswiss\fcharset77 Helvetica-BoldOblique;\f5\fnil\fcharset77 LucidaGrande-Bold; } -{\colortbl;\red255\green255\blue255;\red0\green0\blue0;} +{\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3} @@ -34,17 +34,23 @@ {\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid29} {\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid30} {\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid31} -{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}} -\vieww10500\viewh9000\viewkind0 +{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32} +{\list\listtemplateid33\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid33} +{\list\listtemplateid34\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid34} +{\list\listtemplateid35\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid35} +{\list\listtemplateid36\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid36} +{\list\listtemplateid37\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid37} +{\list\listtemplateid38\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid38} +{\list\listtemplateid39\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid39}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}{\listoverride\listid36\listoverridecount0\ls36}{\listoverride\listid37\listoverridecount0\ls37}{\listoverride\listid38\listoverridecount0\ls38}{\listoverride\listid39\listoverridecount0\ls39}} \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\fs60 \cf0 Skim Release Notes\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f1\fs22 \cf0 \ -Last update: 12 April 2007 (rev -\f2\fs20 1811 +Last update: 19 April 2007 (rev +\f2\fs20 1859 \f1\fs22 )\ \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -100,36 +106,50 @@ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \ls20\ilvl0\cf0 {\listtext \'a5 }Skim can now automatically backup a skim notes file whenever it saves a PDF file.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls21\ilvl0\cf0 {\listtext \'a5 }You can now resize the current note using the arrow keys, when you hold down the Control key.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls22\ilvl0\cf0 {\listtext \'a5 }Notes are now ordered according to page and location in page.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls23\ilvl0\cf0 {\listtext \'a5 }Several improvements of tool tips.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls24\ilvl0\cf0 {\listtext \'a5 }Add a menu item to select the search field.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \f3\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f4\i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls21\ilvl0 +\ls25\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'a5 }We now don't edit new text notes, so they can be moved, resized or deleted.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls22\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ +\ls26\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls23\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ +\ls27\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls24\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ +\ls28\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls25\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ +\ls29\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls26\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ +\ls30\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls27\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ +\ls31\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls28\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ +\ls32\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls29\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ +\ls33\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls30\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ +\ls34\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls31\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ +\ls35\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls32\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\ls36\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls37\ilvl0\cf0 {\listtext \'a5 }Remember the width of notes pane.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls38\ilvl0\cf0 {\listtext \'a5 }Fix leaks leading to excessive memory use.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls39\ilvl0\cf0 {\listtext \'a5 }Fix back-tabbing through notes and links.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f3\b\fs28 \cf0 \ @@ -176,6 +196,6 @@ \f1\i0\b0\fs22 \cf0 \ Bug reports should be submitted to the {\field{\*\fldinst{HYPERLINK "http://sourceforge.net/tracker/?group_id=192583&atid=941981"}}{\fldrslt bug tracker}} on SourceForge. -\f5\b \cf2 Note: -\f1\b0 If you can, ple\cf0 ase assign the bug report to someone - if you don't personally know any developers, assign the bug to Mike (username mmcc). If you don't assign the bug to someone, nobody may notice it for a long time. Assigning it to someone sends them an email notification.\ +\f5\b Note: +\f1\b0 If you can, please assign the bug report to someone - if you don't personally know any developers, assign the bug to Mike (username mmcc). If you don't assign the bug to someone, nobody may notice it for a long time. Assigning it to someone sends them an email notification.\ } \ No newline at end of file Modified: trunk/Italian.lproj/ReleaseNotes.rtf =================================================================== --- trunk/Italian.lproj/ReleaseNotes.rtf 2007-04-18 22:50:43 UTC (rev 1859) +++ trunk/Italian.lproj/ReleaseNotes.rtf 2007-04-18 23:05:50 UTC (rev 1860) @@ -34,16 +34,23 @@ {\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid29} {\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid30} {\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid31} -{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}} +{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid32} +{\list\listtemplateid33\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid33} +{\list\listtemplateid34\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid34} +{\list\listtemplateid35\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid35} +{\list\listtemplateid36\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid36} +{\list\listtemplateid37\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid37} +{\list\listtemplateid38\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid38} +{\list\listtemplateid39\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid39}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}{\listoverride\listid36\listoverridecount0\ls36}{\listoverride\listid37\listoverridecount0\ls37}{\listoverride\listid38\listoverridecount0\ls38}{\listoverride\listid39\listoverridecount0\ls39}} \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\fs60 \cf0 Skim Release Notes\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f1\fs22 \cf0 \ -Last update: 12 April 2007 (rev -\f2\fs20 1811 +Last update: 19 April 2007 (rev +\f2\fs20 1859 \f1\fs22 )\ \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -99,36 +106,50 @@ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \ls20\ilvl0\cf0 {\listtext \'a5 }Skim can now automatically backup a skim notes file whenever it saves a PDF file.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls21\ilvl0\cf0 {\listtext \'a5 }You can now resize the current note using the arrow keys, when you hold down the Control key.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls22\ilvl0\cf0 {\listtext \'a5 }Notes are now ordered according to page and location in page.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls23\ilvl0\cf0 {\listtext \'a5 }Several improvements of tool tips.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls24\ilvl0\cf0 {\listtext \'a5 }Add a menu item to select the search field.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \f3\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f4\i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls21\ilvl0 +\ls25\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'a5 }We now don't edit new text notes, so they can be moved, resized or deleted.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls22\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ +\ls26\ilvl0\cf0 {\listtext \'a5 }We now make sure new notes are added to a visible page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls23\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ +\ls27\ilvl0\cf0 {\listtext \'a5 }Disable the TOC menu item when there is no TOC.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls24\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ +\ls28\ilvl0\cf0 {\listtext \'a5 }Return to the location that was viewed when reloading a document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls25\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ +\ls29\ilvl0\cf0 {\listtext \'a5 }Search text in a PDf file asynchronously, so it does not block Skim.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls26\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ +\ls30\ilvl0\cf0 {\listtext \'a5 }Fix crashes that can appear for links with missing URLs.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls27\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ +\ls31\ilvl0\cf0 {\listtext \'a5 }Add separators in the Notes menu for categories.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls28\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ +\ls32\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting a PDF-document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls29\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ +\ls33\ilvl0\cf0 {\listtext \'a5 }Fix typos in the Help and update for new features.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls30\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ +\ls34\ilvl0\cf0 {\listtext \'a5 }Fix a crasher when reverting the document. Unfortunately this disabled tool tips.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls31\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ +\ls35\ilvl0\cf0 {\listtext \'a5 }Open the contents pane to display the search term when opening from Spotlight.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls32\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\ls36\ilvl0\cf0 {\listtext \'a5 }Save notes when auto-saving and exporting as PDF.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls37\ilvl0\cf0 {\listtext \'a5 }Remember the width of notes pane.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls38\ilvl0\cf0 {\listtext \'a5 }Fix leaks leading to excessive memory use.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls39\ilvl0\cf0 {\listtext \'a5 }Fix back-tabbing through notes and links.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f3\b\fs28 \cf0 \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 22:50:44
|
Revision: 1859 http://skim-app.svn.sourceforge.net/skim-app/?rev=1859&view=rev Author: hofman Date: 2007-04-18 15:50:43 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Use localizable format for hover window page label. Modified Paths: -------------- trunk/Dutch.lproj/Localizable.strings trunk/English.lproj/Localizable.strings trunk/SKPDFHoverWindow.m Modified: trunk/Dutch.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/English.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 22:05:55 UTC (rev 1858) +++ trunk/SKPDFHoverWindow.m 2007-04-18 22:50:43 UTC (rev 1859) @@ -261,7 +261,7 @@ rect.origin.y = 0.0; NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:labelFont, NSFontAttributeName, color, NSForegroundColorAttributeName, nil]; - NSAttributedString *labelString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Page", @""), [page label]] attributes:attrs]; + NSAttributedString *labelString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:NSLocalizedString(@"Page %@", @"Tool tip label format"), [page label]] attributes:attrs]; NSRect labelRect = [labelString boundingRectWithSize:NSZeroSize options:NSStringDrawingUsesLineFragmentOrigin]; float labelOffset = (0.5 * NSHeight(labelRect)); // make sure the cap radius is integral This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 22:05:56
|
Revision: 1858 http://skim-app.svn.sourceforge.net/skim-app/?rev=1858&view=rev Author: hofman Date: 2007-04-18 15:05:55 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Add action and menu item to select the search field. Modified Paths: -------------- trunk/Dutch.lproj/MainMenu.nib/classes.nib trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib trunk/Dutch.lproj/PreferenceWindow.nib/info.nib trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/English.lproj/MainMenu.nib/classes.nib trunk/English.lproj/MainMenu.nib/keyedobjects.nib trunk/SKMainWindowController.h trunk/SKMainWindowController.m Modified: trunk/Dutch.lproj/MainMenu.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/MainMenu.nib/classes.nib 2007-04-18 21:58:15 UTC (rev 1857) +++ trunk/Dutch.lproj/MainMenu.nib/classes.nib 2007-04-18 22:05:55 UTC (rev 1858) @@ -37,6 +37,7 @@ rotateRight = id; saveArchive = id; savePDFSettingToDefaults = id; + searchPDF = id; takeSnapshot = id; toggleAutoScale = id; toggleDisplayAsBook = id; @@ -68,6 +69,12 @@ CLASS = SKDocumentController; LANGUAGE = ObjC; SUPERCLASS = NSDocumentController; + }, + { + ACTIONS = {checkForUpdates = id; }; + CLASS = SUUpdater; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; } ); IBVersion = 1; Modified: trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/PreferenceWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/PreferenceWindow.nib/info.nib 2007-04-18 21:58:15 UTC (rev 1857) +++ trunk/Dutch.lproj/PreferenceWindow.nib/info.nib 2007-04-18 22:05:55 UTC (rev 1858) @@ -8,10 +8,6 @@ <string>446.1</string> <key>IBLockedObjects</key> <array/> - <key>IBOpenObjects</key> - <array> - <integer>5</integer> - </array> <key>IBSystem Version</key> <string>8P135</string> </dict> Modified: trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainMenu.nib/classes.nib =================================================================== --- trunk/English.lproj/MainMenu.nib/classes.nib 2007-04-18 21:58:15 UTC (rev 1857) +++ trunk/English.lproj/MainMenu.nib/classes.nib 2007-04-18 22:05:55 UTC (rev 1858) @@ -37,6 +37,7 @@ rotateRight = id; saveArchive = id; savePDFSettingToDefaults = id; + searchPDF = id; takeSnapshot = id; toggleAutoScale = id; toggleDisplayAsBook = id; Modified: trunk/English.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2007-04-18 21:58:15 UTC (rev 1857) +++ trunk/SKMainWindowController.h 2007-04-18 22:05:55 UTC (rev 1858) @@ -212,6 +212,7 @@ - (IBAction)toggleRightSidePane:(id)sender; - (IBAction)changeLeftSidePaneState:(id)sender; - (IBAction)changeRightSidePaneState:(id)sender; +- (IBAction)searchPDF:(id)sender; - (IBAction)enterFullScreen:(id)sender; - (IBAction)exitFullScreen:(id)sender; - (IBAction)toggleFullScreen:(id)sender; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-04-18 21:58:15 UTC (rev 1857) +++ trunk/SKMainWindowController.m 2007-04-18 22:05:55 UTC (rev 1858) @@ -1006,6 +1006,16 @@ [self setRightSidePaneState:[sender tag]]; } +- (IBAction)searchPDF:(id)sender { + if ([self isFullScreen]) { + if ([leftSideWindow state] == NSDrawerClosedState || [leftSideWindow state] == NSDrawerClosingState) + [leftSideWindow showSideWindow]; + } else if (NSWidth([leftSideContentBox frame]) <= 0.0) { + [self toggleLeftSidePane:sender]; + } + [searchField selectText:self]; +} + - (void)goFullScreen { NSScreen *screen = [[self window] screen]; // @@ screen: or should we use the main screen? NSColor *backgroundColor = [self isPresentation] ? [NSColor blackColor] : [NSUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] dataForKey:SKFullScreenBackgroundColorKey]]; @@ -3101,6 +3111,8 @@ } else if (action == @selector(changeRightSidePaneState:)) { [menuItem setState:(int)rightSidePaneState == [menuItem tag] ? NSOnState : NSOffState]; return YES; + } else if (action == @selector(searchPDF:)) { + return [self isPresentation] == NO; } else if (action == @selector(toggleFullScreen:)) { if ([self isFullScreen]) [menuItem setTitle:NSLocalizedString(@"Remove Full Screen", @"Menu item title")]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 21:58:21
|
Revision: 1857 http://skim-app.svn.sourceforge.net/skim-app/?rev=1857&view=rev Author: hofman Date: 2007-04-18 14:58:15 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Initialize variable to avoid compiler warning. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 21:50:43 UTC (rev 1856) +++ trunk/SKPDFHoverWindow.m 2007-04-18 21:58:15 UTC (rev 1857) @@ -216,7 +216,8 @@ [annotation release]; annotation = [note retain]; - NSRect rect, contentRect = NSMakeRect(point.x, point.y - WINDOW_OFFSET, WINDOW_WIDTH, WINDOW_HEIGHT); + NSRect rect = NSZeroRect; + NSRect contentRect = NSMakeRect(point.x, point.y - WINDOW_OFFSET, WINDOW_WIDTH, WINDOW_HEIGHT); NSImage *image = nil; NSAttributedString *text = nil; NSString *string = nil; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 21:50:44
|
Revision: 1856 http://skim-app.svn.sourceforge.net/skim-app/?rev=1856&view=rev Author: hofman Date: 2007-04-18 14:50:43 -0700 (Wed, 18 Apr 2007) Log Message: ----------- fix typo Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-18 21:39:37 UTC (rev 1855) +++ trunk/SKPDFView.m 2007-04-18 21:50:43 UTC (rev 1856) @@ -557,7 +557,7 @@ } else if (readingBar && (eventChar == NSRightArrowFunctionKey || eventChar == NSLeftArrowFunctionKey || eventChar == NSUpArrowFunctionKey || eventChar == NSDownArrowFunctionKey) && (modifiers == NSAlternateKeyMask)) { [self moveReadingBarForKey:eventChar]; } else { - [super keyDown:theEvent + [super keyDown:theEvent]; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 21:39:44
|
Revision: 1855 http://skim-app.svn.sourceforge.net/skim-app/?rev=1855&view=rev Author: hofman Date: 2007-04-18 14:39:37 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Round highlight of links. Fix keyDown for Opt-BackTab, the backTab event is a bit inconsistent with other events, and I think can be passed in several forms. Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-18 19:11:44 UTC (rev 1854) +++ trunk/SKPDFView.m 2007-04-18 21:39:37 UTC (rev 1855) @@ -58,6 +58,8 @@ NSString *SKSkimNotePboardType = @"SKSkimNotePboardType"; +CGMutablePathRef CGCreatePathWithRoundRectInRect(CGRect rect, float radius); + @interface PDFView (PDFViewPrivateDeclarations) - (void)pdfViewControlHit:(id)sender; - (void)removeAnnotationControl; @@ -224,21 +226,28 @@ float color[4] = { 0.0, 0.0, 0.0, 1.0 }; NSRect rect = NSInsetRect(NSIntegralRect(bounds), 0.5 * lineWidth, 0.5 * lineWidth); if (isLink) { + CGMutablePathRef path = CGCreatePathWithRoundRectInRect(*(CGRect *)&rect, 2.0); color[3] = 0.1; CGContextSetFillColor(context, color); - CGContextFillRect(context, *(CGRect *)&rect); + CGContextBeginPath(context); + CGContextAddPath(context, path); + CGContextFillPath(context); color[3] = 0.5; + CGContextSetStrokeColor(context, color); + CGContextSetLineWidth(context, lineWidth); + CGContextAddPath(context, path); + CGContextStrokePath(context); + CGPathRelease(path); } else { - color[3] = 1.0; + CGContextSetStrokeColor(context, color); + CGContextStrokeRectWithWidth(context, *(CGRect *)&rect, lineWidth); + + if ([activeAnnotation isResizable]) { + rect = NSIntegralRect([self resizeThumbForRect:bounds rotation:[pdfPage rotation]]); + CGContextSetFillColor(context, color); + CGContextFillRect(context, *(CGRect *)&rect); + } } - CGContextSetStrokeColor(context, color); - CGContextStrokeRectWithWidth(context, *(CGRect *)&rect, lineWidth); - - if ([activeAnnotation isResizable]) { - rect = NSIntegralRect([self resizeThumbForRect:bounds rotation:[pdfPage rotation]]); - CGContextSetFillColor(context, color); - CGContextFillRect(context, *(CGRect *)&rect); - } } } @@ -536,9 +545,10 @@ } else if (isPresentation == NO && [self toolMode] == SKTextToolMode && (eventChar == NSEnterCharacter || eventChar == NSFormFeedCharacter || eventChar == NSNewlineCharacter || eventChar == NSCarriageReturnCharacter) && (modifiers == 0)) { if (activeAnnotation && activeAnnotation != editAnnotation) [self editActiveAnnotation:self]; - } else if (isPresentation == NO && [self toolMode] == SKTextToolMode && (eventChar == NSTabCharacter) && (modifiers == NSAlternateKeyMask)){ + } else if (isPresentation == NO && [self toolMode] == SKTextToolMode && (eventChar == NSTabCharacter) && (modifiers == NSAlternateKeyMask)) { [self selectNextActiveAnnotation:self]; - } else if (isPresentation == NO && [self toolMode] == SKTextToolMode && (eventChar == NSBackTabCharacter) && (modifiers == NSAlternateKeyMask)){ + // backtab is a bit inconsistent, it seems Shift+Tab gives a Shift-BackTab key event, I would have expected either Shift-Tab (as for the raw event) or BackTab (as for most shift-modified keys) + } else if (isPresentation == NO && [self toolMode] == SKTextToolMode && (((eventChar == NSBackTabCharacter) && (modifiers == NSAlternateKeyMask | NSShiftKeyMask)) || ((eventChar == NSBackTabCharacter) && (modifiers == NSAlternateKeyMask)) || ((eventChar == NSTabCharacter) && (modifiers == NSAlternateKeyMask)))) { [self selectPreviousActiveAnnotation:self]; } else if (isPresentation == NO && [activeAnnotation isNoteAnnotation] && [activeAnnotation isMovable] && (eventChar == NSRightArrowFunctionKey || eventChar == NSLeftArrowFunctionKey || eventChar == NSUpArrowFunctionKey || eventChar == NSDownArrowFunctionKey) && (modifiers == 0 || modifiers == NSShiftKeyMask)) { [self moveActiveAnnotationForKey:eventChar byAmount:(modifiers & NSShiftKeyMask) ? 10.0 : 1.0]; @@ -547,7 +557,7 @@ } else if (readingBar && (eventChar == NSRightArrowFunctionKey || eventChar == NSLeftArrowFunctionKey || eventChar == NSUpArrowFunctionKey || eventChar == NSDownArrowFunctionKey) && (modifiers == NSAlternateKeyMask)) { [self moveReadingBarForKey:eventChar]; } else { - [super keyDown:theEvent]; + [super keyDown:theEvent } } @@ -2202,3 +2212,32 @@ } @end + +#pragma mark Core Graphics extension + +CGMutablePathRef CGCreatePathWithRoundRectInRect(CGRect rect, float radius) +{ + // Make sure radius doesn't exceed a maximum size to avoid artifacts: + radius = fmin(radius, 0.5f * fmin(rect.size.width, rect.size.height)); + + CGMutablePathRef path = CGPathCreateMutable(); + + // Make sure silly values simply lead to un-rounded corners: + if(radius <= 0) { + CGPathAddRect(path, NULL, rect); + } else { + // Now draw our rectangle: + CGPathMoveToPoint(path, NULL, rect.origin.x, rect.origin.y + radius); + // Bottom left (origin): + CGPathAddArcToPoint(path, NULL, rect.origin.x, rect.origin.y, rect.origin.x + rect.size.width, rect.origin.y, radius); + // Bottom edge and bottom right: + CGPathAddArcToPoint(path, NULL, rect.origin.x + rect.size.width, rect.origin.y, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height, radius); + // Right edge and top right: + CGPathAddArcToPoint(path, NULL, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height, rect.origin.x, rect.origin.y + rect.size.height, radius); + // Top edge and top left: + CGPathAddArcToPoint(path, NULL, rect.origin.x, rect.origin.y + rect.size.height, rect.origin.x, rect.origin.y, radius); + // Left edge: + CGPathCloseSubpath(path); + } + return path; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 19:11:45
|
Revision: 1854 http://skim-app.svn.sourceforge.net/skim-app/?rev=1854&view=rev Author: hofman Date: 2007-04-18 12:11:44 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Lighter bubble around page label in hover window. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 18:58:59 UTC (rev 1853) +++ trunk/SKPDFHoverWindow.m 2007-04-18 19:11:44 UTC (rev 1854) @@ -77,7 +77,7 @@ font = [[NSFont toolTipsFontOfSize:11.0] retain]; backgroundColor = [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.75 alpha:1.0] retain]; labelFont = [[NSFont boldSystemFontOfSize:11.0] retain]; - labelColor = [[NSColor colorWithCalibratedWhite:0.3 alpha:0.8] retain]; + labelColor = [[NSColor colorWithCalibratedWhite:0.5 alpha:0.8] retain]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationWillResignActiveNotification:) name:NSApplicationWillResignActiveNotification object:NSApp]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 18:59:00
|
Revision: 1853 http://skim-app.svn.sourceforge.net/skim-app/?rev=1853&view=rev Author: hofman Date: 2007-04-18 11:58:59 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Put page label in hover window in a bubble so it is better visible over text. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 17:57:41 UTC (rev 1852) +++ trunk/SKPDFHoverWindow.m 2007-04-18 18:58:59 UTC (rev 1853) @@ -39,6 +39,7 @@ #import "SKPDFHoverWindow.h" #import "PDFPage_SKExtensions.h" #import "SKPDFAnnotationNote.h" +#import "NSBezierPath_BDSKExtensions.h" #define WINDOW_WIDTH 400.0 #define WINDOW_HEIGHT 80.0 @@ -258,14 +259,21 @@ if (NSMinY(rect) < 0.0) rect.origin.y = 0.0; - NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:labelFont, NSFontAttributeName, labelColor, NSForegroundColorAttributeName, nil]; + NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:labelFont, NSFontAttributeName, color, NSForegroundColorAttributeName, nil]; NSAttributedString *labelString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Page", @""), [page label]] attributes:attrs]; NSRect labelRect = [labelString boundingRectWithSize:NSZeroSize options:NSStringDrawingUsesLineFragmentOrigin]; - labelRect.origin.x = NSMaxX(rect) - NSWidth(labelRect) - TEXT_MARGIN_X; + float labelOffset = (0.5 * NSHeight(labelRect)); // make sure the cap radius is integral + + labelRect.size.height = 2.0 * labelOffset; + labelRect.origin.x = NSMaxX(rect) - NSWidth(labelRect) - labelOffset - TEXT_MARGIN_X; labelRect.origin.y = NSMinY(rect) + TEXT_MARGIN_Y; [image lockFocus]; + [NSGraphicsContext saveGraphicsState]; + [labelColor setFill]; + [NSBezierPath fillHorizontalOvalAroundRect:labelRect]; [labelString drawWithRect:labelRect options:NSStringDrawingUsesLineFragmentOrigin]; + [NSGraphicsContext restoreGraphicsState]; [image unlockFocus]; [attrs release]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 17:57:42
|
Revision: 1852 http://skim-app.svn.sourceforge.net/skim-app/?rev=1852&view=rev Author: hofman Date: 2007-04-18 10:57:41 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Imitate tooltip settings. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 16:31:54 UTC (rev 1851) +++ trunk/SKPDFHoverWindow.m 2007-04-18 17:57:41 UTC (rev 1852) @@ -42,7 +42,10 @@ #define WINDOW_WIDTH 400.0 #define WINDOW_HEIGHT 80.0 -#define WINDOW_OFFSET 25.0 +#define WINDOW_OFFSET 20.0 +#define TEXT_MARGIN_X 2.0 +#define TEXT_MARGIN_Y 2.0 +#define ALPHA_VALUE 0.95 @implementation SKPDFHoverWindow @@ -60,6 +63,7 @@ [self setBackgroundColor:[NSColor whiteColor]]; [self setHasShadow:YES]; [self setLevel:NSStatusWindowLevel]; + [self setAlphaValue:ALPHA_VALUE]; NSScrollView *scrollView = [[NSScrollView alloc] init]; imageView = [[NSImageView alloc] init]; @@ -69,7 +73,7 @@ [scrollView release]; [imageView release]; - font = [[NSFont systemFontOfSize:11.0] retain]; + font = [[NSFont toolTipsFontOfSize:11.0] retain]; backgroundColor = [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.75 alpha:1.0] retain]; labelFont = [[NSFont boldSystemFontOfSize:11.0] retain]; labelColor = [[NSColor colorWithCalibratedWhite:0.3 alpha:0.8] retain]; @@ -149,14 +153,14 @@ - (void)orderFront:(id)sender { [self stopTimer]; [animation stopAnimation]; - [self setAlphaValue:1.0]; + [self setAlphaValue:ALPHA_VALUE]; [super orderFront:sender]; } - (void)orderOut:(id)sender { [self stopTimer]; [animation stopAnimation]; - [self setAlphaValue:1.0]; + [self setAlphaValue:ALPHA_VALUE]; [annotation release]; annotation = nil; [super orderOut:sender]; @@ -257,8 +261,8 @@ NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:labelFont, NSFontAttributeName, labelColor, NSForegroundColorAttributeName, nil]; NSAttributedString *labelString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Page", @""), [page label]] attributes:attrs]; NSRect labelRect = [labelString boundingRectWithSize:NSZeroSize options:NSStringDrawingUsesLineFragmentOrigin]; - labelRect.origin.x = NSMaxX(rect) - NSWidth(labelRect) - 2.0; - labelRect.origin.y = NSMinY(rect) + 2.0; + labelRect.origin.x = NSMaxX(rect) - NSWidth(labelRect) - TEXT_MARGIN_X; + labelRect.origin.y = NSMinY(rect) + TEXT_MARGIN_Y; [image lockFocus]; [labelString drawWithRect:labelRect options:NSStringDrawingUsesLineFragmentOrigin]; @@ -294,16 +298,16 @@ if (text) { - rect = [text boundingRectWithSize:NSInsetRect(contentRect, 2.0, 0.0).size options:NSStringDrawingUsesLineFragmentOrigin]; - rect.size.width = contentRect.size.width = NSWidth(rect) + 4.0; - rect.size.height = contentRect.size.height = fmin(NSHeight(rect), NSHeight(contentRect)); + rect = [text boundingRectWithSize:NSInsetRect(contentRect, TEXT_MARGIN_X, TEXT_MARGIN_Y).size options:NSStringDrawingUsesLineFragmentOrigin]; + rect.size.width = contentRect.size.width = NSWidth(rect) + 2.0 * TEXT_MARGIN_X; + rect.size.height = contentRect.size.height = fmin(NSHeight(rect) + 2.0 * TEXT_MARGIN_Y, NSHeight(contentRect)); rect.origin = NSZeroPoint; image = [[NSImage alloc] initWithSize:rect.size]; color = backgroundColor; [image lockFocus]; - [text drawWithRect:NSInsetRect(rect, 2.0, 0.0) options:NSStringDrawingUsesLineFragmentOrigin]; + [text drawWithRect:NSInsetRect(rect, TEXT_MARGIN_X, TEXT_MARGIN_Y) options:NSStringDrawingUsesLineFragmentOrigin]; [image unlockFocus]; [text release]; @@ -368,7 +372,7 @@ animation = nil; if (isFadeOut) [self orderOut:self]; - [self setAlphaValue:1.0]; + [self setAlphaValue:ALPHA_VALUE]; } - (void)animationDidStop:(NSAnimation*)anAnimation { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-18 16:31:55
|
Revision: 1851 http://skim-app.svn.sourceforge.net/skim-app/?rev=1851&view=rev Author: hofman Date: 2007-04-18 09:31:54 -0700 (Wed, 18 Apr 2007) Log Message: ----------- Draw a label with the page number at the corner of the hover window for local links. Lighter yellow background color. Modified Paths: -------------- trunk/SKPDFHoverWindow.h trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.h =================================================================== --- trunk/SKPDFHoverWindow.h 2007-04-18 15:07:26 UTC (rev 1850) +++ trunk/SKPDFHoverWindow.h 2007-04-18 16:31:54 UTC (rev 1851) @@ -44,6 +44,8 @@ NSImageView *imageView; NSFont *font; NSColor *backgroundColor; + NSFont *labelFont; + NSColor *labelColor; PDFAnnotation *annotation; NSViewAnimation *animation; NSTimer *timer; @@ -62,4 +64,10 @@ - (NSColor *)backgroundColor; - (void)setBackgroundColor:(NSColor *)newColor; +- (NSFont *)labelFont; +- (void)setLabelFont:(NSFont *)newFont; + +- (NSColor *)labelColor; +- (void)setLabelColor:(NSColor *)newColor; + @end Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-18 15:07:26 UTC (rev 1850) +++ trunk/SKPDFHoverWindow.m 2007-04-18 16:31:54 UTC (rev 1851) @@ -70,7 +70,9 @@ [imageView release]; font = [[NSFont systemFontOfSize:11.0] retain]; - backgroundColor = [[NSColor colorWithDeviceRed:1.0 green:1.0 blue:0.6 alpha:1.0] retain]; + backgroundColor = [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.75 alpha:1.0] retain]; + labelFont = [[NSFont boldSystemFontOfSize:11.0] retain]; + labelColor = [[NSColor colorWithCalibratedWhite:0.3 alpha:0.8] retain]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationWillResignActiveNotification:) name:NSApplicationWillResignActiveNotification object:NSApp]; @@ -81,6 +83,8 @@ - (void)dealloc { [font release]; [backgroundColor release]; + [labelFont release]; + [labelColor release]; [super dealloc]; } @@ -106,6 +110,28 @@ } } +- (NSFont *)labelFont { + return labelFont; +} + +- (void)setLabelFont:(NSFont *)newFont { + if (labelFont != newFont) { + [labelFont release]; + labelFont = [newFont retain]; + } +} + +- (NSColor *)labelColor { + return labelColor; +} + +- (void)setLabelColor:(NSColor *)newColor { + if (labelColor != newColor) { + [labelColor release]; + labelColor = [newColor retain]; + } +} + - (void)handleApplicationWillResignActiveNotification:(NSNotification *)notification { [self orderOut:self]; } @@ -219,6 +245,28 @@ image = [[page image] retain]; color = [NSColor controlBackgroundColor]; + if (NSMaxX(rect) > [image size].width) + rect.origin.x = [image size].width - NSWidth(rect); + if (NSMinX(rect) < 0.0) + rect.origin.x = 0.0; + if (NSMaxY(rect) > [image size].height) + rect.origin.y = [image size].height - NSHeight(rect); + if (NSMinY(rect) < 0.0) + rect.origin.y = 0.0; + + NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:labelFont, NSFontAttributeName, labelColor, NSForegroundColorAttributeName, nil]; + NSAttributedString *labelString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Page", @""), [page label]] attributes:attrs]; + NSRect labelRect = [labelString boundingRectWithSize:NSZeroSize options:NSStringDrawingUsesLineFragmentOrigin]; + labelRect.origin.x = NSMaxX(rect) - NSWidth(labelRect) - 2.0; + labelRect.origin.y = NSMinY(rect) + 2.0; + + [image lockFocus]; + [labelString drawWithRect:labelRect options:NSStringDrawingUsesLineFragmentOrigin]; + [image unlockFocus]; + + [attrs release]; + [labelString release]; + } else { string = [[(PDFAnnotationLink *)annotation URL] absoluteString]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |