Hi,

On 30.11.2008, at 07:17, björn wrote:

> 2. The "LucidaSans-Demi" does not exist on my system.  Again, if the
> font is missing you get an unhelpful message:

Bummer. The attached version uses Lucida Grande, which is a system  
font. Its font metrics are a bit different, hence I had to change some  
rects, but it looks very similar to Lucida Grande now (modulo the  
digit glyphs, but we don't use those). It also adds some more helpful  
error messages.

> When I saw this line
>
> BACKGROUND = '/System/Library/CoreServices/CoreTypes.bundle/' + \
>    'Contents/Resources/GenericDocumentIcon.icns'  # might require  
> leopard?
>
> I started up Tiger -- that icon does exist on Tiger as well...so no
> problems there.

But on Tiger it's probably not a 512x512 icon.

> Finally, I really think we need to do something about the smaller
> sized icons: they are completely illegible.  I have attached the icon
> for ".h" files to illustrate this point.  This is the simplest icon
> but even it is impossible to make out what it is supposed to be (even
> at 32x32).  I'm not sure exactly what to do about this, but one
> suggestion is to make the file extension text cover the entire
> document at 32x32 and lower.  The MacVim icon could perhaps be toned
> down or, in the case of 16x16, completely removed?

I'm doing some experiments with re-rendering the text for each icon  
size instead of using the downsampled 512 variant, this yields  
readable text at 32x32 (haven't tried with 16x16 yet). But let's get  
the current version merged first.

Nico


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_mac" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

# Creates a document icon from an app icon and an optional text.

# The font is not quite right, use this script to create a document icon
# for 'PDF' and compare the D with the D in Preview's pdf.icns

# http://www.macresearch.org/cocoa-scientists-part-xx-python-scriptersmeet-cocoa
from Foundation import *
from AppKit import *
import os
import sys

# icon types
LARGE = 0  # 512, 128, 32, 16; about 96kB
SMALL = 1  # 128, 32, 16; about 36kB
LINK = 2  # Create link to generic icon; 4kB (== smallest block size on HFS+)

# path to makeicns binary
MAKEICNS = './makeicns'

# List of icons to create
GENERIC_ICON_NAME = 'doc-bm-generic'
vimIcons = {
    GENERIC_ICON_NAME: [u'', LARGE],
    'doc-bm-vim': [u'VIM', LARGE],
    'doc-bm-txt': [u'TXT', SMALL],
    'doc-bm-tex': [u'TEX', SMALL],
    'doc-bm-h': [u'H', SMALL],
    'doc-bm-c': [u'C', SMALL],
    'doc-bm-m': [u'M', SMALL],
    'doc-bm-mm': [u'MM', SMALL],
    'doc-bm-cpp': [u'C\uff0b\uff0b', SMALL],  # fullwidth plusses
    'doc-bm-java': [u'JAVA', SMALL],
    'doc-bm-f': [u'FTRAN', SMALL],
    'doc-bm-html': [u'HTML', SMALL],
    'doc-bm-xml': [u'XML', SMALL],
    'doc-bm-js': [u'JS', SMALL],
    'doc-bm-perl': [u'PERL', SMALL],
    'doc-bm-py': [u'PYTHON', SMALL],
    'doc-bm-php': [u'PHP', SMALL],
    'doc-bm-rb': [u'RUBY', SMALL],
    'doc-bm-bash': [u'SH', SMALL],
    'doc-bm-patch': [u'DIFF', SMALL],
    'doc-bm-applescript': [u'\uf8ffSCPT', SMALL],  # apple sign
    'doc-bm-as': [u'FLASH', LINK],
    'doc-bm-asp': [u'ASP', LINK],
    'doc-bm-bib': [u'BIB', LINK],
    'doc-bm-cs': [u'C#', LINK],
    'doc-bm-csfg': [u'CFDG', LINK], #D
    'doc-bm-csv': [u'CSV', LINK],
    'doc-bm-tsv': [u'TSV', LINK],
    'doc-bm-cgi': [u'CGI', LINK],
    'doc-bm-cfg': [u'CFG', LINK],
    'doc-bm-css': [u'CSS', SMALL],
    'doc-bm-dtd': [u'DTD', LINK],
    'doc-bm-dylan': [u'DYLAN', LINK],
    'doc-bm-erl': [u'ERLANG', SMALL],
    'doc-bm-fscript': [u'FSCPT', SMALL],
    'doc-bm-hs': [u'HS', SMALL],
    'doc-bm-inc': [u'INC', LINK],
    'doc-bm-ics': [u'ICS', SMALL],
    'doc-bm-ini': [u'INI', LINK],
    'doc-bm-io': [u'IO', LINK],
    'doc-bm-bsh': [u'BSH', LINK], #D
    'doc-bm-properties': [u'PROP', LINK],
    'doc-bm-jsp': [u'JSP', SMALL],
    'doc-bm-lisp': [u'LISP', SMALL],
    'doc-bm-log': [u'LOG', SMALL],
    'doc-bm-wiki': [u'WIKI', SMALL],
    'doc-bm-ps': [u'PS', LINK],
    #'doc-bm-plist': [u'PLIST', SMALL],
    'doc-bm-sch': [u'SCHEME', SMALL],
    'doc-bm-sql': [u'SQL', SMALL],
    'doc-bm-tcl': [u'TCL', SMALL],
    'doc-bm-xsl': [u'XSL', LINK],
    'doc-bm-vcf': [u'VCARD', SMALL],
    'doc-bm-vb': [u'VBASIC', LINK],
    'doc-bm-yaml': [u'YAML', SMALL],
    'doc-bm-gtd': [u'GTD', LINK], #D
}


# Resources
BACKGROUND = '/System/Library/CoreServices/CoreTypes.bundle/' + \
    'Contents/Resources/GenericDocumentIcon.icns'  # might require leopard?
APPICON = 'vim-noshadow-512.png'
#APPICON = 'vim-noshadow-no-v-512.png'


def createIcon(outname, text, iconname=APPICON, bgname=BACKGROUND):
  # Prepare input images
  bg = NSImage.alloc().initWithContentsOfFile_(bgname)
  if not bg:
    print 'Failed to load', bgname
    sys.exit(1)

  icon = NSImage.alloc().initWithContentsOfFile_(iconname)
  if not icon:
    print 'Failed to load', iconname
    sys.exit(1)


  # Prepare text format
  style = NSMutableParagraphStyle.new()
  style.setParagraphStyle_(NSParagraphStyle.defaultParagraphStyle())
  style.setAlignment_(NSCenterTextAlignment)
  # http://developer.apple.com/documentation/Cocoa/Conceptual/AttributedStrings/Articles/standardAttributes.html#//apple_ref/doc/uid/TP40004903
  fontname = 'LucidaGrande-Bold'
  attribs = {
      NSParagraphStyleAttributeName: style,
      NSParagraphStyleAttributeName: style,
      NSFontAttributeName: NSFont.fontWithName_size_(fontname, 72.0),
      NSKernAttributeName: -1.0,  # tighten font a bit
      NSForegroundColorAttributeName: NSColor.colorWithDeviceWhite_alpha_(
        0.34, 1)
  }

  if not attribs[NSFontAttributeName]:
    print 'Failed to load font', fontname
    sys.exit(1)

    
  # Draw!
  bg.lockFocus()
  w, h = 289, 289
  icon.drawInRect_fromRect_operation_fraction_(
      (((512-w)/2 + 1, 405 - h), (w, h)),
      NSZeroRect, NSCompositeSourceOver, 1.0)
  text.drawInRect_withAttributes_( ((0, 7), (512, 119)), attribs)
  bg.unlockFocus()

  # Save
  # http://www.cocoadev.com/index.pl?NSImageToJPEG (this is retarded)
  tmp = NSBitmapImageRep.imageRepWithData_(bg.TIFFRepresentation())
  png = tmp.representationUsingType_properties_(NSPNGFileType, None)
  png.writeToFile_atomically_(outname, True)


TMPFILE = 'make_icons_tmp.png'
def main():
  # 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

  for name, t in vimIcons.iteritems():
    print name
    text, size = t

    icnsName = '%s.icns' % name

    # remove old version of icns
    if os.access(icnsName, os.F_OK):
      os.remove(icnsName)

    if size == LINK:
      os.symlink('%s.icns' % GENERIC_ICON_NAME, icnsName)
      continue

    createIcon(TMPFILE, NSString.stringWithString_(text))
    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))

  
if __name__ == '__main__':
  try:
    main()
  finally:
    if os.access(TMPFILE, os.F_OK):
      os.remove(TMPFILE)


Reply via email to