From a5be20ba899de8b5d53af2d8b6762b0a1b99db4f Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 23 Dec 2008 20:19:33 +0100 Subject: [PATCH] Automatically generate document icons Document icons are generated using the makeicns program and a Python script. Note that the script uses PyObjC and hence requires Mac OS X 10.5 or later (on earlier systems a blank icon will be used for all document types). This patch also adds more filetypes to Info.plist. Integration into Xcode project by Bjorn Winckler with the help of Keith Hubbard --- .gitignore | 2 + src/MacVim/Info.plist | 659 ++++++- src/MacVim/MacVim.xcodeproj/project.pbxproj | 135 +- src/MacVim/doc-bm-c.icns | Bin 39682 -> 0 bytes src/MacVim/doc-bm-h.icns | Bin 39691 -> 0 bytes src/MacVim/doc-bm-html.icns | Bin 40619 -> 0 bytes src/MacVim/doc-bm-java.icns | Bin 40589 -> 0 bytes src/MacVim/doc-bm-php.icns | Bin 40303 -> 0 bytes src/MacVim/doc-bm-pl.icns | Bin 39845 -> 0 bytes src/MacVim/doc-bm-sh.icns | Bin 39997 -> 0 bytes src/MacVim/doc-bm-tex.icns | Bin 40095 -> 0 bytes src/MacVim/doc-bm-txt.icns | Bin 40106 -> 0 bytes src/MacVim/doc-bm-xml.icns | Bin 40446 -> 0 bytes src/MacVim/doc-bm.icns | Bin 42287 -> 0 bytes .../{vim_gloss.icns => icons/MacVim.icns} | Bin src/MacVim/icons/Makefile | 11 + src/MacVim/icons/make_icons.py | 206 +++ src/MacVim/icons/makeicns/IconFamily.h | 186 ++ src/MacVim/icons/makeicns/IconFamily.m | 1576 +++++++++++++++++ src/MacVim/icons/makeicns/Makefile | 16 + .../makeicns/NSString+CarbonFSRefCreation.h | 25 + .../makeicns/NSString+CarbonFSRefCreation.m | 58 + src/MacVim/icons/makeicns/makeicns.m | 168 ++ src/MacVim/icons/vim-noshadow-512.png | Bin 0 -> 66996 bytes 24 files changed, 2928 insertions(+), 114 deletions(-) delete mode 100644 src/MacVim/doc-bm-c.icns delete mode 100644 src/MacVim/doc-bm-h.icns delete mode 100644 src/MacVim/doc-bm-html.icns delete mode 100644 src/MacVim/doc-bm-java.icns delete mode 100644 src/MacVim/doc-bm-php.icns delete mode 100644 src/MacVim/doc-bm-pl.icns delete mode 100644 src/MacVim/doc-bm-sh.icns delete mode 100644 src/MacVim/doc-bm-tex.icns delete mode 100644 src/MacVim/doc-bm-txt.icns delete mode 100644 src/MacVim/doc-bm-xml.icns delete mode 100644 src/MacVim/doc-bm.icns rename src/MacVim/{vim_gloss.icns => icons/MacVim.icns} (100%) create mode 100644 src/MacVim/icons/Makefile create mode 100644 src/MacVim/icons/make_icons.py create mode 100644 src/MacVim/icons/makeicns/IconFamily.h create mode 100644 src/MacVim/icons/makeicns/IconFamily.m create mode 100644 src/MacVim/icons/makeicns/Makefile create mode 100644 src/MacVim/icons/makeicns/NSString+CarbonFSRefCreation.h create mode 100644 src/MacVim/icons/makeicns/NSString+CarbonFSRefCreation.m create mode 100644 src/MacVim/icons/makeicns/makeicns.m create mode 100644 src/MacVim/icons/vim-noshadow-512.png diff --git a/.gitignore b/.gitignore index bae0c7dedd..1664a5cf88 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ src/MacVim/MacVim.xcodeproj/*.mode1 src/MacVim/MacVim.xcodeproj/*.mode1v3 src/MacVim/MacVim.xcodeproj/*.pbxuser +src/MacVim/icons/makeicns/*.o +src/MacVim/icons/makeicns/makeicns src/MacVim/PSMTabBarControl/PSMTabBarControl.xcodeproj/*.mode1 src/MacVim/PSMTabBarControl/PSMTabBarControl.xcodeproj/*.pbxuser src/MacVim/PSMTabBarControl/build diff --git a/src/MacVim/Info.plist b/src/MacVim/Info.plist index 31abf7ff58..b53b556930 100644 --- a/src/MacVim/Info.plist +++ b/src/MacVim/Info.plist @@ -5,6 +5,7 @@ CFBundleDevelopmentRegion English CFBundleDocumentTypes + CFBundleTypeExtensions @@ -12,7 +13,7 @@ vim CFBundleTypeIconFile - doc-bm + MacVim-vim CFBundleTypeName Vim Script File CFBundleTypeRole @@ -25,9 +26,10 @@ txt text + utf8 CFBundleTypeIconFile - doc-bm-txt + MacVim-txt CFBundleTypeMIMETypes text/plain @@ -43,9 +45,14 @@ CFBundleTypeExtensions tex + sty + cls + ltx + ins + dtx CFBundleTypeIconFile - doc-bm-tex + MacVim-tex CFBundleTypeName TeX File CFBundleTypeRole @@ -59,7 +66,7 @@ h CFBundleTypeIconFile - doc-bm-h + MacVim-h CFBundleTypeName C Header Source File CFBundleTypeRole @@ -76,6 +83,8 @@ pch + CFBundleTypeIconFile + MacVim-h CFBundleTypeName C Precompiled Header Source File CFBundleTypeRole @@ -96,6 +105,8 @@ hxx h++ + CFBundleTypeIconFile + MacVim-h CFBundleTypeName C++ Header Source File CFBundleTypeRole @@ -108,6 +119,8 @@ pch++ + CFBundleTypeIconFile + MacVim-h CFBundleTypeName C++ Precompiled Header Source File CFBundleTypeRole @@ -125,7 +138,7 @@ c CFBundleTypeIconFile - doc-bm-c + MacVim-c CFBundleTypeName C Source File CFBundleTypeRole @@ -142,6 +155,8 @@ m + CFBundleTypeIconFile + MacVim-m CFBundleTypeName Objective-C Source File CFBundleTypeRole @@ -158,6 +173,8 @@ mm + CFBundleTypeIconFile + MacVim-mm CFBundleTypeName Objective-C++ Source File CFBundleTypeRole @@ -178,6 +195,8 @@ cxx c++ + CFBundleTypeIconFile + MacVim-cpp CFBundleTypeName C++ Source File CFBundleTypeRole @@ -229,7 +248,7 @@ jav CFBundleTypeIconFile - doc-bm-java + MacVim-java CFBundleTypeName Java Source File CFBundleTypeRole @@ -314,9 +333,13 @@ f for + fpp f77 + f90 f95 + CFBundleTypeIconFile + MacVim-f CFBundleTypeName Fortran Source File CFBundleTypeRole @@ -366,10 +389,19 @@ CFBundleTypeExtensions html + phtml + shtml + xhtml htm + pht + sht + xht + phtm + shtm + xhtm CFBundleTypeIconFile - doc-bm-html + MacVim-html CFBundleTypeMIMETypes text/html @@ -389,9 +421,14 @@ CFBundleTypeExtensions xml + rss + tld + pt + cpt + dtml CFBundleTypeIconFile - doc-bm-xml + MacVim-xml CFBundleTypeMIMETypes text/xml @@ -411,9 +448,12 @@ CFBundleTypeExtensions js + htc jscript javascript + CFBundleTypeIconFile + MacVim-js CFBundleTypeMIMETypes text/javascript @@ -430,42 +470,123 @@ + CFBundleTypeName + Perl source CFBundleTypeExtensions - sh - command - csh pl pm - py - rb - rbw - php - php3 - php4 - ph3 - ph4 - phtml - applescript + pod + perl CFBundleTypeIconFile - doc-bm-sh + MacVim-perl CFBundleTypeMIMETypes text/x-perl-script - text/x-python-script - text/ruby-script - text/php - CFBundleTypeName - Script File CFBundleTypeRole Editor - LSIsAppleDefaultForType - LSItemContentTypes - public.script + public.perl-script + + + + CFBundleTypeName + Python source + CFBundleTypeExtensions + + py + rpy + cpy + python + + CFBundleTypeIconFile + MacVim-py + CFBundleTypeMIMETypes + + text/x-python-script + + CFBundleTypeRole + Editor + LSItemContentTypes + + public.python-script + + + + CFBundleTypeName + PHP source + CFBundleTypeExtensions + + php + php3 + php4 + php5 + ph3 + ph4 + phtml + + CFBundleTypeIconFile + MacVim-php + CFBundleTypeMIMETypes + + text/php + + CFBundleTypeRole + Editor + LSItemContentTypes + + public.php-script + + + + CFBundleTypeName + Ruby source + CFBundleTypeExtensions + + rb + rbw + rbx + rjs + rxml + + CFBundleTypeIconFile + MacVim-rb + CFBundleTypeMIMETypes + + text/ruby-script + + CFBundleTypeRole + Editor + LSItemContentTypes + + public.ruby-script + + + + CFBundleTypeName + Shell script + CFBundleTypeExtensions + + sh + csh + command + ss + bashrc + bash_profile + bash_login + profile + bash_logout + + CFBundleTypeIconFile + MacVim-bash + CFBundleTypeRole + Editor + LSItemContentTypes + + public.shell-script @@ -491,7 +612,7 @@ diff CFBundleTypeIconFile - doc-bm + MacVim-patch CFBundleTypeName Patch File CFBundleTypeRole @@ -527,11 +648,485 @@ CFBundleTypeRole Editor + + CFBundleTypeName + AppleScript source + CFBundleTypeExtensions + + applescript + + CFBundleTypeIconFile + MacVim-applescript + CFBundleTypeRole + Editor + LSItemContentTypes + + com.apple.applescript.text + + + + CFBundleTypeName + ActionScript source + CFBundleTypeExtensions + + as + + CFBundleTypeIconFile + MacVim-as + CFBundleTypeRole + Editor + + + CFBundleTypeName + ASP document + CFBundleTypeExtensions + + asp + asa + + CFBundleTypeIconFile + MacVim-asp + CFBundleTypeRole + Editor + + + CFBundleTypeName + ASP.NET document + CFBundleTypeExtensions + + aspx + ascx + asmx + ashx + + CFBundleTypeIconFile + MacVim-asp + CFBundleTypeRole + Editor + + + CFBundleTypeName + BibTeX bibliography + CFBundleTypeExtensions + + bib + + CFBundleTypeIconFile + MacVim-bib + CFBundleTypeRole + Editor + + + CFBundleTypeName + C# source + CFBundleTypeExtensions + + cs + + CFBundleTypeIconFile + MacVim-cs + CFBundleTypeRole + Editor + + + CFBundleTypeName + Context Free Design Grammar + CFBundleTypeExtensions + + cfdg + + CFBundleTypeIconFile + MacVim-csfg + CFBundleTypeRole + Editor + + + CFBundleTypeName + Comma separated values + CFBundleTypeExtensions + + csv + + CFBundleTypeIconFile + MacVim-csv + CFBundleTypeRole + Editor + + + CFBundleTypeName + Tab separated values + CFBundleTypeExtensions + + tsv + + CFBundleTypeIconFile + MacVim-tsv + CFBundleTypeRole + Editor + + + CFBundleTypeName + CGI script + CFBundleTypeExtensions + + cgi + fcgi + + CFBundleTypeIconFile + MacVim-cgi + CFBundleTypeRole + Editor + + + CFBundleTypeName + Configuration file + CFBundleTypeExtensions + + cfg + conf + config + htaccess + + CFBundleTypeIconFile + MacVim-cfg + CFBundleTypeRole + Editor + + + CFBundleTypeName + Cascading style sheet + CFBundleTypeExtensions + + css + + CFBundleTypeIconFile + MacVim-css + CFBundleTypeRole + Editor + + + CFBundleTypeName + Document Type Definition + CFBundleTypeExtensions + + dtd + + CFBundleTypeIconFile + MacVim-dtd + CFBundleTypeRole + Editor + + + CFBundleTypeName + Dylan source + CFBundleTypeExtensions + + dylan + + CFBundleTypeIconFile + MacVim-dylan + CFBundleTypeRole + Editor + + + CFBundleTypeName + Erlang source + CFBundleTypeExtensions + + erl + hrl + + CFBundleTypeIconFile + MacVim-erl + CFBundleTypeRole + Editor + + + CFBundleTypeName + F-Script source + CFBundleTypeExtensions + + fscript + + CFBundleTypeIconFile + MacVim-fscript + CFBundleTypeRole + Editor + + + CFBundleTypeName + Haskell source + CFBundleTypeExtensions + + hs + lhs + + CFBundleTypeIconFile + MacVim-hs + CFBundleTypeRole + Editor + + + CFBundleTypeName + Include file + CFBundleTypeExtensions + + inc + + CFBundleTypeIconFile + MacVim-inc + CFBundleTypeRole + Editor + + + CFBundleTypeName + iCalendar schedule + CFBundleTypeExtensions + + ics + + CFBundleTypeIconFile + MacVim-ics + CFBundleTypeRole + Editor + + + CFBundleTypeName + MS Windows initialization file + CFBundleTypeExtensions + + ini + + CFBundleTypeIconFile + MacVim-ini + CFBundleTypeRole + Editor + + + CFBundleTypeName + Io source + CFBundleTypeExtensions + + io + + CFBundleTypeIconFile + MacVim-io + CFBundleTypeRole + Editor + + + CFBundleTypeName + BeanShell script + CFBundleTypeExtensions + + bsh + + CFBundleTypeIconFile + MacVim-bsh + CFBundleTypeRole + Editor + + + CFBundleTypeName + Java properties file + CFBundleTypeExtensions + + properties + + CFBundleTypeIconFile + MacVim-properties + CFBundleTypeRole + Editor + + + CFBundleTypeName + Java Server Page + CFBundleTypeExtensions + + jsp + + CFBundleTypeIconFile + MacVim-jsp + CFBundleTypeRole + Editor + + + CFBundleTypeName + LISP source + CFBundleTypeExtensions + + lisp + cl + l + lsp + mud + el + + CFBundleTypeIconFile + MacVim-lisp + CFBundleTypeRole + Editor + + + CFBundleTypeName + Log file + CFBundleTypeExtensions + + log + + CFBundleTypeIconFile + MacVim-log + CFBundleTypeRole + Editor + + + CFBundleTypeName + Mediawiki document + CFBundleTypeExtensions + + wiki + wikipedia + mediawiki + + CFBundleTypeIconFile + MacVim-wiki + CFBundleTypeRole + Editor + + + CFBundleTypeName + PostScript source + CFBundleTypeExtensions + + ps + eps + + CFBundleTypeIconFile + MacVim-ps + CFBundleTypeRole + Editor + + + + CFBundleTypeName + Scheme source + CFBundleTypeExtensions + + scm + sch + + CFBundleTypeIconFile + MacVim-sch + CFBundleTypeRole + Editor + + + CFBundleTypeName + SQL source + CFBundleTypeExtensions + + sql + + CFBundleTypeIconFile + MacVim-sql + CFBundleTypeRole + Editor + + + CFBundleTypeName + Tcl source + CFBundleTypeExtensions + + tcl + + CFBundleTypeIconFile + MacVim-tcl + CFBundleTypeRole + Editor + + + CFBundleTypeName + XSL stylesheet + CFBundleTypeExtensions + + xsl + xslt + + CFBundleTypeIconFile + MacVim-xsl + CFBundleTypeRole + Editor + + + CFBundleTypeName + Electronic business card + CFBundleTypeExtensions + + vcf + vcard + + CFBundleTypeIconFile + MacVim-vcf + CFBundleTypeRole + Editor + + + CFBundleTypeName + Visual Basic source + CFBundleTypeExtensions + + vb + + CFBundleTypeIconFile + MacVim-vb + CFBundleTypeRole + Editor + + + CFBundleTypeName + YAML document + CFBundleTypeExtensions + + yaml + yml + + CFBundleTypeIconFile + MacVim-yaml + CFBundleTypeRole + Editor + + + CFBundleTypeName + GTD document + CFBundleTypeExtensions + + gtd + gtdlog + + CFBundleTypeIconFile + MacVim-gtd + CFBundleTypeRole + Editor + CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - vim_gloss + MacVim CFBundleIdentifier org.vim.MacVim CFBundleInfoDictionaryVersion diff --git a/src/MacVim/MacVim.xcodeproj/project.pbxproj b/src/MacVim/MacVim.xcodeproj/project.pbxproj index 18c137df8f..d04fb3f786 100644 --- a/src/MacVim/MacVim.xcodeproj/project.pbxproj +++ b/src/MacVim/MacVim.xcodeproj/project.pbxproj @@ -12,8 +12,8 @@ 0395A95A0D74D47B00881434 /* Integration.png in Resources */ = {isa = PBXBuildFile; fileRef = 0395A9590D74D47B00881434 /* Integration.png */; }; 0395A9BF0D75D02400881434 /* AuthorizedShellCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 0395A9BE0D75D02400881434 /* AuthorizedShellCommand.m */; }; 0395A9C30D75D04D00881434 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0395A9C20D75D04D00881434 /* Security.framework */; }; - 0395AA780D76E77800881434 /* Info in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0395AA770D76E77800881434 /* Info */; }; - 0395AAAD0D76E94000881434 /* Edit in ODBEditor.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0395AA210D76E22700881434 /* Edit in ODBEditor.bundle */; }; + 0395AA780D76E77800881434 /* Info in Copy ODBEditor */ = {isa = PBXBuildFile; fileRef = 0395AA770D76E77800881434 /* Info */; }; + 0395AAAD0D76E94000881434 /* Edit in ODBEditor.bundle in Copy ODBEditor */ = {isa = PBXBuildFile; fileRef = 0395AA210D76E22700881434 /* Edit in ODBEditor.bundle */; }; 1D09AB420C6A4D520045497E /* MMTypesetter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D09AB400C6A4D520045497E /* MMTypesetter.m */; }; 1D0E051C0BA5F83800B6049E /* Colors.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1D0E051B0BA5F83800B6049E /* Colors.plist */; }; 1D145C7F0E5227CE00691AA0 /* MMTextViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D145C7E0E5227CE00691AA0 /* MMTextViewHelper.m */; }; @@ -28,28 +28,18 @@ 1D3D19120CA690FF0004A0A5 /* DejaVuSansMono-BoldOblique.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1D3D190E0CA690FF0004A0A5 /* DejaVuSansMono-BoldOblique.ttf */; }; 1D3D19130CA690FF0004A0A5 /* DejaVuSansMono-Oblique.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1D3D190F0CA690FF0004A0A5 /* DejaVuSansMono-Oblique.ttf */; }; 1D3D19140CA690FF0004A0A5 /* DejaVuSansMono.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1D3D19100CA690FF0004A0A5 /* DejaVuSansMono.ttf */; }; - 1D493D580C5247BF00AB718C /* Vim in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1D493D570C5247BF00AB718C /* Vim */; }; - 1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */; }; + 1D493D580C5247BF00AB718C /* Vim in Copy Executables */ = {isa = PBXBuildFile; fileRef = 1D493D570C5247BF00AB718C /* Vim */; }; + 1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */; }; 1D6008830E96886D003763F0 /* FindAndReplace.nib in Resources */ = {isa = PBXBuildFile; fileRef = 1D6008820E96886D003763F0 /* FindAndReplace.nib */; }; 1D60088B0E96A0B2003763F0 /* MMFindReplaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60088A0E96A0B2003763F0 /* MMFindReplaceController.m */; }; - 1D71ACB40BC702AB002F2B60 /* doc-bm-c.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACA90BC702AB002F2B60 /* doc-bm-c.icns */; }; - 1D71ACB50BC702AC002F2B60 /* doc-bm-h.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAA0BC702AB002F2B60 /* doc-bm-h.icns */; }; - 1D71ACB60BC702AC002F2B60 /* doc-bm-html.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAB0BC702AB002F2B60 /* doc-bm-html.icns */; }; - 1D71ACB70BC702AC002F2B60 /* doc-bm-java.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAC0BC702AB002F2B60 /* doc-bm-java.icns */; }; - 1D71ACB80BC702AC002F2B60 /* doc-bm-php.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAD0BC702AB002F2B60 /* doc-bm-php.icns */; }; - 1D71ACB90BC702AC002F2B60 /* doc-bm-pl.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAE0BC702AB002F2B60 /* doc-bm-pl.icns */; }; - 1D71ACBA0BC702AC002F2B60 /* doc-bm-sh.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACAF0BC702AB002F2B60 /* doc-bm-sh.icns */; }; - 1D71ACBB0BC702AC002F2B60 /* doc-bm-tex.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACB00BC702AB002F2B60 /* doc-bm-tex.icns */; }; - 1D71ACBC0BC702AC002F2B60 /* doc-bm-txt.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACB10BC702AB002F2B60 /* doc-bm-txt.icns */; }; - 1D71ACBD0BC702AC002F2B60 /* doc-bm-xml.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACB20BC702AB002F2B60 /* doc-bm-xml.icns */; }; - 1D71ACBE0BC702AC002F2B60 /* doc-bm.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D71ACB30BC702AB002F2B60 /* doc-bm.icns */; }; 1D7F74580E4CE1AE003225C6 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D7F74570E4CE1AE003225C6 /* Sparkle.framework */; }; - 1D7F745B0E4CE1CD003225C6 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1D7F74570E4CE1AE003225C6 /* Sparkle.framework */; }; + 1D7F745B0E4CE1CD003225C6 /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 1D7F74570E4CE1AE003225C6 /* Sparkle.framework */; }; 1D80591F0E1185EA001699D1 /* Miscellaneous.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D80591D0E1185EA001699D1 /* Miscellaneous.m */; }; 1D80FBD40CBBD3B700102A1C /* MMFullscreenWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D80FBD00CBBD3B700102A1C /* MMFullscreenWindow.m */; }; 1D80FBD60CBBD3B700102A1C /* MMVimView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D80FBD20CBBD3B700102A1C /* MMVimView.m */; }; 1D80FBE40CBBD6F200102A1C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D80FBE30CBBD6F200102A1C /* Carbon.framework */; }; 1D9918490D299F9900A96335 /* MMAtsuiTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D9918470D299F9900A96335 /* MMAtsuiTextView.m */; }; + 1D9C60520EF79C0C0034AD44 /* MacVim.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1D9C602E0EF79C0C0034AD44 /* MacVim.icns */; }; 1DCD00BF0E50B2B700460166 /* Attention.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00AA0E50B2B700460166 /* Attention.png */; }; 1DCD00C00E50B2B700460166 /* Copy.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00AB0E50B2B700460166 /* Copy.png */; }; 1DCD00C10E50B2B700460166 /* Cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00AC0E50B2B700460166 /* Cut.png */; }; @@ -72,18 +62,17 @@ 1DCD00D20E50B2B700460166 /* TagJump.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00BD0E50B2B700460166 /* TagJump.png */; }; 1DCD00D30E50B2B700460166 /* Undo.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00BE0E50B2B700460166 /* Undo.png */; }; 1DD04DEC0C529C5E006CDC2B /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 1DD04DEB0C529C5E006CDC2B /* Credits.rtf */; }; - 1DD0C20C0C60FFB4008CD84A /* gvimrc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1DD0C20A0C60FF9A008CD84A /* gvimrc */; }; + 1DD0C20C0C60FFB4008CD84A /* gvimrc in Copy Vim Runtime Files */ = {isa = PBXBuildFile; fileRef = 1DD0C20A0C60FF9A008CD84A /* gvimrc */; }; 1DD3D51E0D82D4C9006E4320 /* ibeam.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DD3D51D0D82D4C9006E4320 /* ibeam.png */; }; 1DD66ECE0C803D3600EBDAB3 /* MMApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD66ECC0C803D3600EBDAB3 /* MMApplication.m */; }; - 1DD703B90BA9D15D008679E9 /* vim_gloss.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1DD703B80BA9D15D008679E9 /* vim_gloss.icns */; }; 1DD704310BA9F9C2008679E9 /* SpecialKeys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1DD704300BA9F9C2008679E9 /* SpecialKeys.plist */; }; 1DD9F5E50C85D60500E8D5A5 /* SystemColors.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */; }; 1DE3F8E70D50F80500052B9E /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 1DE3F8E50D50F80500052B9E /* Preferences.nib */; }; 1DE3F8EB0D50F84600052B9E /* MMPreferenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DE3F8E90D50F84600052B9E /* MMPreferenceController.m */; }; - 1DE608B40C587FDA0055263D /* runtime in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1DE602470C587FD10055263D /* runtime */; }; + 1DE608B40C587FDA0055263D /* runtime in Copy Vim Runtime Files */ = {isa = PBXBuildFile; fileRef = 1DE602470C587FD10055263D /* runtime */; }; 1DE8CC620C5E2AAD003F56E3 /* Actions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1DE8CC610C5E2AAD003F56E3 /* Actions.plist */; }; 1DE9B9500D341AB8008FEDD4 /* MMWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DE9B94E0D341AB8008FEDD4 /* MMWindow.m */; }; - 1DED78600C6DE43D0079945F /* vimrc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1DED785F0C6DE43D0079945F /* vimrc */; }; + 1DED78600C6DE43D0079945F /* vimrc in Copy Vim Runtime Files */ = {isa = PBXBuildFile; fileRef = 1DED785F0C6DE43D0079945F /* vimrc */; }; 1DFE25A50C527BC4003000F7 /* PSMTabBarControl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */; }; 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; @@ -130,48 +119,52 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 0395AA790D76E77800881434 /* CopyFiles */ = { + 0395AA790D76E77800881434 /* Copy ODBEditor */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "Edit in ODBEditor"; dstSubfolderSpec = 7; files = ( - 0395AAAD0D76E94000881434 /* Edit in ODBEditor.bundle in CopyFiles */, - 0395AA780D76E77800881434 /* Info in CopyFiles */, + 0395AAAD0D76E94000881434 /* Edit in ODBEditor.bundle in Copy ODBEditor */, + 0395AA780D76E77800881434 /* Info in Copy ODBEditor */, ); + name = "Copy ODBEditor"; runOnlyForDeploymentPostprocessing = 0; }; - 1D0DCAD80BA3604D00B6CCFA /* CopyFiles */ = { + 1D0DCAD80BA3604D00B6CCFA /* Copy Executables */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 6; files = ( - 1D493D580C5247BF00AB718C /* Vim in CopyFiles */, + 1D493D580C5247BF00AB718C /* Vim in Copy Executables */, ); + name = "Copy Executables"; runOnlyForDeploymentPostprocessing = 0; }; - 1D9EB2840C366D7B0074B739 /* CopyFiles */ = { + 1D9EB2840C366D7B0074B739 /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 1D7F745B0E4CE1CD003225C6 /* Sparkle.framework in CopyFiles */, - 1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in CopyFiles */, + 1D7F745B0E4CE1CD003225C6 /* Sparkle.framework in Copy Frameworks */, + 1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in Copy Frameworks */, ); + name = "Copy Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 1DE608B80C58807F0055263D /* CopyFiles */ = { + 1DE608B80C58807F0055263D /* Copy Vim Runtime Files */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = vim; dstSubfolderSpec = 7; files = ( - 1DED78600C6DE43D0079945F /* vimrc in CopyFiles */, - 1DD0C20C0C60FFB4008CD84A /* gvimrc in CopyFiles */, - 1DE608B40C587FDA0055263D /* runtime in CopyFiles */, + 1DED78600C6DE43D0079945F /* vimrc in Copy Vim Runtime Files */, + 1DD0C20C0C60FFB4008CD84A /* gvimrc in Copy Vim Runtime Files */, + 1DE608B40C587FDA0055263D /* runtime in Copy Vim Runtime Files */, ); + name = "Copy Vim Runtime Files"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ @@ -215,17 +208,6 @@ 1D6008820E96886D003763F0 /* FindAndReplace.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = FindAndReplace.nib; sourceTree = ""; }; 1D6008890E96A0B2003763F0 /* MMFindReplaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMFindReplaceController.h; sourceTree = ""; }; 1D60088A0E96A0B2003763F0 /* MMFindReplaceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMFindReplaceController.m; sourceTree = ""; }; - 1D71ACA90BC702AB002F2B60 /* doc-bm-c.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-c.icns"; sourceTree = ""; }; - 1D71ACAA0BC702AB002F2B60 /* doc-bm-h.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-h.icns"; sourceTree = ""; }; - 1D71ACAB0BC702AB002F2B60 /* doc-bm-html.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-html.icns"; sourceTree = ""; }; - 1D71ACAC0BC702AB002F2B60 /* doc-bm-java.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-java.icns"; sourceTree = ""; }; - 1D71ACAD0BC702AB002F2B60 /* doc-bm-php.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-php.icns"; sourceTree = ""; }; - 1D71ACAE0BC702AB002F2B60 /* doc-bm-pl.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-pl.icns"; sourceTree = ""; }; - 1D71ACAF0BC702AB002F2B60 /* doc-bm-sh.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-sh.icns"; sourceTree = ""; }; - 1D71ACB00BC702AB002F2B60 /* doc-bm-tex.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-tex.icns"; sourceTree = ""; }; - 1D71ACB10BC702AB002F2B60 /* doc-bm-txt.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-txt.icns"; sourceTree = ""; }; - 1D71ACB20BC702AB002F2B60 /* doc-bm-xml.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm-xml.icns"; sourceTree = ""; }; - 1D71ACB30BC702AB002F2B60 /* doc-bm.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "doc-bm.icns"; sourceTree = ""; }; 1D7F74570E4CE1AE003225C6 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; 1D80591D0E1185EA001699D1 /* Miscellaneous.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Miscellaneous.m; sourceTree = ""; }; 1D8059220E118663001699D1 /* Miscellaneous.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Miscellaneous.h; sourceTree = ""; }; @@ -236,6 +218,7 @@ 1D80FBE30CBBD6F200102A1C /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 1D9918460D299F9900A96335 /* MMAtsuiTextView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MMAtsuiTextView.h; sourceTree = ""; }; 1D9918470D299F9900A96335 /* MMAtsuiTextView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MMAtsuiTextView.m; sourceTree = ""; }; + 1D9C602E0EF79C0C0034AD44 /* MacVim.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MacVim.icns; path = icons/MacVim.icns; sourceTree = ""; }; 1DCD00AA0E50B2B700460166 /* Attention.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Attention.png; path = Toolbar/Attention.png; sourceTree = ""; }; 1DCD00AB0E50B2B700460166 /* Copy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Copy.png; path = Toolbar/Copy.png; sourceTree = ""; }; 1DCD00AC0E50B2B700460166 /* Cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Cut.png; path = Toolbar/Cut.png; sourceTree = ""; }; @@ -262,7 +245,6 @@ 1DD3D51D0D82D4C9006E4320 /* ibeam.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ibeam.png; sourceTree = ""; }; 1DD66ECB0C803D3600EBDAB3 /* MMApplication.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MMApplication.h; sourceTree = ""; }; 1DD66ECC0C803D3600EBDAB3 /* MMApplication.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MMApplication.m; sourceTree = ""; }; - 1DD703B80BA9D15D008679E9 /* vim_gloss.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = vim_gloss.icns; sourceTree = ""; }; 1DD704300BA9F9C2008679E9 /* SpecialKeys.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SpecialKeys.plist; sourceTree = ""; }; 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SystemColors.plist; sourceTree = ""; }; 1DE3F8E60D50F80500052B9E /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = ""; }; @@ -442,27 +424,6 @@ name = Products; sourceTree = ""; }; - 1DCE78490C460C6C006305A6 /* Icons */ = { - isa = PBXGroup; - children = ( - 1D71ACA90BC702AB002F2B60 /* doc-bm-c.icns */, - 1D71ACAA0BC702AB002F2B60 /* doc-bm-h.icns */, - 1D71ACAB0BC702AB002F2B60 /* doc-bm-html.icns */, - 1D71ACAC0BC702AB002F2B60 /* doc-bm-java.icns */, - 1D71ACAD0BC702AB002F2B60 /* doc-bm-php.icns */, - 1D71ACAE0BC702AB002F2B60 /* doc-bm-pl.icns */, - 1D71ACAF0BC702AB002F2B60 /* doc-bm-sh.icns */, - 1D71ACB00BC702AB002F2B60 /* doc-bm-tex.icns */, - 1D71ACB10BC702AB002F2B60 /* doc-bm-txt.icns */, - 1D71ACB20BC702AB002F2B60 /* doc-bm-xml.icns */, - 1D71ACB30BC702AB002F2B60 /* doc-bm.icns */, - 0395A8A90D72D88B00881434 /* General.png */, - 0395A9590D74D47B00881434 /* Integration.png */, - 1DD703B80BA9D15D008679E9 /* vim_gloss.icns */, - ); - name = Icons; - sourceTree = ""; - }; 1DE602460C587F760055263D /* Vim Resources */ = { isa = PBXGroup; children = ( @@ -517,12 +478,14 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 1D9C602E0EF79C0C0034AD44 /* MacVim.icns */, 1D6008820E96886D003763F0 /* FindAndReplace.nib */, + 0395A8A90D72D88B00881434 /* General.png */, + 0395A9590D74D47B00881434 /* Integration.png */, 1D22374A0E45DF4800E6FFFF /* Advanced.png */, BD9DF09F0DB2BA020025C97C /* PlugInView.nib */, 1DD3D51D0D82D4C9006E4320 /* ibeam.png */, 1D0F11480D58C77800D5DA09 /* Font */, - 1DCE78490C460C6C006305A6 /* Icons */, 1DE9726C0C48050600F96A9F /* Toolbar */, 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */, 1DE8CC610C5E2AAD003F56E3 /* Actions.plist */, @@ -560,10 +523,11 @@ 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, - 1D0DCAD80BA3604D00B6CCFA /* CopyFiles */, - 1D9EB2840C366D7B0074B739 /* CopyFiles */, - 1DE608B80C58807F0055263D /* CopyFiles */, - 0395AA790D76E77800881434 /* CopyFiles */, + 1D0DCAD80BA3604D00B6CCFA /* Copy Executables */, + 1D9EB2840C366D7B0074B739 /* Copy Frameworks */, + 1DE608B80C58807F0055263D /* Copy Vim Runtime Files */, + 0395AA790D76E77800881434 /* Copy ODBEditor */, + 1D1C31F00EFFBFD6003FE9A5 /* Make Document Icons */, ); buildRules = ( ); @@ -629,19 +593,7 @@ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 1D0E051C0BA5F83800B6049E /* Colors.plist in Resources */, - 1DD703B90BA9D15D008679E9 /* vim_gloss.icns in Resources */, 1DD704310BA9F9C2008679E9 /* SpecialKeys.plist in Resources */, - 1D71ACB40BC702AB002F2B60 /* doc-bm-c.icns in Resources */, - 1D71ACB50BC702AC002F2B60 /* doc-bm-h.icns in Resources */, - 1D71ACB60BC702AC002F2B60 /* doc-bm-html.icns in Resources */, - 1D71ACB70BC702AC002F2B60 /* doc-bm-java.icns in Resources */, - 1D71ACB80BC702AC002F2B60 /* doc-bm-php.icns in Resources */, - 1D71ACB90BC702AC002F2B60 /* doc-bm-pl.icns in Resources */, - 1D71ACBA0BC702AC002F2B60 /* doc-bm-sh.icns in Resources */, - 1D71ACBB0BC702AC002F2B60 /* doc-bm-tex.icns in Resources */, - 1D71ACBC0BC702AC002F2B60 /* doc-bm-txt.icns in Resources */, - 1D71ACBD0BC702AC002F2B60 /* doc-bm-xml.icns in Resources */, - 1D71ACBE0BC702AC002F2B60 /* doc-bm.icns in Resources */, 1DD04DEC0C529C5E006CDC2B /* Credits.rtf in Resources */, 1DE8CC620C5E2AAD003F56E3 /* Actions.plist in Resources */, 1DD9F5E50C85D60500E8D5A5 /* SystemColors.plist in Resources */, @@ -677,11 +629,30 @@ 1DCD00D20E50B2B700460166 /* TagJump.png in Resources */, 1DCD00D30E50B2B700460166 /* Undo.png in Resources */, 1D6008830E96886D003763F0 /* FindAndReplace.nib in Resources */, + 1D9C60520EF79C0C0034AD44 /* MacVim.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 1D1C31F00EFFBFD6003FE9A5 /* Make Document Icons */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Make Document Icons"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Clear deployment target, else the python script always thinks we're building on Tiger\nunset MACOSX_DEPLOYMENT_TARGET\n\n# Generate the icons (redirect stderr to ignore warnings)\ncd $PROJECT_DIR/icons/\nmake OUTDIR=$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH 2> /dev/null\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; diff --git a/src/MacVim/doc-bm-c.icns b/src/MacVim/doc-bm-c.icns deleted file mode 100644 index 335f8bfa3f7420f5f89618c8b108a7728a5d1873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39682 zcmeI52S60p+Wu!NEQlxyih`OL>@kVv#)jsmc-5#$?ibTE-WXGj#uSa%nb|@IL7D|r zY)BEj3RDx_TVhIu61V*cXpW*C9EGH2{X;qzvSauwNG0WkQ{0*fvhrk#Wb#Mr8 zr&d*#5*WR)0d#PTR$EhD39(Hrq*P-=eO)zV(b9%ttyoKQb5mm-l-owMGF!-_hBMgc zs%F@uYKA?kW@y-1HC0qKLqo_|RyFt$H-wrRqN=Hu!y&vGGc-h1Q$6zzjG~O`HFuD&7fmx^z+;%c^br0IpM#Fq zbRBnu&h2^J;XS>_`Hqf-y^c5ZI{vWd@ry0Jjz5Ou7u^MR^mifN^MNQ!h{CeiJ&H;q`-Chi2AcJ5 zu)pB;&8yCy4}+m7ZwRu=C33KAA`9ybBc9Jj8786rNJw}R8y$K7ZlJ{5&Bf___@g@z z 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 Kly0|u-~Rz``Z@0a diff --git a/src/MacVim/doc-bm-html.icns b/src/MacVim/doc-bm-html.icns deleted file mode 100644 index 4b15485ad0e5f3b4a40b6b1fc7ac751a5bf796e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40619 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 diff --git a/src/MacVim/doc-bm-pl.icns b/src/MacVim/doc-bm-pl.icns deleted file mode 100644 index 5d09ccca6b0f2114b89bad07586bef29590b7083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39845 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 diff --git a/src/MacVim/doc-bm-txt.icns b/src/MacVim/doc-bm-txt.icns deleted file mode 100644 index 2219e2ce99a31bcd9c4c7b9e0b3c8bd3033b6d36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40106 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%0A4b?85|D zmAdT1Q~NXA=Rih%2-~o(+%}9R4`mx>SR)M(83Cp3Zx>eWrnE1B&J^ZYY{E)%n=lBe zfY1mytlS*(G~m$8?CxVkyqjA!Cb-Ez^jNWcpVKXE9wd!33;`hj*#{^ zyMmPvZ4Gt>n{9sUgR#1T4`A}TmWGrJFnNVuP#U8vcqZivhE`8M2jumXHZ;G}6+9a9 zx{$e!as|T|n6AO(^%wZz^)Zmwg-j*N6}%c+x}S0d!w+M11vAlf$`y=TO}T>MJ2J=O z3Wl%O#I9fiW%vQRf)B$F1G<7qa2XHp3PxP4J<}2n3o;r{#m{ehM;FT|jRGHrG3GU{uU@xxj&s{b9ao6}&rf9N)R^X`v zS%KkI+Q>b?(+2ba3y|ix*ngSoDynGg_TNP-HGA5BWq_4mN2~4fMi1iutp@+^)Wtph zzlspntktX@{$C@&x;_2Bu*HFkb(H?!{}f@x#$RJ7oZrj%dlF;K;k>^m;TZ#ae|Z2_ z`S4fJ3YPRPunKxDlp&ObzpEI$(2Yv?>zLuoN&v3*1*`ul`>*0ubrkkrV*t_r?e^cH zs45+(>VK{Mmq%HK6}A744yumW{o5O=K704?e(KAx{|=jR?;DNIWOG#2CuwL*9{Ei} zLt~P_|+@ony09i2I|XJ}1PS5acp$5H^iP*t9! z)${AKNBnb3sbs^*#Kfhw@z%$6NPyx>(zaj-Zll%%4@NDu^+wq7F zrOzn;hzodD`JsRj9m$?q{*IOr74YoxcQk#DdtjIsr_V5dN7KgHQ#h=l3wW0KJE|7V z)KF#)`QrGQ=I^-ug0|YwBk*kVH@!PolQU!oJlp&o7Z*(*x&xkZ{g>NT|HhZ+Ou`>X8tnG0+rQ~m9gU$@ zfM=cmy%m3L{>>}r{-y2T^4I5|tTeR|6e=*Ci;J(|NqMM zcVhlc%)g2GH~0&HXMO&exc(-tzlrN_;`;lmUjI+5KNIWE#QHO_{!FYt1NXqh`44~o zYaBlRG|*?F;IWDQXJY@E*ncMWpMh6j@WWG|Kb=^A23bDG{P4v3JF)&wtiKcM@5K5$ za1TuEKNIKwiPt}4_WuleP8r$fKmOAE&8 z^c@>snhl?S8+`wT??ef>(*sy8ymMvSy>$YXf z=1m*kczyYNE%l*ofinNGj_%TzUR^o9w^v_Us;i?l2|j>5#Pq|jKu6)f9)VGNuFmY4 z+M4Rh!+Zc87cdI{`S4D4Y*1I_ut(qyr_mTp7Msmh8s8fzvPR~Pr{NoY{BM+QzjNRJ E0WqikivR!s diff --git a/src/MacVim/doc-bm.icns b/src/MacVim/doc-bm.icns deleted file mode 100644 index 984d11d0473483bec2d9f13d06296b21e82e8714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42287 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 pgHVUlXz 1: + os.chdir(sys.argv[1]) + appIcon = os.path.join(srcdir, APPICON) + makeIcns = os.path.join(srcdir, MAKEICNS) + + if dont_create: + print "PyObjC not found, only using a stock icon for document icons." + import shutil + shutil.copyfile(BACKGROUND, '%s.icns' % GENERIC_ICON_NAME) + for name in vimIcons: + if name == GENERIC_ICON_NAME: continue + icnsName = '%s.icns' % name + if os.access(icnsName, os.F_OK): + os.remove(icnsName) + os.symlink('%s.icns' % GENERIC_ICON_NAME, icnsName) + return + + # Make us not crash + # http://www.cocoabuilder.com/archive/message/cocoa/2008/8/6/214964 + NSApplicationLoad() + + #createIcon('test.png', + #NSString.stringWithString_(u'PDF'), iconname='preview.icns') + + if not os.access(makeIcns, os.X_OK): + print 'Cannot find makeicns at', makeIcns + return + + # create LARGE and SMALL icons first... + for name, t in vimIcons.iteritems(): + text, size = t + if size == LINK: continue + print name + icnsName = '%s.icns' % name + + createIcon(TMPFILE, NSString.stringWithString_(text), appIcon) + if size == LARGE: + os.system('%s -512 %s -128 %s -32 %s -16 %s -out %s' % (makeIcns, + TMPFILE, TMPFILE, TMPFILE, TMPFILE, icnsName)) + elif size == SMALL: + os.system('%s -128 %s -32 %s -16 %s -out %s' % (makeIcns, + TMPFILE, TMPFILE, TMPFILE, icnsName)) + + # ...create links later (to make sure the link targets exist) + for name, t in vimIcons.iteritems(): + text, size = t + if size != LINK: continue + print name + icnsName = '%s.icns' % name + + # remove old version of icns + if os.access(icnsName, os.F_OK): + os.remove(icnsName) + os.symlink('%s.icns' % GENERIC_ICON_NAME, icnsName) + + +if __name__ == '__main__': + try: + main() + finally: + if os.access(TMPFILE, os.F_OK): + os.remove(TMPFILE) diff --git a/src/MacVim/icons/makeicns/IconFamily.h b/src/MacVim/icons/makeicns/IconFamily.h new file mode 100644 index 0000000000..bebbb92d0e --- /dev/null +++ b/src/MacVim/icons/makeicns/IconFamily.h @@ -0,0 +1,186 @@ +// IconFamily.h +// IconFamily class interface +// by Troy Stephens, Thomas Schnitzer, David Remahl, Nathan Day, Ben Haller, Sven Janssen, Peter Hosey, Conor Dearden, Elliot Glaysher, and Dave MacLachlan +// version 0.9.3 +// +// Project Home Page: +// http://iconfamily.sourceforge.net/ +// +// Problems, shortcomings, and uncertainties that I'm aware of are flagged with "NOTE:". Please address bug reports, bug fixes, suggestions, etc. to the project Forums and bug tracker at https://sourceforge.net/projects/iconfamily/ + +/* + Copyright (c) 2001-2006 Troy N. Stephens + Portions Copyright (c) 2007 Google Inc. + + Use and distribution of this source code is governed by the MIT License, whose terms are as follows. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#import +#import + +// This class is a Cocoa/Objective-C wrapper for the Mac OS X Carbon API's +// "icon family" data type. Its main purpose is to enable Cocoa applications +// to easily create custom file icons from NSImage instances, and thus take +// advantage of Mac OS X's new larger RGBA "thumbnail" icon format to provide +// richly detailed thumbnail previews of the files' contents. +// +// Using IconFamily, this becomes as simple as: +// +// id iconFamily = [IconFamily iconFamilyWithThumbnailsOfImage:anImage]; +// [iconFamily setAsCustomIconForFile:anExistingFile]; +// +// You can also write an icon family to an .icns file using the -writeToFile: +// method. + +@interface IconFamily : NSObject +{ + IconFamilyHandle hIconFamily; +} + +// Convenience methods. These use the corresponding -init... methods to return +// an autoreleased IconFamily instance. + ++ (IconFamily*) iconFamily; ++ (IconFamily*) iconFamilyWithContentsOfFile:(NSString*)path; ++ (IconFamily*) iconFamilyWithIconOfFile:(NSString*)path; ++ (IconFamily*) iconFamilyWithIconFamilyHandle:(IconFamilyHandle)hNewIconFamily; ++ (IconFamily*) iconFamilyWithSystemIcon:(int)fourByteCode; ++ (IconFamily*) iconFamilyWithThumbnailsOfImage:(NSImage*)image; ++ (IconFamily*) iconFamilyWithThumbnailsOfImage:(NSImage*)image usingImageInterpolation:(NSImageInterpolation)imageInterpolation; + +// Initializes as a new, empty IconFamily. This is IconFamily's designated +// initializer method. + +- init; + +// Initializes an IconFamily by loading the contents of an .icns file. + +- initWithContentsOfFile:(NSString*)path; + +// Initializes an IconFamily from an existing Carbon IconFamilyHandle. + +- initWithIconFamilyHandle:(IconFamilyHandle)hNewIconFamily; + +// Initializes an IconFamily by loading the Finder icon that's assigned to a +// file. + +- initWithIconOfFile:(NSString*)path; + +// Initializes an IconFamily by referencing a standard system icon. + +- initWithSystemIcon:(int)fourByteCode; + +// Initializes an IconFamily by creating its elements from a resampled +// NSImage. The second form of this method allows you to specify the degree +// of antialiasing to be used in resampling the image, by passing in one of +// the NSImageInterpolation... constants that are defined in +// NSGraphicsContext.h. The first form of this initializer simply calls the +// second form with imageInterpolation set to NSImageInterpolationHigh, which +// produces highly smoothed thumbnails. + +- initWithThumbnailsOfImage:(NSImage*)image; +- initWithThumbnailsOfImage:(NSImage*)image usingImageInterpolation:(NSImageInterpolation)imageInterpolation; + +// Writes the icon family to an .icns file. + +- (BOOL) writeToFile:(NSString*)path; + +// Sets the image data for one of the icon family's elements from an +// NSBitmapImageRep. The "elementType" parameter must be one of the icon +// family element types listed below, and the format of the "bitmapImageRep" +// must match the corresponding requirements specified below. Regardless of +// the elementType, the bitmapImageRep must also be non-planar and have 8 bits +// per sample. +// +// elementType dimensions format +// ------------------- ---------- --------------------------------------- +// kIconServices512PixelDataARGB 512 x 512 32-bit RGBA, 32-bit RGB, or 24-bit RGB +// kIconServices256PixelDataARGB 256 x 256 32-bit RGBA, 32-bit RGB, or 24-bit RGB +// kThumbnail32BitData 128 x 128 32-bit RGBA, 32-bit RGB, or 24-bit RGB +// kThumbnail8BitMask 128 x 128 32-bit RGBA or 8-bit intensity +// kLarge32BitData 32 x 32 32-bit RGBA, 32-bit RGB, or 24-bit RGB +// kLarge8BitMask 32 x 32 32-bit RGBA or 8-bit intensity +// kLarge1BitMask 32 x 32 32-bit RGBA, 8-bit intensity, or 1-bit +// kSmall32BitData 16 x 16 32-bit RGBA, 32-bit RGB, or 24-bit RGB +// kSmall8BitMask 16 x 16 32-bit RGBA or 8-bit intensity +// kSmall1BitMask 16 x 16 32-bit RGBA, 8-bit intensity, or 1-bit +// +// When an RGBA image is supplied to set a "Mask" element, the mask data is +// taken from the image's alpha channel. +// +// NOTE: Setting an IconFamily's kLarge1BitMask seems to damage the IconFamily +// for some as yet unknown reason. (If you then assign the icon family +// as a file's custom icon using -setAsCustomIconForFile:, the custom +// icon doesn't appear for the file in the Finder.) However, both +// custom icon display and mouse-click hit-testing in the Finder seem to +// work fine when we only set the other four elements (thus keeping the +// existing kLarge1BitMask from the valid icon family from which we +// initialized the IconFamily via -initWithContentsOfFile:, since +// IconFamily's -init method is currently broken...), so it seems safe +// to just leave the kLarge1BitMask alone. + +- (BOOL) setIconFamilyElement:(OSType)elementType + fromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep; + +// Gets the image data for one of the icon family's elements as a new, 32-bit +// RGBA NSBitmapImageRep. The specified elementType should be one of +// kIconServices512PixelDataARGB, kIconServices256PixelDataARGB, +// kThumbnail32BitData, kLarge32BitData, or kSmall32BitData. +// +// The returned NSBitmapImageRep will have the corresponding 8-bit mask data +// in its alpha channel, or a fully opaque alpha channel if the icon family +// has no 8-bit mask data for the specified alpha channel. +// +// Returns nil if the requested element cannot be retrieved (e.g. if the +// icon family has no such 32BitData element). + +- (NSBitmapImageRep*) bitmapImageRepWithAlphaForIconFamilyElement:(OSType)elementType; + +// Creates and returns an NSImage that contains the icon family's various +// elements as its NSImageReps. + +- (NSImage*) imageWithAllReps; + +// NOTE: Planned method -- not yet implemented. +// +// Gets the image data for one of the icon family's elements as a new +// NSBitmapImageRep. The specified elementType should be one of +// kThumbnail32BitData, kThumbnail8BitMask, kLarge32BitData, kLarge8BitMask, +// kLarge1BitMask, kSmall32BitData, kSmall8BitMask, or kSmall1BitMask. + +// - (NSBitmapImageRep*) bitmapImageRepForIconFamilyElement:(OSType)elementType; + +// Writes the icon family to the resource fork of the specified file as its +// kCustomIconResource, and sets the necessary Finder bits so the icon will +// be displayed for the file in Finder views. + +- (BOOL) setAsCustomIconForFile:(NSString*)path; +- (BOOL) setAsCustomIconForFile:(NSString*)path withCompatibility:(BOOL)compat; + +// Same as the -setAsCustomIconForFile:... methods, but for folders (directories). + +- (BOOL) setAsCustomIconForDirectory:(NSString*)path; +- (BOOL) setAsCustomIconForDirectory:(NSString*)path withCompatibility:(BOOL)compat; + +// Removes the custom icon (if any) from the specified file's resource fork, +// and clears the necessary Finder bits for the file. (Note that this is a +// class method, so you don't need an instance of IconFamily to invoke it.) + ++ (BOOL) removeCustomIconFromFile:(NSString*)path; + +@end + +// Methods for interfacing with the Carbon Scrap Manager (analogous to and +// interoperable with the Cocoa Pasteboard). +@interface IconFamily (ScrapAdditions) ++ (BOOL) canInitWithScrap; ++ (IconFamily*) iconFamilyWithScrap; +- initWithScrap; +- (BOOL) putOnScrap; +@end diff --git a/src/MacVim/icons/makeicns/IconFamily.m b/src/MacVim/icons/makeicns/IconFamily.m new file mode 100644 index 0000000000..0a941272d5 --- /dev/null +++ b/src/MacVim/icons/makeicns/IconFamily.m @@ -0,0 +1,1576 @@ +// IconFamily.m +// IconFamily class implementation +// by Troy Stephens, Thomas Schnitzer, David Remahl, Nathan Day, Ben Haller, Sven Janssen, Peter Hosey, Conor Dearden, Elliot Glaysher, and Dave MacLachlan +// version 0.9.3 +// +// Project Home Page: +// http://iconfamily.sourceforge.net/ +// +// Problems, shortcomings, and uncertainties that I'm aware of are flagged with "NOTE:". Please address bug reports, bug fixes, suggestions, etc. to the project Forums and bug tracker at https://sourceforge.net/projects/iconfamily/ + +/* + Copyright (c) 2001-2006 Troy N. Stephens + Portions Copyright (c) 2007 Google Inc. + + Use and distribution of this source code is governed by the MIT License, whose terms are as follows. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#import "IconFamily.h" +#import "NSString+CarbonFSRefCreation.h" + +#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 +// This is defined in 10.5 and beyond in IconStorage.h +enum { + kIconServices512PixelDataARGB = 'ic09' /* non-premultiplied 512x512 ARGB bitmap*/ +}; +#endif + +#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3 +// This is defined in 10.4 and beyond in IconStorage.h +enum { + kIconServices256PixelDataARGB = 'ic08' /* non-premultiplied 256x256 ARGB bitmap*/ +}; +#endif + + +@interface IconFamily (Internals) + ++ (NSImage*) resampleImage:(NSImage*)image toIconWidth:(int)width usingImageInterpolation:(NSImageInterpolation)imageInterpolation; + ++ (Handle) get32BitDataFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize; + ++ (Handle) get8BitDataFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize; + ++ (Handle) get8BitMaskFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize; + ++ (Handle) get1BitMaskFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize; + +- (BOOL) addResourceType:(OSType)type asResID:(int)resID; + +@end + +@implementation IconFamily + ++ (IconFamily*) iconFamily +{ + return [[[IconFamily alloc] init] autorelease]; +} + ++ (IconFamily*) iconFamilyWithContentsOfFile:(NSString*)path +{ + return [[[IconFamily alloc] initWithContentsOfFile:path] autorelease]; +} + ++ (IconFamily*) iconFamilyWithIconOfFile:(NSString*)path +{ + return [[[IconFamily alloc] initWithIconOfFile:path] autorelease]; +} + ++ (IconFamily*) iconFamilyWithIconFamilyHandle:(IconFamilyHandle)hNewIconFamily +{ + return [[[IconFamily alloc] initWithIconFamilyHandle:hNewIconFamily] autorelease]; +} + ++ (IconFamily*) iconFamilyWithSystemIcon:(int)fourByteCode +{ + return [[[IconFamily alloc] initWithSystemIcon:fourByteCode] autorelease]; +} + ++ (IconFamily*) iconFamilyWithThumbnailsOfImage:(NSImage*)image +{ + return [[[IconFamily alloc] initWithThumbnailsOfImage:image] autorelease]; +} + ++ (IconFamily*) iconFamilyWithThumbnailsOfImage:(NSImage*)image usingImageInterpolation:(NSImageInterpolation)imageInterpolation +{ + return [[[IconFamily alloc] initWithThumbnailsOfImage:image usingImageInterpolation:imageInterpolation] autorelease]; +} + +// This is IconFamily's designated initializer. It creates a new IconFamily that initially has no elements. +// +// The proper way to do this is to simply allocate a zero-sized handle (not to be confused with an empty handle) and assign it to hIconFamily. This technique works on Mac OS X 10.2 as well as on 10.0.x and 10.1.x. Our previous technique of allocating an IconFamily struct with a resourceSize of 0 no longer works as of Mac OS X 10.2. +- init +{ + self = [super init]; + if (self) { + hIconFamily = (IconFamilyHandle) NewHandle( 0 ); + if (hIconFamily == NULL) { + [self autorelease]; + return nil; + } + } + return self; +} + +- initWithContentsOfFile:(NSString*)path +{ + FSRef ref; + OSStatus result; + + self = [self init]; + if (self) { + if (hIconFamily) { + DisposeHandle( (Handle)hIconFamily ); + hIconFamily = NULL; + } + if (![path getFSRef:&ref createFileIfNecessary:NO]) { + [self autorelease]; + return nil; + } + result = ReadIconFromFSRef( &ref, &hIconFamily ); + if (result != noErr) { + [self autorelease]; + return nil; + } + } + return self; +} + +- initWithIconFamilyHandle:(IconFamilyHandle)hNewIconFamily +{ + self = [self init]; + if (self) { + if (hIconFamily) { + DisposeHandle( (Handle)hIconFamily ); + hIconFamily = NULL; + } + hIconFamily = hNewIconFamily; + } + return self; +} + +- initWithIconOfFile:(NSString*)path +{ + IconRef iconRef; + OSStatus result; + SInt16 label; + FSRef ref; + + self = [self init]; + if (self) + { + if (hIconFamily) + { + DisposeHandle( (Handle)hIconFamily ); + hIconFamily = NULL; + } + + if( ![path getFSRef:&ref createFileIfNecessary:NO] ) + { + [self autorelease]; + return nil; + } + + result = GetIconRefFromFileInfo( + &ref, + /*inFileNameLength*/ 0, + /*inFileName*/ NULL, + kFSCatInfoNone, + /*inCatalogInfo*/ NULL, + kIconServicesNormalUsageFlag, + &iconRef, + &label ); + + if (result != noErr) + { + [self autorelease]; + return nil; + } + + result = IconRefToIconFamily( + iconRef, + kSelectorAllAvailableData, + &hIconFamily ); + + ReleaseIconRef( iconRef ); + + if (result != noErr || !hIconFamily) + { + [self autorelease]; + return nil; + } + } + return self; +} + +- initWithSystemIcon:(int)fourByteCode +{ + IconRef iconRef; + OSErr result; + + self = [self init]; + if (self) + { + if (hIconFamily) + { + DisposeHandle( (Handle)hIconFamily ); + hIconFamily = NULL; + } + + result = GetIconRef(kOnSystemDisk, kSystemIconsCreator, fourByteCode, &iconRef); + + if (result != noErr) + { + [self autorelease]; + return nil; + } + + result = IconRefToIconFamily( + iconRef, + kSelectorAllAvailableData, + &hIconFamily ); + + if (result != noErr || !hIconFamily) + { + [self autorelease]; + return nil; + } + + ReleaseIconRef( iconRef ); + } + return self; +} + +- initWithThumbnailsOfImage:(NSImage*)image +{ + // The default is to use a high degree of antialiasing, producing a smooth image. + return [self initWithThumbnailsOfImage:image usingImageInterpolation:NSImageInterpolationHigh]; +} + +- initWithThumbnailsOfImage:(NSImage*)image usingImageInterpolation:(NSImageInterpolation)imageInterpolation +{ + NSImage* iconImage512x512; + NSImage* iconImage256x256; + NSImage* iconImage128x128; + NSImage* iconImage32x32; + NSImage* iconImage16x16; + NSImage* bitmappedIconImage512x512; + NSBitmapImageRep* iconBitmap512x512; + NSBitmapImageRep* iconBitmap256x256; + NSBitmapImageRep* iconBitmap128x128; + NSBitmapImageRep* iconBitmap32x32; + NSBitmapImageRep* iconBitmap16x16; + + // Start with a new, empty IconFamily. + self = [self init]; + if (self == nil) + return nil; + + // Resample the given image to create a 512x512 pixel, 32-bit RGBA + // version, and use that as our "thumbnail" (512x512) icon and mask. + // + // Our +resampleImage:toIconWidth:... method, in its present form, + // returns an NSImage that contains an NSCacheImageRep, rather than + // an NSBitmapImageRep. We convert to an NSBitmapImageRep, so that + // our methods can scan the image data, using initWithFocusedViewRect:. + iconImage512x512 = [IconFamily resampleImage:image toIconWidth:512 usingImageInterpolation:imageInterpolation]; + if (!iconImage512x512) { + [self autorelease]; + return nil; + } + + [iconImage512x512 lockFocus]; + iconBitmap512x512 = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, 512, 512)]; + [iconImage512x512 unlockFocus]; + if (!iconBitmap512x512) { + [self release]; + return nil; + } + // Create an NSImage with the iconBitmap512x512 NSBitmapImageRep, that we + // can resample to create the smaller icon family elements. (This is + // most likely more efficient than resampling from the original image again, + // particularly if it is large. It produces a slightly different result, but + // the difference is minor and should not be objectionable...) + + bitmappedIconImage512x512 = [[NSImage alloc] initWithSize:NSMakeSize(512, 512)]; + [bitmappedIconImage512x512 addRepresentation:iconBitmap512x512]; + + if (!bitmappedIconImage512x512) { + [self autorelease]; + return nil; + } + + [self setIconFamilyElement:kIconServices512PixelDataARGB fromBitmapImageRep:iconBitmap512x512]; + [iconBitmap512x512 release]; + + iconImage256x256 = [IconFamily resampleImage:bitmappedIconImage512x512 toIconWidth:256 usingImageInterpolation:imageInterpolation]; + if (iconImage256x256) { + [iconImage256x256 lockFocus]; + iconBitmap256x256 = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, 256, 256)]; + [iconImage256x256 unlockFocus]; + if (iconBitmap256x256) { + [self setIconFamilyElement:kIconServices256PixelDataARGB fromBitmapImageRep:iconBitmap256x256]; + [iconBitmap256x256 release]; + } + } + + iconImage128x128 = [IconFamily resampleImage:bitmappedIconImage512x512 toIconWidth:128 usingImageInterpolation:imageInterpolation]; + if (iconImage128x128) { + [iconImage128x128 lockFocus]; + iconBitmap128x128 = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, 128, 128)]; + [iconImage128x128 unlockFocus]; + + if (iconBitmap128x128) { + [self setIconFamilyElement:kThumbnail32BitData fromBitmapImageRep:iconBitmap128x128]; + [self setIconFamilyElement:kThumbnail8BitMask fromBitmapImageRep:iconBitmap128x128]; + [iconBitmap128x128 release]; + } + } + + // Resample the 512x512 image to create a 32x32 pixel, 32-bit RGBA version, + // and use that as our "large" (32x32) icon and 8-bit mask. + iconImage32x32 = [IconFamily resampleImage:bitmappedIconImage512x512 toIconWidth:32 usingImageInterpolation:imageInterpolation]; + if (iconImage32x32) { + [iconImage32x32 lockFocus]; + iconBitmap32x32 = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, 32, 32)]; + [iconImage32x32 unlockFocus]; + if (iconBitmap32x32) { + [self setIconFamilyElement:kLarge32BitData fromBitmapImageRep:iconBitmap32x32]; + [self setIconFamilyElement:kLarge8BitData fromBitmapImageRep:iconBitmap32x32]; + [self setIconFamilyElement:kLarge8BitMask fromBitmapImageRep:iconBitmap32x32]; + [self setIconFamilyElement:kLarge1BitMask fromBitmapImageRep:iconBitmap32x32]; + [iconBitmap32x32 release]; + } + } + + // Resample the 512x512 image to create a 16x16 pixel, 32-bit RGBA version, + // and use that as our "small" (16x16) icon and 8-bit mask. + iconImage16x16 = [IconFamily resampleImage:bitmappedIconImage512x512 toIconWidth:16 usingImageInterpolation:imageInterpolation]; + if (iconImage16x16) { + [iconImage16x16 lockFocus]; + iconBitmap16x16 = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, 16, 16)]; + [iconImage16x16 unlockFocus]; + if (iconBitmap16x16) { + [self setIconFamilyElement:kSmall32BitData fromBitmapImageRep:iconBitmap16x16]; + [self setIconFamilyElement:kSmall8BitData fromBitmapImageRep:iconBitmap16x16]; + [self setIconFamilyElement:kSmall8BitMask fromBitmapImageRep:iconBitmap16x16]; + [self setIconFamilyElement:kSmall1BitMask fromBitmapImageRep:iconBitmap16x16]; + [iconBitmap16x16 release]; + } + } + + // Release the icon. + [bitmappedIconImage512x512 release]; + + // Return the new icon family! + return self; +} + +- (void) dealloc +{ + DisposeHandle( (Handle)hIconFamily ); + [super dealloc]; +} + +- (NSBitmapImageRep*) bitmapImageRepWithAlphaForIconFamilyElement:(OSType)elementType; +{ + NSBitmapImageRep* bitmapImageRep; + int pixelsWide; + Handle hRawBitmapData; + Handle hRawMaskData; + OSType maskElementType; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + NSBitmapFormat bitmapFormat = NSAlphaFirstBitmapFormat; +#endif + OSErr result; + unsigned long* pRawBitmapData; + unsigned long* pRawBitmapDataEnd; + unsigned char* pRawMaskData; + unsigned char* pBitmapImageRepBitmapData; + + // Make sure elementType is a valid type that we know how to handle, and + // figure out the dimensions and bit depth of the bitmap for that type. + switch (elementType) { +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + // 'ic09' 512x512 32-bit RGB image + case kIconServices512PixelDataARGB: + maskElementType = 0; + pixelsWide = 512; + break; +#endif + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + // 'ic08' 256x256 32-bit ARGB image + case kIconServices256PixelDataARGB: + maskElementType = 0; + pixelsWide = 256; + break; +#endif + + // 'it32' 128x128 32-bit RGB image + case kThumbnail32BitData: + maskElementType = kThumbnail8BitMask; + pixelsWide = 128; + break; + + // 'ih32' 48x48 32-bit RGB image + case kHuge32BitData: + maskElementType = kHuge8BitMask; + pixelsWide = 48; + break; + + // 'il32' 32x32 32-bit RGB image + case kLarge32BitData: + maskElementType = kLarge8BitMask; + pixelsWide = 32; + break; + + // 'is32' 16x16 32-bit RGB image + case kSmall32BitData: + maskElementType = kSmall8BitMask; + pixelsWide = 16; + break; + + default: + return nil; + } + + // Get the raw, uncompressed bitmap data for the requested element. + hRawBitmapData = NewHandle( pixelsWide * pixelsWide * 4 ); + result = GetIconFamilyData( hIconFamily, elementType, hRawBitmapData ); + if (result != noErr) { + DisposeHandle( hRawBitmapData ); + return nil; + } + + if (maskElementType) { + // Get the corresponding raw, uncompressed 8-bit mask data. + hRawMaskData = NewHandle( pixelsWide * pixelsWide ); + result = GetIconFamilyData( hIconFamily, maskElementType, hRawMaskData ); + if (result != noErr) { + DisposeHandle( hRawMaskData ); + hRawMaskData = NULL; + } + } + + // The retrieved raw bitmap data is stored in memory as 32 bit per pixel, 8 bit per sample xRGB data. (The sample order provided by IconServices is the same, regardless of whether we're running on a big-endian (PPC) or little-endian (Intel) architecture.) +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + // With proper attention to byte order, we can fold the mask data into the color data in-place, producing ARGB data suitable for handing off to NSBitmapImageRep. +#else + // With proper attention to byte order, we can fold the mask data into the color data in-place, producing RGBA data suitable for handing off to NSBitmapImageRep. +#endif +// HLock( hRawBitmapData ); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + pRawBitmapData = (unsigned long*) *hRawBitmapData; + pRawBitmapDataEnd = pRawBitmapData + pixelsWide * pixelsWide; + if (hRawMaskData) { +// HLock( hRawMaskData ); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + pRawMaskData = (unsigned char*) *hRawMaskData; + while (pRawBitmapData < pRawBitmapDataEnd) { +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + // Convert the xRGB pixel data to ARGB. + // PowerPC Intel + // ------- ----- + // Bytes in memory are x R G B x R G B + // *pRawBitmapData loads as 32-bit word into register xRGB BGRx + // NSSwapHostLongToBig() swaps this to xRGB xRGB + // Loading *pRawMaskData and shifting left 24 bits yields A000 A000 + // Bitwise ORing these two words together yields ARGB ARGB + // NSSwapBigLongToHost() swaps this to ARGB BGRA + // Bytes in memory after they're stored as a 32-bit word A R G B A R G B + *pRawBitmapData = NSSwapBigLongToHost((*pRawMaskData++ << 24) | NSSwapHostLongToBig(*pRawBitmapData)); +#else + // Convert the xRGB pixel data to RGBA. + // PowerPC Intel + // ------- ----- + // Bytes in memory are x R G B x R G B + // *pRawBitmapData loads as 32-bit word into register xRGB BGRx + // NSSwapHostLongToBig() swaps this to xRGB xRGB + // Shifting left 8 bits yields ('0' denotes all zero bits) RGB0 RGB0 + // Bitwise ORing with *pRawMaskData byte yields RGBA RGBA + // NSSwapBigLongToHost() swaps this to RGBA ABGR + // Bytes in memory after they're stored as a 32-bit word R G B A R G B A + *pRawBitmapData = NSSwapBigLongToHost((NSSwapHostLongToBig(*pRawBitmapData) << 8) | *pRawMaskData++); +#endif + ++pRawBitmapData; + } +// HUnlock( hRawMaskData ); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + } else { + if(maskElementType) { + // We SHOULD have a mask, but apparently not. Fake it with alpha=1. + while (pRawBitmapData < pRawBitmapDataEnd) { +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + // Set alpha byte to 0xff. + // PowerPC Intel + // ------- ----- + // Bytes in memory are x R G B x R G B + // Writing a single 0xff byte ('1') at pRawBitmapData yields 1 R G B 1 R G B + *(unsigned char *)pRawBitmapData = 0xff; +#else + // Set alpha byte to 0xff. + // PowerPC Intel + // ------- ----- + // Bytes in memory are R G B x R G B x + // Writing a single 0xff byte, 3 bytes past pRawBitmapData yields R G B 1 R G B 1 + *((unsigned char *)pRawBitmapData + 3) = 0xff; +#endif + ++pRawBitmapData; + } + } + } + + // Create a new NSBitmapImageRep with the given bitmap data. Note that + // when creating the NSBitmapImageRep we pass in NULL for the "planes" + // parameter. This causes the new NSBitmapImageRep to allocate its own + // buffer for the bitmap data (which it will own and release when the + // NSBitmapImageRep is released), rather than referencing the bitmap + // data we pass in (which will soon disappear when we call + // DisposeHandle() below!). (See the NSBitmapImageRep documentation for + // the -initWithBitmapDataPlanes:... method, where this is explained.) + // + // Once we have the new NSBitmapImageRep, we get a pointer to its + // bitmapData and copy our bitmap data in. + bitmapImageRep = [[[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:pixelsWide + pixelsHigh:pixelsWide + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace // NOTE: is this right? +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 + bitmapFormat:bitmapFormat +#endif + bytesPerRow:0 + bitsPerPixel:0] autorelease]; + pBitmapImageRepBitmapData = [bitmapImageRep bitmapData]; + if (pBitmapImageRepBitmapData) { + memcpy( pBitmapImageRepBitmapData, *hRawBitmapData, + pixelsWide * pixelsWide * 4 ); + } +// HUnlock( hRawBitmapData ); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + + // Free the retrieved raw data. + DisposeHandle( hRawBitmapData ); + if (hRawMaskData) + DisposeHandle( hRawMaskData ); + + // Return nil if the NSBitmapImageRep didn't give us a buffer to copy into. + if (pBitmapImageRepBitmapData == NULL) + return nil; + + // Return the new NSBitmapImageRep. + return bitmapImageRep; +} + +- (NSImage*) imageWithAllReps +{ + NSImage* image = NULL; + image = [[[NSImage alloc] initWithData:[NSData dataWithBytes:*hIconFamily length:GetHandleSize((Handle)hIconFamily)]] autorelease]; + return image; +} + +- (BOOL) setIconFamilyElement:(OSType)elementType fromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep +{ + Handle hRawData = NULL; + OSErr result; + + switch (elementType) { + // 'ic08' 512x512 32-bit ARGB image + case kIconServices512PixelDataARGB: + hRawData = [IconFamily get32BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:512]; + break; + + // 'ic08' 256x256 32-bit ARGB image + case kIconServices256PixelDataARGB: + hRawData = [IconFamily get32BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:256]; + break; + + // 'it32' 128x128 32-bit RGB image + case kThumbnail32BitData: + hRawData = [IconFamily get32BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:128]; + break; + + // 't8mk' 128x128 8-bit alpha mask + case kThumbnail8BitMask: + hRawData = [IconFamily get8BitMaskFromBitmapImageRep:bitmapImageRep requiredPixelSize:128]; + break; + + // 'il32' 32x32 32-bit RGB image + case kLarge32BitData: + hRawData = [IconFamily get32BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:32]; + break; + + // 'l8mk' 32x32 8-bit alpha mask + case kLarge8BitMask: + hRawData = [IconFamily get8BitMaskFromBitmapImageRep:bitmapImageRep requiredPixelSize:32]; + break; + + // 'ICN#' 32x32 1-bit alpha mask + case kLarge1BitMask: + hRawData = [IconFamily get1BitMaskFromBitmapImageRep:bitmapImageRep requiredPixelSize:32]; + break; + + // 'icl8' 32x32 8-bit indexed image data + case kLarge8BitData: + hRawData = [IconFamily get8BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:32]; + break; + + // 'is32' 16x16 32-bit RGB image + case kSmall32BitData: + hRawData = [IconFamily get32BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:16]; + break; + + // 's8mk' 16x16 8-bit alpha mask + case kSmall8BitMask: + hRawData = [IconFamily get8BitMaskFromBitmapImageRep:bitmapImageRep requiredPixelSize:16]; + break; + + // 'ics#' 16x16 1-bit alpha mask + case kSmall1BitMask: + hRawData = [IconFamily get1BitMaskFromBitmapImageRep:bitmapImageRep requiredPixelSize:16]; + break; + + // 'ics8' 16x16 8-bit indexed image data + case kSmall8BitData: + hRawData = [IconFamily get8BitDataFromBitmapImageRep:bitmapImageRep requiredPixelSize:16]; + break; + + default: + return NO; + } + + // NSLog(@"setIconFamilyElement:%@ fromBitmapImageRep:%@ generated handle %p of size %d", NSFileTypeForHFSTypeCode(elementType), bitmapImageRep, hRawData, GetHandleSize(hRawData)); + + if (hRawData == NULL) + { + NSLog(@"Null data returned to setIconFamilyElement:fromBitmapImageRep:"); + return NO; + } + + result = SetIconFamilyData( hIconFamily, elementType, hRawData ); + DisposeHandle( hRawData ); + + if (result != noErr) + { + NSLog(@"SetIconFamilyData() returned error %d", result); + return NO; + } + + return YES; +} + +- (BOOL) setAsCustomIconForFile:(NSString*)path +{ + return( [self setAsCustomIconForFile:path withCompatibility:NO] ); +} + +- (BOOL) setAsCustomIconForFile:(NSString*)path withCompatibility:(BOOL)compat +{ + FSRef targetFileFSRef; + FSRef parentDirectoryFSRef; + SInt16 file; + OSStatus result; + struct FSCatalogInfo catInfo; + struct FileInfo *finderInfo = (struct FileInfo *)&catInfo.finderInfo; + Handle hExistingCustomIcon; + Handle hIconFamilyCopy; + NSString *parentDirectory; + + // Before we do anything, get the original modification time for the target file. + NSDate* modificationDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:NO] objectForKey:NSFileModificationDate]; + + if ([path isAbsolutePath]) + parentDirectory = [path stringByDeletingLastPathComponent]; + else + parentDirectory = [[[NSFileManager defaultManager] currentDirectoryPath] stringByAppendingPathComponent:[path stringByDeletingLastPathComponent]]; + + // Get an FSRef for the target file's parent directory that we can use in + // the FSCreateResFile() and FNNotify() calls below. + if (![parentDirectory getFSRef:&parentDirectoryFSRef createFileIfNecessary:NO]) + return NO; + + // Get the name of the file, for FSCreateResFile. + struct HFSUniStr255 filename; + NSString *filenameString = [path lastPathComponent]; + filename.length = [filenameString length]; + [filenameString getCharacters:filename.unicode]; + + // Make sure the file has a resource fork that we can open. (Although + // this sounds like it would clobber an existing resource fork, the Carbon + // Resource Manager docs for this function say that's not the case. If + // the file already has a resource fork, we receive a result code of + // dupFNErr, which is not really an error per se, but just a notification + // to us that creating a new resource fork for the file was not necessary.) + FSCreateResFile( + &parentDirectoryFSRef, + filename.length, + filename.unicode, + kFSCatInfoNone, + /*catalogInfo/*/ NULL, + &targetFileFSRef, + /*newSpec*/ NULL); + result = ResError(); + if (result == dupFNErr) { + // If the call to FSCreateResFile() returned dupFNErr, targetFileFSRef will not have been set, so create it from the path. + if (![path getFSRef:&targetFileFSRef createFileIfNecessary:NO]) + return NO; + } else if (result != noErr) { + return NO; + } + + // Open the file's resource fork. + file = FSOpenResFile( &targetFileFSRef, fsRdWrPerm ); + if (file == -1) + return NO; + + // Make a copy of the icon family data to pass to AddResource(). + // (AddResource() takes ownership of the handle we pass in; after the + // CloseResFile() call its master pointer will be set to 0xffffffff. + // We want to keep the icon family data, so we make a copy.) + // HandToHand() returns the handle of the copy in hIconFamily. + hIconFamilyCopy = (Handle) hIconFamily; + result = HandToHand( &hIconFamilyCopy ); + if (result != noErr) { + CloseResFile( file ); + return NO; + } + + // Remove the file's existing kCustomIconResource of type kIconFamilyType + // (if any). + hExistingCustomIcon = GetResource( kIconFamilyType, kCustomIconResource ); + if( hExistingCustomIcon ) + RemoveResource( hExistingCustomIcon ); + + // Now add our icon family as the file's new custom icon. + AddResource( (Handle)hIconFamilyCopy, kIconFamilyType, + kCustomIconResource, "\p"); + if (ResError() != noErr) { + CloseResFile( file ); + return NO; + } + + if( compat ) + { + [self addResourceType:kLarge8BitData asResID:kCustomIconResource]; + [self addResourceType:kLarge1BitMask asResID:kCustomIconResource]; + [self addResourceType:kSmall8BitData asResID:kCustomIconResource]; + [self addResourceType:kSmall1BitMask asResID:kCustomIconResource]; + } + + // Close the file's resource fork, flushing the resource map and new icon + // data out to disk. + CloseResFile( file ); + if (ResError() != noErr) + return NO; + + // Prepare to get the Finder info. + + // Now we need to set the file's Finder info so the Finder will know that + // it has a custom icon. Start by getting the file's current finder info: + result = FSGetCatalogInfo( + &targetFileFSRef, + kFSCatInfoFinderInfo, + &catInfo, + /*outName*/ NULL, + /*fsSpec*/ NULL, + /*parentRef*/ NULL); + if (result != noErr) + return NO; + + // Set the kHasCustomIcon flag, and clear the kHasBeenInited flag. + // + // From Apple's "CustomIcon" code sample: + // "set bit 10 (has custom icon) and unset the inited flag + // kHasBeenInited is 0x0100 so the mask will be 0xFEFF:" + // finderInfo.fdFlags = 0xFEFF & (finderInfo.fdFlags | kHasCustomIcon ) ; + finderInfo->finderFlags = (finderInfo->finderFlags | kHasCustomIcon ) & ~kHasBeenInited; + + // Now write the Finder info back. + result = FSSetCatalogInfo( &targetFileFSRef, kFSCatInfoFinderInfo, &catInfo ); + if (result != noErr) + return NO; + + // Now set the modification time back to when the file was actually last modified. + NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:modificationDate, NSFileModificationDate, nil]; + [[NSFileManager defaultManager] changeFileAttributes:attributes atPath:path]; + + // Notify the system that the directory containing the file has changed, to + // give Finder the chance to find out about the file's new custom icon. + result = FNNotify( &parentDirectoryFSRef, kFNDirectoryModifiedMessage, kNilOptions ); + if (result != noErr) + return NO; + + return YES; +} + ++ (BOOL) removeCustomIconFromFile:(NSString*)path +{ + FSRef targetFileFSRef; + FSRef parentDirectoryFSRef; + SInt16 file; + OSStatus result; + struct FSCatalogInfo catInfo; + struct FileInfo *finderInfo = (struct FileInfo *)&catInfo.finderInfo; + Handle hExistingCustomIcon; + + // Get an FSRef for the target file. + if (![path getFSRef:&targetFileFSRef createFileIfNecessary:NO]) + return NO; + + // Open the file's resource fork, if it has one. + file = FSOpenResFile( &targetFileFSRef, fsRdWrPerm ); + if (file == -1) + return NO; + + // Remove the file's existing kCustomIconResource of type kIconFamilyType + // (if any). + hExistingCustomIcon = GetResource( kIconFamilyType, kCustomIconResource ); + if( hExistingCustomIcon ) + RemoveResource( hExistingCustomIcon ); + + // Close the file's resource fork, flushing the resource map out to disk. + CloseResFile( file ); + if (ResError() != noErr) + return NO; + + // Now we need to set the file's Finder info so the Finder will know that + // it has no custom icon. Start by getting the file's current Finder info. + // Also get an FSRef for its parent directory, that we can use in the + // FNNotify() call below. + result = FSGetCatalogInfo( + &targetFileFSRef, + kFSCatInfoFinderInfo, + &catInfo, + /*outName*/ NULL, + /*fsSpec*/ NULL, + &parentDirectoryFSRef ); + if (result != noErr) + return NO; + + // Clear the kHasCustomIcon flag and the kHasBeenInited flag. + finderInfo->finderFlags = finderInfo->finderFlags & ~(kHasCustomIcon | kHasBeenInited); + + // Now write the Finder info back. + result = FSSetCatalogInfo( &targetFileFSRef, kFSCatInfoFinderInfo, &catInfo ); + if (result != noErr) + return NO; + + // Notify the system that the directory containing the file has changed, to give Finder the chance to find out about the file's new custom icon. + result = FNNotify( &parentDirectoryFSRef, kFNDirectoryModifiedMessage, kNilOptions ); + if (result != noErr) + return NO; + + return YES; +} + +- (BOOL) setAsCustomIconForDirectory:(NSString*)path +{ + return [self setAsCustomIconForDirectory:path withCompatibility:NO]; +} + +- (BOOL) setAsCustomIconForDirectory:(NSString*)path withCompatibility:(BOOL)compat +{ + NSFileManager *fm = [NSFileManager defaultManager]; + BOOL isDir; + BOOL exists; + NSString *iconrPath; + FSRef targetFolderFSRef, iconrFSRef; + SInt16 file; + OSErr result; + struct HFSUniStr255 filename; + struct FSCatalogInfo catInfo; + Handle hExistingCustomIcon; + Handle hIconFamilyCopy; + + // Confirm that "path" exists and specifies a directory. + exists = [fm fileExistsAtPath:path isDirectory:&isDir]; + if( !isDir || !exists ) + return NO; + + // Get an FSRef for the folder. + if( ![path getFSRef:&targetFolderFSRef createFileIfNecessary:NO] ) + return NO; + + // Remove and re-create any existing "Icon\r" file in the directory, and get an FSRef for it. + iconrPath = [path stringByAppendingPathComponent:@"Icon\r"]; + if( [fm fileExistsAtPath:iconrPath] ) + { + if( ![fm removeFileAtPath:iconrPath handler:nil] ) + return NO; + } + if( ![iconrPath getFSRef:&iconrFSRef createFileIfNecessary:YES] ) + return NO; + + // Get type and creator information for the Icon file. + result = FSGetCatalogInfo( + &iconrFSRef, + kFSCatInfoFinderInfo, + &catInfo, + /*outName*/ NULL, + /*fsSpec*/ NULL, + /*parentRef*/ NULL ); + if( result == fnfErr ) { + // The file doesn't exist. Prepare to create it. + + struct FileInfo *finderInfo = (struct FileInfo *)catInfo.finderInfo; + + // These are the file type and creator given to Icon files created by + // the Finder. + finderInfo->fileType = 'icon'; + finderInfo->fileCreator = 'MACS'; + + // Icon files should be invisible. + finderInfo->finderFlags = kIsInvisible; + + // Because the inited flag is not set in finderFlags above, the Finder + // will ignore the location, unless it's in the 'magic rectangle' of + // { -24,000, -24,000, -16,000, -16,000 } (technote TB42). + // So we need to make sure to set this to zero anyway, so that the + // Finder will position it automatically. If the user makes the Icon + // file visible for any reason, we don't want it to be positioned in an + // exotic corner of the window. + finderInfo->location.h = finderInfo->location.v = 0; + + // Standard reserved-field practice. + finderInfo->reservedField = 0; + } else if( result != noErr ) + return NO; + + // Get the filename, to be applied to the Icon file. + filename.length = [@"Icon\r" length]; + [@"Icon\r" getCharacters:filename.unicode]; + + // Make sure the file has a resource fork that we can open. (Although + // this sounds like it would clobber an existing resource fork, the Carbon + // Resource Manager docs for this function say that's not the case.) + FSCreateResFile( + &targetFolderFSRef, + filename.length, + filename.unicode, + kFSCatInfoFinderInfo, + &catInfo, + &iconrFSRef, + /*newSpec*/ NULL); + result = ResError(); + if (!(result == noErr || result == dupFNErr)) + return NO; + + // Open the file's resource fork. + file = FSOpenResFile( &iconrFSRef, fsRdWrPerm ); + if (file == -1) + return NO; + + // Make a copy of the icon family data to pass to AddResource(). + // (AddResource() takes ownership of the handle we pass in; after the + // CloseResFile() call its master pointer will be set to 0xffffffff. + // We want to keep the icon family data, so we make a copy.) + // HandToHand() returns the handle of the copy in hIconFamily. + hIconFamilyCopy = (Handle) hIconFamily; + result = HandToHand( &hIconFamilyCopy ); + if (result != noErr) { + CloseResFile( file ); + return NO; + } + + // Remove the file's existing kCustomIconResource of type kIconFamilyType + // (if any). + hExistingCustomIcon = GetResource( kIconFamilyType, kCustomIconResource ); + if( hExistingCustomIcon ) + RemoveResource( hExistingCustomIcon ); + + // Now add our icon family as the file's new custom icon. + AddResource( (Handle)hIconFamilyCopy, kIconFamilyType, + kCustomIconResource, "\p"); + + if (ResError() != noErr) { + CloseResFile( file ); + return NO; + } + + if( compat ) + { + [self addResourceType:kLarge8BitData asResID:kCustomIconResource]; + [self addResourceType:kLarge1BitMask asResID:kCustomIconResource]; + [self addResourceType:kSmall8BitData asResID:kCustomIconResource]; + [self addResourceType:kSmall1BitMask asResID:kCustomIconResource]; + } + + // Close the file's resource fork, flushing the resource map and new icon + // data out to disk. + CloseResFile( file ); + if (ResError() != noErr) + return NO; + + result = FSGetCatalogInfo( &targetFolderFSRef, + kFSCatInfoFinderInfo, + &catInfo, + /*outName*/ NULL, + /*fsSpec*/ NULL, + /*parentRef*/ NULL); + if( result != noErr ) + return NO; + + // Tell the Finder that the folder now has a custom icon. + ((struct FolderInfo *)catInfo.finderInfo)->finderFlags = ( ((struct FolderInfo *)catInfo.finderInfo)->finderFlags | kHasCustomIcon ) & ~kHasBeenInited; + + result = FSSetCatalogInfo( &targetFolderFSRef, + kFSCatInfoFinderInfo, + &catInfo); + if( result != noErr ) + return NO; + + // Notify the system that the target directory has changed, to give Finder + // the chance to find out about its new custom icon. + result = FNNotify( &targetFolderFSRef, kFNDirectoryModifiedMessage, kNilOptions ); + if (result != noErr) + return NO; + + return YES; +} + +- (BOOL) writeToFile:(NSString*)path +{ + NSData* iconData = nil; + +// HLock((Handle)hIconFamily); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + + iconData = [NSData dataWithBytes:*hIconFamily length:GetHandleSize((Handle)hIconFamily)]; + BOOL success = [iconData writeToFile:path atomically:NO]; + +// HUnlock((Handle)hIconFamily); // Handle-based memory isn't compacted anymore, so calling HLock()/HUnlock() is unnecessary. + + return success; +} + +@end + +@implementation IconFamily (Internals) + ++ (NSImage*) resampleImage:(NSImage*)image toIconWidth:(int)iconWidth usingImageInterpolation:(NSImageInterpolation)imageInterpolation +{ + NSGraphicsContext* graphicsContext; + BOOL wasAntialiasing; + NSImageInterpolation previousImageInterpolation; + NSImage* newImage; + NSImage* workingImage; + NSImageRep* workingImageRep; + NSSize size, pixelSize, newSize; + NSRect iconRect; + NSRect targetRect; + + // Create a working copy of the image and scale its size down to fit in + // the square area of the icon. + // + // It seems like there should be a more memory-efficient alternative to + // first duplicating the entire original image, but I don't know what it + // is. We need to change some properties ("size" and "scalesWhenResized") + // of the original image, but we shouldn't change the original, so a copy + // is necessary. + workingImage = [image copyWithZone:[image zone]]; + [workingImage setScalesWhenResized:YES]; + size = [workingImage size]; + workingImageRep = [workingImage bestRepresentationForDevice:nil]; + if ([workingImageRep isKindOfClass:[NSBitmapImageRep class]]) { + pixelSize.width = [workingImageRep pixelsWide]; + pixelSize.height = [workingImageRep pixelsHigh]; + if (!NSEqualSizes( size, pixelSize )) { + [workingImage setSize:pixelSize]; + [workingImageRep setSize:pixelSize]; + size = pixelSize; + } + } + if (size.width >= size.height) { + newSize.width = iconWidth; + newSize.height = floor( (float) iconWidth * size.height / size.width + 0.5 ); + } else { + newSize.height = iconWidth; + newSize.width = floor( (float) iconWidth * size.width / size.height + 0.5 ); + } + [workingImage setSize:newSize]; + + // Create a new image the size of the icon, and clear it to transparent. + newImage = [[NSImage alloc] initWithSize:NSMakeSize(iconWidth,iconWidth)]; + [newImage lockFocus]; + iconRect.origin.x = iconRect.origin.y = 0; + iconRect.size.width = iconRect.size.height = iconWidth; + [[NSColor clearColor] set]; + NSRectFill( iconRect ); + + // Set current graphics context to use antialiasing and high-quality + // image scaling. + graphicsContext = [NSGraphicsContext currentContext]; + wasAntialiasing = [graphicsContext shouldAntialias]; + previousImageInterpolation = [graphicsContext imageInterpolation]; + [graphicsContext setShouldAntialias:YES]; + [graphicsContext setImageInterpolation:imageInterpolation]; + + // Composite the working image into the icon bitmap, centered. + targetRect.origin.x = ((float)iconWidth - newSize.width ) / 2.0; + targetRect.origin.y = ((float)iconWidth - newSize.height) / 2.0; + targetRect.size.width = newSize.width; + targetRect.size.height = newSize.height; + [workingImageRep drawInRect:targetRect]; + + // Restore previous graphics context settings. + [graphicsContext setShouldAntialias:wasAntialiasing]; + [graphicsContext setImageInterpolation:previousImageInterpolation]; + + [newImage unlockFocus]; + + [workingImage release]; + + // Return the new image! + return [newImage autorelease]; +} + ++ (Handle) get32BitDataFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize +{ + Handle hRawData; + unsigned char* pRawData; + Size rawDataSize; + unsigned char* pSrc; + unsigned char* pDest; + int x, y; + unsigned char alphaByte; + float oneOverAlpha; + + // Get information about the bitmapImageRep. + int pixelsWide = [bitmapImageRep pixelsWide]; + int pixelsHigh = [bitmapImageRep pixelsHigh]; + int bitsPerSample = [bitmapImageRep bitsPerSample]; + int samplesPerPixel = [bitmapImageRep samplesPerPixel]; + int bitsPerPixel = [bitmapImageRep bitsPerPixel]; + BOOL isPlanar = [bitmapImageRep isPlanar]; + int bytesPerRow = [bitmapImageRep bytesPerRow]; + unsigned char* bitmapData = [bitmapImageRep bitmapData]; + + // Make sure bitmap has the required dimensions. + if (pixelsWide != requiredPixelSize || pixelsHigh != requiredPixelSize) + return NULL; + + // So far, this code only handles non-planar 32-bit RGBA and 24-bit RGB source bitmaps. + // This could be made more flexible with some additional programming to accommodate other possible + // formats... + if (isPlanar) + { + NSLog(@"get32BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to isPlanar == YES"); + return NULL; + } + if (bitsPerSample != 8) + { + NSLog(@"get32BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to bitsPerSample == %d", bitsPerSample); + return NULL; + } + + if (((samplesPerPixel == 3) && (bitsPerPixel == 24)) || ((samplesPerPixel == 4) && (bitsPerPixel == 32))) + { + rawDataSize = pixelsWide * pixelsHigh * 4; + hRawData = NewHandle( rawDataSize ); + if (hRawData == NULL) + return NULL; + pRawData = (unsigned char*) *hRawData; + + pSrc = bitmapData; + pDest = pRawData; + + if (bitsPerPixel == 32) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x++) { + // Each pixel is 3 bytes of RGB data, followed by 1 byte of + // alpha. The RGB values are premultiplied by the alpha (so + // that Quartz can save time when compositing the bitmap to a + // destination), and we undo this premultiplication (with some + // lossiness unfortunately) when retrieving the bitmap data. + *pDest++ = alphaByte = *(pSrc+3); + if (alphaByte) { + oneOverAlpha = 255.0f / (float)alphaByte; + *pDest++ = *(pSrc+0) * oneOverAlpha; + *pDest++ = *(pSrc+1) * oneOverAlpha; + *pDest++ = *(pSrc+2) * oneOverAlpha; + } else { + *pDest++ = 0; + *pDest++ = 0; + *pDest++ = 0; + } + pSrc+=4; + } + } + } else if (bitsPerPixel == 24) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x++) { + *pDest++ = 0xFF; + *pDest++ = *pSrc++; + *pDest++ = *pSrc++; + *pDest++ = *pSrc++; + } + } + } + } + else + { + NSLog(@"get32BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to samplesPerPixel == %d, bitsPerPixel == %", samplesPerPixel, bitsPerPixel); + return NULL; + } + + return hRawData; +} + ++ (Handle) get8BitDataFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize +{ + Handle hRawData; + unsigned char* pRawData; + Size rawDataSize; + unsigned char* pSrc; + unsigned char* pDest; + int x, y; + + // Get information about the bitmapImageRep. + int pixelsWide = [bitmapImageRep pixelsWide]; + int pixelsHigh = [bitmapImageRep pixelsHigh]; + int bitsPerSample = [bitmapImageRep bitsPerSample]; + int samplesPerPixel = [bitmapImageRep samplesPerPixel]; + int bitsPerPixel = [bitmapImageRep bitsPerPixel]; + BOOL isPlanar = [bitmapImageRep isPlanar]; + int bytesPerRow = [bitmapImageRep bytesPerRow]; + unsigned char* bitmapData = [bitmapImageRep bitmapData]; + + // Make sure bitmap has the required dimensions. + if (pixelsWide != requiredPixelSize || pixelsHigh != requiredPixelSize) + return NULL; + + // So far, this code only handles non-planar 32-bit RGBA and 24-bit RGB source bitmaps. + // This could be made more flexible with some additional programming... + if (isPlanar) + { + NSLog(@"get8BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to isPlanar == YES"); + return NULL; + } + if (bitsPerSample != 8) + { + NSLog(@"get8BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to bitsPerSample == %d", bitsPerSample); + return NULL; + } + + if (((samplesPerPixel == 3) && (bitsPerPixel == 24)) || ((samplesPerPixel == 4) && (bitsPerPixel == 32))) + { + CGDirectPaletteRef cgPal; + CGDeviceColor cgCol; + + rawDataSize = pixelsWide * pixelsHigh; + hRawData = NewHandle( rawDataSize ); + if (hRawData == NULL) + return NULL; + pRawData = (unsigned char*) *hRawData; + + cgPal = CGPaletteCreateDefaultColorPalette(); + + pSrc = bitmapData; + pDest = pRawData; + if (bitsPerPixel == 32) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x++) { + cgCol.red = ((float)*(pSrc)) / 255; + cgCol.green = ((float)*(pSrc+1)) / 255; + cgCol.blue = ((float)*(pSrc+2)) / 255; + + *pDest++ = CGPaletteGetIndexForColor(cgPal, cgCol); + + pSrc+=4; + } + } + } else if (bitsPerPixel == 24) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x++) { + cgCol.red = ((float)*(pSrc)) / 255; + cgCol.green = ((float)*(pSrc+1)) / 255; + cgCol.blue = ((float)*(pSrc+2)) / 255; + + *pDest++ = CGPaletteGetIndexForColor(cgPal, cgCol); + + pSrc+=3; + } + } + } + + CGPaletteRelease(cgPal); + } + else + { + NSLog(@"get8BitDataFromBitmapImageRep:requiredPixelSize: returning NULL due to samplesPerPixel == %d, bitsPerPixel == %", samplesPerPixel, bitsPerPixel); + return NULL; + } + + return hRawData; +} + ++ (Handle) get8BitMaskFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize +{ + Handle hRawData; + unsigned char* pRawData; + Size rawDataSize; + unsigned char* pSrc; + unsigned char* pDest; + int x, y; + + // Get information about the bitmapImageRep. + int pixelsWide = [bitmapImageRep pixelsWide]; + int pixelsHigh = [bitmapImageRep pixelsHigh]; + int bitsPerSample = [bitmapImageRep bitsPerSample]; + int samplesPerPixel = [bitmapImageRep samplesPerPixel]; + int bitsPerPixel = [bitmapImageRep bitsPerPixel]; + BOOL isPlanar = [bitmapImageRep isPlanar]; + int bytesPerRow = [bitmapImageRep bytesPerRow]; + unsigned char* bitmapData = [bitmapImageRep bitmapData]; + + // Make sure bitmap has the required dimensions. + if (pixelsWide != requiredPixelSize || pixelsHigh != requiredPixelSize) + return NULL; + + // So far, this code only handles non-planar 32-bit RGBA, 24-bit RGB and 8-bit grayscale source bitmaps. + // This could be made more flexible with some additional programming... + if (isPlanar) + { + NSLog(@"get8BitMaskFromBitmapImageRep:requiredPixelSize: returning NULL due to isPlanar == YES"); + return NULL; + } + if (bitsPerSample != 8) + { + NSLog(@"get8BitMaskFromBitmapImageRep:requiredPixelSize: returning NULL due to bitsPerSample == %d", bitsPerSample); + return NULL; + } + + if (((samplesPerPixel == 1) && (bitsPerPixel == 8)) || ((samplesPerPixel == 3) && (bitsPerPixel == 24)) || ((samplesPerPixel == 4) && (bitsPerPixel == 32))) + { + rawDataSize = pixelsWide * pixelsHigh; + hRawData = NewHandle( rawDataSize ); + if (hRawData == NULL) + return NULL; + pRawData = (unsigned char*) *hRawData; + + pSrc = bitmapData; + pDest = pRawData; + + if (bitsPerPixel == 32) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x++) { + pSrc += 3; + *pDest++ = *pSrc++; + } + } + } + else if (bitsPerPixel == 24) { + memset( pDest, 255, rawDataSize ); + } + else if (bitsPerPixel == 8) { + for (y = 0; y < pixelsHigh; y++) { + memcpy( pDest, pSrc, pixelsWide ); + pSrc += bytesPerRow; + pDest += pixelsWide; + } + } + } + else + { + NSLog(@"get8BitMaskFromBitmapImageRep:requiredPixelSize: returning NULL due to samplesPerPixel == %d, bitsPerPixel == %", samplesPerPixel, bitsPerPixel); + return NULL; + } + + return hRawData; +} + +// NOTE: This method hasn't been fully tested yet. ++ (Handle) get1BitMaskFromBitmapImageRep:(NSBitmapImageRep*)bitmapImageRep requiredPixelSize:(int)requiredPixelSize +{ + Handle hRawData; + unsigned char* pRawData; + Size rawDataSize; + unsigned char* pSrc; + unsigned char* pDest; + int x, y; + unsigned char maskByte; + + // Get information about the bitmapImageRep. + int pixelsWide = [bitmapImageRep pixelsWide]; + int pixelsHigh = [bitmapImageRep pixelsHigh]; + int bitsPerSample = [bitmapImageRep bitsPerSample]; + int samplesPerPixel = [bitmapImageRep samplesPerPixel]; + int bitsPerPixel = [bitmapImageRep bitsPerPixel]; + BOOL isPlanar = [bitmapImageRep isPlanar]; + int bytesPerRow = [bitmapImageRep bytesPerRow]; + unsigned char* bitmapData = [bitmapImageRep bitmapData]; + + // Make sure bitmap has the required dimensions. + if (pixelsWide != requiredPixelSize || pixelsHigh != requiredPixelSize) + return NULL; + + // So far, this code only handles non-planar 32-bit RGBA, 24-bit RGB, 8-bit grayscale, and 1-bit source bitmaps. + // This could be made more flexible with some additional programming... + if (isPlanar) + { + NSLog(@"get1BitMaskFromBitmapImageRep:requiredPixelSize: returning NULL due to isPlanar == YES"); + return NULL; + } + + if (((bitsPerPixel == 1) && (samplesPerPixel == 1) && (bitsPerSample == 1)) || ((bitsPerPixel == 8) && (samplesPerPixel == 1) && (bitsPerSample == 8)) || + ((bitsPerPixel == 24) && (samplesPerPixel == 3) && (bitsPerSample == 8)) || ((bitsPerPixel == 32) && (samplesPerPixel == 4) && (bitsPerSample == 8))) + { + rawDataSize = (pixelsWide * pixelsHigh)/4; + hRawData = NewHandle( rawDataSize ); + if (hRawData == NULL) + return NULL; + pRawData = (unsigned char*) *hRawData; + + pSrc = bitmapData; + pDest = pRawData; + + if (bitsPerPixel == 32) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x += 8) { + maskByte = 0; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x80 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x40 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x20 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x10 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x08 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x04 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x02 : 0; pSrc += 4; + maskByte |= (*(unsigned*)pSrc & 0xff) ? 0x01 : 0; pSrc += 4; + *pDest++ = maskByte; + } + } + } + else if (bitsPerPixel == 24) { + memset( pDest, 255, rawDataSize ); + } + else if (bitsPerPixel == 8) { + for (y = 0; y < pixelsHigh; y++) { + pSrc = bitmapData + y * bytesPerRow; + for (x = 0; x < pixelsWide; x += 8) { + maskByte = 0; + maskByte |= *pSrc++ ? 0x80 : 0; + maskByte |= *pSrc++ ? 0x40 : 0; + maskByte |= *pSrc++ ? 0x20 : 0; + maskByte |= *pSrc++ ? 0x10 : 0; + maskByte |= *pSrc++ ? 0x08 : 0; + maskByte |= *pSrc++ ? 0x04 : 0; + maskByte |= *pSrc++ ? 0x02 : 0; + maskByte |= *pSrc++ ? 0x01 : 0; + *pDest++ = maskByte; + } + } + } + else if (bitsPerPixel == 1) { + for (y = 0; y < pixelsHigh; y++) { + memcpy( pDest, pSrc, pixelsWide / 8 ); + pDest += pixelsWide / 8; + pSrc += bytesPerRow; + } + } + + memcpy( pRawData+(pixelsWide*pixelsHigh)/8, pRawData, (pixelsWide*pixelsHigh)/8 ); + } + else + { + NSLog(@"get1BitMaskFromBitmapImageRep:requiredPixelSize: returning NULL due to bitsPerPixel == %d, samplesPerPixel== %d, bitsPerSample == %d", bitsPerPixel, samplesPerPixel, bitsPerSample); + return NULL; + } + + return hRawData; +} + +- (BOOL) addResourceType:(OSType)type asResID:(int)resID +{ + Handle hIconRes = NewHandle(0); + OSErr err; + + err = GetIconFamilyData( hIconFamily, type, hIconRes ); + + if( !GetHandleSize(hIconRes) || err != noErr ) + return NO; + + AddResource( hIconRes, type, resID, "\p" ); + + return YES; +} + +@end + +// Methods for interfacing with the Carbon Scrap Manager (analogous to and +// interoperable with the Cocoa Pasteboard). + +@implementation IconFamily (ScrapAdditions) + ++ (BOOL) canInitWithScrap +{ + ScrapRef scrap = NULL; + ScrapFlavorInfo* scrapInfos = NULL; + UInt32 numInfos = 0; + int i = 0; + BOOL canInit = NO; + + GetCurrentScrap(&scrap); + + GetScrapFlavorCount(scrap,&numInfos); + scrapInfos = malloc( sizeof(ScrapFlavorInfo)*numInfos ); + if (scrapInfos) { + GetScrapFlavorInfoList(scrap, &numInfos, scrapInfos); + + for( i=0; i +#import + +@interface NSString (CarbonFSRefCreation) + +// Fills in the given FSRef struct so it specifies the file whose path is in this string. +// If the file doesn't exist, and "createFile" is YES, this method will attempt to create +// an empty file with the specified path. (The caller should insure that the directory +// the file is to be placed in already exists.) + +- (BOOL) getFSRef:(FSRef*)fsRef createFileIfNecessary:(BOOL)createFile; + +@end diff --git a/src/MacVim/icons/makeicns/NSString+CarbonFSRefCreation.m b/src/MacVim/icons/makeicns/NSString+CarbonFSRefCreation.m new file mode 100644 index 0000000000..7e6a0f4588 --- /dev/null +++ b/src/MacVim/icons/makeicns/NSString+CarbonFSRefCreation.m @@ -0,0 +1,58 @@ +/* + Copyright (c) 2001-2006 Troy N. Stephens + + Use and distribution of this source code is governed by the MIT License, whose terms are as follows. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#import "NSString+CarbonFSRefCreation.h" + +@implementation NSString (CarbonFSRefCreation) + +- (BOOL) getFSRef:(FSRef*)fsRef createFileIfNecessary:(BOOL)createFile +{ + NSFileManager* fileManager = [NSFileManager defaultManager]; + CFURLRef urlRef; + Boolean gotFSRef; + + // Check whether the file exists already. If not, create an empty file if requested. + if (![fileManager fileExistsAtPath:self]) { + if (createFile) { + if (![@"" writeToFile:self atomically:YES]) { + return NO; + } + } else { + return NO; + } + } + + // Create a CFURL with the specified POSIX path. + urlRef = CFURLCreateWithFileSystemPath( kCFAllocatorDefault, + (CFStringRef) self, + kCFURLPOSIXPathStyle, + FALSE /* isDirectory */ ); + if (urlRef == NULL) { +// printf( "** Couldn't make a CFURLRef for the file.\n" ); + return NO; + } + + // Try to create an FSRef from the URL. (If the specified file doesn't exist, this + // function will return false, but if we've reached this code we've already insured + // that the file exists.) + gotFSRef = CFURLGetFSRef( urlRef, fsRef ); + CFRelease( urlRef ); + + if (!gotFSRef) { +// printf( "** Couldn't get an FSRef for the file.\n" ); + return NO; + } + + return YES; +} + +@end diff --git a/src/MacVim/icons/makeicns/makeicns.m b/src/MacVim/icons/makeicns/makeicns.m new file mode 100644 index 0000000000..7b63527ef7 --- /dev/null +++ b/src/MacVim/icons/makeicns/makeicns.m @@ -0,0 +1,168 @@ +// makeicns +// Converts images to Apple's icns format. +// Written by nicolasweber@gmx.de, released under MIT license. + +#import +#import + +#import + +#include "IconFamily.h" + +#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 +// This is defined in 10.5 and beyond in IconStorage.h +enum { + kIconServices512PixelDataARGB = 'ic09' /* non-premultiplied 512x512 ARGB bitmap*/ +}; +#endif + +#define VERSION "1.0 (20081122)" + +void usage() { + fprintf(stderr, +"makeicns v%s\n\n", VERSION); + fprintf(stderr, +"Usage: makeicns [k1=v1] [k2=v2] ...\n\n"); + fprintf(stderr, +"Keys and values include:\n"); + fprintf(stderr, +" 512: Name of input image for 512x512 variant of icon\n"); + fprintf(stderr, +" 256: Name of input image for 256x256 variant of icon\n"); + fprintf(stderr, +" 128: Name of input image for 128x128 variant of icon\n"); + fprintf(stderr, +" 32: Name of input image for 32x32 variant of icon\n"); + fprintf(stderr, +" 16: Name of input image for 16x16 variant of icon\n"); + fprintf(stderr, +" in: Name of input image for all variants not having an explicit name\n"); + fprintf(stderr, +" out: Name of output file, defaults to first nonempty input name,\n" +" but with icns extension\n\n"); + fprintf(stderr, +"Examples:\n\n" +" icns -512 image.png -32 image.png\n" +" Creates image.icns with only a 512x512 and a 32x32 variant.\n\n" +" icns -in myfile.jpg -32 otherfile.png -out outfile.icns\n" +" Creates outfile.icns with sizes 512, 256, 128, and 16 containing data\n" +" from myfile.jpg and with size 32 containing data from otherfile.png.\n"); + exit(1); +} + + +NSBitmapImageRep* getBitmapImageRepOfSize(NSImage* img, int size) { + + // Don't resample if it's not necessary + NSEnumerator* e = [[img representations] objectEnumerator]; + NSImageRep* ir; + while ((ir = [e nextObject])) { + if (![ir isKindOfClass:[NSBitmapImageRep class]]) continue; + + NSBitmapImageRep* br = (NSBitmapImageRep*)ir; + //NSLog(@"%@", br); + if ([br pixelsWide] == size && [br pixelsHigh] == size + && ([[br colorSpaceName] isEqualToString:NSDeviceRGBColorSpace] + || [[br colorSpaceName] isEqualToString:NSCalibratedRGBColorSpace]) + && ([br bitsPerPixel] == 24 || [br bitsPerPixel] == 32) + ) + return br; + } + + NSLog(@"Resampling for size %d", size); + NSBitmapImageRep* r = [[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:size + pixelsHigh:size + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace + bitmapFormat:0 + bytesPerRow:0 + bitsPerPixel:0]; + + [NSGraphicsContext saveGraphicsState]; + NSGraphicsContext* context = [NSGraphicsContext + graphicsContextWithBitmapImageRep:r]; + [context setShouldAntialias:YES]; + [context setImageInterpolation:NSImageInterpolationHigh]; + [NSGraphicsContext setCurrentContext:context]; + + [img drawInRect:NSMakeRect(0, 0, size, size) + fromRect:NSZeroRect + operation:NSCompositeCopy + fraction:1.0]; + + [NSGraphicsContext restoreGraphicsState]; + + return r; +} + + +int main(int argc, char* argv[]) { + int i; + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSApplicationLoad(); + + struct { + NSString* paramName; + OSType type, mask; + int size; + NSString* inputName; + } inputs[] = { + { @"512", kIconServices512PixelDataARGB, 0, 512, nil }, + { @"256", kIconServices256PixelDataARGB, 0, 256, nil }, + { @"128", kThumbnail32BitData, kThumbnail8BitMask, 128, nil }, + { @"32", kLarge32BitData, kLarge8BitMask, 32, nil }, + { @"16", kSmall32BitData, kSmall8BitMask, 16, nil }, + }; + const int N = sizeof(inputs)/sizeof(inputs[0]); + + // Process arguments -- Thanks Greg! + //http://unixjunkie.blogspot.com/2006/07/command-line-processing-in-cocoa.html + NSUserDefaults* args = [NSUserDefaults standardUserDefaults]; + + BOOL foundInputParam = NO; + NSString* outputName = [args stringForKey:@"out"]; + NSString* defaultIn = [args stringForKey:@"in"]; + for (i = 0; i < N; ++i) { + inputs[i].inputName = [args stringForKey:inputs[i].paramName]; + if (inputs[i].inputName == nil) + inputs[i].inputName = defaultIn; + foundInputParam = foundInputParam || inputs[i].inputName != nil; + + // Create default output name if necessary + if (outputName == nil && inputs[i].inputName != nil) + outputName = [[inputs[i].inputName stringByDeletingPathExtension] + stringByAppendingPathExtension:@"icns"]; + } + + if (!foundInputParam) + usage(); + + // Create output + IconFamily* output = [IconFamily iconFamily]; + + for (i = 0; i < N; ++i) { + if (inputs[i].inputName == nil) continue; + NSImage* img = [[[NSImage alloc] initWithContentsOfFile:inputs[i].inputName] + autorelease]; + + NSBitmapImageRep* rep = getBitmapImageRepOfSize(img, inputs[i].size); + [output setIconFamilyElement:inputs[i].type fromBitmapImageRep:rep]; + if (inputs[i].mask != 0) + [output setIconFamilyElement:inputs[i].mask fromBitmapImageRep:rep]; + } + + // Write output + if ([output writeToFile:outputName]) + NSLog(@"Wrote output file \"%@\"", outputName); + else + NSLog(@"Failed to write \"%@\"", outputName); + + [pool drain]; + return 0; +} diff --git a/src/MacVim/icons/vim-noshadow-512.png b/src/MacVim/icons/vim-noshadow-512.png new file mode 100644 index 0000000000000000000000000000000000000000..0eefe3b242edf1ba5473f71b4dc5684bdf95f33f GIT binary patch literal 66996 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 ZacbngNlo4Bpuxc3AzP;d71n;l{|6*61lj-q literal 0 HcmV?d00001