module SDL::Mac

Public Class Methods

make_menus( app_name ) click to toggle source
# File lib/ruby-sdl-ffi/sdl/mac.rb, line 53
def make_menus( app_name )
  ptr = FFI.find_type(:pointer)
  
  nsapp = Cocoa.NSApp
  menubar = Cocoa::NSMenu.new.initWithTitle("AMainMenu")
  nsapp.msg( "setMainMenu:", ptr, menubar )
  
  remove_bold_menu( nsapp, menubar )
  make_app_menu( menubar, app_name )
  make_window_menu( nsapp, menubar )

  nil
end
set_app_name( app_name ) click to toggle source
# File lib/ruby-sdl-ffi/sdl/mac.rb, line 68
def set_app_name( app_name )
  ptr = FFI.find_type(:pointer)
  
  if @appmenuitem
    @appmenuitem.title = app_name
    @hideitem.title = "Hide #{app_name}" if @hideitem
    @quititem.title = "Quit #{app_name}" if @quititem
  else
    make_menus( app_name )
  end
  
  nil
end

Private Class Methods

inspect_menu( menu, indent="" ) click to toggle source
# File lib/ruby-sdl-ffi/sdl/mac.rb, line 138
def inspect_menu( menu, indent="" )
  puts "%s-%s  (%s \"%s\", %d items)"%[indent, menu, menu.classname,
                                       menu.title, menu.length]
  menu.each do |ob|
    if ob.hasSubmenu?
      inspect_menu( ob.submenu, indent+"  " )
    else
      puts "%s  -%s  (%s \"%s\")"%[indent, ob, ob.classname, ob.title]
    end
  end
end
make_app_menu( menubar, app_name ) click to toggle source

Create the main menu with the app's name (Hide, Quit, etc.)

# File lib/ruby-sdl-ffi/sdl/mac.rb, line 102
def make_app_menu( menubar, app_name )
  item = Cocoa::NSMenuItem.new.initWithTitle( app_name )
  menu = Cocoa::NSMenu.new.initWithTitle( app_name )
  item.submenu = menu
  menubar.addItem(item)
  
  @hideitem = menu.addItemWithTitle("Hide #{app_name}", "hide:")
  menu.addItemWithTitle("Hide Others", "hideOtherApplications:")
  menu.addItemWithTitle("Show All", "unhideAllApplications:")

  # Can't get the Quit menu item to work right yet.
  # menu.addItem( Cocoa::NSMenuItem.separatorItem )
  # @quititem = menu.addItemWithTitle("Quit #{app_name}", "terminate:")
  
  @appmenuitem = item
  menu.release
end
make_window_menu( nsapp, menubar ) click to toggle source

Create the “Window” menu (Minimize, etc.)

# File lib/ruby-sdl-ffi/sdl/mac.rb, line 122
def make_window_menu( nsapp, menubar )
  ptr = FFI.find_type(:pointer)
  
  item = Cocoa::NSMenuItem.new.initWithTitle("Window")
  menu = Cocoa::NSMenu.new.initWithTitle("Window")
  item.submenu = menu
  menubar.addItem(item)
  nsapp.msg("setWindowsMenu:", ptr, menu)
  
  menu.addItemWithTitle("Minimize", "performMiniaturize:")
  
  item.release
  menu.release
end
remove_bold_menu( nsapp, menubar ) click to toggle source

Hack to remove the bold “ruby” menu (aka the “Apple” menu). It's a ghost menu, it haunts us but can't be modified.

# File lib/ruby-sdl-ffi/sdl/mac.rb, line 87
def remove_bold_menu( nsapp, menubar )
  item = Cocoa::NSMenuItem.new.initWithTitle("AppleMenu")
  menu = Cocoa::NSMenu.new.initWithTitle("AppleMenu")
  item.submenu = menu
  
  nsapp.msg("setAppleMenu:", FFI.find_type(:pointer), menu)
  menubar.addItem(item)
  menubar.removeItem(item)
  
  item.release
  menu.release
end