Кварцевый код для создания кнопки? - PullRequest
2 голосов
/ 17 июня 2011

Какао / Карбон использует кварц для создания пользовательского интерфейса. Я пытаюсь получить кварцевый код, сгенерированный при создании кнопки в какао?

NSButton *myButton = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(20,20,200, 44))];
[myButton setTitle:@"Click Me!"];
[myButton setBezelStyle:NSRoundedBezelStyle];
[[window contentView] addSubview:myButton];

Или, пожалуйста, дайте мне знать немного низкоуровневый вызов, чтобы создать Button в Какао что-то похожее на

extern OSStatus 
HIThemeDrawButton(
  const HIRect *                 inBounds,
  const HIThemeButtonDrawInfo *  inDrawInfo,
  CGContextRef                   inContext,
  HIThemeOrientation             inOrientation,
  HIRect *                       outLabelRect)

Любая помощь высоко ценится.

Спасибо.

1 Ответ

3 голосов
/ 17 июня 2011

Я пытаюсь получить кварцевый код, сгенерированный, когда мы создаем кнопку в какао?

Вы не можете этого получить, потому что такого не получается.

Создание кнопки не генерирует код, кварц или иное.Код уже написан;он просто используется новым объектом кнопки, когда этому объекту приказано рисовать, при этом кнопка (со всеми ее свойствами) предоставляется коду в качестве входных данных.То же самое относится и к вашим drawRect: реализациям.

Хотя в случае AppKit это немного более абстрактно.В последних двух версиях Mac OS X Apple перешла к описанию появления стандартных представлений в файлах XML.Платформа, называемая Core UI, реализует чертеж, следуя этим «рецептам» XML;это, по-видимому, в конечном итоге приводит к вызову функций Quartz (хотя это еще не обязательно означает, что генерируется какой-либо код).

Джон Сиракуза в общих чертах рассказывает об основном интерфейсе ядра в своем обзоре Leopard.

HITheme и Appearance Manager в настоящее время, вероятно, оба выполняют вызов Core UI одинаково, хотя они только рисуют кнопку (или что-то еще).Это единственный общедоступный способ сделать это без создания реальной кнопки, которая может реагировать на события.

В рамках моего исследования мне нужно доказать, что весь пользовательский интерфейс фреймворков Cocoa / Carbon делаетв этом вам может помочь использование Quartz…

otx : он позволяет разбирать фреймворки, чтобы увидеть, что они на самом деле делают.Имейте в виду, что это нарушает лицензионное соглашение Mac OS X.

… и все их можно визуализировать с использованием кварца.

Это так.Это может занять много работы, чтобы получить богато разработанные полностью векторные представления (поиграйтесь с масштабным коэффициентом в Quartz Debug и посмотрите, как векторизованные элементы управления разваливаются), но это возможно.Даже если вы создадите и просто начертите растровое изображение, вы все равно будете использовать Quartz для этого.

Чего AppKit почти наверняка не сделает, так это рисовать с использованием Quartz напрямую.Это была работа HITheme (и внешнего вида менеджера до этого), и теперь это основной пользовательский интерфейс.Я ожидаю увидеть AppKit, использующий HITheme, HITheme, использующий Core UI, и Core UI, использующий Quartz.

...