├── English.lproj ├── Credits.rtf ├── InfoPlist.strings ├── MainMenu.xib └── XFImageDocument.xib ├── ExtraFile-Info.plist ├── ExtraFile.xcodeproj ├── kimasendorf.mode1v3 ├── kimasendorf.pbxuser └── project.pbxproj ├── ExtraFile_Prefix.pch ├── README ├── XFApp.h ├── XFApp.m ├── XFImageDocument.h ├── XFImageDocument.m ├── XFImageDocumentController.h ├── XFImageDocumentController.m ├── XFImageFilter.h ├── XFImageFilter.m ├── XFImageView.h ├── XFImageView.m ├── XFPrintView.h ├── XFPrintView.m ├── XFProfile.h ├── XFProfile.m ├── XFZoomScrollView.h ├── XFZoomScrollView.m ├── icons ├── 4bc.icns ├── bascii.icns ├── blinx.icns ├── cci.icns ├── extrafile.icns ├── mcf.icns ├── uspec.icns └── xff.icns ├── license.txt └── main.m /English.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 2 | {\fonttbl\f0\fnil\fcharset0 LucidaGrande;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 5 | 6 | \f0\fs20 \cf0 \ 7 | Initiated and developed by 8 | \b\fs24 \ 9 | Kim Asendorf\ 10 | 11 | \b0\fs20 \ 12 | Thanks to\ 13 | 14 | \b Ted Davis (Alpha tester)\ 15 | \ 16 | 17 | \b0 Beta tester 18 | \b \ 19 | Benjamin Gaulon\ 20 | Bit Synthesis\ 21 | Dataswitch\ 22 | Fritz Weber\ 23 | Hellocatfood\ 24 | ILovePresets\ 25 | Jim Punk\ 26 | Jose Irion Neto\ 27 | Pixelnoizz\ 28 | Rosa Menkman\ 29 | } -------------------------------------------------------------------------------- /English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /ExtraFile-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDocumentTypes 8 | 9 | 10 | CFBundleTypeExtensions 11 | 12 | uspec 13 | 14 | CFBundleTypeIconFile 15 | uspec.icns 16 | CFBundleTypeName 17 | Uniform Spectrum 18 | CFBundleTypeOSTypes 19 | 20 | USPEC 21 | 22 | CFBundleTypeRole 23 | Editor 24 | LSItemContentTypes 25 | 26 | org.extrafile.uspec 27 | 28 | LSTypeIsPackage 29 | 30 | NSDocumentClass 31 | XFImageDocument 32 | NSPersistentStoreTypeKey 33 | Binary 34 | 35 | 36 | CFBundleTypeExtensions 37 | 38 | blinx 39 | 40 | CFBundleTypeIconFile 41 | blinx.icns 42 | CFBundleTypeName 43 | Block Indexed 44 | CFBundleTypeOSTypes 45 | 46 | BLINX 47 | 48 | CFBundleTypeRole 49 | Editor 50 | LSItemContentTypes 51 | 52 | org.extrafile.blinx 53 | 54 | LSTypeIsPackage 55 | 56 | NSDocumentClass 57 | XFImageDocument 58 | NSPersistentStoreTypeKey 59 | Binary 60 | 61 | 62 | CFBundleTypeExtensions 63 | 64 | bascii 65 | 66 | CFBundleTypeIconFile 67 | bascii.icns 68 | CFBundleTypeName 69 | Block Ascii 70 | CFBundleTypeOSTypes 71 | 72 | BASCII 73 | 74 | CFBundleTypeRole 75 | Editor 76 | LSItemContentTypes 77 | 78 | org.extrafile.bascii 79 | 80 | LSTypeIsPackage 81 | 82 | NSDocumentClass 83 | XFImageDocument 84 | NSPersistentStoreTypeKey 85 | Binary 86 | 87 | 88 | CFBundleTypeExtensions 89 | 90 | 4bc 91 | 92 | CFBundleTypeIconFile 93 | 4bc.icns 94 | CFBundleTypeName 95 | 4 Bit Components 96 | CFBundleTypeOSTypes 97 | 98 | 4BC 99 | 100 | CFBundleTypeRole 101 | Editor 102 | LSItemContentTypes 103 | 104 | org.extrafile.4bc 105 | 106 | LSTypeIsPackage 107 | 108 | NSDocumentClass 109 | XFImageDocument 110 | NSPersistentStoreTypeKey 111 | Binary 112 | 113 | 114 | CFBundleTypeExtensions 115 | 116 | mcf 117 | 118 | CFBundleTypeIconFile 119 | mcf.icns 120 | CFBundleTypeName 121 | Monochrome Collector File 122 | CFBundleTypeOSTypes 123 | 124 | MCF 125 | 126 | CFBundleTypeRole 127 | Editor 128 | LSItemContentTypes 129 | 130 | org.extrafile.mcf 131 | 132 | LSTypeIsPackage 133 | 134 | NSDocumentClass 135 | XFImageDocument 136 | NSPersistentStoreTypeKey 137 | Binary 138 | 139 | 140 | CFBundleTypeExtensions 141 | 142 | cci 143 | 144 | CFBundleTypeIconFile 145 | cci.icns 146 | CFBundleTypeName 147 | Channel Compressed Image 148 | CFBundleTypeOSTypes 149 | 150 | CCI 151 | 152 | CFBundleTypeRole 153 | Editor 154 | LSItemContentTypes 155 | 156 | org.extrafile.cci 157 | 158 | LSTypeIsPackage 159 | 160 | NSDocumentClass 161 | XFImageDocument 162 | NSPersistentStoreTypeKey 163 | Binary 164 | 165 | 166 | CFBundleTypeExtensions 167 | 168 | xff 169 | 170 | CFBundleTypeIconFile 171 | xff.icns 172 | CFBundleTypeName 173 | Extra File Format 174 | CFBundleTypeOSTypes 175 | 176 | XFF 177 | 178 | CFBundleTypeRole 179 | Editor 180 | LSItemContentTypes 181 | 182 | org.extrafile.xff 183 | 184 | LSTypeIsPackage 185 | 186 | NSDocumentClass 187 | XFImageDocument 188 | NSPersistentStoreTypeKey 189 | Binary 190 | 191 | 192 | CFBundleTypeIconFile 193 | extrafile.icns 194 | CFBundleTypeName 195 | Image 196 | CFBundleTypeRole 197 | Editor 198 | LSItemContentTypes 199 | 200 | public.image 201 | 202 | LSMinimumSystemVersion 203 | 10.6 204 | NSDocumentClass 205 | XFImageDocument 206 | NSPersistentStoreTypeKey 207 | Binary 208 | XXCFBundleTypeExtensions 209 | 210 | png 211 | gif 212 | jpeg 213 | jpg 214 | jp2 215 | tiff 216 | tif 217 | crw 218 | nef 219 | 220 | 221 | 222 | CFBundleExecutable 223 | ${EXECUTABLE_NAME} 224 | CFBundleGetInfoString 225 | 2011 extrafile.org 226 | CFBundleIconFile 227 | extrafile.icns 228 | CFBundleIdentifier 229 | org.extrafile 230 | CFBundleInfoDictionaryVersion 231 | 6.0 232 | CFBundleName 233 | ${PRODUCT_NAME} 234 | CFBundlePackageType 235 | APPL 236 | CFBundleShortVersionString 237 | 0.52 238 | CFBundleSignature 239 | XFOS 240 | CFBundleVersion 241 | 28 242 | LSMinimumSystemVersion 243 | ${MACOSX_DEPLOYMENT_TARGET} 244 | NSHumanReadableCopyright 245 | Copyright 2011 extrafile.org 246 | NSMainNibFile 247 | MainMenu 248 | NSPrincipalClass 249 | XFApp 250 | NSSupportsSuddenTermination 251 | 252 | UTExportedTypeDeclarations 253 | 254 | 255 | UTTypeConformsTo 256 | 257 | public.data 258 | 259 | UTTypeDescription 260 | Uniform Spectrum 261 | UTTypeIconFile 262 | uspec.icns 263 | UTTypeIdentifier 264 | org.extrafile.uspec 265 | UTTypeTagSpecification 266 | 267 | public.filename-extension 268 | 269 | uspec 270 | 271 | 272 | 273 | 274 | UTTypeConformsTo 275 | 276 | public.data 277 | 278 | UTTypeDescription 279 | Block Index 280 | UTTypeIconFile 281 | blinx.icns 282 | UTTypeIdentifier 283 | org.extrafile.blinx 284 | UTTypeTagSpecification 285 | 286 | public.filename-extension 287 | 288 | blinx 289 | 290 | 291 | 292 | 293 | UTTypeConformsTo 294 | 295 | public.data 296 | 297 | UTTypeDescription 298 | Block Ascii 299 | UTTypeIconFile 300 | bascii.icns 301 | UTTypeIdentifier 302 | org.extrafile.bascii 303 | UTTypeTagSpecification 304 | 305 | public.filename-extension 306 | 307 | bascii 308 | 309 | 310 | 311 | 312 | UTTypeConformsTo 313 | 314 | public.data 315 | 316 | UTTypeDescription 317 | 4 Bit Components 318 | UTTypeIconFile 319 | 4bc.icns 320 | UTTypeIdentifier 321 | org.extrafile.4bc 322 | UTTypeTagSpecification 323 | 324 | public.filename-extension 325 | 326 | 4bc 327 | 328 | 329 | 330 | 331 | UTTypeConformsTo 332 | 333 | public.data 334 | 335 | UTTypeDescription 336 | Monochrome Collector File 337 | UTTypeIconFile 338 | mcf.icns 339 | UTTypeIdentifier 340 | org.extrafile.mcf 341 | UTTypeTagSpecification 342 | 343 | public.filename-extension 344 | 345 | mcf 346 | 347 | 348 | 349 | 350 | UTTypeConformsTo 351 | 352 | public.data 353 | 354 | UTTypeDescription 355 | Channel Compressed Image 356 | UTTypeIconFile 357 | cci.icns 358 | UTTypeIdentifier 359 | org.extrafile.cci 360 | UTTypeTagSpecification 361 | 362 | public.filename-extension 363 | 364 | cci 365 | 366 | 367 | 368 | 369 | UTTypeConformsTo 370 | 371 | public.data 372 | 373 | UTTypeDescription 374 | Extra File Format 375 | UTTypeIconFile 376 | xff.icns 377 | UTTypeIdentifier 378 | org.extrafile.xff 379 | UTTypeTagSpecification 380 | 381 | public.filename-extension 382 | 383 | xff 384 | 385 | 386 | 387 | 388 | 389 | 390 | -------------------------------------------------------------------------------- /ExtraFile.xcodeproj/kimasendorf.mode1v3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | XCProjectFormatConflictsModule 76 | Name 77 | Project Format Conflicts List 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | BundleLoadPath 161 | 162 | MaxInstances 163 | n 164 | Module 165 | XCSnapshotModule 166 | Name 167 | Snapshots Tool 168 | 169 | 170 | BundlePath 171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources 172 | Description 173 | DefaultDescriptionKey 174 | DockingSystemVisible 175 | 176 | Extension 177 | mode1v3 178 | FavBarConfig 179 | 180 | PBXProjectModuleGUID 181 | 7181C5161373DE90006DDE90 182 | XCBarModuleItemNames 183 | 184 | XCBarModuleItems 185 | 186 | 187 | FirstTimeWindowDisplayed 188 | 189 | Identifier 190 | com.apple.perspectives.project.mode1v3 191 | MajorVersion 192 | 33 193 | MinorVersion 194 | 0 195 | Name 196 | Default 197 | Notifications 198 | 199 | OpenEditors 200 | 201 | PerspectiveWidths 202 | 203 | -1 204 | -1 205 | 206 | Perspectives 207 | 208 | 209 | ChosenToolbarItems 210 | 211 | active-combo-popup 212 | action 213 | NSToolbarFlexibleSpaceItem 214 | debugger-enable-breakpoints 215 | build-and-go 216 | com.apple.ide.PBXToolbarStopButton 217 | get-info 218 | NSToolbarFlexibleSpaceItem 219 | com.apple.pbx.toolbar.searchfield 220 | 221 | ControllerClassBaseName 222 | 223 | IconName 224 | WindowOfProjectWithEditor 225 | Identifier 226 | perspective.project 227 | IsVertical 228 | 229 | Layout 230 | 231 | 232 | ContentConfiguration 233 | 234 | PBXBottomSmartGroupGIDs 235 | 236 | 1C37FBAC04509CD000000102 237 | 1C37FAAC04509CD000000102 238 | 1C37FABC05509CD000000102 239 | 1C37FABC05539CD112110102 240 | E2644B35053B69B200211256 241 | 1C37FABC04509CD000100104 242 | 1CC0EA4004350EF90044410B 243 | 1CC0EA4004350EF90041110B 244 | 245 | PBXProjectModuleGUID 246 | 1CE0B1FE06471DED0097A5F4 247 | PBXProjectModuleLabel 248 | Files 249 | PBXProjectStructureProvided 250 | yes 251 | PBXSmartGroupTreeModuleColumnData 252 | 253 | PBXSmartGroupTreeModuleColumnWidthsKey 254 | 255 | 186 256 | 257 | PBXSmartGroupTreeModuleColumnsKey_v4 258 | 259 | MainColumn 260 | 261 | 262 | PBXSmartGroupTreeModuleOutlineStateKey_v7 263 | 264 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 265 | 266 | 2A37F4AAFDCFA73011CA2CEA 267 | 2A37F4ABFDCFA73011CA2CEA 268 | 2A37F4AFFDCFA73011CA2CEA 269 | 2A37F4B8FDCFA73011CA2CEA 270 | 1C37FBAC04509CD000000102 271 | 1C37FABC05509CD000000102 272 | 273 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 274 | 275 | 276 | 30 277 | 21 278 | 0 279 | 280 | 281 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 282 | {{0, 0}, {186, 1156}} 283 | 284 | PBXTopSmartGroupGIDs 285 | 286 | XCIncludePerspectivesSwitch 287 | 288 | XCSharingToken 289 | com.apple.Xcode.GFSharingToken 290 | 291 | GeometryConfiguration 292 | 293 | Frame 294 | {{0, 0}, {203, 1174}} 295 | GroupTreeTableConfiguration 296 | 297 | MainColumn 298 | 186 299 | 300 | RubberWindowFrame 301 | 909 152 1351 1215 0 0 2560 1418 302 | 303 | Module 304 | PBXSmartGroupTreeModule 305 | Proportion 306 | 203pt 307 | 308 | 309 | Dock 310 | 311 | 312 | BecomeActive 313 | 314 | ContentConfiguration 315 | 316 | PBXProjectModuleGUID 317 | 1CE0B20306471E060097A5F4 318 | PBXProjectModuleLabel 319 | Credits.rtf 320 | PBXSplitModuleInNavigatorKey 321 | 322 | Split0 323 | 324 | PBXProjectModuleGUID 325 | 1CE0B20406471E060097A5F4 326 | PBXProjectModuleLabel 327 | Credits.rtf 328 | _historyCapacity 329 | 0 330 | bookmark 331 | 71BCE47A13FB08150037C7B4 332 | history 333 | 334 | 7125A547137F409800699395 335 | 7193078A1389D753001A6737 336 | 714B5425139302070095067A 337 | 71924C2713998D250025019D 338 | 71924C43139990210025019D 339 | 71924C44139990210025019D 340 | 71924C4C139996D50025019D 341 | 71F9201D13AFE99D00C2D785 342 | 71FEA7E013FB05C9008B7E19 343 | 71FEA7E113FB05C9008B7E19 344 | 71FEA7E213FB05C9008B7E19 345 | 71FEA7E313FB05C9008B7E19 346 | 71FEA7E413FB05C9008B7E19 347 | 71FEA7E513FB05C9008B7E19 348 | 71FEA7E613FB05C9008B7E19 349 | 71FEA7E713FB05C9008B7E19 350 | 71FEA7E813FB05C9008B7E19 351 | 71FEA7E913FB05C9008B7E19 352 | 71FEA7EA13FB05C9008B7E19 353 | 71FEA7EB13FB05C9008B7E19 354 | 71FEA7EC13FB05C9008B7E19 355 | 71FEA7ED13FB05C9008B7E19 356 | 71FEA7EE13FB05C9008B7E19 357 | 71FEA7EF13FB05C9008B7E19 358 | 71FEA7F013FB05C9008B7E19 359 | 71FEA7F113FB05C9008B7E19 360 | 71FEA7F213FB05C9008B7E19 361 | 71FEA7F313FB05C9008B7E19 362 | 71FEA7F413FB05C9008B7E19 363 | 71BCE45C13FB07B90037C7B4 364 | 365 | 366 | SplitCount 367 | 1 368 | 369 | StatusBarVisibility 370 | 371 | 372 | GeometryConfiguration 373 | 374 | Frame 375 | {{0, 0}, {1143, 922}} 376 | RubberWindowFrame 377 | 909 152 1351 1215 0 0 2560 1418 378 | 379 | Module 380 | PBXNavigatorGroup 381 | Proportion 382 | 922pt 383 | 384 | 385 | ContentConfiguration 386 | 387 | PBXProjectModuleGUID 388 | 1CE0B20506471E060097A5F4 389 | PBXProjectModuleLabel 390 | Detail 391 | 392 | GeometryConfiguration 393 | 394 | Frame 395 | {{0, 927}, {1143, 247}} 396 | RubberWindowFrame 397 | 909 152 1351 1215 0 0 2560 1418 398 | 399 | Module 400 | XCDetailModule 401 | Proportion 402 | 247pt 403 | 404 | 405 | Proportion 406 | 1143pt 407 | 408 | 409 | Name 410 | Project 411 | ServiceClasses 412 | 413 | XCModuleDock 414 | PBXSmartGroupTreeModule 415 | XCModuleDock 416 | PBXNavigatorGroup 417 | XCDetailModule 418 | 419 | TableOfContents 420 | 421 | 71BCE46D13FB07E80037C7B4 422 | 1CE0B1FE06471DED0097A5F4 423 | 71BCE46E13FB07E80037C7B4 424 | 1CE0B20306471E060097A5F4 425 | 1CE0B20506471E060097A5F4 426 | 427 | ToolbarConfigUserDefaultsMinorVersion 428 | 2 429 | ToolbarConfiguration 430 | xcode.toolbar.config.defaultV3 431 | 432 | 433 | ControllerClassBaseName 434 | 435 | IconName 436 | WindowOfProject 437 | Identifier 438 | perspective.morph 439 | IsVertical 440 | 0 441 | Layout 442 | 443 | 444 | BecomeActive 445 | 1 446 | ContentConfiguration 447 | 448 | PBXBottomSmartGroupGIDs 449 | 450 | 1C37FBAC04509CD000000102 451 | 1C37FAAC04509CD000000102 452 | 1C08E77C0454961000C914BD 453 | 1C37FABC05509CD000000102 454 | 1C37FABC05539CD112110102 455 | E2644B35053B69B200211256 456 | 1C37FABC04509CD000100104 457 | 1CC0EA4004350EF90044410B 458 | 1CC0EA4004350EF90041110B 459 | 460 | PBXProjectModuleGUID 461 | 11E0B1FE06471DED0097A5F4 462 | PBXProjectModuleLabel 463 | Files 464 | PBXProjectStructureProvided 465 | yes 466 | PBXSmartGroupTreeModuleColumnData 467 | 468 | PBXSmartGroupTreeModuleColumnWidthsKey 469 | 470 | 186 471 | 472 | PBXSmartGroupTreeModuleColumnsKey_v4 473 | 474 | MainColumn 475 | 476 | 477 | PBXSmartGroupTreeModuleOutlineStateKey_v7 478 | 479 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 480 | 481 | 29B97314FDCFA39411CA2CEA 482 | 1C37FABC05509CD000000102 483 | 484 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 485 | 486 | 487 | 0 488 | 489 | 490 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 491 | {{0, 0}, {186, 337}} 492 | 493 | PBXTopSmartGroupGIDs 494 | 495 | XCIncludePerspectivesSwitch 496 | 1 497 | XCSharingToken 498 | com.apple.Xcode.GFSharingToken 499 | 500 | GeometryConfiguration 501 | 502 | Frame 503 | {{0, 0}, {203, 355}} 504 | GroupTreeTableConfiguration 505 | 506 | MainColumn 507 | 186 508 | 509 | RubberWindowFrame 510 | 373 269 690 397 0 0 1440 878 511 | 512 | Module 513 | PBXSmartGroupTreeModule 514 | Proportion 515 | 100% 516 | 517 | 518 | Name 519 | Morph 520 | PreferredWidth 521 | 300 522 | ServiceClasses 523 | 524 | XCModuleDock 525 | PBXSmartGroupTreeModule 526 | 527 | TableOfContents 528 | 529 | 11E0B1FE06471DED0097A5F4 530 | 531 | ToolbarConfiguration 532 | xcode.toolbar.config.default.shortV3 533 | 534 | 535 | PerspectivesBarVisible 536 | 537 | ShelfIsVisible 538 | 539 | SourceDescription 540 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' 541 | StatusbarIsVisible 542 | 543 | TimeStamp 544 | 0.0 545 | ToolbarConfigUserDefaultsMinorVersion 546 | 2 547 | ToolbarDisplayMode 548 | 1 549 | ToolbarIsVisible 550 | 551 | ToolbarSizeMode 552 | 1 553 | Type 554 | Perspectives 555 | UpdateMessage 556 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? 557 | WindowJustification 558 | 5 559 | WindowOrderList 560 | 561 | 71BCE47813FB07E80037C7B4 562 | 71BCE47913FB07E80037C7B4 563 | 1CD10A99069EF8BA00B06720 564 | 7181C5171373DE90006DDE90 565 | 1C78EAAD065D492600B07095 566 | /Users/kimasendorf/Documents/Development/Cocoa/ExtraFile/ExtraFile.xcodeproj 567 | 568 | WindowString 569 | 909 152 1351 1215 0 0 2560 1418 570 | WindowToolsV3 571 | 572 | 573 | FirstTimeWindowDisplayed 574 | 575 | Identifier 576 | windowTool.build 577 | IsVertical 578 | 579 | Layout 580 | 581 | 582 | Dock 583 | 584 | 585 | ContentConfiguration 586 | 587 | PBXProjectModuleGUID 588 | 1CD0528F0623707200166675 589 | PBXProjectModuleLabel 590 | 591 | StatusBarVisibility 592 | 593 | 594 | GeometryConfiguration 595 | 596 | Frame 597 | {{0, 0}, {964, 232}} 598 | RubberWindowFrame 599 | 761 620 964 514 0 0 2560 1418 600 | 601 | Module 602 | PBXNavigatorGroup 603 | Proportion 604 | 232pt 605 | 606 | 607 | ContentConfiguration 608 | 609 | PBXProjectModuleGUID 610 | XCMainBuildResultsModuleGUID 611 | PBXProjectModuleLabel 612 | Build Results 613 | XCBuildResultsTrigger_Collapse 614 | 1021 615 | XCBuildResultsTrigger_Open 616 | 1011 617 | 618 | GeometryConfiguration 619 | 620 | Frame 621 | {{0, 237}, {964, 236}} 622 | RubberWindowFrame 623 | 761 620 964 514 0 0 2560 1418 624 | 625 | Module 626 | PBXBuildResultsModule 627 | Proportion 628 | 236pt 629 | 630 | 631 | Proportion 632 | 473pt 633 | 634 | 635 | Name 636 | Build Results 637 | ServiceClasses 638 | 639 | PBXBuildResultsModule 640 | 641 | StatusbarIsVisible 642 | 643 | TableOfContents 644 | 645 | 7181C5171373DE90006DDE90 646 | 71BCE46F13FB07E80037C7B4 647 | 1CD0528F0623707200166675 648 | XCMainBuildResultsModuleGUID 649 | 650 | ToolbarConfiguration 651 | xcode.toolbar.config.buildV3 652 | WindowContentMinSize 653 | 486 300 654 | WindowString 655 | 761 620 964 514 0 0 2560 1418 656 | WindowToolGUID 657 | 7181C5171373DE90006DDE90 658 | WindowToolIsVisible 659 | 660 | 661 | 662 | FirstTimeWindowDisplayed 663 | 664 | Identifier 665 | windowTool.debugger 666 | IsVertical 667 | 668 | Layout 669 | 670 | 671 | Dock 672 | 673 | 674 | ContentConfiguration 675 | 676 | Debugger 677 | 678 | HorizontalSplitView 679 | 680 | _collapsingFrameDimension 681 | 0.0 682 | _indexOfCollapsedView 683 | 0 684 | _percentageOfCollapsedView 685 | 0.0 686 | isCollapsed 687 | yes 688 | sizes 689 | 690 | {{0, 0}, {316, 203}} 691 | {{316, 0}, {378, 203}} 692 | 693 | 694 | VerticalSplitView 695 | 696 | _collapsingFrameDimension 697 | 0.0 698 | _indexOfCollapsedView 699 | 0 700 | _percentageOfCollapsedView 701 | 0.0 702 | isCollapsed 703 | yes 704 | sizes 705 | 706 | {{0, 0}, {694, 203}} 707 | {{0, 203}, {694, 178}} 708 | 709 | 710 | 711 | LauncherConfigVersion 712 | 8 713 | PBXProjectModuleGUID 714 | 1C162984064C10D400B95A72 715 | PBXProjectModuleLabel 716 | Debug - GLUTExamples (Underwater) 717 | 718 | GeometryConfiguration 719 | 720 | DebugConsoleVisible 721 | None 722 | DebugConsoleWindowFrame 723 | {{200, 200}, {500, 300}} 724 | DebugSTDIOWindowFrame 725 | {{200, 200}, {500, 300}} 726 | Frame 727 | {{0, 0}, {694, 381}} 728 | PBXDebugSessionStackFrameViewKey 729 | 730 | DebugVariablesTableConfiguration 731 | 732 | Name 733 | 120 734 | Value 735 | 85 736 | Summary 737 | 148 738 | 739 | Frame 740 | {{316, 0}, {378, 203}} 741 | RubberWindowFrame 742 | 75 973 694 422 0 0 2560 1418 743 | 744 | RubberWindowFrame 745 | 75 973 694 422 0 0 2560 1418 746 | 747 | Module 748 | PBXDebugSessionModule 749 | Proportion 750 | 381pt 751 | 752 | 753 | Proportion 754 | 381pt 755 | 756 | 757 | Name 758 | Debugger 759 | ServiceClasses 760 | 761 | PBXDebugSessionModule 762 | 763 | StatusbarIsVisible 764 | 765 | TableOfContents 766 | 767 | 1CD10A99069EF8BA00B06720 768 | 71BCE47013FB07E80037C7B4 769 | 1C162984064C10D400B95A72 770 | 71BCE47113FB07E80037C7B4 771 | 71BCE47213FB07E80037C7B4 772 | 71BCE47313FB07E80037C7B4 773 | 71BCE47413FB07E80037C7B4 774 | 71BCE47513FB07E80037C7B4 775 | 776 | ToolbarConfiguration 777 | xcode.toolbar.config.debugV3 778 | WindowString 779 | 75 973 694 422 0 0 2560 1418 780 | WindowToolGUID 781 | 1CD10A99069EF8BA00B06720 782 | WindowToolIsVisible 783 | 784 | 785 | 786 | Identifier 787 | windowTool.find 788 | Layout 789 | 790 | 791 | Dock 792 | 793 | 794 | Dock 795 | 796 | 797 | ContentConfiguration 798 | 799 | PBXProjectModuleGUID 800 | 1CDD528C0622207200134675 801 | PBXProjectModuleLabel 802 | <No Editor> 803 | PBXSplitModuleInNavigatorKey 804 | 805 | Split0 806 | 807 | PBXProjectModuleGUID 808 | 1CD0528D0623707200166675 809 | 810 | SplitCount 811 | 1 812 | 813 | StatusBarVisibility 814 | 1 815 | 816 | GeometryConfiguration 817 | 818 | Frame 819 | {{0, 0}, {781, 167}} 820 | RubberWindowFrame 821 | 62 385 781 470 0 0 1440 878 822 | 823 | Module 824 | PBXNavigatorGroup 825 | Proportion 826 | 781pt 827 | 828 | 829 | Proportion 830 | 50% 831 | 832 | 833 | BecomeActive 834 | 1 835 | ContentConfiguration 836 | 837 | PBXProjectModuleGUID 838 | 1CD0528E0623707200166675 839 | PBXProjectModuleLabel 840 | Project Find 841 | 842 | GeometryConfiguration 843 | 844 | Frame 845 | {{8, 0}, {773, 254}} 846 | RubberWindowFrame 847 | 62 385 781 470 0 0 1440 878 848 | 849 | Module 850 | PBXProjectFindModule 851 | Proportion 852 | 50% 853 | 854 | 855 | Proportion 856 | 428pt 857 | 858 | 859 | Name 860 | Project Find 861 | ServiceClasses 862 | 863 | PBXProjectFindModule 864 | 865 | StatusbarIsVisible 866 | 1 867 | TableOfContents 868 | 869 | 1C530D57069F1CE1000CFCEE 870 | 1C530D58069F1CE1000CFCEE 871 | 1C530D59069F1CE1000CFCEE 872 | 1CDD528C0622207200134675 873 | 1C530D5A069F1CE1000CFCEE 874 | 1CE0B1FE06471DED0097A5F4 875 | 1CD0528E0623707200166675 876 | 877 | WindowString 878 | 62 385 781 470 0 0 1440 878 879 | WindowToolGUID 880 | 1C530D57069F1CE1000CFCEE 881 | WindowToolIsVisible 882 | 0 883 | 884 | 885 | Identifier 886 | MENUSEPARATOR 887 | 888 | 889 | FirstTimeWindowDisplayed 890 | 891 | Identifier 892 | windowTool.debuggerConsole 893 | IsVertical 894 | 895 | Layout 896 | 897 | 898 | Dock 899 | 900 | 901 | BecomeActive 902 | 903 | ContentConfiguration 904 | 905 | PBXProjectModuleGUID 906 | 1C78EAAC065D492600B07095 907 | PBXProjectModuleLabel 908 | Debugger Console 909 | 910 | GeometryConfiguration 911 | 912 | Frame 913 | {{0, 0}, {1028, 238}} 914 | RubberWindowFrame 915 | 49 60 1028 279 0 0 2560 1418 916 | 917 | Module 918 | PBXDebugCLIModule 919 | Proportion 920 | 238pt 921 | 922 | 923 | Proportion 924 | 238pt 925 | 926 | 927 | Name 928 | Debugger Console 929 | ServiceClasses 930 | 931 | PBXDebugCLIModule 932 | 933 | StatusbarIsVisible 934 | 935 | TableOfContents 936 | 937 | 1C78EAAD065D492600B07095 938 | 71BCE47613FB07E80037C7B4 939 | 1C78EAAC065D492600B07095 940 | 941 | ToolbarConfiguration 942 | xcode.toolbar.config.consoleV3 943 | WindowString 944 | 49 60 1028 279 0 0 2560 1418 945 | WindowToolGUID 946 | 1C78EAAD065D492600B07095 947 | WindowToolIsVisible 948 | 949 | 950 | 951 | Identifier 952 | windowTool.snapshots 953 | Layout 954 | 955 | 956 | Dock 957 | 958 | 959 | Module 960 | XCSnapshotModule 961 | Proportion 962 | 100% 963 | 964 | 965 | Proportion 966 | 100% 967 | 968 | 969 | Name 970 | Snapshots 971 | ServiceClasses 972 | 973 | XCSnapshotModule 974 | 975 | StatusbarIsVisible 976 | Yes 977 | ToolbarConfiguration 978 | xcode.toolbar.config.snapshots 979 | WindowString 980 | 315 824 300 550 0 0 1440 878 981 | WindowToolIsVisible 982 | Yes 983 | 984 | 985 | Identifier 986 | windowTool.scm 987 | Layout 988 | 989 | 990 | Dock 991 | 992 | 993 | ContentConfiguration 994 | 995 | PBXProjectModuleGUID 996 | 1C78EAB2065D492600B07095 997 | PBXProjectModuleLabel 998 | <No Editor> 999 | PBXSplitModuleInNavigatorKey 1000 | 1001 | Split0 1002 | 1003 | PBXProjectModuleGUID 1004 | 1C78EAB3065D492600B07095 1005 | 1006 | SplitCount 1007 | 1 1008 | 1009 | StatusBarVisibility 1010 | 1 1011 | 1012 | GeometryConfiguration 1013 | 1014 | Frame 1015 | {{0, 0}, {452, 0}} 1016 | RubberWindowFrame 1017 | 743 379 452 308 0 0 1280 1002 1018 | 1019 | Module 1020 | PBXNavigatorGroup 1021 | Proportion 1022 | 0pt 1023 | 1024 | 1025 | BecomeActive 1026 | 1 1027 | ContentConfiguration 1028 | 1029 | PBXProjectModuleGUID 1030 | 1CD052920623707200166675 1031 | PBXProjectModuleLabel 1032 | SCM 1033 | 1034 | GeometryConfiguration 1035 | 1036 | ConsoleFrame 1037 | {{0, 259}, {452, 0}} 1038 | Frame 1039 | {{0, 7}, {452, 259}} 1040 | RubberWindowFrame 1041 | 743 379 452 308 0 0 1280 1002 1042 | TableConfiguration 1043 | 1044 | Status 1045 | 30 1046 | FileName 1047 | 199 1048 | Path 1049 | 197.0950012207031 1050 | 1051 | TableFrame 1052 | {{0, 0}, {452, 250}} 1053 | 1054 | Module 1055 | PBXCVSModule 1056 | Proportion 1057 | 262pt 1058 | 1059 | 1060 | Proportion 1061 | 266pt 1062 | 1063 | 1064 | Name 1065 | SCM 1066 | ServiceClasses 1067 | 1068 | PBXCVSModule 1069 | 1070 | StatusbarIsVisible 1071 | 1 1072 | TableOfContents 1073 | 1074 | 1C78EAB4065D492600B07095 1075 | 1C78EAB5065D492600B07095 1076 | 1C78EAB2065D492600B07095 1077 | 1CD052920623707200166675 1078 | 1079 | ToolbarConfiguration 1080 | xcode.toolbar.config.scm 1081 | WindowString 1082 | 743 379 452 308 0 0 1280 1002 1083 | 1084 | 1085 | Identifier 1086 | windowTool.breakpoints 1087 | IsVertical 1088 | 0 1089 | Layout 1090 | 1091 | 1092 | Dock 1093 | 1094 | 1095 | BecomeActive 1096 | 1 1097 | ContentConfiguration 1098 | 1099 | PBXBottomSmartGroupGIDs 1100 | 1101 | 1C77FABC04509CD000000102 1102 | 1103 | PBXProjectModuleGUID 1104 | 1CE0B1FE06471DED0097A5F4 1105 | PBXProjectModuleLabel 1106 | Files 1107 | PBXProjectStructureProvided 1108 | no 1109 | PBXSmartGroupTreeModuleColumnData 1110 | 1111 | PBXSmartGroupTreeModuleColumnWidthsKey 1112 | 1113 | 168 1114 | 1115 | PBXSmartGroupTreeModuleColumnsKey_v4 1116 | 1117 | MainColumn 1118 | 1119 | 1120 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1121 | 1122 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1123 | 1124 | 1C77FABC04509CD000000102 1125 | 1126 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1127 | 1128 | 1129 | 0 1130 | 1131 | 1132 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1133 | {{0, 0}, {168, 350}} 1134 | 1135 | PBXTopSmartGroupGIDs 1136 | 1137 | XCIncludePerspectivesSwitch 1138 | 0 1139 | 1140 | GeometryConfiguration 1141 | 1142 | Frame 1143 | {{0, 0}, {185, 368}} 1144 | GroupTreeTableConfiguration 1145 | 1146 | MainColumn 1147 | 168 1148 | 1149 | RubberWindowFrame 1150 | 315 424 744 409 0 0 1440 878 1151 | 1152 | Module 1153 | PBXSmartGroupTreeModule 1154 | Proportion 1155 | 185pt 1156 | 1157 | 1158 | ContentConfiguration 1159 | 1160 | PBXProjectModuleGUID 1161 | 1CA1AED706398EBD00589147 1162 | PBXProjectModuleLabel 1163 | Detail 1164 | 1165 | GeometryConfiguration 1166 | 1167 | Frame 1168 | {{190, 0}, {554, 368}} 1169 | RubberWindowFrame 1170 | 315 424 744 409 0 0 1440 878 1171 | 1172 | Module 1173 | XCDetailModule 1174 | Proportion 1175 | 554pt 1176 | 1177 | 1178 | Proportion 1179 | 368pt 1180 | 1181 | 1182 | MajorVersion 1183 | 3 1184 | MinorVersion 1185 | 0 1186 | Name 1187 | Breakpoints 1188 | ServiceClasses 1189 | 1190 | PBXSmartGroupTreeModule 1191 | XCDetailModule 1192 | 1193 | StatusbarIsVisible 1194 | 1 1195 | TableOfContents 1196 | 1197 | 1CDDB66807F98D9800BB5817 1198 | 1CDDB66907F98D9800BB5817 1199 | 1CE0B1FE06471DED0097A5F4 1200 | 1CA1AED706398EBD00589147 1201 | 1202 | ToolbarConfiguration 1203 | xcode.toolbar.config.breakpointsV3 1204 | WindowString 1205 | 315 424 744 409 0 0 1440 878 1206 | WindowToolGUID 1207 | 1CDDB66807F98D9800BB5817 1208 | WindowToolIsVisible 1209 | 1 1210 | 1211 | 1212 | Identifier 1213 | windowTool.debugAnimator 1214 | Layout 1215 | 1216 | 1217 | Dock 1218 | 1219 | 1220 | Module 1221 | PBXNavigatorGroup 1222 | Proportion 1223 | 100% 1224 | 1225 | 1226 | Proportion 1227 | 100% 1228 | 1229 | 1230 | Name 1231 | Debug Visualizer 1232 | ServiceClasses 1233 | 1234 | PBXNavigatorGroup 1235 | 1236 | StatusbarIsVisible 1237 | 1 1238 | ToolbarConfiguration 1239 | xcode.toolbar.config.debugAnimatorV3 1240 | WindowString 1241 | 100 100 700 500 0 0 1280 1002 1242 | 1243 | 1244 | Identifier 1245 | windowTool.bookmarks 1246 | Layout 1247 | 1248 | 1249 | Dock 1250 | 1251 | 1252 | Module 1253 | PBXBookmarksModule 1254 | Proportion 1255 | 100% 1256 | 1257 | 1258 | Proportion 1259 | 100% 1260 | 1261 | 1262 | Name 1263 | Bookmarks 1264 | ServiceClasses 1265 | 1266 | PBXBookmarksModule 1267 | 1268 | StatusbarIsVisible 1269 | 0 1270 | WindowString 1271 | 538 42 401 187 0 0 1280 1002 1272 | 1273 | 1274 | Identifier 1275 | windowTool.projectFormatConflicts 1276 | Layout 1277 | 1278 | 1279 | Dock 1280 | 1281 | 1282 | Module 1283 | XCProjectFormatConflictsModule 1284 | Proportion 1285 | 100% 1286 | 1287 | 1288 | Proportion 1289 | 100% 1290 | 1291 | 1292 | Name 1293 | Project Format Conflicts 1294 | ServiceClasses 1295 | 1296 | XCProjectFormatConflictsModule 1297 | 1298 | StatusbarIsVisible 1299 | 0 1300 | WindowContentMinSize 1301 | 450 300 1302 | WindowString 1303 | 50 850 472 307 0 0 1440 877 1304 | 1305 | 1306 | Identifier 1307 | windowTool.classBrowser 1308 | Layout 1309 | 1310 | 1311 | Dock 1312 | 1313 | 1314 | BecomeActive 1315 | 1 1316 | ContentConfiguration 1317 | 1318 | OptionsSetName 1319 | Hierarchy, all classes 1320 | PBXProjectModuleGUID 1321 | 1CA6456E063B45B4001379D8 1322 | PBXProjectModuleLabel 1323 | Class Browser - NSObject 1324 | 1325 | GeometryConfiguration 1326 | 1327 | ClassesFrame 1328 | {{0, 0}, {374, 96}} 1329 | ClassesTreeTableConfiguration 1330 | 1331 | PBXClassNameColumnIdentifier 1332 | 208 1333 | PBXClassBookColumnIdentifier 1334 | 22 1335 | 1336 | Frame 1337 | {{0, 0}, {630, 331}} 1338 | MembersFrame 1339 | {{0, 105}, {374, 395}} 1340 | MembersTreeTableConfiguration 1341 | 1342 | PBXMemberTypeIconColumnIdentifier 1343 | 22 1344 | PBXMemberNameColumnIdentifier 1345 | 216 1346 | PBXMemberTypeColumnIdentifier 1347 | 97 1348 | PBXMemberBookColumnIdentifier 1349 | 22 1350 | 1351 | PBXModuleWindowStatusBarHidden2 1352 | 1 1353 | RubberWindowFrame 1354 | 385 179 630 352 0 0 1440 878 1355 | 1356 | Module 1357 | PBXClassBrowserModule 1358 | Proportion 1359 | 332pt 1360 | 1361 | 1362 | Proportion 1363 | 332pt 1364 | 1365 | 1366 | Name 1367 | Class Browser 1368 | ServiceClasses 1369 | 1370 | PBXClassBrowserModule 1371 | 1372 | StatusbarIsVisible 1373 | 0 1374 | TableOfContents 1375 | 1376 | 1C0AD2AF069F1E9B00FABCE6 1377 | 1C0AD2B0069F1E9B00FABCE6 1378 | 1CA6456E063B45B4001379D8 1379 | 1380 | ToolbarConfiguration 1381 | xcode.toolbar.config.classbrowser 1382 | WindowString 1383 | 385 179 630 352 0 0 1440 878 1384 | WindowToolGUID 1385 | 1C0AD2AF069F1E9B00FABCE6 1386 | WindowToolIsVisible 1387 | 0 1388 | 1389 | 1390 | Identifier 1391 | windowTool.refactoring 1392 | IncludeInToolsMenu 1393 | 0 1394 | Layout 1395 | 1396 | 1397 | Dock 1398 | 1399 | 1400 | BecomeActive 1401 | 1 1402 | GeometryConfiguration 1403 | 1404 | Frame 1405 | {0, 0}, {500, 335} 1406 | RubberWindowFrame 1407 | {0, 0}, {500, 335} 1408 | 1409 | Module 1410 | XCRefactoringModule 1411 | Proportion 1412 | 100% 1413 | 1414 | 1415 | Proportion 1416 | 100% 1417 | 1418 | 1419 | Name 1420 | Refactoring 1421 | ServiceClasses 1422 | 1423 | XCRefactoringModule 1424 | 1425 | WindowString 1426 | 200 200 500 356 0 0 1920 1200 1427 | 1428 | 1429 | 1430 | 1431 | -------------------------------------------------------------------------------- /ExtraFile.xcodeproj/kimasendorf.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 089C1660FE840EACC02AAC07 /* English */ = { 4 | uiCtxt = { 5 | sepNavIntBoundsRect = "{{0, 0}, {1082, 875}}"; 6 | sepNavSelRange = "{0, 0}"; 7 | sepNavVisRange = "{0, 45}"; 8 | sepNavWindowFrame = "{{15, 855}, {750, 558}}"; 9 | }; 10 | }; 11 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */ = { 12 | uiCtxt = { 13 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 14 | sepNavSelRange = "{0, 0}"; 15 | sepNavVisRange = "{0, 149}"; 16 | }; 17 | }; 18 | 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { 19 | activeBuildConfigurationName = Release; 20 | activeExecutable = 7181C4FA1373DD85006DDE90 /* ExtraFile */; 21 | activeTarget = 8D15AC270486D014006FF6A4 /* ExtraFile */; 22 | addToTargets = ( 23 | 8D15AC270486D014006FF6A4 /* ExtraFile */, 24 | ); 25 | codeSenseManager = 7181C5081373DDA3006DDE90 /* Code sense */; 26 | executables = ( 27 | 7181C4FA1373DD85006DDE90 /* ExtraFile */, 28 | ); 29 | perUserDictionary = { 30 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 31 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 32 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 33 | PBXFileTableDataSourceColumnWidthsKey = ( 34 | 20, 35 | 904, 36 | 20, 37 | 48, 38 | 43, 39 | 43, 40 | 20, 41 | ); 42 | PBXFileTableDataSourceColumnsKey = ( 43 | PBXFileDataSource_FiletypeID, 44 | PBXFileDataSource_Filename_ColumnID, 45 | PBXFileDataSource_Built_ColumnID, 46 | PBXFileDataSource_ObjectSize_ColumnID, 47 | PBXFileDataSource_Errors_ColumnID, 48 | PBXFileDataSource_Warnings_ColumnID, 49 | PBXFileDataSource_Target_ColumnID, 50 | ); 51 | }; 52 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 53 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 54 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 55 | PBXFileTableDataSourceColumnWidthsKey = ( 56 | 20, 57 | 864, 58 | 60, 59 | 20, 60 | 48, 61 | 43, 62 | 43, 63 | ); 64 | PBXFileTableDataSourceColumnsKey = ( 65 | PBXFileDataSource_FiletypeID, 66 | PBXFileDataSource_Filename_ColumnID, 67 | PBXTargetDataSource_PrimaryAttribute, 68 | PBXFileDataSource_Built_ColumnID, 69 | PBXFileDataSource_ObjectSize_ColumnID, 70 | PBXFileDataSource_Errors_ColumnID, 71 | PBXFileDataSource_Warnings_ColumnID, 72 | ); 73 | }; 74 | PBXPerProjectTemplateStateSaveDate = 335218646; 75 | PBXWorkspaceStateSaveDate = 335218646; 76 | }; 77 | perUserProjectItems = { 78 | 7125A547137F409800699395 /* PBXTextBookmark */ = 7125A547137F409800699395 /* PBXTextBookmark */; 79 | 714B5425139302070095067A /* PBXBookmark */ = 714B5425139302070095067A /* PBXBookmark */; 80 | 71924C2713998D250025019D /* PBXBookmark */ = 71924C2713998D250025019D /* PBXBookmark */; 81 | 71924C43139990210025019D /* PBXBookmark */ = 71924C43139990210025019D /* PBXBookmark */; 82 | 71924C44139990210025019D /* PBXBookmark */ = 71924C44139990210025019D /* PBXBookmark */; 83 | 71924C4C139996D50025019D /* PBXBookmark */ = 71924C4C139996D50025019D /* PBXBookmark */; 84 | 7193078A1389D753001A6737 /* PBXBookmark */ = 7193078A1389D753001A6737 /* PBXBookmark */; 85 | 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */ = 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */; 86 | 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */ = 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */; 87 | 71F9201D13AFE99D00C2D785 /* PBXBookmark */ = 71F9201D13AFE99D00C2D785 /* PBXBookmark */; 88 | 71FEA7E013FB05C9008B7E19 /* PBXBookmark */ = 71FEA7E013FB05C9008B7E19 /* PBXBookmark */; 89 | 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */; 90 | 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */; 91 | 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */; 92 | 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */; 93 | 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */; 94 | 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */; 95 | 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */; 96 | 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */; 97 | 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */; 98 | 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */; 99 | 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */; 100 | 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */; 101 | 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */; 102 | 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */; 103 | 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */; 104 | 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */; 105 | 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */; 106 | 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */; 107 | 71FEA7F313FB05C9008B7E19 /* PlistBookmark */ = 71FEA7F313FB05C9008B7E19 /* PlistBookmark */; 108 | 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */; 109 | }; 110 | sourceControlManager = 7181C5071373DDA3006DDE90 /* Source Control */; 111 | userBuildSettings = { 112 | }; 113 | }; 114 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */ = { 115 | uiCtxt = { 116 | sepNavIntBoundsRect = "{{0, 0}, {1082, 24076}}"; 117 | sepNavSelRange = "{55416, 0}"; 118 | sepNavVisRange = "{0, 1897}"; 119 | sepNavWindowFrame = "{{489, 691}, {750, 558}}"; 120 | }; 121 | }; 122 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */ = { 123 | uiCtxt = { 124 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1040}}"; 125 | sepNavSelRange = "{82, 0}"; 126 | sepNavVisRange = "{199, 1721}"; 127 | }; 128 | }; 129 | 2A37F4B0FDCFA73011CA2CEA /* main.m */ = { 130 | uiCtxt = { 131 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 132 | sepNavSelRange = "{71, 0}"; 133 | sepNavVisRange = "{0, 196}"; 134 | }; 135 | }; 136 | 2A37F4BAFDCFA73011CA2CEA /* English */ = { 137 | uiCtxt = { 138 | sepNavIntBoundsRect = "{{0, 0}, {1096, 905}}"; 139 | sepNavSelRange = "{0, 0}"; 140 | sepNavVisRect = "{{0, 0}, {1096, 905}}"; 141 | }; 142 | }; 143 | 7125A547137F409800699395 /* PBXTextBookmark */ = { 144 | isa = PBXTextBookmark; 145 | fRef = 7125A548137F409800699395 /* CGBase.h */; 146 | name = "CGBase.h: 105"; 147 | rLen = 30; 148 | rLoc = 2998; 149 | rType = 0; 150 | vrLen = 1547; 151 | vrLoc = 1531; 152 | }; 153 | 7125A548137F409800699395 /* CGBase.h */ = { 154 | isa = PBXFileReference; 155 | lastKnownFileType = sourcecode.c.h; 156 | name = CGBase.h; 157 | path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Headers/CGBase.h; 158 | sourceTree = ""; 159 | }; 160 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */ = { 161 | uiCtxt = { 162 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 163 | sepNavSelRange = "{83, 0}"; 164 | sepNavVisRange = "{0, 333}"; 165 | }; 166 | }; 167 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */ = { 168 | uiCtxt = { 169 | sepNavIntBoundsRect = "{{0, 0}, {1181, 1560}}"; 170 | sepNavSelRange = "{83, 0}"; 171 | sepNavVisRange = "{0, 2075}"; 172 | }; 173 | }; 174 | 714B5425139302070095067A /* PBXBookmark */ = { 175 | isa = PBXBookmark; 176 | fRef = 714B541D139301FE0095067A /* 4bc.icns */; 177 | }; 178 | 7181C4FA1373DD85006DDE90 /* ExtraFile */ = { 179 | isa = PBXExecutable; 180 | activeArgIndices = ( 181 | ); 182 | argumentStrings = ( 183 | ); 184 | autoAttachOnCrash = 1; 185 | breakpointsEnabled = 0; 186 | configStateDict = { 187 | }; 188 | customDataFormattersEnabled = 1; 189 | dataTipCustomDataFormattersEnabled = 1; 190 | dataTipShowTypeColumn = 1; 191 | dataTipSortType = 0; 192 | debuggerPlugin = GDBDebugging; 193 | disassemblyDisplayState = 0; 194 | dylibVariantSuffix = ""; 195 | enableDebugStr = 1; 196 | environmentEntries = ( 197 | ); 198 | executableSystemSymbolLevel = 0; 199 | executableUserSymbolLevel = 0; 200 | libgmallocEnabled = 0; 201 | name = ExtraFile; 202 | savedGlobals = { 203 | }; 204 | showTypeColumn = 0; 205 | sourceDirectories = ( 206 | ); 207 | variableFormatDictionary = { 208 | }; 209 | }; 210 | 7181C5071373DDA3006DDE90 /* Source Control */ = { 211 | isa = PBXSourceControlManager; 212 | fallbackIsa = XCSourceControlManager; 213 | isSCMEnabled = 0; 214 | scmConfiguration = { 215 | repositoryNamesForRoots = { 216 | "" = ""; 217 | }; 218 | }; 219 | }; 220 | 7181C5081373DDA3006DDE90 /* Code sense */ = { 221 | isa = PBXCodeSenseManager; 222 | indexTemplatePath = ""; 223 | }; 224 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */ = { 225 | uiCtxt = { 226 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 227 | sepNavSelRange = "{92, 0}"; 228 | sepNavVisRange = "{0, 194}"; 229 | }; 230 | }; 231 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */ = { 232 | uiCtxt = { 233 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1859}}"; 234 | sepNavSelRange = "{92, 0}"; 235 | sepNavVisRange = "{0, 1700}"; 236 | }; 237 | }; 238 | 7181C5261373FB8F006DDE90 /* XFImageView.h */ = { 239 | uiCtxt = { 240 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 241 | sepNavSelRange = "{78, 0}"; 242 | sepNavVisRange = "{0, 493}"; 243 | }; 244 | }; 245 | 7181C5271373FB8F006DDE90 /* XFImageView.m */ = { 246 | uiCtxt = { 247 | sepNavIntBoundsRect = "{{0, 0}, {1082, 13793}}"; 248 | sepNavSelRange = "{78, 0}"; 249 | sepNavVisRange = "{0, 1829}"; 250 | sepNavWindowFrame = "{{1334, 226}, {973, 1140}}"; 251 | }; 252 | }; 253 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */ = { 254 | uiCtxt = { 255 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 256 | sepNavSelRange = "{80, 0}"; 257 | sepNavVisRange = "{0, 630}"; 258 | }; 259 | }; 260 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */ = { 261 | uiCtxt = { 262 | sepNavIntBoundsRect = "{{0, 0}, {1082, 2574}}"; 263 | sepNavSelRange = "{80, 0}"; 264 | sepNavVisRange = "{3424, 2008}"; 265 | }; 266 | }; 267 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */ = { 268 | uiCtxt = { 269 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 270 | sepNavSelRange = "{78, 0}"; 271 | sepNavVisRange = "{0, 278}"; 272 | }; 273 | }; 274 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */ = { 275 | uiCtxt = { 276 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1092}}"; 277 | sepNavSelRange = "{78, 0}"; 278 | sepNavVisRange = "{237, 1692}"; 279 | }; 280 | }; 281 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */ = { 282 | uiCtxt = { 283 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 284 | sepNavSelRange = "{76, 0}"; 285 | sepNavVisRange = "{0, 1179}"; 286 | }; 287 | }; 288 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */ = { 289 | uiCtxt = { 290 | sepNavIntBoundsRect = "{{0, 0}, {1082, 5525}}"; 291 | sepNavSelRange = "{76, 0}"; 292 | sepNavVisRange = "{9500, 2064}"; 293 | }; 294 | }; 295 | 7181C5BD13743415006DDE90 /* XFApp.h */ = { 296 | uiCtxt = { 297 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}"; 298 | sepNavSelRange = "{37, 0}"; 299 | sepNavVisRange = "{0, 559}"; 300 | }; 301 | }; 302 | 7181C5BE13743415006DDE90 /* XFApp.m */ = { 303 | uiCtxt = { 304 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1794}}"; 305 | sepNavSelRange = "{72, 0}"; 306 | sepNavVisRange = "{1461, 1232}"; 307 | }; 308 | }; 309 | 71924C2713998D250025019D /* PBXBookmark */ = { 310 | isa = PBXBookmark; 311 | fRef = 718782A51375B43D00A22FA2 /* xff.icns */; 312 | }; 313 | 71924C43139990210025019D /* PBXBookmark */ = { 314 | isa = PBXBookmark; 315 | fRef = 71924C3C139990170025019D /* blinx.icns */; 316 | }; 317 | 71924C44139990210025019D /* PBXBookmark */ = { 318 | isa = PBXBookmark; 319 | fRef = 714B541E139301FE0095067A /* bascii.icns */; 320 | }; 321 | 71924C4C139996D50025019D /* PBXBookmark */ = { 322 | isa = PBXBookmark; 323 | fRef = 71924C3D139990170025019D /* uspec.icns */; 324 | }; 325 | 7193078A1389D753001A6737 /* PBXBookmark */ = { 326 | isa = PBXBookmark; 327 | fRef = 719306DD1389434C001A6737 /* mcf.icns */; 328 | }; 329 | 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */ = { 330 | isa = PBXTextBookmark; 331 | fRef = 2A37F4BAFDCFA73011CA2CEA /* English */; 332 | name = "English: 1"; 333 | rLen = 0; 334 | rLoc = 0; 335 | rType = 0; 336 | vrLen = 218; 337 | vrLoc = 0; 338 | }; 339 | 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */ = { 340 | isa = PBXTextBookmark; 341 | fRef = 2A37F4BAFDCFA73011CA2CEA /* English */; 342 | name = "English: 1"; 343 | rLen = 0; 344 | rLoc = 0; 345 | rType = 0; 346 | vrLen = 218; 347 | vrLoc = 0; 348 | }; 349 | 71F9201D13AFE99D00C2D785 /* PBXBookmark */ = { 350 | isa = PBXBookmark; 351 | fRef = 71EF247E13746DF700979489 /* extrafile.icns */; 352 | }; 353 | 71FEA7E013FB05C9008B7E19 /* PBXBookmark */ = { 354 | isa = PBXBookmark; 355 | fRef = 71FEA7D613FAC65C008B7E19 /* cci.icns */; 356 | }; 357 | 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */ = { 358 | isa = PBXTextBookmark; 359 | fRef = 7181C5BD13743415006DDE90 /* XFApp.h */; 360 | name = "XFApp.h: 4"; 361 | rLen = 0; 362 | rLoc = 37; 363 | rType = 0; 364 | vrLen = 559; 365 | vrLoc = 0; 366 | }; 367 | 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */ = { 368 | isa = PBXTextBookmark; 369 | fRef = 7181C5BE13743415006DDE90 /* XFApp.m */; 370 | name = "XFApp.m: 5"; 371 | rLen = 0; 372 | rLoc = 72; 373 | rType = 0; 374 | vrLen = 1232; 375 | vrLoc = 1461; 376 | }; 377 | 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */ = { 378 | isa = PBXTextBookmark; 379 | fRef = 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */; 380 | name = "XFImageDocument.h: 5"; 381 | rLen = 0; 382 | rLoc = 82; 383 | rType = 0; 384 | vrLen = 1721; 385 | vrLoc = 199; 386 | }; 387 | 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */ = { 388 | isa = PBXTextBookmark; 389 | fRef = 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */; 390 | name = "XFImageDocument.m: 1825"; 391 | rLen = 0; 392 | rLoc = 55416; 393 | rType = 0; 394 | vrLen = 1897; 395 | vrLoc = 0; 396 | }; 397 | 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */ = { 398 | isa = PBXTextBookmark; 399 | fRef = 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */; 400 | name = "XFImageDocumentController.h: 5"; 401 | rLen = 0; 402 | rLoc = 92; 403 | rType = 0; 404 | vrLen = 194; 405 | vrLoc = 0; 406 | }; 407 | 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */ = { 408 | isa = PBXTextBookmark; 409 | fRef = 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */; 410 | name = "XFImageDocumentController.m: 5"; 411 | rLen = 0; 412 | rLoc = 92; 413 | rType = 0; 414 | vrLen = 1700; 415 | vrLoc = 0; 416 | }; 417 | 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */ = { 418 | isa = PBXTextBookmark; 419 | fRef = 7181C5261373FB8F006DDE90 /* XFImageView.h */; 420 | name = "XFImageView.h: 5"; 421 | rLen = 0; 422 | rLoc = 78; 423 | rType = 0; 424 | vrLen = 493; 425 | vrLoc = 0; 426 | }; 427 | 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */ = { 428 | isa = PBXTextBookmark; 429 | fRef = 7181C5271373FB8F006DDE90 /* XFImageView.m */; 430 | name = "XFImageView.m: 5"; 431 | rLen = 0; 432 | rLoc = 78; 433 | rType = 0; 434 | vrLen = 1829; 435 | vrLoc = 0; 436 | }; 437 | 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */ = { 438 | isa = PBXTextBookmark; 439 | fRef = 7181C5291373FBBF006DDE90 /* XFImageFilter.h */; 440 | name = "XFImageFilter.h: 5"; 441 | rLen = 0; 442 | rLoc = 80; 443 | rType = 0; 444 | vrLen = 630; 445 | vrLoc = 0; 446 | }; 447 | 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */ = { 448 | isa = PBXTextBookmark; 449 | fRef = 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */; 450 | name = "XFImageFilter.m: 5"; 451 | rLen = 0; 452 | rLoc = 80; 453 | rType = 0; 454 | vrLen = 2008; 455 | vrLoc = 3424; 456 | }; 457 | 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */ = { 458 | isa = PBXTextBookmark; 459 | fRef = 7181C5371373FBF7006DDE90 /* XFPrintView.h */; 460 | name = "XFPrintView.h: 5"; 461 | rLen = 0; 462 | rLoc = 78; 463 | rType = 0; 464 | vrLen = 278; 465 | vrLoc = 0; 466 | }; 467 | 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */ = { 468 | isa = PBXTextBookmark; 469 | fRef = 7181C5381373FBF7006DDE90 /* XFPrintView.m */; 470 | name = "XFPrintView.m: 5"; 471 | rLen = 0; 472 | rLoc = 78; 473 | rType = 0; 474 | vrLen = 1692; 475 | vrLoc = 237; 476 | }; 477 | 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */ = { 478 | isa = PBXTextBookmark; 479 | fRef = 7181C53A1373FC1B006DDE90 /* XFProfile.h */; 480 | name = "XFProfile.h: 5"; 481 | rLen = 0; 482 | rLoc = 76; 483 | rType = 0; 484 | vrLen = 1179; 485 | vrLoc = 0; 486 | }; 487 | 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */ = { 488 | isa = PBXTextBookmark; 489 | fRef = 7181C53B1373FC1B006DDE90 /* XFProfile.m */; 490 | name = "XFProfile.m: 5"; 491 | rLen = 0; 492 | rLoc = 76; 493 | rType = 0; 494 | vrLen = 2064; 495 | vrLoc = 9500; 496 | }; 497 | 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */ = { 498 | isa = PBXTextBookmark; 499 | fRef = 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */; 500 | name = "XFZoomScrollView.h: 5"; 501 | rLen = 0; 502 | rLoc = 83; 503 | rType = 0; 504 | vrLen = 333; 505 | vrLoc = 0; 506 | }; 507 | 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */ = { 508 | isa = PBXTextBookmark; 509 | fRef = 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */; 510 | name = "XFZoomScrollView.m: 5"; 511 | rLen = 0; 512 | rLoc = 83; 513 | rType = 0; 514 | vrLen = 2075; 515 | vrLoc = 0; 516 | }; 517 | 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */ = { 518 | isa = PBXTextBookmark; 519 | fRef = 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */; 520 | name = "ExtraFile_Prefix.pch: 1"; 521 | rLen = 0; 522 | rLoc = 0; 523 | rType = 0; 524 | vrLen = 149; 525 | vrLoc = 0; 526 | }; 527 | 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */ = { 528 | isa = PBXTextBookmark; 529 | fRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; 530 | name = "main.m: 5"; 531 | rLen = 0; 532 | rLoc = 71; 533 | rType = 0; 534 | vrLen = 196; 535 | vrLoc = 0; 536 | }; 537 | 71FEA7F313FB05C9008B7E19 /* PlistBookmark */ = { 538 | isa = PlistBookmark; 539 | fRef = 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */; 540 | fallbackIsa = PBXBookmark; 541 | isK = 0; 542 | kPath = ( 543 | CFBundleShortVersionString, 544 | ); 545 | name = "/Users/kimasendorf/Documents/Development/Cocoa/ExtraFile/ExtraFile-Info.plist"; 546 | rLen = 0; 547 | rLoc = 9223372036854775808; 548 | }; 549 | 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */ = { 550 | isa = PBXTextBookmark; 551 | fRef = 089C1660FE840EACC02AAC07 /* English */; 552 | name = "InfoPlist.strings: 1"; 553 | rLen = 0; 554 | rLoc = 0; 555 | rType = 0; 556 | vrLen = 45; 557 | vrLoc = 0; 558 | }; 559 | 8D15AC270486D014006FF6A4 /* ExtraFile */ = { 560 | activeExec = 0; 561 | executables = ( 562 | 7181C4FA1373DD85006DDE90 /* ExtraFile */, 563 | ); 564 | }; 565 | } 566 | -------------------------------------------------------------------------------- /ExtraFile.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 45; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1DDD582C0DA1D0D100B32029 /* XFImageDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */; }; 11 | 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */; }; 12 | 71285D711381C7C500FC0FE3 /* XFZoomScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */; }; 13 | 71285D721381C7C500FC0FE3 /* XFZoomScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */; }; 14 | 714B541F139301FE0095067A /* 4bc.icns in Resources */ = {isa = PBXBuildFile; fileRef = 714B541D139301FE0095067A /* 4bc.icns */; }; 15 | 714B5420139301FE0095067A /* bascii.icns in Resources */ = {isa = PBXBuildFile; fileRef = 714B541E139301FE0095067A /* bascii.icns */; }; 16 | 7181C5251373FB59006DDE90 /* XFImageDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */; }; 17 | 7181C5281373FB8F006DDE90 /* XFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5271373FB8F006DDE90 /* XFImageView.m */; }; 18 | 7181C52B1373FBBF006DDE90 /* XFImageFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */; }; 19 | 7181C5391373FBF7006DDE90 /* XFPrintView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5381373FBF7006DDE90 /* XFPrintView.m */; }; 20 | 7181C53C1373FC1B006DDE90 /* XFProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C53B1373FC1B006DDE90 /* XFProfile.m */; }; 21 | 7181C56B1374121E006DDE90 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7181C56A1374121E006DDE90 /* Quartz.framework */; }; 22 | 7181C5BF13743415006DDE90 /* XFApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5BE13743415006DDE90 /* XFApp.m */; }; 23 | 718782A61375B43D00A22FA2 /* xff.icns in Resources */ = {isa = PBXBuildFile; fileRef = 718782A51375B43D00A22FA2 /* xff.icns */; }; 24 | 71924C3E139990170025019D /* blinx.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71924C3C139990170025019D /* blinx.icns */; }; 25 | 71924C3F139990170025019D /* uspec.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71924C3D139990170025019D /* uspec.icns */; }; 26 | 719306DE1389434C001A6737 /* mcf.icns in Resources */ = {isa = PBXBuildFile; fileRef = 719306DD1389434C001A6737 /* mcf.icns */; }; 27 | 71EF247F13746DF700979489 /* extrafile.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71EF247E13746DF700979489 /* extrafile.icns */; }; 28 | 71EF259813749C3900979489 /* XFApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5BD13743415006DDE90 /* XFApp.h */; }; 29 | 71EF259913749C3900979489 /* XFImageDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */; }; 30 | 71EF259A13749C3900979489 /* XFImageDocumentController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */; }; 31 | 71EF259B13749C3900979489 /* XFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5261373FB8F006DDE90 /* XFImageView.h */; }; 32 | 71EF259C13749C3900979489 /* XFImageFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5291373FBBF006DDE90 /* XFImageFilter.h */; }; 33 | 71EF259D13749C3900979489 /* XFPrintView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5371373FBF7006DDE90 /* XFPrintView.h */; }; 34 | 71EF259E13749C3900979489 /* XFProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C53A1373FC1B006DDE90 /* XFProfile.h */; }; 35 | 71FEA7D713FAC65C008B7E19 /* cci.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71FEA7D613FAC65C008B7E19 /* cci.icns */; }; 36 | 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; }; 37 | 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; }; 38 | 8D15AC310486D014006FF6A4 /* XFImageDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */; settings = {ATTRIBUTES = (); }; }; 39 | 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 40 | 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; 41 | /* End PBXBuildFile section */ 42 | 43 | /* Begin PBXCopyFilesBuildPhase section */ 44 | 71EF274813749CCE00979489 /* CopyFiles */ = { 45 | isa = PBXCopyFilesBuildPhase; 46 | buildActionMask = 2147483647; 47 | dstPath = ""; 48 | dstSubfolderSpec = 7; 49 | files = ( 50 | ); 51 | runOnlyForDeploymentPostprocessing = 0; 52 | }; 53 | /* End PBXCopyFilesBuildPhase section */ 54 | 55 | /* Begin PBXFileReference section */ 56 | 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 57 | 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 58 | 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 59 | 1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/XFImageDocument.xib; sourceTree = ""; }; 60 | 1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 61 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtraFile_Prefix.pch; sourceTree = ""; }; 62 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageDocument.m; sourceTree = ""; }; 63 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageDocument.h; sourceTree = ""; }; 64 | 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 65 | 2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; 66 | 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 67 | 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 68 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFZoomScrollView.h; sourceTree = ""; }; 69 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFZoomScrollView.m; sourceTree = ""; }; 70 | 714B541D139301FE0095067A /* 4bc.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = 4bc.icns; path = icons/4bc.icns; sourceTree = ""; }; 71 | 714B541E139301FE0095067A /* bascii.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = bascii.icns; path = icons/bascii.icns; sourceTree = ""; }; 72 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageDocumentController.h; sourceTree = ""; }; 73 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageDocumentController.m; sourceTree = ""; }; 74 | 7181C5261373FB8F006DDE90 /* XFImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageView.h; sourceTree = ""; }; 75 | 7181C5271373FB8F006DDE90 /* XFImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageView.m; sourceTree = ""; }; 76 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageFilter.h; sourceTree = ""; }; 77 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageFilter.m; sourceTree = ""; }; 78 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFPrintView.h; sourceTree = ""; }; 79 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFPrintView.m; sourceTree = ""; }; 80 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFProfile.h; sourceTree = ""; }; 81 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFProfile.m; sourceTree = ""; }; 82 | 7181C56A1374121E006DDE90 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; 83 | 7181C5891374165D006DDE90 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; }; 84 | 7181C5BD13743415006DDE90 /* XFApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFApp.h; sourceTree = ""; }; 85 | 7181C5BE13743415006DDE90 /* XFApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFApp.m; sourceTree = ""; }; 86 | 7181C5C2137435D2006DDE90 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 87 | 7181C5C4137435D2006DDE90 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; 88 | 718782A51375B43D00A22FA2 /* xff.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = xff.icns; path = icons/xff.icns; sourceTree = ""; }; 89 | 71924C3C139990170025019D /* blinx.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = blinx.icns; path = icons/blinx.icns; sourceTree = ""; }; 90 | 71924C3D139990170025019D /* uspec.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = uspec.icns; path = icons/uspec.icns; sourceTree = ""; }; 91 | 719306DD1389434C001A6737 /* mcf.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = mcf.icns; path = icons/mcf.icns; sourceTree = ""; }; 92 | 71EF247E13746DF700979489 /* extrafile.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = extrafile.icns; path = icons/extrafile.icns; sourceTree = ""; }; 93 | 71FEA7D613FAC65C008B7E19 /* cci.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = cci.icns; path = icons/cci.icns; sourceTree = ""; }; 94 | 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ExtraFile-Info.plist"; sourceTree = ""; }; 95 | 8D15AC370486D014006FF6A4 /* ExtraFile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExtraFile.app; sourceTree = BUILT_PRODUCTS_DIR; }; 96 | /* End PBXFileReference section */ 97 | 98 | /* Begin PBXFrameworksBuildPhase section */ 99 | 8D15AC330486D014006FF6A4 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */, 104 | 7181C56B1374121E006DDE90 /* Quartz.framework in Frameworks */, 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | /* End PBXFrameworksBuildPhase section */ 109 | 110 | /* Begin PBXGroup section */ 111 | 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */, 115 | ); 116 | name = "Linked Frameworks"; 117 | sourceTree = ""; 118 | }; 119 | 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */, 123 | 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */, 124 | 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */, 125 | 7181C56A1374121E006DDE90 /* Quartz.framework */, 126 | 7181C5891374165D006DDE90 /* ApplicationServices.framework */, 127 | 7181C5C2137435D2006DDE90 /* CoreFoundation.framework */, 128 | 7181C5C4137435D2006DDE90 /* CoreServices.framework */, 129 | ); 130 | name = "Other Frameworks"; 131 | sourceTree = ""; 132 | }; 133 | 19C28FB0FE9D524F11CA2CBB /* Products */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 8D15AC370486D014006FF6A4 /* ExtraFile.app */, 137 | ); 138 | name = Products; 139 | sourceTree = ""; 140 | }; 141 | 2A37F4AAFDCFA73011CA2CEA /* ExtraFile */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 2A37F4ABFDCFA73011CA2CEA /* Classes */, 145 | 2A37F4AFFDCFA73011CA2CEA /* Other Sources */, 146 | 2A37F4B8FDCFA73011CA2CEA /* Resources */, 147 | 2A37F4C3FDCFA73011CA2CEA /* Frameworks */, 148 | 19C28FB0FE9D524F11CA2CBB /* Products */, 149 | ); 150 | name = ExtraFile; 151 | sourceTree = ""; 152 | }; 153 | 2A37F4ABFDCFA73011CA2CEA /* Classes */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 7181C5BD13743415006DDE90 /* XFApp.h */, 157 | 7181C5BE13743415006DDE90 /* XFApp.m */, 158 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */, 159 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */, 160 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */, 161 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */, 162 | 7181C5261373FB8F006DDE90 /* XFImageView.h */, 163 | 7181C5271373FB8F006DDE90 /* XFImageView.m */, 164 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */, 165 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */, 166 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */, 167 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */, 168 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */, 169 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */, 170 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */, 171 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */, 172 | ); 173 | name = Classes; 174 | sourceTree = ""; 175 | }; 176 | 2A37F4AFFDCFA73011CA2CEA /* Other Sources */ = { 177 | isa = PBXGroup; 178 | children = ( 179 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */, 180 | 2A37F4B0FDCFA73011CA2CEA /* main.m */, 181 | ); 182 | name = "Other Sources"; 183 | sourceTree = ""; 184 | }; 185 | 2A37F4B8FDCFA73011CA2CEA /* Resources */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 71FEA7D613FAC65C008B7E19 /* cci.icns */, 189 | 71924C3D139990170025019D /* uspec.icns */, 190 | 71924C3C139990170025019D /* blinx.icns */, 191 | 714B541E139301FE0095067A /* bascii.icns */, 192 | 714B541D139301FE0095067A /* 4bc.icns */, 193 | 719306DD1389434C001A6737 /* mcf.icns */, 194 | 718782A51375B43D00A22FA2 /* xff.icns */, 195 | 71EF247E13746DF700979489 /* extrafile.icns */, 196 | 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */, 197 | 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */, 198 | 089C165FFE840EACC02AAC07 /* InfoPlist.strings */, 199 | 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */, 200 | 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */, 201 | ); 202 | name = Resources; 203 | sourceTree = ""; 204 | }; 205 | 2A37F4C3FDCFA73011CA2CEA /* Frameworks */ = { 206 | isa = PBXGroup; 207 | children = ( 208 | 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */, 209 | 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */, 210 | ); 211 | name = Frameworks; 212 | sourceTree = ""; 213 | }; 214 | /* End PBXGroup section */ 215 | 216 | /* Begin PBXHeadersBuildPhase section */ 217 | 71EF259313749C2400979489 /* Headers */ = { 218 | isa = PBXHeadersBuildPhase; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | 71EF259813749C3900979489 /* XFApp.h in Headers */, 222 | 71EF259913749C3900979489 /* XFImageDocument.h in Headers */, 223 | 71EF259A13749C3900979489 /* XFImageDocumentController.h in Headers */, 224 | 71EF259B13749C3900979489 /* XFImageView.h in Headers */, 225 | 71EF259C13749C3900979489 /* XFImageFilter.h in Headers */, 226 | 71EF259D13749C3900979489 /* XFPrintView.h in Headers */, 227 | 71EF259E13749C3900979489 /* XFProfile.h in Headers */, 228 | 71285D711381C7C500FC0FE3 /* XFZoomScrollView.h in Headers */, 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | }; 232 | /* End PBXHeadersBuildPhase section */ 233 | 234 | /* Begin PBXNativeTarget section */ 235 | 8D15AC270486D014006FF6A4 /* ExtraFile */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "ExtraFile" */; 238 | buildPhases = ( 239 | 71EF259313749C2400979489 /* Headers */, 240 | 8D15AC2B0486D014006FF6A4 /* Resources */, 241 | 8D15AC300486D014006FF6A4 /* Sources */, 242 | 8D15AC330486D014006FF6A4 /* Frameworks */, 243 | 71EF274713749CCE00979489 /* Rez */, 244 | 71EF274813749CCE00979489 /* CopyFiles */, 245 | ); 246 | buildRules = ( 247 | ); 248 | dependencies = ( 249 | ); 250 | name = ExtraFile; 251 | productInstallPath = "$(HOME)/Applications"; 252 | productName = ExtraFile; 253 | productReference = 8D15AC370486D014006FF6A4 /* ExtraFile.app */; 254 | productType = "com.apple.product-type.application"; 255 | }; 256 | /* End PBXNativeTarget section */ 257 | 258 | /* Begin PBXProject section */ 259 | 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { 260 | isa = PBXProject; 261 | buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "ExtraFile" */; 262 | compatibilityVersion = "Xcode 3.1"; 263 | developmentRegion = English; 264 | hasScannedForEncodings = 1; 265 | knownRegions = ( 266 | English, 267 | Japanese, 268 | French, 269 | German, 270 | ); 271 | mainGroup = 2A37F4AAFDCFA73011CA2CEA /* ExtraFile */; 272 | projectDirPath = ""; 273 | projectRoot = ""; 274 | targets = ( 275 | 8D15AC270486D014006FF6A4 /* ExtraFile */, 276 | ); 277 | }; 278 | /* End PBXProject section */ 279 | 280 | /* Begin PBXResourcesBuildPhase section */ 281 | 8D15AC2B0486D014006FF6A4 /* Resources */ = { 282 | isa = PBXResourcesBuildPhase; 283 | buildActionMask = 2147483647; 284 | files = ( 285 | 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */, 286 | 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */, 287 | 1DDD582C0DA1D0D100B32029 /* XFImageDocument.xib in Resources */, 288 | 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */, 289 | 71EF247F13746DF700979489 /* extrafile.icns in Resources */, 290 | 718782A61375B43D00A22FA2 /* xff.icns in Resources */, 291 | 719306DE1389434C001A6737 /* mcf.icns in Resources */, 292 | 714B541F139301FE0095067A /* 4bc.icns in Resources */, 293 | 714B5420139301FE0095067A /* bascii.icns in Resources */, 294 | 71924C3E139990170025019D /* blinx.icns in Resources */, 295 | 71924C3F139990170025019D /* uspec.icns in Resources */, 296 | 71FEA7D713FAC65C008B7E19 /* cci.icns in Resources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXResourcesBuildPhase section */ 301 | 302 | /* Begin PBXRezBuildPhase section */ 303 | 71EF274713749CCE00979489 /* Rez */ = { 304 | isa = PBXRezBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | runOnlyForDeploymentPostprocessing = 0; 309 | }; 310 | /* End PBXRezBuildPhase section */ 311 | 312 | /* Begin PBXSourcesBuildPhase section */ 313 | 8D15AC300486D014006FF6A4 /* Sources */ = { 314 | isa = PBXSourcesBuildPhase; 315 | buildActionMask = 2147483647; 316 | files = ( 317 | 8D15AC310486D014006FF6A4 /* XFImageDocument.m in Sources */, 318 | 8D15AC320486D014006FF6A4 /* main.m in Sources */, 319 | 7181C5251373FB59006DDE90 /* XFImageDocumentController.m in Sources */, 320 | 7181C5281373FB8F006DDE90 /* XFImageView.m in Sources */, 321 | 7181C52B1373FBBF006DDE90 /* XFImageFilter.m in Sources */, 322 | 7181C5391373FBF7006DDE90 /* XFPrintView.m in Sources */, 323 | 7181C53C1373FC1B006DDE90 /* XFProfile.m in Sources */, 324 | 7181C5BF13743415006DDE90 /* XFApp.m in Sources */, 325 | 71285D721381C7C500FC0FE3 /* XFZoomScrollView.m in Sources */, 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | /* End PBXSourcesBuildPhase section */ 330 | 331 | /* Begin PBXVariantGroup section */ 332 | 089C165FFE840EACC02AAC07 /* InfoPlist.strings */ = { 333 | isa = PBXVariantGroup; 334 | children = ( 335 | 089C1660FE840EACC02AAC07 /* English */, 336 | ); 337 | name = InfoPlist.strings; 338 | sourceTree = ""; 339 | }; 340 | 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */ = { 341 | isa = PBXVariantGroup; 342 | children = ( 343 | 1DDD58290DA1D0D100B32029 /* English */, 344 | ); 345 | name = XFImageDocument.xib; 346 | sourceTree = ""; 347 | }; 348 | 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = { 349 | isa = PBXVariantGroup; 350 | children = ( 351 | 1DDD582B0DA1D0D100B32029 /* English */, 352 | ); 353 | name = MainMenu.xib; 354 | sourceTree = ""; 355 | }; 356 | 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */ = { 357 | isa = PBXVariantGroup; 358 | children = ( 359 | 2A37F4BAFDCFA73011CA2CEA /* English */, 360 | ); 361 | name = Credits.rtf; 362 | sourceTree = ""; 363 | }; 364 | /* End PBXVariantGroup section */ 365 | 366 | /* Begin XCBuildConfiguration section */ 367 | C05733C808A9546B00998B17 /* Debug */ = { 368 | isa = XCBuildConfiguration; 369 | buildSettings = { 370 | ALWAYS_SEARCH_USER_PATHS = YES; 371 | COPY_PHASE_STRIP = NO; 372 | GCC_C_LANGUAGE_STANDARD = "compiler-default"; 373 | GCC_DYNAMIC_NO_PIC = YES; 374 | GCC_ENABLE_FIX_AND_CONTINUE = NO; 375 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 376 | GCC_MODEL_TUNING = G5; 377 | GCC_OPTIMIZATION_LEVEL = 0; 378 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 379 | GCC_PREFIX_HEADER = ExtraFile_Prefix.pch; 380 | GCC_WARN_ABOUT_RETURN_TYPE = NO; 381 | GCC_WARN_UNUSED_VARIABLE = NO; 382 | INFOPLIST_FILE = "ExtraFile-Info.plist"; 383 | INSTALL_PATH = "$(HOME)/Applications"; 384 | OTHER_CFLAGS = "-no-cpp-precomp"; 385 | PREBINDING = YES; 386 | PRODUCT_NAME = ExtraFile; 387 | SDKROOT = macosx10.6; 388 | SKIP_INSTALL = YES; 389 | STRIP_INSTALLED_PRODUCT = NO; 390 | WARNING_CFLAGS = ( 391 | "-Wmost", 392 | "-Wno-four-char-constants", 393 | "-Wno-unknown-pragmas", 394 | ); 395 | ZERO_LINK = NO; 396 | }; 397 | name = Debug; 398 | }; 399 | C05733C908A9546B00998B17 /* Release */ = { 400 | isa = XCBuildConfiguration; 401 | buildSettings = { 402 | ALWAYS_SEARCH_USER_PATHS = YES; 403 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 404 | GCC_C_LANGUAGE_STANDARD = "compiler-default"; 405 | GCC_DYNAMIC_NO_PIC = YES; 406 | GCC_ENABLE_FIX_AND_CONTINUE = NO; 407 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; 408 | GCC_MODEL_TUNING = G5; 409 | GCC_OPTIMIZATION_LEVEL = 0; 410 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 411 | GCC_PREFIX_HEADER = ExtraFile_Prefix.pch; 412 | GCC_WARN_ABOUT_RETURN_TYPE = NO; 413 | GCC_WARN_UNUSED_VARIABLE = NO; 414 | INFOPLIST_FILE = "ExtraFile-Info.plist"; 415 | INSTALL_PATH = "$(HOME)/Applications"; 416 | OTHER_CFLAGS = "-no-cpp-precomp"; 417 | PREBINDING = YES; 418 | PRODUCT_NAME = ExtraFile; 419 | SDKROOT = macosx10.6; 420 | SKIP_INSTALL = YES; 421 | STRIP_INSTALLED_PRODUCT = NO; 422 | WARNING_CFLAGS = ( 423 | "-Wmost", 424 | "-Wno-four-char-constants", 425 | "-Wno-unknown-pragmas", 426 | ); 427 | ZERO_LINK = NO; 428 | }; 429 | name = Release; 430 | }; 431 | C05733CC08A9546B00998B17 /* Debug */ = { 432 | isa = XCBuildConfiguration; 433 | buildSettings = { 434 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; 435 | GCC_C_LANGUAGE_STANDARD = gnu99; 436 | GCC_MODEL_TUNING = G5; 437 | GCC_OPTIMIZATION_LEVEL = s; 438 | GCC_WARN_ABOUT_RETURN_TYPE = NO; 439 | GCC_WARN_UNUSED_VARIABLE = NO; 440 | ONLY_ACTIVE_ARCH = YES; 441 | PREBINDING = YES; 442 | SDKROOT = macosx10.6; 443 | }; 444 | name = Debug; 445 | }; 446 | C05733CD08A9546B00998B17 /* Release */ = { 447 | isa = XCBuildConfiguration; 448 | buildSettings = { 449 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; 450 | GCC_C_LANGUAGE_STANDARD = gnu99; 451 | GCC_MODEL_TUNING = G5; 452 | GCC_WARN_ABOUT_RETURN_TYPE = NO; 453 | GCC_WARN_UNUSED_VARIABLE = NO; 454 | PREBINDING = YES; 455 | SDKROOT = macosx10.6; 456 | }; 457 | name = Release; 458 | }; 459 | /* End XCBuildConfiguration section */ 460 | 461 | /* Begin XCConfigurationList section */ 462 | C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "ExtraFile" */ = { 463 | isa = XCConfigurationList; 464 | buildConfigurations = ( 465 | C05733C808A9546B00998B17 /* Debug */, 466 | C05733C908A9546B00998B17 /* Release */, 467 | ); 468 | defaultConfigurationIsVisible = 0; 469 | defaultConfigurationName = Release; 470 | }; 471 | C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "ExtraFile" */ = { 472 | isa = XCConfigurationList; 473 | buildConfigurations = ( 474 | C05733CC08A9546B00998B17 /* Debug */, 475 | C05733CD08A9546B00998B17 /* Release */, 476 | ); 477 | defaultConfigurationIsVisible = 0; 478 | defaultConfigurationName = Release; 479 | }; 480 | /* End XCConfigurationList section */ 481 | }; 482 | rootObject = 2A37F4A9FDCFA73011CA2CEA /* Project object */; 483 | } 484 | -------------------------------------------------------------------------------- /ExtraFile_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'ExtraFile' target in the 'ExtraFile' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | ExtraFile is conceptional software art but with a practical usage. 2 | 3 | It's main intention is to wiggle the static system of image file formats. 4 | 5 | All started with the idea of inventing a new image file format, a format as a piece of art. Far away from the mainstream and commercial standards. Just to express the feeling of using and saving data in a new, fictitious or artificial way. Getting the filename extension into the scope of the artwork itself. In simple terms: Creating an exclusivity. 6 | 7 | The freedom not to have to pay attention to the file size or the loading and saving times provides the option to implement artistically byte orders, odd quality behaviors and visual designed formats. 8 | 9 | ExtraFile is breaking the rules of commercial formats like JPG, PNG or TIFF. It is a pioneer art project in storing image data. The process and the resulting bytes, regardless of content, become the artwork itself. 10 | 11 | You want painters to build their own canvas? 12 | Digital artists and collectors deserve exclusive formats. Personalized files, including costume headers or comments. Every bit could be placed like the artist wants it. 13 | 14 | 15 | ExtraFile is a native Mac OS X image converter application with the ability to open, preview and save the most common image file formats. It offers the possibility to use the seven build-in formats, 4Bit Components, Block Ascii, Block Indexed, Channel Compressed Image, Monochrome Collector File, Uniform Spectrum and the ExtraFile Format, to store image data. 16 | 17 | 18 | ExtraFile is open source licensed under the Artistic License 2.0 19 | http://www.perlfoundation.org/artistic_license_2_0 20 | 21 | 22 | ExtraFile 23 | http://extrafile.org 24 | 25 | Kim Asendorf 26 | http://kimasendorf.com -------------------------------------------------------------------------------- /XFApp.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ExtraFile 4 | http://extrafile.org 5 | 6 | */ 7 | 8 | // 9 | // XFApp.h 10 | // ExtraFile 11 | // 12 | // Created by Kim Asendorf on 06.05.11. 13 | // 14 | 15 | #import 16 | 17 | 18 | @interface XFApp : NSApplication 19 | { 20 | IBOutlet NSButton* xfReloadCheckBox; 21 | IBOutlet NSButton* xfBufferCheckBox; 22 | IBOutlet NSColorWell* xfBackgroundColorWell; 23 | } 24 | 25 | - (IBAction)changeAutomaticReload:(id)sender; 26 | - (IBAction)changeCleanBuffer:(id)sender; 27 | - (IBAction)changeBackgroundColor:(id)sender; 28 | 29 | + (BOOL)getAutomaticReload; 30 | + (BOOL)getCleanBuffer; 31 | + (NSColor *)getBackgroundColor; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /XFApp.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFApp.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFApp.h" 9 | #import "XFImageDocumentController.h" 10 | #import "XFProfile.h" 11 | 12 | 13 | static BOOL automaticReload; 14 | static BOOL cleanBuffer; 15 | static NSColor* backgroundColor; 16 | 17 | 18 | @implementation XFApp 19 | 20 | - (id)init 21 | { 22 | [[XFImageDocumentController alloc] init]; 23 | 24 | self = [super init]; 25 | [self setDelegate:self]; 26 | return self; 27 | } 28 | 29 | 30 | - (void)applicationDidFinishLaunching:(NSNotification *)notification 31 | { 32 | NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 33 | NSColor* defaultColor = [defaults objectForKey:@"DefaultBackgroundColor"]; 34 | if (defaultColor == nil) { 35 | [xfBackgroundColorWell setColor:[NSColor colorWithCalibratedRed:0.5f green:0.5f blue:0.5f alpha:1.0f]]; 36 | } 37 | backgroundColor = [xfBackgroundColorWell color]; 38 | 39 | NSNumber* ar = [defaults objectForKey:@"DefaultReload"]; 40 | if (ar == nil) { 41 | automaticReload = YES; 42 | } else { 43 | automaticReload = [defaults boolForKey:@"DefaultReload"]; 44 | } 45 | [xfReloadCheckBox setState:automaticReload]; 46 | 47 | NSNumber* cb = [defaults objectForKey:@"DefaultBuffer"]; 48 | if (cb == nil) { 49 | cleanBuffer = YES; 50 | } else { 51 | cleanBuffer = [defaults boolForKey:@"DefaultBuffer"]; 52 | } 53 | [xfBufferCheckBox setState:cleanBuffer]; 54 | 55 | NSNumber* extn = [defaults objectForKey:@"NSNavLastUserSetHideExtensionButtonState"]; 56 | if(extn == nil) { 57 | [defaults setBool:NO forKey:@"NSNavLastUserSetHideExtensionButtonState"]; 58 | } 59 | 60 | [defaults synchronize]; 61 | } 62 | 63 | 64 | - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)theApp 65 | { 66 | return NO; 67 | } 68 | 69 | 70 | #pragma mark #### Preferences 71 | 72 | - (IBAction)changeAutomaticReload:(id)sender 73 | { 74 | automaticReload = [sender state]; 75 | [[[NSDocumentController sharedDocumentController] currentDocument] 76 | performSelector:@selector(changeAutomaticReload:) withObject:sender 77 | afterDelay:0]; 78 | } 79 | 80 | 81 | + (BOOL)getAutomaticReload 82 | { 83 | return automaticReload; 84 | } 85 | 86 | 87 | - (IBAction)changeCleanBuffer:(id)sender 88 | { 89 | cleanBuffer = [sender state]; 90 | [[[NSDocumentController sharedDocumentController] currentDocument] 91 | performSelector:@selector(changeCleanBuffer:) withObject:sender 92 | afterDelay:0]; 93 | } 94 | 95 | 96 | + (BOOL)getCleanBuffer 97 | { 98 | return cleanBuffer; 99 | } 100 | 101 | 102 | - (IBAction)changeBackgroundColor:(id)sender 103 | { 104 | backgroundColor = [sender color]; 105 | [[[NSDocumentController sharedDocumentController] currentDocument] 106 | performSelector:@selector(changeBackgroundColor:) withObject:sender 107 | afterDelay:0]; 108 | } 109 | 110 | 111 | + (NSColor *)getBackgroundColor 112 | { 113 | return backgroundColor; 114 | } 115 | 116 | 117 | #pragma mark - 118 | 119 | - (NSArray *)RGBProfiles 120 | { 121 | return [XFProfile arrayOfAllProfilesWithSpace:cmRGBData]; 122 | } 123 | 124 | 125 | - (NSArray *)GrayProfiles 126 | { 127 | return [XFProfile arrayOfAllProfilesWithSpace:cmGrayData]; 128 | } 129 | 130 | 131 | - (NSArray *)CMYKProfiles 132 | { 133 | return [XFProfile arrayOfAllProfilesWithSpace:cmCMYKData]; 134 | } 135 | 136 | 137 | @end 138 | -------------------------------------------------------------------------------- /XFImageDocument.h: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageDocument.h 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | #import 10 | #import 11 | 12 | #import "XFProfile.h" 13 | #import "XFImageView.h" 14 | #import "XFImageFilter.h" 15 | #import "XFZoomScrollView.h" 16 | 17 | 18 | @class XFImageView, XFZoomScrollView; 19 | 20 | @interface XFImageDocument : NSDocument 21 | { 22 | IBOutlet XFImageView* xfImageView; 23 | IBOutlet XFZoomScrollView* xfZoomScrollView; 24 | IBOutlet NSSlider* xfExposureSlider; 25 | IBOutlet NSSlider* xfSaturationSlider; 26 | IBOutlet NSPopUpButton* xfProfilePopup; 27 | 28 | IBOutlet NSView* xfSavePanelView; 29 | NSString* xfSaveUTI; 30 | CFMutableDictionaryRef xfSaveMetaAndOpts; 31 | 32 | IBOutlet NSPanel* xfProgressPanel; 33 | IBOutlet NSProgressIndicator* xfProgressIndicator; 34 | IBOutlet NSTextField* xfProgressStatus; 35 | 36 | CGImageRef xfImage; 37 | CFDictionaryRef xfMetadata; 38 | XFImageFilter* xfFilteredImage; 39 | 40 | NSArray* xfProfiles; 41 | 42 | NSNumber* xfSwitchValue; 43 | XFProfile* xfProfileValue; 44 | NSNumber* xfExposureValue; 45 | NSNumber* xfSaturationValue; 46 | 47 | NSPrintInfo* xfPrintInfo; 48 | 49 | CGFloat _zoomFactor; 50 | BOOL automaticReload; 51 | BOOL cleanBuffer; 52 | NSColor* backgroundColor; 53 | } 54 | 55 | - (CGAffineTransform)imageTransform; 56 | - (CIImage *)currentCIImageWithTransform:(CGAffineTransform)ctm; 57 | - (CGImageRef)currentCGImage; 58 | - (CGSize)imageSize; 59 | - (CGFloat)zoomFactor; 60 | - (NSRect)visibleRect; 61 | 62 | - (NSNumber *)saveQuality; 63 | 64 | - (void)setupAll; 65 | - (void)setupExposure; 66 | - (void)setupSaturation; 67 | 68 | - (BOOL)switchState; 69 | 70 | - (IBAction)reload:(id)sender; 71 | - (IBAction)zoomIn:(id)sender; 72 | - (IBAction)zoomOut:(id)sender; 73 | 74 | - (IBAction)changeAutomaticReload:(id)sender; 75 | - (IBAction)changeCleanBuffer:(id)sender; 76 | - (IBAction)changeBackgroundColor:(id)sender; 77 | - (void)setBackgroundColor:(NSColor *)color; 78 | 79 | @end 80 | -------------------------------------------------------------------------------- /XFImageDocumentController.h: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageDocumentController.h 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | 10 | 11 | @interface XFImageDocumentController : NSDocumentController 12 | { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /XFImageDocumentController.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageDocumentController.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFImageDocumentController.h" 9 | 10 | 11 | static NSString* ImageIOLocalizedString(NSString* key) 12 | { 13 | static NSBundle* b = nil; 14 | 15 | if (b == nil) 16 | b = [NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"]; 17 | 18 | return [b localizedStringForKey:key value:key table: @"CGImageSource"]; 19 | } 20 | 21 | 22 | static NSString* XFTypeNameRoot = @"org.extrafile"; 23 | static NSString* XFTypeNameXFF = @"org.extrafile.xff"; 24 | static NSString* XFTypeNameCCI = @"org.extrafile.cci"; 25 | static NSString* XFTypeNameMCF = @"org.extrafile.mcf"; 26 | static NSString* XFTypeName4BC = @"org.extrafile.4bc"; 27 | static NSString* XFTypeNameBASCII = @"org.extrafile.bascii"; 28 | static NSString* XFTypeNameBLINX = @"org.extrafile.blinx"; 29 | static NSString* XFTypeNameUSPEC = @"org.extrafile.uspec"; 30 | 31 | 32 | static NSString* XFIOLocalizedString(NSString* key) 33 | { 34 | static NSString* type = nil; 35 | 36 | if ([key isEqualToString:XFTypeNameXFF]) { 37 | type = @"XFF"; 38 | } else if ([key isEqualToString:XFTypeNameCCI]) { 39 | type = @"CCI"; 40 | } else if ([key isEqualToString:XFTypeNameMCF]) { 41 | type = @"MCF"; 42 | } else if ([key isEqualToString:XFTypeName4BC]) { 43 | type = @"4BC"; 44 | } else if ([key isEqualToString:XFTypeNameBASCII]) { 45 | type = @"BASCII"; 46 | } else if ([key isEqualToString:XFTypeNameBLINX]) { 47 | type = @"BLINX"; 48 | } else if ([key isEqualToString:XFTypeNameUSPEC]) { 49 | type = @"USPEC"; 50 | } 51 | return type; 52 | } 53 | 54 | 55 | @implementation XFImageDocumentController 56 | 57 | 58 | - (NSString *)defaultType 59 | { 60 | return @"public.tiff"; 61 | } 62 | 63 | 64 | - (NSArray *)documentClassNames 65 | { 66 | return [NSArray arrayWithObject:@"XFImageDocument"]; 67 | } 68 | 69 | 70 | - (Class)documentClassForType:(NSString *)typeName 71 | { 72 | return [[NSBundle mainBundle] classNamed:@"XFImageDocument"]; 73 | } 74 | 75 | 76 | - (NSString *)displayNameForType:(NSString *)typeName; 77 | { 78 | NSString* displayName = nil; 79 | if ([typeName rangeOfString:XFTypeNameRoot].location != NSNotFound) { 80 | displayName = XFIOLocalizedString(typeName); 81 | } else { 82 | displayName = ImageIOLocalizedString(typeName); 83 | } 84 | return displayName; 85 | } 86 | 87 | 88 | // Return the name of the document type that should be used when opening a URL 89 | // In this app, we return the UTI type returned by CGImageSourceGetType. 90 | // 91 | /* 92 | - (NSString *)typeForContentsOfURL:(NSURL *)absURL error:(NSError **)outError 93 | { 94 | NSLog(@"TYPE CONTENT URL"); 95 | NSLog(@"%@", absURL); 96 | 97 | NSString* type = nil; 98 | CGImageSourceRef isrc = CGImageSourceCreateWithURL((CFURLRef)absURL, nil); 99 | NSLog(@"%@", isrc); 100 | 101 | if (isrc) 102 | { 103 | NSLog(@"TYPE CGI"); 104 | type = [[(NSString *)CGImageSourceGetType(isrc) retain] autorelease]; 105 | NSLog(@"%@", type); 106 | CFRelease(isrc); 107 | } 108 | 109 | return type; 110 | } 111 | */ 112 | 113 | 114 | // Given a document type, return an array of corresponding file name extensions 115 | // and HFS file type strings of the sort returned by NSFileTypeForHFSTypeCode(). 116 | // In this app, 'typeName' is a UTI type so we can call UTTypeCopyDeclaration(). 117 | // 118 | 119 | - (NSArray *)fileExtensionsFromType:(NSString *)typeName; 120 | { 121 | NSArray* readExts = nil; 122 | 123 | CFDictionaryRef utiDecl = UTTypeCopyDeclaration((CFStringRef)typeName); 124 | if (utiDecl) 125 | { 126 | CFDictionaryRef utiSpec = CFDictionaryGetValue(utiDecl, kUTTypeTagSpecificationKey); 127 | if (utiSpec) 128 | { 129 | CFTypeRef ext = CFDictionaryGetValue(utiSpec, kUTTagClassFilenameExtension); 130 | 131 | if (ext && CFGetTypeID(ext) == CFStringGetTypeID()) 132 | readExts = [NSArray arrayWithObject:(id)ext]; 133 | if (ext && CFGetTypeID(ext) == CFArrayGetTypeID()) 134 | readExts = [NSArray arrayWithArray:(id)ext]; 135 | } 136 | CFRelease(utiDecl); 137 | } 138 | 139 | return readExts; 140 | } 141 | 142 | @end 143 | -------------------------------------------------------------------------------- /XFImageFilter.h: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageFilter.h 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | #import "XFProfile.h" 12 | 13 | 14 | @interface XFImageFilter : NSObject 15 | { 16 | CGImageRef xfImage; 17 | CIImage* xfCIImage; 18 | 19 | XFProfile* xfProfile; 20 | CIFilter* xfCIExposure; 21 | CIFilter* xfCIColorControls; 22 | CIFilter* xfCIColorCube; 23 | } 24 | 25 | - (id)initWithImage:(CGImageRef)image; 26 | - (void)setProfile:(XFProfile *)profile; 27 | - (void)setExposure:(NSNumber *)exposure; 28 | - (void)setSaturation:(NSNumber *)saturation; 29 | 30 | - (CIImage *)imageWithTransform:(CGAffineTransform)ctm; 31 | - (CGImageRef)createCGImage; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /XFImageFilter.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageFilter.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFImageFilter.h" 9 | 10 | 11 | @implementation XFImageFilter 12 | 13 | - (void)dealloc 14 | { 15 | CGImageRelease(xfImage); 16 | [xfCIImage release]; 17 | [xfProfile release]; 18 | [xfCIExposure release]; 19 | [xfCIColorControls release]; 20 | [xfCIColorCube release]; 21 | 22 | [super dealloc]; 23 | } 24 | 25 | 26 | - (id)initWithImage:(CGImageRef)image 27 | { 28 | if ((self = [super init])) 29 | { 30 | xfImage = CGImageRetain(image); 31 | xfCIImage = [[CIImage imageWithCGImage:xfImage] retain]; 32 | } 33 | return self; 34 | } 35 | 36 | 37 | - (void)setProfile:(XFProfile *)profile 38 | { 39 | [xfProfile release]; 40 | xfProfile = [profile retain]; 41 | 42 | if (xfProfile == nil) 43 | { 44 | [xfCIColorCube autorelease]; 45 | xfCIColorCube = nil; 46 | } 47 | else 48 | { 49 | // Use the CIColorCube filter three-dimensional color table 50 | // to transform the source image pixels 51 | if (xfCIColorCube == nil) 52 | xfCIColorCube = [[CIFilter filterWithName: @"CIColorCube"] retain]; 53 | 54 | // Get the transformed data 55 | static const int kSoftProofGrid = 32; 56 | NSData *data = [xfProfile dataForCISoftproofTextureWithGridSize:kSoftProofGrid]; 57 | 58 | [xfCIColorCube setValue:data 59 | forKey:@"inputCubeData"]; 60 | [xfCIColorCube setValue:[NSNumber numberWithInt:kSoftProofGrid] 61 | forKey:@"inputCubeDimension"]; 62 | } 63 | } 64 | 65 | 66 | - (void)setExposure:(NSNumber *)exposure 67 | { 68 | if (xfCIExposure == nil) 69 | xfCIExposure = [[CIFilter filterWithName: @"CIExposureAdjust"] retain]; 70 | 71 | [xfCIExposure setValue:exposure 72 | forKey: @"inputEV"]; 73 | } 74 | 75 | 76 | - (void)setSaturation:(NSNumber *)saturation 77 | { 78 | if (xfCIColorControls == nil) 79 | xfCIColorControls = [[CIFilter filterWithName: @"CIColorControls"] retain]; 80 | 81 | [xfCIColorControls setValue:saturation 82 | forKey: @"inputSaturation"]; 83 | 84 | [xfCIColorControls setValue:[[[xfCIColorControls attributes] 85 | objectForKey: @"inputBrightness"] 86 | objectForKey: @"CIAttributeIdentity"] 87 | forKey: @"inputBrightness"]; 88 | 89 | [xfCIColorControls setValue:[[[xfCIColorControls attributes] 90 | objectForKey: @"inputContrast"] 91 | objectForKey: @"CIAttributeIdentity"] 92 | forKey: @"inputContrast"]; 93 | } 94 | 95 | 96 | - (CIImage *)imageWithTransform:(CGAffineTransform)ctm 97 | { 98 | // Returns a new image representing the original image with the transform 99 | // 'ctm' appended to it. 100 | CIImage* ciimg = [xfCIImage imageByApplyingTransform:ctm]; 101 | 102 | if (xfCIExposure) 103 | { 104 | [xfCIExposure setValue:ciimg forKey:@"inputImage"]; 105 | ciimg = [xfCIExposure valueForKey: @"outputImage"]; 106 | } 107 | 108 | if (xfCIColorControls) 109 | { 110 | [xfCIColorControls setValue:ciimg forKey:@"inputImage"]; 111 | ciimg = [xfCIColorControls valueForKey: @"outputImage"]; 112 | } 113 | 114 | if (xfCIColorCube) 115 | { 116 | [xfCIColorCube setValue:ciimg forKey: @"inputImage"]; 117 | ciimg = [xfCIColorCube valueForKey: @"outputImage"]; 118 | } 119 | 120 | return ciimg; 121 | } 122 | 123 | 124 | - (CGImageRef)createCGImage 125 | { 126 | if (xfImage==nil) 127 | return nil; 128 | 129 | XFProfile* prof = xfProfile; 130 | if (xfProfile==nil) 131 | prof = [XFProfile profileWithGenericRGB]; 132 | 133 | // calculate bits per pixel and row bytes and alphaInfo 134 | size_t height = CGImageGetHeight(xfImage); 135 | size_t width = CGImageGetWidth(xfImage); 136 | CGRect rect = {{0,0}, {width, height}}; 137 | size_t bitsPerComponent = 8; 138 | size_t bytesPerRow = 0; 139 | CGImageAlphaInfo alphaInfo = kCGImageAlphaNone; 140 | 141 | switch ([prof spaceType]) 142 | { 143 | case cmGrayData: 144 | bytesPerRow = width; 145 | alphaInfo = kCGImageAlphaNone; /* RGB. */ 146 | break; 147 | case cmRGBData: 148 | bytesPerRow = width*4; 149 | alphaInfo = kCGImageAlphaPremultipliedLast; /* premultiplied RGBA */ 150 | break; 151 | case cmCMYKData: 152 | bytesPerRow = width*4; 153 | alphaInfo = kCGImageAlphaNone; /* RGB. */ 154 | break; 155 | default: 156 | return nil; 157 | break; 158 | } 159 | 160 | CGContextRef context = CGBitmapContextCreate(nil, width, height, 161 | bitsPerComponent, bytesPerRow, 162 | [prof colorspace], alphaInfo); 163 | 164 | CIContext* cicontext = [CIContext contextWithCGContext: context options: nil]; 165 | 166 | // If context doesn't support alpha then first fill it with white. 167 | // That is most likely to be desireable. 168 | if (alphaInfo == kCGImageAlphaNone) 169 | { 170 | CGColorSpaceRef graySpace = CGColorSpaceCreateDeviceGray(); 171 | const CGFloat whiteComps[2] = {1.0, 1.0}; 172 | CGColorRef whiteColor = CGColorCreate(graySpace, whiteComps); 173 | CFRelease(graySpace); 174 | CGContextSetFillColorWithColor(context, whiteColor); 175 | CGContextFillRect(context, rect); 176 | CFRelease(whiteColor); 177 | } 178 | 179 | CIImage* ciimg = xfCIImage; 180 | 181 | // exposure adjustment 182 | if (xfCIExposure) 183 | { 184 | [xfCIExposure setValue:ciimg forKey:@"inputImage"]; 185 | ciimg = [xfCIExposure valueForKey: @"outputImage"]; 186 | } 187 | 188 | // three-dimensional color table adjustment 189 | if (xfCIColorControls) 190 | { 191 | [xfCIColorControls setValue:ciimg forKey:@"inputImage"]; 192 | ciimg = [xfCIColorControls valueForKey: @"outputImage"]; 193 | } 194 | 195 | 196 | CGRect extent = [ciimg extent]; 197 | 198 | [cicontext drawImage: ciimg inRect:rect fromRect:extent]; 199 | 200 | CGImageRef image = CGBitmapContextCreateImage(context); 201 | 202 | CGContextRelease(context); 203 | 204 | return image; 205 | } 206 | 207 | @end 208 | -------------------------------------------------------------------------------- /XFImageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageView.h 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | 10 | #import "XFImageDocument.h" 11 | 12 | 13 | @class XFImageDocument; 14 | 15 | @interface XFImageView : NSView 16 | { 17 | IBOutlet XFImageDocument* xfImageDoc; 18 | 19 | NSColor* backgroundColor; 20 | } 21 | 22 | - (void)changeBackgroundColor:(NSColor *)color; 23 | 24 | - (NSData *)dataInXFF; 25 | - (NSData *)dataInCCI; 26 | - (NSData *)dataInMCF; 27 | - (NSData *)dataIn4BC; 28 | - (NSData *)dataInBASCII; 29 | - (NSData *)dataInBLINX; 30 | - (NSData *)dataInUSPEC; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /XFImageView.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFImageView.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFImageView.h" 9 | #import "XFImageDocument.h" 10 | 11 | #import 12 | 13 | 14 | #define BITOP(a,b,op) \ 15 | ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a)))) 16 | 17 | // BITOP(array, 40, |=); /* sets bit 40 */ 18 | // BITOP(array, 41, ^=); /* toggles bit 41 */ 19 | // if (BITOP(array, 42, &)) return 0; /* tests bit 42 */ 20 | // BITOP(array, 43, &=~); /* clears bit 43 */ 21 | 22 | 23 | static NSString* separatorString = @">data>"; 24 | 25 | static unsigned char bAscii0[16] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; 26 | static unsigned char bAscii1[16] = {0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22}; 27 | static unsigned char bAscii2[16] = {0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55}; 28 | static unsigned char bAscii3[16] = {0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB}; 29 | static unsigned char bAscii4[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 30 | 31 | 32 | @implementation XFImageView 33 | 34 | - (void)dealloc 35 | { 36 | [[NSNotificationCenter defaultCenter] removeObserver:self]; 37 | [super dealloc]; 38 | } 39 | 40 | 41 | - (id)initWithFrame:(NSRect)frame 42 | { 43 | self = [super initWithFrame:frame]; 44 | if (self) { 45 | [[NSNotificationCenter defaultCenter] 46 | addObserver:self selector:@selector(newScreenProfile:) 47 | name:NSWindowDidChangeScreenProfileNotification object:nil]; 48 | } 49 | return self; 50 | } 51 | 52 | 53 | #pragma mark - 54 | 55 | - (CMDisplayIDType)displayID 56 | { 57 | return (CMDisplayIDType)[[[[[self window] screen] deviceDescription] objectForKey:@"NSScreenNumber"] longValue]; 58 | } 59 | 60 | 61 | - (BOOL)isFlipped 62 | { 63 | return YES; 64 | } 65 | 66 | 67 | - (BOOL)isOpaque 68 | { 69 | return YES; 70 | } 71 | 72 | 73 | #pragma mark - 74 | 75 | - (void)changeBackgroundColor:(NSColor *)color 76 | { 77 | backgroundColor = color; 78 | [self setNeedsDisplay:YES]; 79 | } 80 | 81 | 82 | - (void)drawImage 83 | { 84 | CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; 85 | if (context==nil) 86 | return; 87 | 88 | CGImageRef image = [xfImageDoc currentCGImage]; 89 | if (image==nil) 90 | return; 91 | 92 | NSRect viewBounds = [self bounds]; 93 | CGRect imageRect = {{0,0}, [xfImageDoc imageSize]}; 94 | 95 | CGAffineTransform ctm = [xfImageDoc imageTransform]; 96 | 97 | CGSize ctmdSize = CGRectApplyAffineTransform(imageRect, ctm).size; 98 | ctm.tx += viewBounds.origin.x + (viewBounds.size.width - ctmdSize.width)/2; 99 | ctm.ty += viewBounds.origin.y + (viewBounds.size.height - ctmdSize.height)/2; 100 | 101 | CGContextConcatCTM(context, ctm); 102 | 103 | //CGInterpolationQuality q = [self inLiveResize] ? NSImageInterpolationNone : NSImageInterpolationHigh; 104 | CGInterpolationQuality q = NSImageInterpolationNone; 105 | CGContextSetInterpolationQuality(context, q); 106 | 107 | // now draw using updated transform 108 | CGContextDrawImage(context, imageRect, image); 109 | 110 | CGImageRelease(image); 111 | } 112 | 113 | 114 | - (void)drawCIImage 115 | { 116 | CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; 117 | if (context==nil) 118 | return; 119 | 120 | CIImage* image = [xfImageDoc currentCIImageWithTransform:[xfImageDoc imageTransform]]; 121 | if (image==nil) 122 | return; 123 | 124 | NSRect viewBounds = [self bounds]; 125 | CGRect sRect = [image extent]; 126 | CGRect dRect = sRect; 127 | dRect.origin.x = viewBounds.origin.x + (viewBounds.size.width - sRect.size.width)/2; 128 | dRect.origin.y = viewBounds.origin.y + (viewBounds.size.height - sRect.size.height)/2; 129 | 130 | CIContext* ciContext = [CIContext contextWithCGContext:context options:nil]; 131 | [ciContext drawImage:image inRect:dRect fromRect:sRect]; 132 | } 133 | 134 | 135 | - (void)drawRect:(NSRect)rect 136 | { 137 | NSSize imageSize = NSSizeFromCGSize([xfImageDoc imageSize]); 138 | NSRect viewBounds = [xfImageDoc visibleRect]; 139 | NSRect imageBounds = NSMakeRect(0, 0, MAX(imageSize.width, viewBounds.size.width), MAX(imageSize.height, viewBounds.size.height)); 140 | [self setFrame:imageBounds]; 141 | 142 | [backgroundColor set]; 143 | [NSBezierPath fillRect:[self bounds]]; 144 | 145 | if ([xfImageDoc switchState]) 146 | [self drawCIImage]; 147 | else 148 | [self drawImage]; 149 | } 150 | 151 | 152 | - (void)viewDidEndLiveResize 153 | { 154 | if ([xfImageDoc switchState]==NO) 155 | [self setNeedsDisplay:YES]; 156 | } 157 | 158 | 159 | - (void)newScreenProfile:(NSNotification*)n 160 | { 161 | } 162 | 163 | 164 | #pragma mark #### GET DATA 165 | 166 | - (NSData *)dataInXFF 167 | { 168 | CGImageRef cgImage = [xfImageDoc currentCGImage]; 169 | if (cgImage==nil) 170 | return nil; 171 | 172 | NSMutableData* xffData = [NSMutableData dataWithCapacity:0]; 173 | 174 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)); 175 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size]; 176 | 177 | [image lockFocus]; 178 | 179 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage); 180 | 181 | [image unlockFocus]; 182 | 183 | NSData* data = [image TIFFRepresentation]; 184 | [image release]; 185 | 186 | 187 | //PROPERTIES 188 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)]; 189 | const char* utfSizeString = [sizeString UTF8String]; 190 | 191 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1]; 192 | 193 | //SEPARATOR 194 | const char* utfSeparatorString = [separatorString UTF8String]; 195 | 196 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1]; 197 | 198 | [xffData appendData:size]; 199 | [xffData appendData:separator]; 200 | [xffData appendData:data]; 201 | 202 | CGImageRelease(cgImage); 203 | 204 | return xffData; 205 | } 206 | 207 | 208 | - (NSData *)dataInCCI 209 | { 210 | CGImageRef cgImage = [xfImageDoc currentCGImage]; 211 | if (cgImage==nil) 212 | return nil; 213 | 214 | NSMutableData* cciData = [NSMutableData dataWithCapacity:0]; 215 | 216 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)); 217 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size]; 218 | 219 | [image lockFocus]; 220 | 221 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage); 222 | 223 | [image unlockFocus]; 224 | 225 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; 226 | [image release]; 227 | 228 | NSMutableData* rData = [NSMutableData dataWithCapacity:0]; 229 | NSMutableData* gData = [NSMutableData dataWithCapacity:0]; 230 | NSMutableData* bData = [NSMutableData dataWithCapacity:0]; 231 | 232 | NSColor* color = [bitmap colorAtX:0 y:0]; 233 | CGFloat rFloat = lround(255.0f * [color redComponent]); 234 | CGFloat gFloat = lround(255.0f * [color greenComponent]); 235 | CGFloat bFloat = lround(255.0f * [color blueComponent]); 236 | 237 | Byte rByteBuffer = (Byte)rFloat; 238 | Byte rByteCount = 0; 239 | Byte gByteBuffer = (Byte)gFloat; 240 | Byte gByteCount = 0; 241 | Byte bByteBuffer = (Byte)bFloat; 242 | Byte bByteCount = 0; 243 | 244 | float quality = [[xfImageDoc saveQuality] floatValue]; 245 | int qualityOffset = lround((1.0f-quality)*10); 246 | 247 | int numPixels = CGImageGetWidth(cgImage) * CGImageGetHeight(cgImage); 248 | int i; 249 | for (i=1; i rByteBuffer+qualityOffset || rByteCount >= 255) { 259 | 260 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer; 261 | unsigned char* rCountChar = (unsigned char *)&rByteCount; 262 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 263 | [rData appendBytes:rCountChar length:sizeof(unsigned char)]; 264 | 265 | rByteBuffer = rByte; 266 | rByteCount = 0; 267 | } 268 | else { 269 | rByteCount++; 270 | } 271 | 272 | 273 | CGFloat gFloat = lround(255.0f * [color greenComponent]); 274 | Byte gByte = (Byte)gFloat; 275 | 276 | if (gByte < gByteBuffer-qualityOffset || gByte > gByteBuffer+qualityOffset || gByteCount >= 255) { 277 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer; 278 | unsigned char* gCountChar = (unsigned char *)&gByteCount; 279 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 280 | [gData appendBytes:gCountChar length:sizeof(unsigned char)]; 281 | 282 | gByteBuffer = gByte; 283 | gByteCount = 0; 284 | } 285 | else { 286 | gByteCount++; 287 | } 288 | 289 | 290 | CGFloat bFloat = lround(255.0f * [color blueComponent]); 291 | Byte bByte = (Byte)bFloat; 292 | 293 | if (bByte < bByteBuffer-qualityOffset || bByte > bByteBuffer+qualityOffset || bByteCount >= 255) { 294 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer; 295 | unsigned char* bCountChar = (unsigned char *)&bByteCount; 296 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 297 | [bData appendBytes:bCountChar length:sizeof(unsigned char)]; 298 | 299 | bByteBuffer = bByte; 300 | bByteCount = 0; 301 | } 302 | else { 303 | bByteCount++; 304 | } 305 | } 306 | 307 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer; 308 | unsigned char* rCountChar = (unsigned char *)&rByteCount; 309 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 310 | [rData appendBytes:rCountChar length:sizeof(unsigned char)]; 311 | 312 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer; 313 | unsigned char* gCountChar = (unsigned char *)&gByteCount; 314 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 315 | [gData appendBytes:gCountChar length:sizeof(unsigned char)]; 316 | 317 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer; 318 | unsigned char* bCountChar = (unsigned char *)&bByteCount; 319 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 320 | [bData appendBytes:bCountChar length:sizeof(unsigned char)]; 321 | 322 | 323 | //PROPERTIES 324 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)]; 325 | const char* utfSizeString = [sizeString UTF8String]; 326 | 327 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1]; 328 | 329 | //SEPARATOR 330 | const char* utfSeparatorString = [separatorString UTF8String]; 331 | 332 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1]; 333 | 334 | [cciData appendData:size]; 335 | [cciData appendData:separator]; 336 | [cciData appendData:rData]; 337 | [cciData appendData:gData]; 338 | [cciData appendData:bData]; 339 | 340 | CGImageRelease(cgImage); 341 | 342 | return cciData; 343 | } 344 | 345 | 346 | - (NSData *)dataInMCF 347 | { 348 | CGImageRef cgImage = [xfImageDoc currentCGImage]; 349 | if (cgImage==nil) 350 | return nil; 351 | 352 | NSMutableData* mcfData = [NSMutableData dataWithCapacity:0]; 353 | 354 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)); 355 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size]; 356 | 357 | [image lockFocus]; 358 | 359 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage); 360 | 361 | [image unlockFocus]; 362 | 363 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; 364 | [image release]; 365 | 366 | NSMutableData* mData = [NSMutableData dataWithCapacity:0]; 367 | 368 | float columnWidth = 4.0f; 369 | float rowHeight = 2.0f; 370 | 371 | int xOff[8] = {0, 1, 2, 3, 0, 1, 2, 3}; 372 | int yOff[8] = {0, 1, 0, 1, 1, 0, 1, 0}; 373 | 374 | int columns = ceil(CGImageGetWidth(cgImage) / columnWidth); 375 | int rows = ceil(CGImageGetHeight(cgImage) / rowHeight); 376 | 377 | int gridSize = columns * rows; 378 | 379 | int i; 380 | for (i=0; i rByteBuffer+qualityOffset || rByteCount >= 255) { 797 | 798 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer; 799 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 800 | 801 | if (rByteCount > 0) { 802 | 803 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 804 | 805 | unsigned char* rCountChar = (unsigned char *)&rByteCount; 806 | [rData appendBytes:rCountChar length:sizeof(unsigned char)]; 807 | } 808 | 809 | rByteBuffer = rByte; 810 | rByteCount = 0; 811 | } 812 | else { 813 | rByteCount++; 814 | } 815 | 816 | 817 | CGFloat gFloat = lround(255.0f * [color greenComponent]); 818 | Byte gByte = (Byte)gFloat; 819 | 820 | if (gByte < gByteBuffer-qualityOffset || gByte > gByteBuffer+qualityOffset || gByteCount >= 255) { 821 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer; 822 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 823 | 824 | if (gByteCount > 0) { 825 | 826 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 827 | 828 | unsigned char* gCountChar = (unsigned char *)&gByteCount; 829 | [gData appendBytes:gCountChar length:sizeof(unsigned char)]; 830 | } 831 | 832 | gByteBuffer = gByte; 833 | gByteCount = 0; 834 | } 835 | else { 836 | gByteCount++; 837 | } 838 | 839 | 840 | CGFloat bFloat = lround(255.0f * [color blueComponent]); 841 | Byte bByte = (Byte)bFloat; 842 | 843 | if (bByte < bByteBuffer-qualityOffset || bByte > bByteBuffer+qualityOffset || bByteCount >= 255) { 844 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer; 845 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 846 | 847 | if (bByteCount > 0) { 848 | 849 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 850 | 851 | unsigned char* bCountChar = (unsigned char *)&bByteCount; 852 | [bData appendBytes:bCountChar length:sizeof(unsigned char)]; 853 | } 854 | 855 | bByteBuffer = bByte; 856 | bByteCount = 0; 857 | } 858 | else { 859 | bByteCount++; 860 | } 861 | 862 | 863 | if (j==35 || j==51 || j==67 || j==83 || j==99 || j==112 || j==121 || j==126) { 864 | yOff++; 865 | } 866 | 867 | if (j==106 || j==117 || j==124) { 868 | xOff++; 869 | } 870 | 871 | if (xUp) { 872 | xOff++; 873 | yOff--; 874 | } else { 875 | xOff--; 876 | yOff++; 877 | } 878 | 879 | if (xOff == xLimit) { 880 | xUp = NO; 881 | xLimit += 2; 882 | xLimit = MIN(columnWidth-1, xLimit); 883 | } 884 | 885 | if (yOff == yLimit) { 886 | xUp = YES; 887 | yLimit += 2; 888 | yLimit = MIN(rowHeight-1, yLimit); 889 | } 890 | 891 | xOff = MIN(columnWidth-1, MAX(0, xOff)); 892 | yOff = MIN(rowHeight-1, MAX(0, yOff)); 893 | } 894 | 895 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer; 896 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 897 | 898 | if (rByteCount > 0) { 899 | 900 | [rData appendBytes:rValueChar length:sizeof(unsigned char)]; 901 | 902 | unsigned char* rCountChar = (unsigned char *)&rByteCount; 903 | [rData appendBytes:rCountChar length:sizeof(unsigned char)]; 904 | } 905 | 906 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer; 907 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 908 | 909 | if (gByteCount > 0) { 910 | 911 | [gData appendBytes:gValueChar length:sizeof(unsigned char)]; 912 | 913 | unsigned char* gCountChar = (unsigned char *)&gByteCount; 914 | [gData appendBytes:gCountChar length:sizeof(unsigned char)]; 915 | } 916 | 917 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer; 918 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 919 | 920 | if (bByteCount > 0) { 921 | 922 | [bData appendBytes:bValueChar length:sizeof(unsigned char)]; 923 | 924 | unsigned char* bCountChar = (unsigned char *)&bByteCount; 925 | [bData appendBytes:bCountChar length:sizeof(unsigned char)]; 926 | } 927 | 928 | NSData* blockID = [NSData dataWithBytes:&i length:sizeof(i)]; 929 | 930 | [rHeadData appendData:blockID]; 931 | Byte rLengthByte = (Byte)[rData length]; 932 | unsigned char* rLengthChar = (unsigned char *)&rLengthByte; 933 | [rHeadData appendBytes:rLengthChar length:sizeof(unsigned char)]; 934 | 935 | [gHeadData appendData:blockID]; 936 | Byte gLengthByte = (Byte)[gData length]; 937 | unsigned char* gLengthChar = (unsigned char *)&gLengthByte; 938 | [gHeadData appendBytes:gLengthChar length:sizeof(unsigned char)]; 939 | 940 | [bHeadData appendData:blockID]; 941 | Byte bLengthByte = (Byte)[bData length]; 942 | unsigned char* bLengthChar = (unsigned char *)&bLengthByte; 943 | [bHeadData appendBytes:bLengthChar length:sizeof(unsigned char)]; 944 | 945 | [blockData appendData:rHeadData]; 946 | [blockData appendData:rData]; 947 | [blockData appendData:gHeadData]; 948 | [blockData appendData:gData]; 949 | [blockData appendData:bHeadData]; 950 | [blockData appendData:bData]; 951 | } 952 | 953 | //PROPERTIES 954 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)]; 955 | const char* utfSizeString = [sizeString UTF8String]; 956 | 957 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1]; 958 | 959 | //SEPARATOR 960 | const char* utfSeparatorString = [separatorString UTF8String]; 961 | 962 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1]; 963 | 964 | [basciiData appendData:size]; 965 | [basciiData appendData:separator]; 966 | [basciiData appendData:blockData]; 967 | 968 | CGImageRelease(cgImage); 969 | 970 | return basciiData; 971 | } 972 | 973 | 974 | - (NSData *)dataInUSPEC 975 | { 976 | CGImageRef cgImage = [xfImageDoc currentCGImage]; 977 | if (cgImage==nil) 978 | return nil; 979 | 980 | NSMutableData* uspecData = [NSMutableData dataWithCapacity:0]; 981 | 982 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)); 983 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size]; 984 | 985 | [image lockFocus]; 986 | 987 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage); 988 | 989 | [image unlockFocus]; 990 | 991 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; 992 | [image release]; 993 | 994 | NSMutableArray* pixelArray = [[NSMutableArray alloc] init]; 995 | 996 | NSString* indexString = @"index"; 997 | NSString* colorString = @"color"; 998 | 999 | NSArray* keys = [NSArray arrayWithObjects:indexString, colorString, nil]; 1000 | 1001 | int imageWidth = CGImageGetWidth(cgImage); 1002 | int imageHeight = CGImageGetHeight(cgImage); 1003 | 1004 | int imageSize = imageWidth * imageHeight; 1005 | 1006 | int i; 1007 | for (i=0; i 9 | 10 | 11 | @class XFImageDocument; 12 | 13 | @interface XFPrintView : NSView 14 | { 15 | XFImageDocument* xfImageDoc; 16 | } 17 | 18 | - (id)initWithFrame:(NSRect)frame document:(XFImageDocument*)imageDoc; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /XFPrintView.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFPrintView.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFPrintView.h" 9 | #import "XFImageDocument.h" 10 | 11 | 12 | @implementation XFPrintView 13 | 14 | - (id)initWithFrame:(NSRect)frame document:(XFImageDocument*)imageDoc{ 15 | self = [super initWithFrame:frame]; 16 | if (self) { 17 | xfImageDoc = [imageDoc retain]; 18 | } 19 | return self; 20 | } 21 | 22 | 23 | - (void)dealloc 24 | { 25 | [xfImageDoc release]; 26 | [super dealloc]; 27 | } 28 | 29 | 30 | - (NSString*)printJobTitle 31 | { 32 | return [xfImageDoc displayName]; 33 | } 34 | 35 | 36 | - (void)drawRect:(NSRect)dirtyRect 37 | { 38 | CGImageRef image = [xfImageDoc currentCGImage]; 39 | 40 | if (image) 41 | { 42 | CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; 43 | 44 | CGContextSaveGState(context); 45 | 46 | float scale, xScale, yScale; 47 | 48 | CGSize imageSize; 49 | NSRect printableRect = NSIntegralRect([self frame]); 50 | 51 | CGRect imageRect = {{0,0}, {CGImageGetWidth(image), CGImageGetHeight(image)}}; 52 | 53 | CGAffineTransform imTransform = [xfImageDoc imageTransform]; 54 | 55 | imageSize = CGRectApplyAffineTransform(imageRect, imTransform).size; 56 | 57 | xScale = printableRect.size.width / imageSize.width; 58 | yScale = printableRect.size.height / imageSize.height; 59 | scale = MIN(xScale, yScale); 60 | 61 | imTransform = CGAffineTransformConcat(imTransform, CGAffineTransformMakeScale(scale,scale)); 62 | 63 | float tx = (printableRect.size.width - imageSize.width * scale) / 2. 64 | + printableRect.origin.x; 65 | float ty = (printableRect.size.height - imageSize.height* scale) / 2. 66 | + printableRect.origin.y; 67 | 68 | imTransform.tx += tx; 69 | imTransform.ty += ty; 70 | 71 | // adjust transform 72 | CGContextConcatCTM(context, imTransform); 73 | 74 | // draw! 75 | CGContextDrawImage (context, imageRect, image); 76 | 77 | CGContextRestoreGState(context); 78 | 79 | CGImageRelease(image); 80 | } 81 | } 82 | 83 | @end 84 | -------------------------------------------------------------------------------- /XFProfile.h: -------------------------------------------------------------------------------- 1 | // 2 | // XFProfile.h 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | 10 | 11 | @interface XFProfile : NSObject 12 | { 13 | CMProfileRef xfRef; 14 | CGColorSpaceRef xfColorspace; 15 | CMProfileLocation xfLocation; 16 | OSType xfClass; 17 | OSType xfSpace; 18 | NSString* xfName; 19 | NSString* xfPath; 20 | } 21 | 22 | + (NSArray *)arrayOfAllProfiles; 23 | + (NSArray *)arrayOfAllProfilesWithSpace:(OSType)space; 24 | 25 | + (XFProfile *)profileDefaultRGB; 26 | + (XFProfile *)profileDefaultGray; 27 | + (XFProfile *)profileDefaultCMYK; 28 | 29 | + (XFProfile *)profileWithIterateData:(CMProfileIterateData *)data; 30 | - (XFProfile *)initWithIterateData:(CMProfileIterateData *)data; 31 | + (XFProfile *)profileWithPath:(NSString *)path; 32 | - (XFProfile *)initWithPath:(NSString *)path; 33 | + (XFProfile *)profileWithGenericRGB; 34 | - (XFProfile *)initWithGenericRGB; 35 | + (XFProfile *)profileWithLinearRGB; 36 | - (XFProfile *)initWithLinearRGB; 37 | 38 | - (CMProfileRef)ref; 39 | - (CMProfileLocation *)location; 40 | - (OSType)classType; 41 | - (OSType)spaceType; 42 | - (NSString*) path; 43 | - (CGColorSpaceRef)colorspace; 44 | 45 | - (NSData*)dataForCISoftproofTextureWithGridSize:(size_t)grid; 46 | 47 | @end 48 | 49 | CGImageRef CGImageCreateCopyWithDefaultSpace(CGImageRef image); 50 | -------------------------------------------------------------------------------- /XFProfile.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFProfile.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import "XFProfile.h" 9 | 10 | 11 | static OSErr profileIterate(CMProfileIterateData *info, void *refCon) 12 | { 13 | NSMutableArray* array = (NSMutableArray*)refCon; 14 | 15 | XFProfile* prof = [XFProfile profileWithIterateData:info]; 16 | if (prof) 17 | [array addObject:prof]; 18 | 19 | return noErr; 20 | } 21 | 22 | 23 | @implementation XFProfile 24 | 25 | + (NSArray*)arrayOfAllProfilesWithSpace:(OSType)space 26 | { 27 | CFIndex i, count; 28 | NSArray* profArray = [XFProfile arrayOfAllProfiles]; 29 | NSMutableArray* profs = [NSMutableArray arrayWithCapacity:0]; 30 | 31 | count = [profArray count]; 32 | for (i=0; ilocation; 187 | xfClass = info->header.profileClass; 188 | xfSpace = info->header.dataColorSpace; 189 | 190 | if (info->uniCodeNameCount > 1) 191 | { 192 | CFIndex numChars = info->uniCodeNameCount - 1; 193 | if (numChars > kMaxProfNameLen) 194 | numChars = kMaxProfNameLen; 195 | xfName = [[NSString stringWithCharacters:info->uniCodeName length:numChars] retain]; 196 | } 197 | 198 | return self; 199 | } 200 | 201 | 202 | - (XFProfile *)initWithPath:(NSString *)path 203 | { 204 | if (path) 205 | { 206 | xfPath = [path retain]; 207 | 208 | xfLocation.locType = cmPathBasedProfile; 209 | strncpy(xfLocation.u.pathLoc.path, [path fileSystemRepresentation], 255); 210 | 211 | CMAppleProfileHeader header; 212 | if (noErr==CMGetProfileHeader([self ref], &header)) 213 | { 214 | xfClass = header.cm2.profileClass; 215 | xfSpace = header.cm2.dataColorSpace; 216 | } 217 | else 218 | { 219 | [self autorelease]; 220 | return nil; 221 | } 222 | } 223 | 224 | return self; 225 | } 226 | 227 | 228 | - (void)dealloc 229 | { 230 | CMCloseProfile(xfRef); 231 | CGColorSpaceRelease(xfColorspace); 232 | [xfName release]; 233 | [xfPath release]; 234 | [super dealloc]; 235 | } 236 | 237 | 238 | - (CMProfileRef)ref 239 | { 240 | if (xfRef == NULL) 241 | (void) CMOpenProfile(&xfRef, &xfLocation); 242 | 243 | return xfRef; 244 | } 245 | 246 | 247 | - (CMProfileLocation *)location 248 | { 249 | return &xfLocation; 250 | } 251 | 252 | 253 | - (OSType)classType 254 | { 255 | return xfClass; 256 | } 257 | 258 | 259 | - (OSType)spaceType 260 | { 261 | return xfSpace; 262 | } 263 | 264 | 265 | - (NSString *)description 266 | { 267 | if (xfName == nil) 268 | CMCopyProfileDescriptionString([self ref], (CFStringRef *) &xfName); 269 | 270 | return xfName; 271 | } 272 | 273 | 274 | - (NSString *)path 275 | { 276 | if (xfPath == nil) 277 | { 278 | /* 279 | if (xfLocation.locType == cmFileBasedProfile) 280 | { 281 | FSRef fsref; 282 | UInt8 path[1024]; 283 | if (FSpMakeFSRef(&(mLocation.u.fileLoc.spec), &fsref) == noErr && 284 | FSRefMakePath(&fsref, path, 1024) == noErr) 285 | xfPath = [[NSString stringWithUTF8String:(const char *)path] retain]; 286 | } 287 | else 288 | */ 289 | if (xfLocation.locType == cmPathBasedProfile) 290 | { 291 | xfPath = [[NSString stringWithUTF8String:xfLocation.u.pathLoc.path] retain]; 292 | } 293 | } 294 | 295 | return xfPath; 296 | } 297 | 298 | 299 | - (BOOL)isEqual:(id)obj 300 | { 301 | if ([obj isKindOfClass:[self class]]) 302 | return [[self path] isEqualToString:[obj path]]; 303 | return [super isEqual:obj]; 304 | } 305 | 306 | 307 | - (CGColorSpaceRef)colorspace 308 | { 309 | if (xfColorspace == nil) 310 | xfColorspace = CGColorSpaceCreateWithPlatformColorSpace([self ref]); 311 | return xfColorspace; 312 | } 313 | 314 | 315 | - (NSData *)dataForCISoftproofTextureWithGridSize:(size_t) grid 316 | { 317 | NSData* nsdata = nil; 318 | NCMConcatProfileSet* set = nil; 319 | size_t count = (grid*grid*grid) * 4; 320 | size_t size; 321 | UInt8* data8 = nil; 322 | CMWorldRef cw = nil; 323 | CMProfileRef displayProf = nil; 324 | XFProfile* linRGB = nil; 325 | 326 | // profile for transform 327 | linRGB = [XFProfile profileWithLinearRGB]; 328 | if (linRGB == nil) 329 | goto bail; 330 | 331 | // specify size of resulting data 332 | size = count * sizeof(float); 333 | nsdata = [NSMutableData dataWithLength:size]; 334 | if (nsdata == nil) 335 | goto bail; 336 | 337 | // now build our color world transform 338 | size = offsetof(NCMConcatProfileSet, profileSpecs[3]); 339 | set = (NCMConcatProfileSet *) calloc(1, size); 340 | if (set==nil) 341 | goto bail; 342 | 343 | set->cmm = 0000; 344 | set->flagsMask = 0xFFFFFFFF; 345 | set->profileCount = 3; 346 | set->flags = (cmBestMode) << 16 | cmGamutCheckingMask; 347 | 348 | set->profileSpecs[0].profile = [linRGB ref]; 349 | set->profileSpecs[1].profile = [self ref]; 350 | set->profileSpecs[2].profile = [linRGB ref]; 351 | 352 | set->profileSpecs[0].renderingIntent = kUseProfileIntent; 353 | set->profileSpecs[1].renderingIntent = kUseProfileIntent; 354 | set->profileSpecs[2].renderingIntent = kUseProfileIntent; 355 | 356 | set->profileSpecs[0].transformTag = kDeviceToPCS; 357 | set->profileSpecs[1].transformTag = kPCSToPCS; 358 | set->profileSpecs[2].transformTag = kPCSToDevice; 359 | 360 | // Define a color world for color transformations among concatenated profiles. 361 | if (NCWConcatColorWorld (&cw, set, nil, nil) != noErr) 362 | goto bail; 363 | 364 | size = count * sizeof(UInt8); 365 | data8 = malloc(size); 366 | 367 | 368 | // cmTextureRGBtoRGBX8 = RGB to 8-bit RGBx texture 369 | 370 | if (CWFillLookupTexture (cw, grid, cmTextureRGBtoRGBX8, size, data8) != noErr) 371 | goto bail; 372 | 373 | float* dataPtr = (float*) [(NSMutableData *)nsdata mutableBytes]; 374 | if (dataPtr == nil) 375 | goto bail; 376 | 377 | size_t i; 378 | for (i=0; i 9 | 10 | 11 | extern NSString* XFZoomScrollViewFactor; 12 | 13 | @interface XFZoomScrollView : NSScrollView 14 | { 15 | NSPopUpButton* xfFactorPopUpButton; 16 | CGFloat _factor; 17 | } 18 | 19 | - (void)setFactor:(CGFloat)factor; 20 | - (void)zoomIn; 21 | - (void)zoomOut; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /XFZoomScrollView.m: -------------------------------------------------------------------------------- 1 | // 2 | // XFZoomScrollView.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 16.05.11. 6 | // 7 | 8 | #import "XFZoomScrollView.h" 9 | 10 | 11 | NSString* XFZoomScrollViewFactor = @"factor"; 12 | 13 | static NSString* const XFZoomScrollViewLabels[] = {@"10%", @"25%", @"50%", @"75%", @"100%", @"125%", @"150%", @"200%", @"400%", @"800%", @"1600%", @"3200%", @"6400%"}; 14 | static const CGFloat XFZoomScrollViewFactors[] = {0.1f, 0.25f, 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 2.0f, 4.0f, 8.0f, 16.0f, 32.0f, 64.0f}; 15 | static const NSInteger XFZoomScrollViewPopUpButtonItemCount = sizeof(XFZoomScrollViewLabels) / sizeof(NSString *); 16 | 17 | 18 | @implementation XFZoomScrollView 19 | 20 | - (void)validateFactorPopUpButton 21 | { 22 | if (!xfFactorPopUpButton) { 23 | xfFactorPopUpButton = [[NSPopUpButton alloc] initWithFrame:NSZeroRect pullsDown:NO]; 24 | NSPopUpButtonCell* factorPopUpButtonCell = [xfFactorPopUpButton cell]; 25 | [factorPopUpButtonCell setArrowPosition:NSPopUpArrowAtBottom]; 26 | [factorPopUpButtonCell setBezelStyle:NSShadowlessSquareBezelStyle]; 27 | [xfFactorPopUpButton setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; 28 | 29 | int i; 30 | for (i=0; i 0) { 59 | index--; 60 | [xfFactorPopUpButton selectItemAtIndex:index]; 61 | CGFloat factor = XFZoomScrollViewFactors[index]; 62 | [self setFactor:factor]; 63 | } 64 | } 65 | 66 | 67 | #pragma mark Bindings 68 | 69 | - (void)setFactor:(CGFloat)factor 70 | { 71 | _factor = factor; 72 | NSView* clipView = [[self documentView] superview]; 73 | NSSize clipViewFrameSize = [clipView frame].size; 74 | [clipView setBoundsSize:NSMakeSize((clipViewFrameSize.width / _factor), (clipViewFrameSize.height / _factor))]; 75 | } 76 | 77 | 78 | - (void)bind:(NSString *)binding toObject:(id)observableObject withKeyPath:(NSString *)observableKeyPath options:(NSDictionary *)options 79 | { 80 | if ([binding isEqualToString:XFZoomScrollViewFactor]) { 81 | [self validateFactorPopUpButton]; 82 | [xfFactorPopUpButton bind:NSSelectedObjectBinding toObject:observableObject withKeyPath:observableKeyPath options:options]; 83 | } 84 | [super bind:binding toObject:observableObject withKeyPath:observableKeyPath options:options]; 85 | } 86 | 87 | 88 | - (void)unbind:(NSString *)binding 89 | { 90 | [super unbind:binding]; 91 | if ([binding isEqualToString:XFZoomScrollViewFactor]) { 92 | [xfFactorPopUpButton unbind:NSSelectedObjectBinding]; 93 | } 94 | } 95 | 96 | 97 | #pragma mark Custom Look 98 | 99 | - (void)tile 100 | { 101 | NSAssert([self hasHorizontalScroller], @"XFZoomScrollView doesn't support use without a horizontal scrollbar."); 102 | 103 | [super tile]; 104 | NSScroller* horizontalScroller = [self horizontalScroller]; 105 | NSRect horizontalScrollerFrame = [horizontalScroller frame]; 106 | 107 | [self validateFactorPopUpButton]; 108 | NSRect factorPopUpButtonFrame = [xfFactorPopUpButton frame]; 109 | factorPopUpButtonFrame.origin.x = horizontalScrollerFrame.origin.x; 110 | factorPopUpButtonFrame.origin.y = horizontalScrollerFrame.origin.y; 111 | factorPopUpButtonFrame.size.height = horizontalScrollerFrame.size.height; 112 | [xfFactorPopUpButton setFrame:factorPopUpButtonFrame]; 113 | 114 | horizontalScrollerFrame.origin.x += factorPopUpButtonFrame.size.width; 115 | horizontalScrollerFrame.size.width -= factorPopUpButtonFrame.size.width; 116 | [horizontalScroller setFrame:horizontalScrollerFrame]; 117 | } 118 | 119 | @end 120 | -------------------------------------------------------------------------------- /icons/4bc.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/4bc.icns -------------------------------------------------------------------------------- /icons/bascii.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/bascii.icns -------------------------------------------------------------------------------- /icons/blinx.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/blinx.icns -------------------------------------------------------------------------------- /icons/cci.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/cci.icns -------------------------------------------------------------------------------- /icons/extrafile.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/extrafile.icns -------------------------------------------------------------------------------- /icons/mcf.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/mcf.icns -------------------------------------------------------------------------------- /icons/uspec.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/uspec.icns -------------------------------------------------------------------------------- /icons/xff.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/xff.icns -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Artistic License 2.0 2 | Copyright (c) 2000-2006, The Perl Foundation. 3 | 4 | Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 5 | 6 | Preamble 7 | This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. 8 | You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. 9 | 10 | Definitions 11 | "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. 12 | "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. 13 | "You" and "your" means any person who would like to copy, distribute, or modify the Package. 14 | "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. 15 | "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. 16 | "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. 17 | "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. 18 | "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. 19 | "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. 20 | "Source" form means the source code, documentation source, and configuration files for the Package. 21 | "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. 22 | 23 | Permission for Use and Modification Without Distribution 24 | (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. 25 | 26 | Permissions for Redistribution of the Standard Version 27 | (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. 28 | (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. 29 | 30 | Distribution of Modified Versions of the Package as Source 31 | (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: 32 | (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version.
(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version.
(c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under
(i) the Original License or
(ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed.
Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source 33 | (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. 34 | (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. 35 | 36 | Aggregating or Linking the Package 37 | (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. 38 | (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. 39 | 40 | Items That are Not Considered Part of a Modified Version 41 | (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. 42 | 43 | General Provisions 44 | (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. 45 | (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. 46 | (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. 47 | (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. 48 | (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 | 50 | http://www.perlfoundation.org/artistic_license_2_0 -------------------------------------------------------------------------------- /main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ExtraFile 4 | // 5 | // Created by Kim Asendorf on 06.05.11. 6 | // 7 | 8 | #import 9 | 10 | int main(int argc, char *argv[]) 11 | { 12 | return NSApplicationMain(argc, (const char **) argv); 13 | } 14 | --------------------------------------------------------------------------------