Как установить значения по умолчанию для NSFontPanel? - PullRequest
2 голосов
/ 12 июля 2011

Я настраиваю окно настроек для моего классного приложения, которое отображает некоторый текст. В настройках я установил кнопку, которая открывает NSFontPanel. Мое приложение сохраняет предпочитаемый пользователем цвет текста и шрифт и всегда открывается с этими настройками, так что пользователю никогда не придется видеть текст, отображаемый в цвете или шрифте, которые он не предпочитает.

Проблема в том, что, хотя мое приложение может запомнить эти настройки, у NSFontPanel есть проблема. Когда я впервые открываю панель шрифтов, значения по умолчанию для всех полей сбрасываются. После того, как вы поиграете с ними, закроете панель и снова откроете ее, правильные значения сохранятся. Проблема возникает только при первом открытии панели.

Я не понимаю, почему это происходит!

Я тщательно настраивал шрифт и цвет панели при запуске моего приложения, как вы можете видеть из этого фрагмента:

def show_entry_font_menu(sender)
  font_manager = NSFontManager.sharedFontManager    
  color_panel = NSColorPanel.sharedColorPanel

  font_manager.setDelegate self
  color_panel.setDelegate self

  font_manager.setSelectedFont(preferences.entry_font, isMultiple:false)

  font_panel = font_manager.fontPanel(true)
  font_panel.makeKeyAndOrderFront(sender)
  attributes = preferences.entry_font_attributes
  color = preferences.entry_font_color

  font_manager.setSelectedAttributes(attributes, isMultiple:false)
  color_panel.setColor(color) if preferences.entry_font_color

  self.did_open_font_panel = true
end

1 Ответ

4 голосов
/ 12 июля 2011

Есть странность в инициализации sharedFontPanel. Если вы установили шрифт до его создания в первый раз, это работает нормально, но установка атрибутов - нет.

Сначала нужно сделать makeKeyAndOrderFront, а затем установить атрибуты. Когда панель будет создана таким образом в первый раз, она будет правильно отражать setSelectedAttributes.

  font_panel.makeKeyAndOrderFront(sender)
  font_manager.setSelectedAttributes(attributes, isMultiple:false)
...