Информация о версии HIToolbox для OS X v10.5
Примечания выпуска Developer Leopard OS X: панель инструментов высокого уровня
Для получения информации о версии Панели инструментов Высокого уровня для 10,4 и ранее, см. HIToolboxOlderNotes.
Панель инструментов Высокого уровня является подсистемой платформы Углерода для OS X. Это составлено из трех платформ: HIToolbox, HIServices и NavigationServices. Этот документ обсуждает изменения в этих трех платформах для Leopard OS X.
Функции и улучшения
Главные новые функции в HIToolbox, HIServices и платформах NavigationServices для Leopard OS X:
- HIToolbox и платформы HIServices доступны для использования в 64-разрядных приложениях, но не весь APIs доступны. В частности APIs HIToolbox для создания и управления элементами UI (меню, окна и представления) не доступен. Используйте Какао для создания UI для 64-разрядного приложения. Платформа NavigationServices не обеспечивает 64-разрядный API.
- HIToolbox поддерживает дисплеи с высокой разрешающей способностью через платформу, масштабирующуюся для составления композита окон и автоматического увеличения для существующих приложений. Эта функция находится все еще в предварительном просмотре разработчика, утверждают, и не предназначается для использования конечными пользователями; в текущей реализации существуют известные ошибки. Однако реализация значительно улучшилась, так как Тайгер и мы призываем разработчиков приложений включать масштабируемый платформой режим в составляющих композит окнах и тестировать их приложения с не1.0 масштабными коэффициентами.
- Новый HIView, HICocoaView, позволяет обертывать произвольный NSView в HIView так, чтобы NSView мог использоваться в окне Carbon.
- Диалоговые окна Navigation Services теперь реализованы с помощью Какао NSOpenPanel и NSSavePanel APIs, гарантировав, чтобы приложения Углерода получили те же улучшения UI как приложения Какао.
- Новый набор API, Источники Ввода текста, заменяет большую часть существующего менеджера по Сценарию, Клавиатуры и TextServices APIs.
- Много стандартов просматривают поддержку, указывающую содержимое изображения представления с помощью CFURLRef или CFString именование ресурса в пакете приложения.
- Обработчики событий углерода могут использоваться, чтобы получить и обработать AppleEvents.
- Новый APIs HIObject позволяет HIObject быть присоединенным как делегат в другом HIObject.
- Комплект события Carbon для делегатов ХАЙОБДЖЕКТА был определен, и демонстрационный делегат Хайобджект - то, при условии, что может использоваться для автоматического ограничения длины поля редактирования текста.
- Менеджер по Меню поддерживает встраивание HIViews в пунктах меню.
- Можно теперь указать, что пользовательский HIObject разделяет на подклассы ID и пользовательские init параметры события в InterfaceBuilder для всех стандартных средств управления и представлений. Эта возможность требует использования IB 3.0.
- Визуальное появление для всех типов окон (стандарт, объединенный, и металл), изменилось для использования единственного общего появления, подобного объединенному появлению предварительного Leopard.
- HIThemeDrawTextBox и HIThemeGetTextDimensions APIs теперь поддерживают рисование и измерение CFAttributedStrings.
- Стандартные представления, составляющие текст, за исключением представлений EditText и EditUnicodeText и HITextView, теперь поддерживают установку шрифта текста к CTFontRef.
- Менеджер по Меню теперь поддерживает установку текста пункта меню с помощью приписанной строки, и устанавливая шрифт пункта меню или пункта меню с помощью CTFontRef.
- Новый заголовочный файл, HIToolboxDebugging.h, объявляет функции утилиты отладки, предоставленные HIToolbox для использования из gdb.
- Менеджер окон обеспечивает множество нового APIs, берущего или возвращающего положения окна и формы с помощью HIRects и HIShapes.
- Менеджер окон теперь поддерживает обеспечение пользовательского представления, расположенного в расположение панели инструментов для использования приложениями, которые не могут использовать стандартный HIToolbar API.
- Менеджер по Области монтажа теперь определяет протокол для многообещающих файлов, как перетаскивают содержание, которое не является на основе осуждаемого типа FSSpec.
- Новый APIs предоставлен для определения, должны ли окно или представление нарисовать свое содержание с фокусируемым появлением, и для определения фокусируемого окна во время отслеживания меню. См. «Модальный Фокус» в Менеджере окон.
Подсказки для совместимости с Leopard OS X
Мы заметили, что некоторые приложения могут быть несовместимыми с Leopard вследствие изменений в HIToolbox или HIServices. Вот некоторые изменения, которые могут влиять на Ваше приложение, и как можно адаптироваться, чтобы остаться совместимыми:
- Окна, создаваемые ShowStandardAlert и CreateStandardAlert APIs, теперь составляют композит. Некоторые приложения добавили свои собственные средства управления к этим окнам после того, как окно создается, и ожидайте обработку событий, «не составляющую стиль» для окна (такого как координаты мыши в координатах порта QuickDraw, а не локальных координатах представления). Apple не рекомендует или поддерживает добавление Ваших собственных средств управления к стандартному предупредительному окну, и если Вы делаете так, Ваше приложение должно быть в состоянии обработать и несоставляющую композит и составляющую композит обработку событий.
- Когда перетаскивание не принято получателем (4065651), TrackDrag теперь возвращает dragNotAcceptedErr. Ранее, userCanceledErr был возвращен в этом случае, но в Leopard userCanceledErr резервируется только для экземпляров, когда пользователь явно отменяет перетаскивание через сочетания клавиш cmd-периода или Escape. Ваше приложение должно быть подготовлено получить dragNotAcceptedErr как возможное возвращаемое значение от TrackDrag.
- Диалоговые окна Navigation Services, предлагаемые до Leopard OS X, оказалось, работали, когда выведено на экран от совместного потока, который не был основным потоком, несмотря на то, что это официально не поддерживалось. Новая реализация Какао диалоговых окон Navigation Services не работает ни от какого потока кроме основного потока. Поэтому любые вызовы, чтобы создать или вывести на экран Военно-морское диалоговое окно от неосновного потока заставят Navigation Services переключаться в режим эмуляции, в котором это будет использовать классические Основанные на углероде диалоговые окна, а не диалоговые окна Какао.
- HIViewCreateOffscreenImage теперь создает изображения собственного порядка байтов (4555266). Ваше приложение не должно принимать определенный порядок байтов для данных CGImage.
- До Leopard, вызывая InstallStandardEventHandler на цели приложения не имел никакого эффекта. В Leopard это теперь устанавливает стандартный обработчик приложения, использующийся RunApplicationEventLoop. Этот обработчик диспетчеризирует AppleEvents, если это получит событие kEventAppleEvent Carbon. Некоторые приложения вызывали InstallStandardEventHandler на цели приложения (по-видимому не понимание, что это ничего не сделало), и предполагая, что AppleEvents не будет диспетчеризирован до приложения под названием RunApplicationEventLoop. Это предположение больше не корректно. Если для Вашего приложения не нужен AppleEvents, который будет диспетчеризирован, не устанавливайте стандартный обработчик событий на цели приложения.
- Маршрутизация события клавиатуры во время отслеживания меню изменилась. До Leopard нажатие клавиши, вызвавшее изменение в выборе пункта меню (таком как клавиши со стрелками или Вкладка) будет сразу обработано во время отслеживания меню и не было бы отправлено в другие цели события вне самого меню. В Leopard, для поддержки HIViews с клавиатурным фокусом, встроенным в меню, все ключевые события отправляются в цель диспетчера события, преобразовывающую их в kEventClassTextInput события и снова посылающую их цели диспетчера события. Менеджер по Меню выполняет перемещение с помощью клавиатуры и выбор типа на основе kEventTextInputUnicodeForKeyEvent события. Это изменение в маршрутизации вызвало проблемы для приложений, устанавливающих kEventRawKeyDown/Repeat обработчики событий на диспетчере события или целях приложения. Ранее, эти обработчики не вызвали бы для нажатий клавиш перемещения с помощью клавиатуры, таких как клавиши со стрелками, но в Leopard они. Существует несколько способов избежать этой проблемы: (1) используйте kEventMenuBeginTracking и kEventMenuEndTracking события для контроля, когда отслеживание меню происходит, и проигнорируйте необработанные ключевые события, полученные обработчиками во время отслеживания меню; (2) устанавливают Ваши необработанные обработчики ключевого события на окне или представлении, а не на приложении или целях диспетчера события; или (3) не устанавливают обработчики для kEventRawKeyDown/Repeat, но используют kEventTextInputUnicodeForKeyEvent и устанавливают Ваш обработчик на окне, представлении или цели приложения, а не на цели диспетчера события.
- При рисовании с QuickDraw в мозаику Прикрепления для приложения или окна, некоторые приложения используют QDFlushPortBuffer, чтобы заставить получение быть сброшенным к мозаике Прикрепления, не вызывая EndQDContextForApplicationDockTile или ReleaseQDContextForCollapsedWindowDockTile. Вследствие изменения в реализации Прикрепления в Leopard, сбрасывая порт QuickDraw для мозаики больше не имеет эффекта. Мы надеемся адресовать это в будущем обновлении программного обеспечения Leopard, но до тех пор мы рекомендуем, чтобы приложения использовали CoreGraphics для вовлечения мозаики Прикрепления (создающий контекст CG с BeginCGContextForApplicationDockTile или HIWindowCreateCollapsedDockTileContext) и CGContextFlush, чтобы заставить мозаику Прикрепления обновлять.
Создание отчетов ошибки
Мы призываем всех разработчиков регистрировать ошибки, найденные в Leopard OS X в <http://bugreport.apple.com>. Двойные ошибки не являются проблемой; зарегистрируйте ошибку с мыслью, что, «конечно, кто-то еще уже, должно быть, нашел это».
Обратная связь
Основной метод подчиняющейся обратной связи, такой как отчеты об ошибках и запросы улучшения, должен зарегистрировать веб-сайт генератора отчетов ошибки Apple использования ошибок, как описано выше. Это - единственный способ гарантировать, что Вашу обратную связь считает и рассмотрит разработка Apple.
Для обратной связи и комментариев о HIToolbox, HIServices и Navigation Services APIs и функции, можно послать по электронной почте hitoolbox-feedback@group .apple.com. Намерение этого адреса состоит в том, чтобы предоставить разработчикам прямой канал команде инженеров, ответственной за эти технологии. Мы считаем Ваш ввод и попытаемся подтвердить его, но у нас не могло бы всегда быть времени для ответов. Используйте этот адрес для обратной связи, и комментирует APIs и функции (например, «добавьте классы обертки QuickTime HIToolbox» или «Мне нужен API, чтобы сделать это и что»), но не для вопросов о типе поддержки (например, «Я не могу установить OS X» или, «Как каждый создает новый пакет в XCode?») или комментарии в других областях (например, «почему прикрепление центрируется в Воде?»).
Для обсуждения среди разработчиков существует carbon-dev@lists .apple.com список рассылки. Как все списки рассылки Apple, можно подписаться на этот список в http://lists .apple.com/. Несмотря на то, что некоторые сотрудники Apple действительно читают и реагируют на этот список, они делают так в свободное время, не как часть их должностных обязанностей. Этот список может помочь разработчикам найти решения своих проблем между собой. Упоминание проблемы о списке не является каналом для запроса справки от Apple; единственные способы получить справку непосредственно от Apple путем регистрации ошибки или запроса помощи со стороны Технической поддержки Разработчика Apple.
Доступность
Заголовочные файлы (HIServices): AXConstants.h, AXError.h, AXUIElement.h, AXValue.h
Заголовочные файлы (HIToolbox): HIAccessibility.h
Функции и улучшения
События Accessibility Carbon и APIs HIObject были перемещены в отдельный заголовочный файл, HIToolbox/HIAccessibility.h.
Менеджер по появлению
Заголовочные файлы (HIToolbox): Appearance.h, HITheme.h
Функции и улучшения
Экспортируемый kThemeAdornmentArrowRightArrow, который будет использоваться с HIThemeDrawButton и kThemeDisclosureTriangle при рисовании промежуточных этапов анимации треугольника (2641747). Эта константа также работает над Тайгером.
Добавленный kThemeTrackHideTrack, который будет использоваться в поле атрибутов HIThemeTrackDrawInfo, передал HIThemeDrawTrack для исключения части дорожки дорожки (т.е. поле и стрелки полосы прокрутки или канавка ползунка) (3689743).
Экспортируемый kThemeMetricButtonRoundedHeight и kThemeMetricButtonRoundedRecessedHeight (4192445). Это высоты кнопок с загругленными краями, как используется в интерфейсе Поискового запроса Средства поиска. Эти метрики были представлены поздно в Тайгере и не были разглашены, поскольку были заморожены заголовки.
Добавленный kThemeMetricSeparatorSize для получения высоты горизонтального разделителя или ширины вертикального разделителя, где разделитель - то, что нарисовано управлением разделителем (который использует примитивную тему HIThemeDrawSeparator) (2885092).
Новый API HIThemeGetTextColorForThemeBrush был добавлен. В сочетании с новым API HIWindowGetThemeBackground и HIThemeSetTextFill, это может использоваться для замены SetThemeTextColorForWindow.
Добавленный HIThemeBeginFocus и HIThemeEndFocus для обеспечения рисования фокуса вокруг произвольных Кварцевых операций рисования. HIThemeBegin/EndFocus может использоваться для замены вызовов к DrawThemeFocusRegion.
Новый API, HIThemeGetUIFontType, предоставлен для преобразования ThemeFontID в CTFontUIFontType. Как только у Вас есть CTFontUIFontType, можно получить CTFontRef для того использования типа шрифта CTFontCreateUIFontForLanguage. Таким образом можно определить CTFontRef, соответствующий определенному ThemeFontID.
Две новых метрики темы, kThemeMetricTexturedPushButtonHeight и kThemeMetricTexturedSmallPushButtonHeight, предоставлены для возврата оптимальной высоты для кнопки с помощью kThemePushButtonInset или kThemePushButtonInsetSmall видов кнопки темы. Можно создать такую кнопку путем создания косоугольной кнопки и вызова SetControlData с kControlBevelButtonKindTag для установки вида косоугольной кнопки соответственно.
HIThemeDrawTextBox и HIThemeGetTextDimensions APIs теперь поддерживают CFAttributedStringRef. Можно передать приписанную строку этому APIs, и она будет нарисована или измерена соответственно. Шрифт темы, который Вы указываете к этому APIs, применяется к любой части строки, уже не имеющей указанного шрифта; части строки, уже имеющие атрибут шрифта, сохранят тот атрибут.
inString параметр HIThemeDrawTextBox и HIThemeGetTextDimensions APIs теперь вводится как CFTypeRef, а не CFStringRef. Это позволяет Вам передавать CFAttributedStringRef без кастинга.
Более старый текст темы APIs (DrawThemeTextBox, GetThemeTextDimensions и TruncateThemeText) не поддерживает CFAttributedStringRef и возвратит paramErr, если передано приписанная строка.
Осуждение API
Большая часть находящегося в QuickDraw менеджера по Появлению APIs теперь осуждается. Необходимо переключиться на находящийся в CoreGraphics APIs HITheme вместо этого. Следующие определения типов и APIs осуждаются для Leopard:
- ThemeTabTitleDrawProcPtr
- ThemeEraseProcPtr
- ThemeButtonDrawProcPtr
- WindowTitleDrawingProcPtr
- ThemeIteratorProcPtr
- MenuTitleDrawingProcPtr
- MenuItemDrawingProcPtr
- ApplyThemeBackground
- DrawThemeButton
- DrawThemeChasingArrows
- DrawThemeEditTextFrame
- DrawThemeFocusRect
- DrawThemeFocusRegion
- DrawThemeGenericWell
- DrawThemeListBoxFrame
- DrawThemeMenuBackground
- DrawThemeMenuBarBackground
- DrawThemeMenuItem
- DrawThemeMenuSeparator
- DrawThemeMenuTitle
- DrawThemeModelessDialogFrame
- DrawThemePlacard
- DrawThemePopupArrow
- DrawThemePrimaryGroup
- DrawThemeScrollBarArrows
- DrawThemeScrollBarDelimiters
- DrawThemeSecondaryGroup
- DrawThemeSeparator
- DrawThemeStandaloneGrowBox
- DrawThemeStandaloneNoGrowBox
- DrawThemeTab
- DrawThemeTabPane
- DrawThemeTextBox
- DrawThemeTickMark
- DrawThemeTitleBarWidget
- DrawThemeTrack
- DrawThemeTrackTickMarks
- DrawThemeWindowFrame
- DrawThemeWindowHeader
- DrawThemeWindowListViewHeader
- GetThemeButtonBackgroundBounds
- GetThemeButtonContentBounds
- GetThemeButtonRegion
- GetThemeFont
- GetThemeMenuBackgroundRegion
- GetThemeScrollBarTrackRect
- GetThemeStandaloneGrowBoxBounds
- GetThemeTabRegion
- GetThemeTextDimensions
- GetThemeTrackBounds
- GetThemeTrackDragRect
- GetThemeTrackLiveValue
- GetThemeTrackThumbPositionFromOffset
- GetThemeTrackThumbPositionFromRegion
- GetThemeTrackThumbRgn
- GetThemeWindowRegion
- GetThemeWindowRegionHit
- HitTestThemeScrollBarArrows
- HitTestThemeTrack
- IsThemeInColor
- IsValidAppearanceFileType
- IterateThemes
- SetTheme
- SetThemeBackground
- SetThemePen
- SetThemeTextColor
- TruncateThemeText
- UseThemeFont
Изменения реализации
Менеджер по Появлению поддерживает дисплеи с высокой разрешающей способностью. Это может теперь нарисовать масштабируемые иллюстрации для всех примитивов появления, обеспечив высококачественное появление в любом разрешении.
AppleEvents
Заголовочный файл (HIToolbox): AEInteraction.h
Функции и улучшения
AEProcessEvent API был представлен, чтобы позволить обрабатывать событий kEventAppleEvent Carbon без первого преобразования события Carbon к EventRecord. Мы ожидаем осуждать классического менеджера по корпоративным мероприятиям API в будущем выпуске OS X, и этот новый API позволяет Вашему приложению обрабатывать AppleEvents, не используя классического менеджера по корпоративным мероприятиям.
Администратор приложений
Заголовочный файл (HIToolbox): Макэппликэйшн.х
Функции и улучшения
Новый API, HIApplicationCreateDockTileContext, теперь доступен для создания CGContextRef для вовлечения мозаики Прикрепления приложения. Приложения могут дополнительно принять решение использовать этот API вместо существующего BeginCGContextForApplicationDockTile API. Новый API предлагает приложениям возможность вовлечь мозаики Прикрепления в разрешении кроме 128x128, который был размером всех мозаик Прикрепления до Leopard. Когда масштабный коэффициент пользовательского интерфейса кроме 1,0 используется, мозаики прикрепления могут теперь использовать различные размеры. В этом случае существующий BeginCGContext API применит преобразование к возвращенному CGContextRef, чтобы позволить приложениям продолжать рисовать в 128x128; получение будет масштабироваться к фактическому размеру мозаики. Новый API не применяет преобразование, но действительно возвращает фактический размер мозаики, таким образом, приложения могут вовлечь надлежащее ограничение rect.
Поскольку размер мозаики Прикрепления может теперь измениться динамично, приложения, использующие HIApplicationCreateDockTileContext, должны быть подготовлены перерисовать свою мозаику Прикрепления по мере необходимости. Когда приложение должно перерисовать свою мозаику Прикрепления, событие kEventAppUpdateDockTile Carbon теперь отправляется.
HIApplicationGetFocus API предоставлен, чтобы позволить приложениям получать или традиционное (немодальное) окно фокуса или модальное окно фокуса. Посмотрите раздел Window Manager этой документации для большего количества обсуждения модального фокуса.
kHIApplicationClassID константа теперь публикуется. Эта константа определяет класс HIObject ID для объекта приложения. Это допустимо в 10,3 и позже. В 10,5 и позже, можно создать подкласс этого класса ID и инстанцировать его как первого действия в основной функции, и подкласс будет использоваться в качестве одноэлементного объекта приложения Углерода для процесса.
Менеджер событий углерода
Заголовочные файлы (HIToolbox): CarbonEvents.h, CarbonEventsCore.h
Функции и улучшения
Менеджер событий Углерода теперь использует CGEventRefs внутренне при получении событий от сервера окна. Два новых APIs был добавлен для разрешения преобразования между событием Carbon и CGEventRef: CreateEventWithCGEvent и CopyEventCGEvent.
Когда менеджер событий Углерода получает событие клавиатуры от сервера окна, он теперь проверяет событие, чтобы определить, содержит ли он текст Unicode, добавленный использованием создателя события CGEventKeyboardSetUnicodeString. Если так, вместо того, чтобы создавать событие kEventRawKeyDown Carbon, kEventTextInputUnicodeText событие создается вместо этого. Это событие отправляется на очередь событий как нормальное, и когда диспетчер события получает событие, диспетчер вызывает SendTextInputEvent на событии. SendTextInputEvent преобразовывает событие в kEventTextInputUnicodeForKeyEvent событие и снова посылает его диспетчеру события. Эти изменения позволяют прямое введение текста Unicode в использование приложений Углерода и Какао CGEventKeyboardSetUnicodeString, не будучи должен использовать виртуальные коды клавиши или CGPostKeyboardEvent API.
kEventParamPostOptions параметр события был задокументирован. Этот параметр может быть добавлен к событию, отправляющемуся на основную очередь событий с PostEventToQueue. Когда событие обрабатывается целью диспетчера события, если настоящее, его содержание передается SendEventToEventTargetWithOptions. Этот параметр поддерживается на OS X v10.0 и позже.
Несколько новых типов параметра события были добавлены для помощи в подавании заявки, совместимой и с 32-разрядным и с 64-разрядным HIToolbox: typeRefCon, typeByteCount, и typeByteOffset.
Параметры события, ранее использовавшие typeGDHandle теперь, используют typeCGDisplayID (CGDirectDisplayID).
Следующие приведения параметра события были добавлены:
- typeVoidPtr <-> typeSInt32 (32-разрядный только)
- typeVoidPtr <-> typeUInt32 (32-разрядный только)
- typeByteCount <-> typeSInt32 (32-разрядный только)
- typeByteOffset <-> typeSInt32 (32-разрядный только)
- typeGDHandle <-> typeCGDisplayID (32-разрядный только)
Эти новые приведения предоставляют совместимости существующие приложения при запросе параметров события, базовые типы данных которых изменились в Leopard.
RemoveStandardEventHandler API был добавлен. Это запросы API, что цель события демонтирует стандартный обработчик, установленный InstallStandardEventHandler (если таковые имеются). Вызовы к InstallStandardEventHandler и RemoveStandardEventHandler nestable; стандартный обработчик для цели события будет только демонтирован, когда то же число вызовов было сделано демонтировать обработчик, как были сделаны установить обработчик.
HIGetMousePosition API был добавлен. Это - современная замена для GetMouse API, который возвратит положение мыши в параметре HIPoint. Кроме того, позицию мыши можно требовать относительно окна или представления, а не просто глобально.
HIObjectGetEventHandlerObject API, добавленный к менеджеру HIObject в Leopard, полезен во многих типах обработчиков событий Углерода. Этот API возвращает HIObject, в настоящее время обрабатывающий событие (т.е. HIObject, на котором обработчик событий установлен), или если обработчик установлен на делегате HIObject объект, это возвращает HIObject, на котором установлен объект делегата. Вы могли бы счесть этот API полезным при обработке события, не имеющего параметра прямого дополнения; в этом случае можно использовать API для обнаружения, какой объект получил событие.
Цель события приложения теперь поддерживает InstallStandardEventHandler. Стандартный обработчик событий приложения также установлен автоматически RunApplicationEventLoop. Стандартный обработчик событий приложения обрабатывает kEventCommandProcess (для kHICommandAbout, kHICommandQuit, и kHICommandShowHideFontPanel команды IDs) и kEventAppleEvent.
kHICommandCloseFile команда ID была добавлена для использования с пунктом меню «Close File», как указано в Инструкциях по Интерфейсу пользователя OS X (4028591). Нет никакого обработчика по умолчанию для этой команды ID; приложения должны реализовать свою собственную поддержку его.
Новый API, RemoveEventParameter, позволяет Вам удалять параметр, который ранее был сохранен в событии.
HIMouseTrackingGetParameters API поддерживает три новых селектора: kMouseParamsProxyIcon, kMouseParamsClickAndHold, и kMouseParamsDragInitiation.
В Events.h новый набор констант доступен, который определяет стандартные виртуальные значения кода клавиши для стандартной ANSI раскладки клавиатуры США, а также независимые от раскладки клавиатуры ключи и некоторые ключи JIS и ISO (3320456).
Документация для события kEventWindowSetupProxyDragImage Carbon теперь упоминает, что обработчики для этого события могут возвратить CGImageRef вместо GWorldPtr. Поддержка параметра CGImageRef фактически была доступна начиная с OS X v10.2.
kEventWindowGetIdealStandardState событие было обнародовано. Это событие отправляется IsWindowInStandardState и ZoomWindowIdeal, чтобы решить, что стандарт (уменьшил) состояние окна. Приложение может переопределить это событие для настройки стандартного состояния; например, если приложение имеет окна палитры инструментов вокруг краев дисплея, оно могло бы хотеть скорректировать стандартное состояние, чтобы избежать масштабировать под этими окнами палитры. Это событие фактически доступно в OS X v10.4 и позже.
Новая маска опции, kTrackMouseLocationOptionIncludeScrollWheel, определяется для использования с TrackMouseLocationWithOptions, HIViewTrackMouseLocation и HIViewTrackMouseShape (4537320). Эта опция указывает, что отслеживание, которое API должен проверить на события Carbon колеса мыши (kEventMouseWheelMoved и kEventMouseScroll) и возврат из цикла, если замечено любое событие.
Новые и улучшенные события углерода
Следующие события Carbon являются новыми для Leopard OS X:
- kEventMouseScroll (фактически доступный начиная с OS X v10.4)
- kEventSystemDisplaysAsleep (фактически доступный начиная с OS X v10.4)
- kEventSystemDisplaysAwake (фактически доступный начиная с OS X v10.4)
- kEventWindowTitleChanged (фактически доступный начиная с OS X v10.2)
- kEventControlFocusPartChanged
- kEventControlOptimalBoundsChanged
- kEventDataBrowserDrawCustomItem
- kEventTextInputIsMouseEventInInlineInputArea
- kEventTSMDocumentAccessGetFirstRectForRange
- kEventAppUpdateDockTile
- kEventWindowUpdateDockTile
- kEventWindowFocusLost
- kEventWindowFocusRestored
- kEventSystemDisplayReconfigured
- kEventHIObjectCreatedFromArchive
- kEventHIObjectGetInitParameters
- kEventDelegateInstalled
- kEventDelegateRemoved
- kEventDelegateGetTargetClasses
- kEventDelegateIsGroup
- kEventDelegateGetGroupClasses
Следующие типы параметра события, доступные в Leopard, позволяют клиентам явно утверждать координатное пространство точки, размера, прямоугольника или скаляра. Автоматические переводы предоставлены между различными координатными пространствами и исходным typeHIPoint, typeHISize, typeHIRect и typeCGFloat типами параметра. Для получения дополнительной информации о координатных пространствах см. HIGeometry.h.
- typeHIPoint72DPIGlobal
- typeHIPointScreenPixel
- typeHISize72DPIGlobal
- typeHISizeScreenPixel
- typeHIRect72DPIGlobal
- typeHIRectScreenPixel
- typeCGFloat72DPIGlobal
- typeCGFloatScreenPixel
kEventControlHit событие теперь включает kEventParamClickCount параметр, указывающий количество щелчка исходного события mouseDown (3842062). Обратите внимание на то, что этот параметр является дополнительным и не будет присутствовать во всех экземплярах этого события, особенно если Доступность, API используется для моделирования щелчка по управлению, или если клиент вызвал HIViewSimulateClick.
Ранее, события колесика прокрутки всегда направлялись Сервером Окна к активному приложению. Теперь, Сервер Окна направляет эти события к приложению, которому принадлежит окно под мышью, даже если то приложение неактивно. HIToolbox ранее предотвратил события колесика прокрутки, полученные неактивным приложением от того, чтобы быть превращенным в события Carbon, но теперь позволяет это преобразование.
Флаги контекста меню
Функция Spotlight Help в Leopard требует, чтобы сканирование содержания меню приложения создало индекс текста пункта меню. Этот индекс используется, когда Вы вводите в Меню справки для нахождения пунктов меню, соответствующих строку поиска.
Для поддержки содержимого меню изменяющегося динамично, функция Spotlight Help должна повторно индексировать содержимое меню каждый раз, когда Меню справки открыто. Прежде, чем исследовать содержание меню, Справка Центра внимания отправляет несколько событий Carbon, чтобы позволить приложению заполнять меню с новым содержимым меню. Если содержимое меню является дорогим для определения, это может быть довольно медленно время от времени, особенно.
Чтобы позволить приложениям оптимизировать обновление содержимого меню, несколько новых битовых флагов были определены как часть битового поля MenuContext. Эти флаги:
- kMenuContextInspection: указывает, что событие Carbon отправляется, потому что кто-то проверяет содержимое меню.
- kMenuContentDontUpdate[Text|Icon|Key|Enabled]: указывает, что отправитель событий Carbon не должен проверять указанное содержимое меню. Это позволяет обработчику событий оптимизировать довольный обновление, не обновляя это содержание. Например, Справка Центра внимания не нуждается в командных клавишах, значках, или включает состояние, таким образом, это установит все те флаги.
Эти флаги включены в события Carbon, такие как kEventMenuOpening, kEventMenuPopulate, kEventMenuEnableItems, и kEventCommandUpdateStatus.
Обработка AppleEvent с событиями углерода
Менеджер событий Углерода в Leopard позволяет AppleEvents быть обработанным с помощью Обработчиков событий Углерода.
Для обработки AppleEvent с помощью обработчика событий Углерода Вы должны:
- Установите свой обработчик событий Углерода с помощью класса AppleEvent и вида на цели события приложения.
- Используйте GetEventParameter для получения параметров от AppleEvent.
- Поочередно, используйте kEventParamAppleEvent/typeAppleEvent с GetEventParameter для получения структуры AppleEvent от события Carbon. Это - исходный AppleEvent, отправленный в Ваше приложение. Можно использовать менеджера AppleEvent API для получения параметров AppleEvent и атрибутов от события.
- Используйте SetEventParameter для хранения параметров в ответ AppleEvent.
- Поочередно, используйте kEventParamAppleEventReply/typeAppleEvent для получения ответа структура AppleEvent от события Carbon. Измените использование ответа менеджер AppleEvent API.
Если необходимо получить параметр AppleEvent, который является списком (AEDescList), можно использовать GetEventParameter с typeAEDescList, чтобы сделать это. Буфером вывода должен быть AEDescList. В этом случае необходимо вызвать AEDisposeDesc на AEDescList, когда Вы сделаны с ним (в отличие от нормальных параметров события Углерода, которые не должны быть освобождены).
Как с нормальной обработкой событий Углерода, если Ваш обработчик возвращает eventNotHandledErr, AppleEvent будет передан любым другим обработчикам событий Углерода, зарегистрированным для того же AppleEvent, и затем к любым обработчикам AppleEvent. Если Ваш обработчик возвратит какое-либо другое значение, то обработка AppleEvent остановится с Вашим обработчиком.
Обратите внимание на то, что, в то время как можно вызвать CallNextEventHandler в обработчике событий Углерода для AppleEvent, делание так только вызовет другие обработчики событий Углерода для того AppleEvent; это не вызовет обработчики AppleEvent. Обработчики AppleEvent не вызовут до Ваших возвратов обработчика событий Углерода.
Известные исправления ошибок
ReleaseWindowMouseTrackingRegions API был фиксирован для корректного выпуска областей (3102994). Этот API не функционировал правильно в предыдущих выпусках (назад к и включая OS X v10.2). До Leopard клиенты должны выпустить MouseTrackingRefs с ReleaseMouseTrackingRegion API для каждой ссылки.
InstallEventLoopTimer теперь устанавливает таймер в runloop использование постоянного CommonModes, а не DefaultMode, постоянный (4357867). Это изменение прежде всего предназначается для получения преимуществ приложениям, использующим оба окна Carbon и Cocoa. В то время как мышь вниз прослеживается в управлении, AppKit выполнит runloop в режиме, который не является режимом по умолчанию, который ранее отключил бы таймеры цикла событий Углерода. С этим изменением таймеры цикла событий будут продолжать стрелять при отслеживании средств управления в окне Cocoa. Это поведение уже было на месте для мужественных приложений, соединенных на OS X v10.3 и позже; мы не видели проблем совместимости от этого изменения, таким образом, это поведение теперь также используется для мужественных приложений, соединенных на любом выпуске OS X, и для всех приложений CFM.
Диалоговый менеджер
Заголовочный файл (HIToolbox): Dialogs.h
Функции и улучшения
StandardAlert и CreateStandardAlert теперь позволяют defaultButton и cancelButton полям их параметра AlertStdAlertParamRec/AlertStdCFStringAlertParamRec быть установленным в то же значение (2265821). Это позволяет стандартному предупреждению иметь ту же кнопку, реагируют и на значение по умолчанию и отменяют эквиваленты клавиатуры.
StandardAlert и CreateStandardAlert теперь позволяют defaultButton полю их параметра AlertStdAlertParamRec/AlertStdCFStringAlertParamRec быть установленным в нуль (3484210). Это позволяет стандартному предупреждению не иметь никакой кнопки по умолчанию вообще.
Две новых константы, kDialogFlagsUseCompositing и kAlertFlagsUseCompositing, могут использоваться в 'dlgx' и 'alrx' ресурсах в поле флагов. Эти константы указывают, что Диалоговый менеджер должен создать диалоговый или предупредительный режим составления композита использования окна. Обратите внимание на то, что составляющее композит диалоговое окно также использует стандартный обработчик событий окна, таким образом, ModalFilterProcPtr, переданный ModalDialog с таким окном, никогда не будет получать событий; события будут все обработаны стандартным обработчиком событий.
Изменения реализации
Для совместимости HiDPI диалоговые окна StandardAlert теперь составляют окна и используют масштабируемый платформой режим (4494014). Обратите внимание на то, что это может вызвать проблемы совместимости с приложениями, добавляющими их собственные средства управления к стандартным предупреждениям. См. «Подсказки для Совместимости с Leopard OS X».
Перетащите менеджера
Заголовочный файл (HIToolbox): Drag.h
Функции и улучшения
ShowDragHilite и HideDragHilite теперь вызывают HiliteWindowFrameForDrag. Документация HiliteWindowFrameForDrag утверждает, что ее вызывает этот APIs, но кажется, что они фактически никогда не делали так, по крайней мере не на OS X.
TrackDrag теперь принимает NULL RgnHandle.
Осуждение API
Вся разновидность Перетаскивания APIs осуждается для Leopard. Используйте GetDragPasteboard или NewDragWithPasteboard в дополнение к Области монтажа Углерода APIs. Хиллит Перетаскивания и прокрутка APIs были также осуждены для Leopard. Используйте kThemeBrushDragHilite кисть темы и нарисуйте выделение как часть Вашего пользовательского окна или управления, рисующего вместо этого.
Следующий APIs осуждается для Leopard:
- GetStandardDropLocation
- SetStandardDropLocation
- ZoomRects
- ZoomRegion
- SetDragItemFlavorData
- InstallTrackingHandler
- InstallReceiveHandler
- RemoveTrackingHandler
- RemoveReceiveHandler
- SetDragSendProc
- CountDragItems
- GetDragItemReferenceNumber
- CountDragItemFlavors
- GetFlavorType
- GetFlavorFlags
- GetFlavorDataSize
- GetFlavorData
- GetDropLocation
- SetDropLocation
- ShowDragHilite
- HideDragHilite
- DragPreScroll
- DragPostScroll
- UpdateDragHilite
- GetDragHiliteColor
Известные исправления ошибок
SetDragImageWithCGImage API теперь принимает изображения, создаваемые с любым типом альфа-значения (4031183). До Leopard только включительно были должным образом приняты изображения с альфа-информационным значением между kCGImageAlphaPremultipliedLast и kCGImageAlphaFirst.
Когда перетаскивание не принято получателем (4065651), TrackDrag теперь возвращает dragNotAcceptedErr. когда пользователь явно отменяет перетаскивание через сочетания клавиш cmd-периода или Escape, userCanceledErr резервируется только для экземпляров.
Менеджер по справке
Заголовочный файл (HIToolbox): Макхелп.х
Функции и улучшения
Менеджер по Справке всегда поддерживал автоматически добавление» <appname> Справка» пункт меню к Меню справки приложения, которое откроет книгу справки приложения, когда выбрано. Реализация заменяет именем приложения в локализованную строку для создания, например, «Моя Большая Справка Приложения».
На некоторых языках необходимо использовать другую форму имени приложения для получения надлежащего соглашения с локализованным словом для «Справки». Менеджер по Справке теперь поддерживает новый ключ Info.plist, «CFBundleHelpItemAppName», который может быть настроен к надлежащей форме для текущего языка. Если настоящее, значение этого ключа используется вместо имени приложения для замены в строке формата.
Например, если бы Вы хотели, чтобы Ваше Меню справки содержало «Справку Моего Большого Приложения» вместо «Моей Большой Справки Приложения», то Вы могли поместить ключ CFBundleHelpItemAppName в свой английский файл InfoPlist.strings и установить значение ключа, чтобы быть «Моим Большим Приложением».
Обратите внимание на то, что при использовании этого ключа в какой-либо локализации необходимо добавить его ко всем локализациям.
HIObjects
Заголовочный файл (HIToolbox): HIObject.h, HIArchive.h
Функции и улучшения
Менеджер HIObject поддерживает несколько новых APIs, чтобы позволить присоединять HIObject как делегат к событиям Carbon, отправленным в другой HIObject:
- HIObjectAddDelegate
- HIObjectRemoveDelegate
- HIObjectGetEventHandlerObject
(Последний API, HIObjectGetEventHandlerObject, может также быть полезным в нормальном обработчике событий Углерода неделегата.)
Объект делегата может получить события, отправленные в его целевой объект или прежде или после того, как целевой объект получит их. Используя делегата объект является удобным способом инкапсулировать данные и код для добавления определенного поведения к существующему объекту, такому как стандартное представление HIToolbox.
HIArchiveCreateForDecoding API теперь поддерживает новую опцию, kHIArchiveDecodingForEditor. Эта опция предназначается для использования редакторами UI, хотящими открыть, HIArchive, не имея архивных объектов выполняют их типичные действия, когда воссоздано от пера. Если эта опция установлена, kEventParamDecodingForEditor параметр kEventHIObjectInitialize и kEventHIObjectCreatedFromArchive событий устанавливается на истину, когда эти события отправляются в объекты в архиве.
HIObjectRegisterSubclass API теперь поддерживает новую опцию, kHIClassOptionSingleton. Эта опция указывает, что должен быть создан только единственный экземпляр класса. Если HIObjectCreate вызывают несколько раз на классе ID singleton-класса, сначала создаваемый экземпляр возвращается каждый раз (с надлежащим инкрементом в refcount экземпляра).
kEventClassDelegate комплект событий Carbon был добавлен. Эти события Carbon для использования делегатами HIObject. Они позволяют объекту делегата быть уведомленным, когда он установлен на или удален из его целевого объекта, и предоставить информацию о поведении делегата.
Новый API, HIObjectFromEventTarget, возвращает HIObject, которому принадлежит EventTargetRef.
Новый API, HIObjectCopyDelegates, возвращает словарь делегатов, которые привязаны к HIObject.
Новое событие Carbon, kEventHIObjectCreatedFromArchive, теперь отправляется в объекты, создающиеся из основанного на XML или находящегося в HIArchive файла (4169417) пера. Событие отправляется из вызова в CreateWindow/Menu/MenuBarFromNib. Для обработки этого события необходимо использовать или пользовательский HIView, встроенный в окно или делегата HIObject объект, класс которого ID указан в файле пера. Типичное использование этого события должно было бы позволить пользовательскому подклассу HIView инициализировать свои подпредставления после того, как они были созданы, когда пользовательское представление загружается из файла пера. В этом примере Ваш пользовательский HIView зарегистрировался бы для этого события, и когда событие было отправлено в обработчик событий Вашего представления, Ваше представление могло определить местоположение и инициализировать свои подпредставления.
Новый демонстрационный делегат HIObject, HITextLengthFilter, определяется в HITextLengthFilter.h. Этот HIObject разработан, чтобы быть инстанцированным Вашим приложением и установленным как объект делегата на объекте редактирования текста, таком как представление EditUnicodeText. После того, как установленный как делегат, объект HITextLengthFilter гарантирует, что сумма текста в поле редактирования текста ограничивается определенной длиной (указал, когда Вы инстанцировали объекта HITextLengthFilter).
Известные исправления ошибок
HIObjectCopyClassID можно теперь вызвать от kEventHIObjectConstruct обработчика, не отказывая (4347944).
HIShape
Заголовочные файлы (HIServices): HIShape.h
Функции и улучшения
API HIShape был перемещен от HIToolbox (часть Carbon.framework) к HIServices (часть ApplicationServices.framework). Так как Carbon.framework включает ApplicationServices.framework, это не будет влиять на существующие приложения, но позволит приложения, только соединяющиеся против ApplicationServices.framework для использования API HIShape.
Новый APIs HIShape был добавлен:
- HIShapeInset
- HIShapeSetWithShape
- HIShapeCreateXor
- HIShapeXor
- HIShapeEnumerate
- HIShapeCreateMutableWithRect
- HIShapeUnionWithRect
Весь APIs в HIShape.h теперь ориентирован на многопотоковое исполнение, и отмечен соответственно в документации заголовка. Просто APIs самостоятельно ориентирован на многопотоковое исполнение - HIShapeRefs не. Безопасно вызвать APIs HIShape на многократных потоках, пока никакие два потока не пытаются воздействовать на тот же HIShapeRef одновременно. При необходимости в многократных потоках для работы на единственный HIShapeRef одновременно, необходимо реализовать собственный механизм блокировки.
HIToolbar
Заголовочный файл (HIToolbox): HIToolbar.h
Функции и улучшения
Новый API, HIToolbarItemCopyIconRef, возвращает IconRef, если таковые имеются, связанный с элементом панели инструментов.
Несколько новых команд IDs были определены и отправляются стандартным представлением окна для запроса различных способов поведения панели инструментов:
- kHICommandToggleToolbar
- kHICommandToggleAllToolbars
- kHICommandCycleToolbarModeSmaller
- kHICommandCycleToolbarModeLarger
Менеджер по HIView
Заголовочные файлы (HIToolbox): HIView.h, Controls.h, ControlDefinitions.h, различные специфичные для представления заголовки
Обратите внимание на то, что менеджер HIView был ранее известен как менеджер по Управлению.
Функции и улучшения
Описания типа представления и объявления функции, ранее содержавшиеся в ControlDefinitions.h и HIView.h, были разделены в отдельные заголовочные файлы для более простого maintainence и четкости. Новые заголовочные файлы:
- HIButtonViews.h
- HIClockView.h
- HIComboBox.h
- HIContainerViews.h
- HIDataBrowser.h
- HIDisclosureViews.h
- HIImageViews.h
- HILittleArrows.h
- HIMenuView.h
- HIPopupButton.h
- HIProgressViews.h
- HIRelevanceBar.h
- HIScrollView.h
- HISearchField.h
- HISeparator.h
- HISlider.h
- HITabbedView.h
- HITextViews.h
- HIWindowViews.h
ControlDefinitions.h теперь только содержит объявления для представлений, которые осуждают и считают устаревшие: представление EditText не-Unicode, представление ListBox, представление Picture и представление Scrolling TextBox.
Новый набор APIs доступен для управления структурой HIViewContentInfo, представленной в OS X v10.4:
- HIViewSetImageContent
- HIViewCopyImageContentWithSize
- HIViewRetainImageContent
- HIViewReleaseImageContent
Этот APIs упрощает устанавливать или получать содержимое изображения, выведенное на экран представлением. Структура HIViewContentInfo была также увеличена; новые поля в этой структуре позволяют устанавливать содержимое изображения представления в IconRef, указанный типом и создателем, файл образа, расположенный в каталоге Resources приложения или файле образа, расположенном в указанном пути. Представления автоматически загрузят файл образа, указанный по имени, или соединят каналом и создадут CGImageRef из его содержания.
Эти новые поля в структуре HIViewContentInfo поддерживаются следующими представлениями: BevelButton, Значок, ImageWell, HIImageView, PushButton, RoundButton, Сегмент и Вкладка.
Новый API, HIViewSetSubviewsNeedDisplayInShape, позволяет лишать законной силы и представление и все его подпредставления. (Существующий HIViewSetNeedsDisplay[InShape/Rect/Region] APIs только лишает законной силы указанное представление.)
Новый API, HIViewAdvanceFocusWithOptions, позволяет больше управления, по которому фокусируется представление. Этот API берет дополнительные биты опции, чтобы позволить Вам указывать, фокусироваться ли традиционно или фокусироваться на каком-либо управлении, независимо от текущих предпочтений пользователя. Можно также препятствовать тому, чтобы фокус повторился к началу или концу иерархии представления.
Два новых APIs, HIWindowGetFocus и HIWindowSetFocus, заменяет существующий SetKeyboardFocus и GetKeyboardFocus APIs. Этот APIs также позволяет Вам больше управления, становится ли представление фокусируемым без рассмотрения текущих предпочтений фокусировки пользователя.
Два новых APIs, HIViewTrackMouseLocation и HIViewTrackMouseShape, обеспечивает центральные представлением эквиваленты TrackMouseLocation и TrackMouseRegion APIs (3123470).
Новый API, HIViewSetUpTextColor, заменяет существующий SetUpControlTextColor API. Этот API выполняет то же действие как SetUpControlTextColor, но относительно предоставленного CGContextRef, а не текущего порта.
Два новых APIs, HIImageViewGet/SetAutoTransform, позволяет изображениям представления изображения автоматически преобразовывать согласно состоянию представления (для поведения как, деактивировал/отключил ImageWell) (4030522).
Косоугольные кнопки могут теперь иметь неявные размеры стрелки всплывающего меню (2200323). Используйте SetControlData (..., kControlSizeTag...), где размер элемента управления по умолчанию является kControlSizeAuto. kControlSizeAuto, имеет косоугольный рендеринг кнопки ее стрелка всплывающего меню в размере, зависящем от размера косоугольной кнопки; это - поведение на Тайгере и ранее. kControlSizeNormal имеет его, представляют стрелку нормального размера, и kControlSizeSmall имеет его, представляют небольшую стрелку. Все другие размеры недопустимы.
Все представления теперь автоматически корректируют шрифт своего текста заголовка или текста метки для соответствия ControlSize представления. Ранее, необходимо было установить ControlFontStyle на представлении для соответствия его размера; это больше не необходимо.
Представление Group Box теперь поддерживает Нормальные, Маленькие, и Мини-размеры. Установка ControlSize не влияет на появление поля, но это действительно заставляет текст метки поля рисовать использование соответственно измеренного шрифта.
Представление Chasing Arrows теперь поддерживает Нормальные и Большие размеры. Ранее, представление выбрало размер изображения на основе своих границ представления. Это - все еще поведение по умолчанию, но можно теперь также вынудить управление выбрать определенный размер изображения путем установки ControlSize представления.
Кнопки теперь поддерживают kControlPushButtonAnimatingTag, чтобы проверить, управляют ли или, анимирует ли кнопка (2903705).
Управление статическим текстом теперь поддерживает CFAttributedStringRefs. Можно обеспечить приписанную строку для использования управления статическим текстом HIViewSetText или SetControlData (kControlStaticTextCFStringTag). При использовании HIViewSetText, просто бросает CFAttributedStringRef в CFStringRef.
HIViewGetOptimalBounds (и GetBestControlRect) теперь принимают заголовок во внимание треугольника раскрытия при вычислении (2231463). Кроме того, опция вывести на экран заголовок была экспортирована через два новых APIs: HIDisclosureTriangleSetDisplaysTitle и HIDisclosureTriangleGetDisplaysTitle. Этот APIs позволяет «drawTitle», устанавливает при создании в CreateDisclosureTriangleControl, который будет установлен на треугольнике раскрытия после того, как это было создано.
Количество метки управления ползунком и ориентация ползунка теперь устанавливаемы после того, как ползунок был создан через HISliderGetThumbOrientation, HISliderSetThumbOrientation, HISliderGetTickMarkCount и HISliderSetTickMarkCount (2780970). Обратите внимание на то, что клиентское приложение должно явно изменить размеры ползунка (к оптимальным границам) для приведения в соответствие с любой ориентацией ползунка или изменениями метки.
HIScrollView поддерживает новую опцию, kHIScrollViewOptionsFillGrowArea, который запрашивает, чтобы представление прокрутки заполнило увеличивать область белым, если обе полосы прокрутки видимы (3714266).
Класс HIObject IDs для представления Picture и представления PopupArrow был добавлен к ControlDefinitions.h. Они классифицируют IDs, фактически допустимы на Пантере и позже. Возможно разделить эти представления на подклассы о Пантере и позже также, но для регистрации подкласса на Пантере и Тайгере, необходимо будет сначала создать экземпляр типа представления, которое Вы разделяете на подклассы, чтобы вынудить класс представления быть зарегистрированным. На Leopard и позже, эти представления автоматически зарегистрируют свои классы HIObject, таким образом, не будет необходимо создать экземпляр представления прежде, чем разделить его на подклассы.
DataBrowser теперь поддерживает kControlUseThemeFontIDMask в ControlFontStyleRec.
Функция GDBShowControlHierarchy теперь распечатывает всю иерархию управления окна, запускающегося с корневого представления окна. Это ранее запустилось с представления содержания окна.
HIWindowViews.h теперь объявляет HIViewIDs для всех стандартных представлений рамки окна. Ранее, только представление IDs для содержания и растет, представления поля были объявлены. Обратите внимание на то, что представления рамки окна используют их представление IDs обо всех версиях OS X начиная с OS X v10.2, поэтому даже при том, что переменные не экспортируются, можно все еще объявить собственные переменные HIViewID с тем же содержанием, если необходимо получить доступ к этим представлениям о более ранних версиях ОС.
kEventControlInterceptSubviewClick событие теперь содержит параметр DirectObject, как задокументировано (4450275).
Когда фокусируемая часть представления изменилась, новое событие Carbon, kEventControlFocusPartChanged, теперь отправляется. Это событие проще и более очевидно для использования, чем старый метод для обнаружения, когда фокус представления изменился, который должен был обработать kEventControlSetFocusPart событие, вызвать CallNextEventHandler, и затем получить выходную часть фокуса.
Стандартные представления редактирования текста теперь поддерживают проверку правописания. Два новых тега ControlData, kControlEditTextSpellCheckingTag и kControlEditTextSpellCheckAsYouTypeTag, могут использоваться с Get/SetControlData, чтобы включить, отключить, и проверить текущее состояние проверки правописания представления.
Представление Data Browser теперь поддерживает составляющее композит пользовательское событие получения, kEventClassDataBrowser/kEventDataBrowserDrawCustomItem.
kControlContentAlertIconRes константа была добавлена к Controls.h, и kHIViewAlertIconType константа была добавлена к HIView.h (2730877). kControlContentAlertIconRes константа, фактически поддерживаемая в OS X v10.1 и позже, используется в contentType поле структуры ControlImageContentInfo, чтобы сказать управлению Значком рисовать Примечание, Предостережение или значок Stop с помощью утвержденного появления Воды. На последних версиях OS X значки Note и Stop заменяются значком приложения, и Значок предупреждения нарисован со значком приложения как значок. При использовании этого типа контента с управлением Значком необходимо установить размер управления к 64x64. Аналогично, kHIViewAlertIconType константа используется в contentType поле структуры HIViewContentInfo. Этот тип контента поддерживается большинством средств управления, позволяющих настраиваемое содержимое изображения на OS X v10.5 и позже.
HIViewShowsFocus API предоставлен, чтобы позволить пользовательскому HIViews определять, должны ли они нарисовать индикаторы фокуса, такие как фокусирующие кольца.
HIViewSetTextFont, HIViewSetTextHorizontalFlush, HIViewSetTextVerticalFlush, HIViewSetTextTruncation и HIViewGetThemeTextInfo APIs предоставлены, чтобы позволить вызывающим сторонам устанавливать и запрашивать пользовательский шрифт и текстовые атрибуты для средств управления, составляющих текст. Новые теги Управления доступны для Get/SetControlData для пользовательских представлений: kControlThemeTextFontTag, kControlThemeTextHorizontalFlushTag, kControlThemeTextVerticalFlushTag, kControlThemeTextTruncationTag, и kControlThemeTextInfoTag.
Новый API, HIViewDrawNSImage, позволяет HIView вовлекать содержание NSImage в CGContextRef, предоставленный во время kEventControlDraw события.
Управление Часами поддерживает новый тег ControlData, kControlClockAbsoluteTimeTag, который позволяет устанавливать или получать время часов с помощью CFAbsoluteTime.
Представление Data Browser поддерживает два новых атрибута для использования с DataBrowserChangeAttributes. Первое, kDataBrowserAttributeAutoHideScrollBars, позволяет экземпляру Браузера Данных автоматически скрывать свои горизонтальные и вертикальные полосы прокрутки, когда они не необходимы. Второе, kDataBrowserAttributeReserveGrowBoxSpace, говорит экземпляру Браузера Данных всегда сохранять комнату для увеличивать поля в правом нижнем углу представления. Атрибут AutoHideScrollBars в настоящее время только реализован для представления списка; это может быть установлено на DataBrowser в представлении столбца, но в настоящее время не имеет никакого эффекта. Атрибут ReserveGrowBoxSpace реализован и для списка и для представления столбца.
kEventControlTrackingAreaEntered и события Exited теперь включают параметр DirectObject, содержащий HIViewRef, получающий событие (5198507).
Когда HIView архивируется, он теперь автоматически архивирует все свои подпредставления, для которых HIObjectIsArchivingIgnored возвращает false.
Средства управления EditUnicodeText и HITextView теперь поддерживают перетаскивание.
Известные исправления ошибок
Кнопка всплывающего меню теперь располагает свое меню так, чтобы текст пункта меню выровнялся с заголовком кнопки.
Установка kControlTabInfoTag на отключенной вкладке больше не включает ту вкладку. При доверии этому недокументированному и нежелательному побочному эффекту можно обнаружить, что теперь отключены вкладки.
Косоугольная кнопка, изображение хорошо, значок и представления изображения теперь вызывает HIViewSetNeedsDisplay на себе после того, как SetControlData используется для изменения любого аспекта представления, влияющего на его визуальное появление.
Кнопка всплывающего меню еще раз поддерживает рисование ее заголовка кнопки с помощью стиля и шрифта выбранного пункта меню (3385698). Эта возможность была доступна в Mac OS 9 и ранние версии OS X, но была повреждена в OS X v10.3 и 10.4.
Все представления теперь автоматически лишают законной силы себя, когда ControlSize представления изменяется, если представление используется в составленном режиме. Ранее, большинство представлений не лишало законной силы себя.
Теперь возможно заставить круглую кнопку прекратить быть кнопкой справки путем установки ее ControlImageContentInfo.contentType в kControlContentNone (4413403).
HIViewCreateOffscreenImage API теперь поддерживает быть переданным корневого представления окна (4431494). Ранее, передача корневого представления повредила бы состояние корневого представления, таким образом, что не появится последующее находящееся в Quickdraw получение в окне.
Примечания
В настоящее время HICocoaView не может быть встроен в HIScrollView. К обходному решению это встройте свое содержание с возможностью прокрутки в NSScrollView и партнера это с HICocoaView вместо этого.
Используя HICocoaView в Вашем приложении требует, чтобы Вы вызвали NSApplicationLoad () в init время. Кроме того, для создания, убедиться соединиться с надлежащими платформами, содержащими NSView интереса (например, AppKit.framework) и что модуль компилирует с ObjC или ObjC ++ компилятор.
IBCarbonRuntime
Заголовочный файл (HIToolbox): IBCarbonRuntime.h
Функции и улучшения
IBCarbonRuntime теперь поддерживает возможность создать подклассы стандартных средств управления и представлений. Будущая версия InterfaceBuilder позволит Вам устанавливать класс HIObject ID и init параметры события стандартных средств управления при редактировании файла пера. Когда файл пера будет загружен в память, IBCarbonRuntime создаст экземпляр Вашего пользовательского класса, а не стандартного управления. Вы ответственны за обеспечение, что Ваш пользовательский класс фактически регистрируется как подкласс стандартного класса для того типа управления.
Известные исправления ошибок
При использовании InterfaceBuilder для присвоения команды ID заголовку меню в строке меню, Вы теперь в состоянии найти что элемент в главном меню с GetIndMenuItemWithCommandID после вызова SetMenuBarFromNib (3518358). Например, Вы могли дать Вашему меню File команду ID 'FILE' в InterfaceBuilder, и затем использовать GetIndMenuItemWithCommandID (NULL, 'FILE', 1, &menu, &item) для нахождения элемента в главном меню, содержащем меню File. Вы могли тогда использовать GetMenuItemHierarchicalMenu (меню, элемент, &fileMenu) для получения MenuRef для меню File. Обратите внимание на то, что необходимо использовать SetMenuBarFromNib для включения этого поведения; Вы не можете использовать CreateMenuBarFromNib и затем SetMenuBar, потому что MenuBarHandle, возвращенный CreateMenuBarFromNib, не имеет никакой комнаты для хранения команды ID для меню верхнего уровня.
При создании DataBrowser из пера высоте строки, указанной в пере, теперь повинуются (4234674). Ранее, высота строки была проигнорирована, и необходимо было вызвать SetDataBrowserTableViewRowHeight сами после создания управления DataBrowser.
При загрузке объекта из находящегося в HIArchive пера CreateWindowFromNib и CreateMenuFromNib APIs теперь гарантируют, чтобы Вы получили новый экземпляр объекта каждый раз даже при использовании того же IBNibRef (4424629). У Тигра необходимо выпустить IBNibRef и перераспределить его между множественными вызовами для получения того же объекта от пера, чтобы гарантировать, чтобы Вы получили новый объект каждый раз; иначе, Вы возвратите тот же объект с постепенно увеличенным refcount.
Icon Services
Заголовочный файл (HIServices): Icons.h
Функции и улучшения
Менеджер Icon Services обеспечивает три новых APIs для объединения IconRefs с современными типами HI:
- IconRefContainsCGPoint
- IconRefIntersectsCGRect
- IconRefToHIShape
Новый API, GetIconRefFromComponent, возвращает IconRef на основе componentIconFamily поля 'thng' ресурса компонента. Этот API заменяет GetComponentIconSuite, удаленный из 64-разрядного API.
Осуждение API
Большая часть APIs для работы с классическими форматами значка теперь осуждается в Leopard, включая:
- GetCIcon
- PlotCIcon
- DisposeCIcon
- GetIcon
- PlotIcon
- PlotIconID
- NewIconSuite
- AddIconToSuite
- GetIconFromSuite
- ForEachIconDo
- GetIconSuite
- DisposeIconSuite
- PlotIconSuite
- MakeIconCache
- LoadIconCache
- PlotIconMethod
- GetLabel
- PtInIconID
- PtInIconSuite
- PtInIconMethod
- RectInIconID
- RectInIconSuite
- RectInIconMethod
- IconIDToRgn
- IconSuiteToRgn
- IconMethodToRgn
- SetSuiteLabel
- GetSuiteLabel
- GetIconCacheData
- SetIconCacheData
- GetIconCacheProc
- SetIconCacheProc
- PlotIconHandle
- PlotSICNHandle
- PlotCIconHandle
- IconFamilyToIconSuite
- IconSuiteToIconFamily
- GetIconRefFromFile
- RegisterIconRefFromResource
- OverrideIconRefFromResource
- RegisterIconRefFromIconFile
- ReadIconFile
- WriteIconFile
Кроме того, некоторый находящийся в QuickDraw IconRef APIs теперь осуждаются:
- PlotIconRef
- PtInIconRef
- RectInIconRef
- IconRefToRgn
Менеджер по клавиатуре
Заголовочный файл (HIToolbox): Keyboards.h
Осуждение API
За исключением KBGetLayoutType, все функции в Keyboards.h осуждаются в Leopard и недоступные в 64-разрядном API. Предпочтительные альтернативы являются функциями в TextInputSources.h.
Известные исправления ошибок
KLGetCurrentKeyboardLayout ранее возвратил понятие менеджера по Сценарию текущего ключевого расположения - т.е. раскладка клавиатуры с числовым соответствием ID GetScriptVariable ( GetScriptManagerVariable (smKeyScript), smScriptKeys ). Это имело несколько проблем: это не возвратило бы расположение только для Unicode, если бы это был текущий макет; если бы вызывающее приложение не было в фокусе, это не всегда возвращало бы текущее ключевое расположение в использовании; и это не отразило бы эффект ключевых переопределений расположения, например, от вызова TISSetInputMethodKeyboardLayoutOverride. Теперь KLGetCurrentKeyboardLayout возвращает ключевое расположение, соответствующее результату TISCopyCurrentKeyboardLayoutInputSource, решающего эти проблемы.
KLSetCurrentKeyboardLayout теперь также устанавливает переопределение раскладки клавиатуры для методов ввода (эффективно вызывающий TISSetInputMethodKeyboardLayoutOverride).
KLGetKeyboardLayoutProperty теперь возвращает resNotFound, если требуемое свойство является kKLKCHRData, но значением является NULL. Это - намного более общий сценарий теперь, когда данные KCHR не доступны для многих предоставленных Apple раскладок клавиатуры (для которого предпочтительный формат является uchr).
Ресурсы клавиатуры
Функции и улучшения
Предпочтительный формат для данных раскладки клавиатуры является 'uchr' форматом Unicode. Соответственно, все раскладки клавиатуры Apple были преобразованы в формат 'uchr'. Эти данные раскладки клавиатуры доступны через функцию TISGetInputSourceProperty (или через осуждаемую функцию KLGetKeyboardLayoutProperty). Данные KCHR-формата все еще доступны для некоторых из этих разметок, но только через KLGetKeyboardLayoutProperty или GetResource.
HIToolbox обеспечивает ресурсы KCAP, описывающие физическое расположение различных клавиатур Apple. Они не были актуальны в Тайгере, но были теперь обновлены для включения ресурсов KCAP для настольных клавиатур с ключами F16 для клавиатур в компьютерах PowerBook и MacBook Pro, представленных в 2005, и для новых тонких клавиатур, начатых с новых iMac в августе 2007.
Менеджер по рассылочным спискам
Заголовочный файл (HIToolbox): Lists.h
Осуждение API
Весь Менеджер по рассылочным спискам был осужден для Leopard. Приложения должны использовать DataBrowser вместо Менеджера по рассылочным спискам.
Менеджер по меню
Заголовочный файл (HIToolbox): Menus.h
Функции и улучшения
Менеджер по Меню теперь обеспечивает несколько новых APIs для поддержки встраивания HIView в пункте меню, как замечено в палитре цветов метки Средства поиска. Этот APIs:
- HIMenuSetItemViewClass
- HIMenuCopyItemViewClass
- HIMenuGetItemView
- HIMenuItemViewGetEnclosingMenuItem
- HIMenuItemViewCancelMenuTracking
Для встраивания HIView в пункт меню приложение просто вызывает HIMenuSetItemViewClass, передавая меню, пункт меню, класс HIObject ID и дополнительная инициализация EventRef. Когда меню выведено на экран, менеджер по Меню автоматически инстанцирует HIView по мере необходимости. Если меню, оказывается, выведено на экран больше чем в одном окне, Обратите внимание на то, что менеджер по Меню может принять решение создать больше чем один экземпляр представления.
Представление пункта меню должно поддерживать событие kEventControlGetOptimalBounds Carbon для возврата его предпочтительного размера. Менеджер по Меню отправит это событие во время CalcMenuSize для определения, сколько пространства для выделения для пункта меню просматривают. Если его оптимальные границы изменяются, представление пункта меню может отправить новое событие kEventControlOptimalBoundsChanged Carbon в себя; это заставит размер меню быть повторно вычисленным и меню, которое будет изменено.
Как только HIView был встроен в пункт меню, менеджер по Меню обеспечивает следующие функции автоматически:
- Представление изменено для адаптации ширине меню. Его высота будет установлена в оптимальную высоту, возвращенную представлением.
- Представление расположено для отслеживания позиции пункта меню в меню. Если другие пункты меню будут вставлены или удалены перед элементом, содержащим представление, представление будет изменено местоположение. Представление прокрутит с остальной частью содержимого меню.
- Менеджер по Меню не рисует нормальное содержание пункта меню. Представление ответственно за все получение пункта меню.
- Представление вставляется в иерархию доступности как дочерний элемент пункта меню.
- Представление доступно для перемещения с помощью клавиатуры. Когда мышь передает по представлению, менеджер по Меню автоматически пытается фокусироваться на первой части представления, позволяя перемещение с помощью клавиатуры в представлении. Как только фокус находится на части представления, пользователь может использовать Вкладку и Shift-Tab для перемещения вперед и назад в частях представления the; когда фокус достигнет последней или первой части в представлении, следующий Tab/Shift-Tab закроет текущее меню и откроет следующее меню. События клавиатуры направляются сначала к представлению; если представление не обработает событие клавиатуры, то менеджер по Меню обеспечит его обработку перемещения с помощью клавиатуры по умолчанию.
В целом HIView не нужна никакая специальная осведомленность, что это было встроено в меню; стандартные события HIView Carbon достаточны. В некоторых случаях представление может хотеть варьироваться свое поведение, когда оно встраивается. Представление может использовать HIMenuItemViewGetEnclosingMenuItem API, чтобы определить, встраивается ли это, или какое-либо суперпредставление, в пункте меню.
Менеджер по Меню теперь поддерживает динамическое изменение размеров открытого меню. Любые изменения в меню, происходящие, в то время как меню открыто (такие как вставка или удаление пунктов меню, скрываясь или показывая элементы, или изменяя текст элемента) теперь заставят размер меню быть повторно вычисленным и окно меню для изменения размеров соответственно. Как часть этого изменения, меню с динамическими элементами теперь измерены для адаптации просто в настоящее время видимым элементам, и меню изменяет размеры, поскольку пользователь нажимает модифицирующие клавиши для адаптации недавно видимым динамическим элементам.
kEventMenuEndTracking событие теперь содержит параметр EventRef с событием, заставившим отслеживание меню заканчиваться. Это может быть полезно для приложений, хотящих варьироваться их поведение в зависимости от точно, как был выбран пункт меню.
Когда представление содержимого меню или другое представление, встроенное в представлении содержания меню, получают kEventControlSimulateHit событие, параметр KeyModifiers события теперь содержит комбинацию модификатора последний-раз-нажатой-клавиши (4697376). Ранее, это всегда содержало нуль. Это изменение предназначается для разрешения представлений, настраивающих их поведение на основе модификаторов, чтобы быть в состоянии легко получить доступ к состоянию модификатора.
kEventMenuDrawItem и события kEventMenuDrawItemContent Carbon, отправляющиеся, когда пункт меню имеет атрибут kMenuItemAttrCustomDraw теперь, включают новый параметр события, kEventParamMenuContextHeight. Этот параметр содержит высоту, которой контекст должен быть зеркально отражен для преобразования его от Декартова до HIView-ориентированных координат. Ранее, мы рекомендовали использовать высоту текущего порта для зеркального отражения контекста, и эта рекомендация все еще допустима в 32-разрядном режиме, но 64-разрядный режим не имеет текущего порта, таким образом, этот новый параметр события предоставляет необходимую информацию.
Два новых APIs, HIMenuSetAttributedItemText и HIMenuCopyAttributedItemText, позволяет CFAttributedStringRef быть предоставленным для пункта меню. Элемент, возможно, и приписал и неприписал строки; установка приписанной строки не влияет на неприписанный текст элемента, предоставленный SetMenuItemTextWithCFString. Менеджер по Меню нарисует пункт меню с помощью приписанного текста, но выполняет выбор типа меню с помощью неприписанного текста, таким образом, будет рекомендовано всегда предоставить обоим. Неприписанный текст также используется для доступности.
Два новых APIs, HIMenuSetFont и HIMenuCopyFont, позволяет CTFontRef быть предоставленным для пункта меню или пункта меню. Установка шрифта для меню заставляет все элементы в меню быть нарисованными с тем шрифтом по умолчанию.
Новые поля «attributedText» и «шрифта» были добавлены к структуре MenuItemDataRec, чтобы позволить получать доступ к приписанному тексту элемента или меню или CTFontRef элемента. kMenuItemDataAttributedText константа теперь доступна, чтобы указать, что attributedText поле должно использоваться при установке или получении данных элемента, и kMenuItemDataFont константа теперь доступна для доступа к шрифту.
Новый API, HIMenuSetSelection, позволяет устанавливать начальный выбор в меню, прежде чем меню откроется, или изменение выбранного пункта открытого меню.
Новый API, HIMenuCopyParents, возвращает массив родительских меню подменю (2811173).
Когда меню использует пользовательский CTFontRef для всего содержимого меню (через HIMenuSetFont с обнуленным параметром элемента), шрифт теперь применяется ко всем подменю меню также. Для совместимости с существующими приложениями меню с пользовательским шрифтом QD не применяет этот шрифт к своим подменю.
Изменения пользовательского интерфейса
Когда PopUpMenuSelect или ContextualMenuSelect просят вывести на экран всплывающее меню, и меню имеет нулевую ширину или высоту, этот APIs теперь сразу возвращается и не вводит отслеживающий мышь цикл (4058048).
ContextualMenuSelect API ранее вывел на экран отключенный элемент Меню справки как первый элемент в меню, когда передано kCMHelpItemNoHelp или kCMHelpItemAppleGuide константы (2580665). API был изменен так, чтобы передача этих констант не приводила ни к какому элементу Справки, выводимому на экран вообще. Если приложение передаст kCMHelpItemOtherHelp и его собственную строку справки, элемент справки будет теперь только выведен на экран.
Позиции по умолчанию для заголовка меню и тегов справки пункта меню изменились (2828041). Тег справки заголовка меню с tagSide kHMDefaultSide теперь выведен на экран с помощью kHMInsideBottomLeftCorner. Тег справки пункта меню с tagSide kHMDefaultSide теперь выведен на экран с помощью kHMOutsideRightTopAligned. Изменение расположения пункта меню, в частности предназначалось, чтобы избежать затенять другие пункты меню.
Осуждение API
Тип MenuDefProcPtr и вся связанная функциональность определения меню осуждаются для Leopard. Появление пользовательского меню и поведение должны быть реализованы с помощью пользовательского HIView, доступного в OS X v10.3 и позже.
Следующий APIs осуждается для Leopard:
- NewMenu
- GetMenuTitle
- SetMenuTitle
- AppendMenu
- InsertMenuItem
- AppendMenuItemText
- InsertMenuItemText
- SetMenuItemText
- GetMenuItemText
- SetItemIcon
- GetItemIcon
- SetMenuItemHierarchicalID
- GetMenuItemHierarchicalID
- GetMenuRetainCount
- RetainMenu
- ReleaseMenu
- InsertResMenu
- AppendResMenu
- InsertFontResMenu
- InsertIntlResMenu
- MenuKey
- SetMenuFlashCount
- DeleteMCEntries
- GetMCInfo
- SetMCInfo
- DisposeMCInfo
- GetMCEntry
- SetMCEntries
- EraseMenuBackground
- ScrollMenuImage
- InitContextualMenus
Известные исправления ошибок
Теперь возможно использовать SetMenuItemIconHandle с kMenuIconResourceTypeIcon типом значков для обеспечения значка для пункта меню в меню (4102535) мозаики Прикрепления окна. Ранее, этот тип значков только работал на меню мозаики Прикрепления приложения.
Когда пункт меню, предоставленный плагином Контекстного меню, добавляется к контекстному меню, команда ID элемента теперь установлена в команду ID, указанную плагином (4161281). Это позволяет плагину счесть свои собственные пункты меню позже, при необходимости, через kEventMenuOpening обработчик событий установленными на цели события приложения.
При разархивировании меню его меню ID и заголовок меню включают состояние, должным образом восстанавливаются (4240282). Ранее, разархивированное меню всегда имело бы меню ID нуля, и заголовок меню будет всегда включаться.
HIMenuViewGetMenu API теперь работает должным образом на экземпляры представления стандартного меню (4137825). Ранее, это возвратило NULL.
MLTE
Заголовочный файл (HIToolbox): Мактекстедитор.х
Функции и улучшения
TXNShowOffset API предоставлен, чтобы позволить клиентам MLTE показывать любое смещение, включая смещения, которые не являются частью выбранного диапазона.
MLTE теперь поддерживает подмножество emacs комбинаций клавиши CTRL (control+BFPNAEHD). Нет никакой поддержки control+KL в это время.
TXNControlData:: uValue и TXNControlData:: sValue изменился от UInt32/SInt32 до долгой/жаждавшей 64-разрядной совместимости без знака.
Осуждение API
Осуждаемый все константы QD TXNTypeRunAttributes/TXNTypeRunAttributeSizes начиная с QuickDraw осуждаются в 32-разрядном и не существуют в 64-разрядном режиме.
Осуждаемый TXNSetFontDefaults и TXNGetFontDefaults.
Navigation Services
Заголовочный файл: Navigation.h
Функции и улучшения
В Leopard Navigation Services была повторно реализована на NSSavePanel Какао. NavDialogRef может быть брошен в NSSavePanel* для помещенных диалоговых окон, NSOpenPanel* для получают и выбирают диалоговые окна, и NSAlert* для различного просят сохранять диалоговые окна изменений. После того, как бросок к надлежащему Какао возражает, что можно вызвать Какао APIs на том объекте обычно. Например, пользовательская область Военно-морского диалогового окна может быть заполнена с Какао NSViews [(NSSavePanel*) myNavDialogRef setAccesoryView:myNSView]. Исключение: Как только диалоговое окно создается через NavgationServices API, это должно быть вызвано с NavDialogRun. Пользовательская поддержка предварительного просмотра больше не доступна на Leopard. Процедуры NavPreview больше не вызывают, kNavCBAdjustPreview Военно-морские сообщения обратного вызова события больше не отправляются, и поле NavCBRec previewRect всегда будет пусто. Navigation Services теперь зависит от QuickLook для рендеринга предварительного просмотра. Клиенты могут записать плагин QuickLook для генерации пользовательских предварительных просмотров для открытых диалоговых окон, а также Средства поиска и Центра внимания.
Осуждение API
Устаревший NavFooFile APIs был осужден для Leopard. Используйте NavCreateFooDialog APIs вместо этого.
Следующий APIs осуждается для Leopard:
- NavLoad
- NavUnload
- NavLibraryVersion
- NavGetDefaultDialogOptions
- NavGetFile
- NavPutFile
- NavAskSaveChanges
- NavCustomAskSaveChanges
- NavAskDiscardChanges
- NavChooseFile
- NavChooseFolder
- NavChooseVolume
- NavChooseObject
- NavNewFolder
- NavTranslateFile
- NavServicesCanRun
- NavServicesAvailable
Известные исправления ошибок
kNavCBPopupMenuSelect документация заголовка была обновлена о том, как лучше идентифицировать, когда пункт меню типа клиента был выбран (4087669).
Менеджер по области монтажа
Заголовочный файл (HIServices): Pasteboard.h
Функции и улучшения
Добавление PasteboardSet/GetStandardPasteLocation и PasteboardSet/GetItemBounds APIs позволяет клиентам выполнять то, что раньше было, перетаскивают специфичные операции на любой области монтажа.
Добавление файла Области монтажа основанный на URL файл, обещающий с kPasteboardTypeFileURLPromise и kPasteboardTypeFilePromiseContent.
Менеджер по фрагменту
Заголовочный файл (HIToolbox): Scrap.h
Осуждение API
Весь менеджер по Фрагменту был осужден для Leopard. Используйте Область монтажа Углерода APIs вместо этого.
Следующий APIs осуждается для Leopard:
- LoadScrap
- UnloadScrap
- GetScrapByName
- GetCurrentScrap
- GetScrapFlavorFlags
- GetScrapFlavorSize
- GetScrapFlavorData
- ClearCurrentScrap
- ClearScrap
- PutScrapFlavor
- SetScrapPromiseKeeper
- GetScrapFlavorCount
- GetScrapFlavorInfoList
- CallInScrapPromises
Менеджер по сценарию
Заголовочный файл (HIToolbox): Events.h
Осуждение API
Функция KeyScript осуждается в Leopard и недоступная в 64-разрядном API.
Положительные глаголы (т.е. ScriptCode) заменяются новым TextInputSource API в TextInputSources.h.
Отрицательные глаголы, используемые, чтобы или ограничить доступ к источникам ввода с клавиатуры в контексте текстового поля или отключить клавиатуру, переключающуюся в целом, заменяются в качестве «входного состояния контекста» через 2 новых свойства TSMDocument в TextServices.h:
- kTSMDocumentEnabledInputSourcesPropertyTag
- kTSMDocumentInputSourceOverridePropertyTag
Источники ввода текста
Заголовочный файл (HIToolbox): TextInputSources.h (также посмотрите менеджера Text Services),
Функции и улучшения
Это - новый набор API, разработанный для замены функций управления ввода текста менеджера Script Manager and Text Services. Большая часть использования менеджера по Сценарию осуждается, и использование менеджера Text Services должно фокусироваться на управлении контекстом ввода текста. Источники Ввода текста API обеспечивает современный способ найти информацию об источниках ввода текста, выбирают/разрешают/запрещают их и получают уведомления о соответствующих изменениях.
Источники ввода текста имеют три общих категории:
- Источники ввода с клавиатуры (раскладки клавиатуры, методы ввода с клавиатуры и режимы ввода)
- Палитра ввела источники (например, Палитра символов, Средство просмотра Клавиатуры)
- Чернила
Определенный источник ввода текста идентифицируется с TISInputSourceRef, обращающимся к объекту CF. Полиморфные функции CFBase могут использоваться на этом (CFRetain, CFRelease, и т.д.).
Каждый источник ввода текста связал свойства. Функциональный TISGetInputSourceProperty может получить значение указанного свойства для указанного входного источника. Значение, связанное с каждым свойством, является определенным типом указателя (например, CFStringRef, CFNumberRef, IconRef); TISGetInputSourceProperty возвращает недействительное* для указанного значения.
Ключи свойства включают следующее:
- kTISPropertyInputSourceCategory
- kTISPropertyInputSourceType
- kTISPropertyInputSourceIsASCIICapable
- kTISPropertyInputSourceIsSelectable
- kTISPropertyInputSourceIsEnabled
- kTISPropertyInputSourceIsSelected
- kTISPropertyInputSourceID
- kTISPropertyBundleID
- kTISPropertyInputModeID
- kTISPropertyLocalizedName
(следующее не может использоваться в словаре, переданном TISCreateInputSourceList),
- kTISPropertyInputSourceLanguages
- kTISPropertyUnicodeKeyLayoutData
- kTISPropertyIconRef
- kTISPropertyIconImageURL
Функциональный TISCreateInputSourceList используется для получения массива TISInputSourceRefs, соответствующего словарь фильтра ключей свойства и соответствующих значений.
Существуют функции удобства для получения TISInputSourceRefs для различных видов входных источников:
- TISCopyCurrentKeyboardInputSource
- TISCopyCurrentASCIICapableKeyboardInputSource
- TISCopyCurrentASCIICapableKeyboardLayoutInputSource
- TISCopyInputSourceForLanguage
- TISCreateASCIICapableInputSourceList
Функции для управления входными источниками включают:
- TISSelectInputSource
- TISDeselectInputSource
- TISEnableInputSource
- TISDisableInputSource
CF распределил уведомления для входных исходных изменений, включайте:
- kTISNotifySelectedKeyboardInputSourceChanged
- kTISNotifyEnabledKeyboardInputSourcesChanged
Функции, принадлежащие методам ввода, включают:
- TISSetInputMethodKeyboardLayoutOverride
- TISCopyInputMethodKeyboardLayoutOverride
- TISRegisterInputSource
Повышение производительности: При восстановлении реестра источников ввода текста (вследствие дополнения или удаления источника, например), только восстановлена часть, соответствующая входным источникам не-Apple.
Добавьте поддержку методов ввода файла данных: Текстовые файлы типа «.cin» или «.inputplugin» (в [~]/Library/Input Методы/), которые указывают поведение для определенного стиля ввода текста CJK.
Поддерживайте новые plist ключи TISInputSourceID, TISIntendedLanguage для входных методов/режимов (как описано в TextInputSources.h).
Поддерживайте новые plist ключи TISInputSourceID, TISIntendedLanguage для ключевых разметок (как описано в textInputSources.h).
Добавьте поддержку находящихся в InputMethodKit методов ввода палитры (plist ключ InputMethodType = палитра).
Текстовый менеджер по службам
Заголовочный файл (HIToolbox): TextServices.h (также посмотрите Источники Ввода текста),
Функции и улучшения
TSM поддерживает методы ввода на основе нового IMKit. Эти методы ввода расположены в «/Library/Input Метод /» каталоги в различной Системе/,/, или ~ / домены.
События Углерода TSM (kEventClassTextInput, kEventClassTSMDocumentAccess)
- 64-разрядный
typeRefCon, typeByteCount, typeByteOffset
События TSM теперь указывают эти 64-разрядные дружественные типы вместо старого typeLongInteger (действительно typeSInt32). Посмотрите примечания в разделе CarbonEvents и документацию в CarbonEvents.h для автоматического приведения типа между typeLongInteger и современными типами для совместимости на уровне двоичных кодов на 32-разрядном.
- Современные параметры события TSM и типы - эквивалентность с более старым параметром «наборы»
- typeCTFontRef
- typeGlyphInfoRef
- typeCFAttributedStringRef
TSM определил современные параметры события с помощью вышеупомянутых типов в пути, который является двоичный совместимый с существующими наборами параметра события. TSM в состоянии «обещать» или новый параметр или элементы старого параметра, установленного путем проверки события и прежде чем это будет диспетчеризировано приложению и прежде чем это будет возвращено к методу ввода. TSM может сделать это, потому что методы ввода всегда диспетчеризируют через узкое место SendTextInputEvent API.
- kEventTSMDocumentAccessGetFont
kEventParamTSMDocAccessReplyCTFontRef (typeCTFontRef) инкапсулирует следующие параметры: kEventParamTSMDocAccessReplyATSFont kEventParamTSMDocAccessReplyFontSize
- kEventTSMDocumentAccessGetGlyphInfo
вместо kEventParamTSMDocAccessReplyCTGlyphInfoRef (typeCTGlyphInfoRef) можно требовать: kEventParamTSMDocAccessReplyATSUGlyphSelector (typeGlyphSelector)
- kEventTextInputUnicodeForKeyEvent
kEventParamTextInputSendAttributedString (typeCFAttributedStringRef) инкапсулирует следующие параметры:
- kEventParamTextInputSendText
- kEventParamTextInputSendGlyphInfoArray
- kEventTextInputUpdateActiveInputArea
kEventParamTextInputSendAttributedString (typeCFAttributedStringRef) инкапсулирует следующие параметры:
- kEventParamTextInputSendText
- kEventParamTextInputSendUpdateRng
- kEventParamTextInputSendHiliteRng
- kEventParamTextInputSendClauseRng
- kEventParamTextInputSendPinRng
- kEventParamTextInputSendGlyphInfoArray
- Поддерживайте независимость разрешения в событиях TSM
- typeHIPoint вместо typeQDPoint
CarbonEvents обеспечивает автоматическое приведение типа для совместимости на уровне двоичных кодов (только на 32-разрядном).
- к параметрам typeHIPoint в событиях TSM можно получить доступ с помощью любого из вариантов, указывающих координату
пространство интереса, т.е. typeHIPointScreenPixel.
- typeCGFloat заменяет использование TSM следующих типов:
- typeFloat (см. kEventParamTSMDocAccessReplyFontSize),
Посмотрите подробное примечание по использованию старого typeFloat (typeIEEE64BitFloatingPoint) в CarbonEvents.h для этого параметра события.
- typeFixed (см. kEventParamTextInputReplyPointSize),
- typeSInt16 (см. kEventParamTextInputReplyLineHeight, kEventParamTextInputReplyLineAscent),
Обратите внимание на то, что к LineHeight и LineAscent можно получить доступ с помощью вариантов координатного пространства typeCGFloat, таких как typeCGFloatScreenPixel
- Осуждение Параметра события
- typeComponentInstance
typeComponentInstance параметры осуждаются с поддержкой TSM некомпонентно-ориентированных методов ввода (см. kEventParamTSMDocAccessSendComponentInstance и kEventParamTextInputSendComponentInstance),
- typeIntlWritingCode
typeIntlWritingCode параметры события осуждаются. Большинство методов ввода основано на Unicode, и для тех, которые не являются, ScriptCode может быть выведен с помощью нового TextInputSource API. В частности можно запросить kTISPropertyInputSourceLanguages свойство входного источника, возвращенного TISCopyCurrentKeyboardInputSource.
Улучшенная производительность ActivateTSMDocument (главным образом устраненные вызовы к KLGetKeyboardLayoutProperty).
Некоторые параметры события Углерода TSM, изменившиеся в Leopard для использования нового typeByteCount/typeByteOffset, и позже typeCFIndex (для со знаком), теперь используют явные типы typeSignedByteCount/typeSignedByteOffset. Это вызвано тем, что typeCFIndex передает некоторую семантику при контакте с текстовыми буферами UniChar. Параметры события, использующие эти новые типы:
kEventParamTextInputSendFixLen
kEventParamTextInputSendTextOffset
См. CarbonEvents.h для получения дополнительной информации о них.
Осуждение API
Весь API TSM, имеющий дело с управлением InputSource, был осужден и заменен новым TextInputSource (TIS) API в TextInputSources.h:
- GetServiceList
- SetDefaultInputMethod
- GetDefaultInputMethod
- SetTextServiceLanguage
- GetTextServiceLanguage
- GetDefaultInputMethodOfClass
- SetDefaultInputMethodOfClass
- SelectTextService
- DeselectTextService
- IsTextServiceSelected
- TSMCopyInputMethodEnabledInputModes
- TSMSelectInputMode
Другой осуждаемый API:
- OpenTextService
- CloseTextService
- SendAEFromTSMComponent
- TSMSetInlineInputRegion
- GetScriptLanguageSupport
- TSMInputModePaletteLoadButtons
- TSMInputModePaletteUpdateButtons
- InputModePaletteItemHit
- GetInputModePaletteMenu
Следующие функции формально не осуждаются, но не доступны в 64-разрядном API:
- NewTSMDocument
- DeleteTSMDocument
- ActivateTSMDocument
- DeactivateTSMDocument
- FixTSMDocument
- SendTextInputEvent
- UseInputWindow
- InitiateTextService
- TerminateTextService
- ActivateTextService
- DeactivateTextService
- GetTextServiceMenu
- TextServiceEventRef
- FixTextService
- HidePaletteWindows
- GetTextServiceProperty
- SetTextServiceProperty
- CopyTextServiceInputModeList
Известные исправления ошибок
Решенные проблемы, в которых ввод корейских или китайских символов посреди последовательности мертвой клавиши латинского сценария произвел бы латинские символы.
Решенные проблемы, предотвратившие китайца/Японский язык/Корейца ввода в окне входа в систему SecurityAgent.
Устраненный проблема с использованием каны клавиатуры JIS вводят Ассистент Установки поля регистрации пользователя.
Решенный проблема, в которой отслеживание меню Carbon могло установить активный TSMDocument в NULL для основных приложений, только использующих TSMDocument по умолчанию (такой как некоторые основные приложения Какао).
Решенные проблемы с Пространством команды (переключаются на предыдущий входной источник), и ключ каны клавиатуры JIS, не работающий после установки обновления.
При активации метода ввода (например, в ActivateTSMDocument), удостоверьтесь, что очистили любые предыдущие ключевые переопределения расположения прежде, чем вызвать активацию метода ввода.
Ввод мертвой клавиши латинского сценария не работал на ключевые разметки без ресурса расположения ключа 'KCHR' (т.е. ключевые разметки с только 'uchr ключевые данные расположения '-формата).
Предотвратите потерю неподтвержденного китайского ввода текста при переключении приложений.
Улучшите фиксацию для очистки предыдущих ключевых переопределений расположения метода ввода при активации.
Решенный больше проблем для ключевых разметок без ресурса 'KCHR' (только 'uchr' данные): (1) неправильная внутренняя ошибка вызвала катастрофический отказ в Предпочтениях Центра внимания и других проблемах; если ключевое расположение, указанное менеджером по Сценарию также, не имеет никакого ресурса 'KCHR', (2) не Может ввести символы «не сценарий Mac» в некоторых случаях (.
Менеджер окон
Заголовочный файл (HIToolbox): Маквиндоус.х
Функции и улучшения
Так как QuickDraw осуждается в 32-разрядном и не существует в 64-разрядном режиме, мы добавляем новый API, использующий CGDirectDisplayID вместо GDHandle, HIRect вместо Rect, и т.д. Следующий APIs был добавлен:
- HIWindowCreate (заменяет CreateNewWindow, CreateCustomWindow),
- HIWindowGetBounds (заменяет GetWindowBounds),
- HIWindowSetBounds (заменяет SetWindowBounds),
- HIWindowTrackProxyDrag (заменяет TrackWindowProxyDrag и TrackWindowProxyFromExistingDrag),
- HIWindowGetIdealUserState (заменяет GetWindowIdealUserState),
- HIWindowSetIdealUserState (заменяет SetWindowIdealUserState),
- HIWindowIsInStandardState (заменяет IsWindowInStandardState),
- HIWindowCopyShape (заменяет GetWindowRegion),
- HIWindowConstrain (заменяет ConstrainWindowToScreen),
- HIWindowFindAtLocation (заменяет FindWindow и друзей),
- HIWindowGetGreatestAreaDisplay (заменяет GetWindowGreatestAreaDevice),
- HIWindowGetAvailablePositioningBounds (заменяет GetAvailableWindowPositioningBounds),
- HIWindowCopyAvailablePositioningShape (заменяет GetAvailableWindowPositioningRegion),
- HIWindowCreateCollapsedDockTileContext (заменяет CreateQDContextForCollapsedWindowDockTile),
- HIWindowReleaseCollapsedDockTileContext (заменяет ReleaseQDContextForCollapsedWindowDockTile),
Поскольку размер мозаики Прикрепления может теперь измениться динамично, приложения, использующие HIWindowCreateCollapsedDockTileContext, должны быть подготовлены перерисовать свою мозаику Прикрепления по мере необходимости. Когда приложение должно перерисовать мозаику Прикрепления разрушенного окна, событие kEventWindowUpdateDockTile Carbon теперь отправляется.
Менеджер окон теперь обеспечивает больше чем 32 бита атрибута окна, и таким образом, битовая маска атрибута больше не помещается в 32-разрядный тип WindowAttributes. Поэтому мы представили новый APIs для поддержки произвольного числа битов атрибута:
- HIWindowTestAttribute
- HIWindowChangeAttributes
- HIWindowIsAttributeAvailable
Этот новый APIs использует новый набор констант, снабженных префиксом «kHIWindowBit», которые являются разрядными числами, не битовыми масками. Вы не должны использовать более старые kWindowFooAttribute константы с этим новым APIs; необходимо только использовать kHIWindowBit константы. Аналогично, Вы не должны использовать kHIWindowBit константы с более старым ChangeWindowAttributes API.
Эти новые атрибуты окна теперь доступны:
- kHIWindowBitTexturedSquareCorners (также как kWindowTexturedSquareCornersAttribute)
- kHIWindowBitUnifiedTitleAndToolbar (также как kWindowUnifiedTitleAndToolbarAttribute)
- kHIWindowBitCanBeVisibleWithoutLogin (также как kWindowCanBeVisibleWithoutLoginAttribute)
- kHIWindowBitDoesNotHide
- kHIWindowBitAutoViewDragTracking
- kHIWindowBitRoundBottomBarCorners
kHIWindowBitTexturedSquareCorners указывает, что текстурированное (металлическое) окно имеет прямые углы, а не круглые углы по умолчанию.
kHIWindowBitUnifiedTitleAndToolbar фактически поддерживается на OS X v10.4 и позже (см. Вопросы и ответы 1423). Этот атрибут указывает, что окно использует объединенное появление для своего заголовка и панели инструментов без разделителя, нарисованного между этими двумя областями. Так как все окна используют объединенное появление на Leopard, не необходимо установить этот атрибут на Leopard.
kHIWindowBitCanBeVisibleWithoutLogin указывает, что окно может быть сделано видимым до пользовательского входа в систему. По умолчанию в Leopard и позже никакие окна не могут быть видимы, прежде чем пользователь войдет в систему; это защищает пользователя от определенных типов злоумышленного использования небезопасных приложений. Однако некоторое программное обеспечение, такое как методы ввода или другое программное обеспечение доступности, возможно, должно сознательно сделать окна доступными до пользовательского входа в систему. Такое программное обеспечение должно добавить, что это окно приписывает его окнам.
kHIWindowBitDoesNotHide управляет, скроется ли окно, когда его приложение будет скрыто (3184642). По умолчанию окна Служебного класса имеют этот набор битов, и окна других классов не делают.
kHIWindowBitAutoViewDragTracking управляет, поддерживает ли окно автоматически отправку kEventControlDrag* события Carbon к представлениям в окне. Этот атрибут окна является заменой для SetAutomaticControlDragTrackingEnabledForWindow API. Установка атрибута является точно тем же как вызовом API. API будет осуждаться в будущем выпуске OS X.
kHIWindowBitRoundBottomBarCorners применяется к окнам, не использующим kWindowMetalAttribute. По умолчанию окна неметалла имеют квадратные нижние углы; установка атрибутов RoundBottomBarCorners заставляет окно иметь круглые углы вместо этого, если окно имеет ненулевой нижний размер границы содержания (см. HIWindowSetContentBorderThickness).
HIWindowGetCGWindowID API был добавлен для предоставления доступа к глобальному идентификатору окна сервера окна для WindowRef. Это число не применимо ни с каким другим Углеродом APIs, но может быть передано другому APIs, действительно берущему числа окна, такие как OpenGL.
Соответствующий API, HIWindowFromCGWindowID, возвращает WindowRef, имеющий указанный CGWindowID, если таковые имеются.
Windows, которые используют Предупредительное, Модальное, или классы окна AltPlain теперь, поддерживает составляющий композит режим.
HIWindowGetThemeBackground API был добавлен. В сочетании с новым API HIThemeGetTextColorForThemeBrush и HIThemeSetTextFill это может использоваться для замены SetThemeTextColorForWindow.
Три константы были добавлены для идентификации кодов части HIView, которые должно поддерживать представление рамки окна: kHIWindowTitleBarPart, kHIWindowDragPart, и kHIWindowTitleProxyIconPart.
Подвижно-модальные окна теперь поддерживают близко и масштабируют поля (2884270).
Элементы в стандартном меню окна, имеющие kHICommandSelectWindow команду ID теперь также, обеспечивают свойство пункта меню, содержащее WindowRef, который будет выбран, когда элемент будет выбран (3976543). Создатель свойства является kHIWindowMenuCreator, и тег свойства является kHIWindowMenuWindowTag. Ваше приложение может проверить значение этого свойства для определения, какое окно будет выбрано, когда Вы получите kEventCommandProcess событие с kHICommandSelectWindow, и команда происходит из меню.
Менеджер окон и стандартное представление рамки окна теперь поддерживают указанные приложением пользовательские представления панели инструментов. Пользовательское представление панели инструментов позволяет приложению реализовывать свое собственное появление панели инструментов и поведение. Приложению не позволяют настроить представление панели инструментов стандартного HIToolbarRef; при использовании стандартного HIToolbar API панель инструментов все еще сохраняет контроль над представлением панели инструментов. Пользовательское представление API панели инструментов только предназначено для разрешения приложений, которые не могут использовать API HIToolbar для обеспечения их собственной панели инструментов.
Новый API, HIWindowSetToolbarView, предоставлен, чтобы позволить приложению устанавливать пользовательское представление панели инструментов для окна. Когда кнопка на панели инструментов будет нажата, после установки представления панели инструментов стандартное представление рамки окна автоматически покажет и скроет представление. Представление панели инструментов должно обработать несколько требуемых событий и может дополнительно реагировать на несколько новых HICommands для реализации настройки панели инструментов, изменений видимости панели инструментов мультиокна и изменений режима отображения панели инструментов. См. комментарии в Маквиндоус.х чуть выше прототипа для HIWindowSetToolbarView для дальнейшей документации.
Новый API, HIWindowCopyDrawers, возвращает список секций, присоединенных к окну (3842671).
Два новых APIs, HIWindowGetBackingLocation и HIWindowSetBackingLocation, доступен управлению, может ли окно быть ускорено, использовав функцию QuartzGL платформы Leopard CoreGraphics.
Два новых APIs, HIWindowGetSharingType и HIWindowSetSharingType, доступен управлению, видим ли буфер поддержки окна во время демонстрации экрана iChat. Окно видимо по умолчанию, но некоторые приложения могут хотеть сделать определенные окна недоступными к демонстрации экрана для соображений безопасности.
Два новых APIs, HIWindowSetContentBorderThickness и HIWindowGetContentBorderThickness, позволяет устанавливать и получать ширину нижней границы содержания окна. Довольная граница является областью в сторонах предметной области окна, где получение структуры окна окна расширяется в содержание. По умолчанию эта ширина является нулем слева, правом и нижней частью для окон, не использующих kWindowMetalAttribute. HIWindowSetContentBorderThickness API позволяет приложению дополнительно делать нижнюю ширину рамки содержания ненулевой (см. Средство поиска в Leopard для примера). Левая и правая ширина рамки содержания в настоящее время требуется, чтобы быть нулевой шириной и не может быть изменена. Приложение обычно указывало бы ненулевую нижнюю ширину рамки содержания и также помещало бы средства управления или текстовые сообщения о состоянии в этой области.
kWindowApplicationScaledAttribute константа, и вся поддержка режима ApplicationScaled, были удалены из HIToolbox. Этот режим полностью никогда не реализовывался и только был полезен для окон, не использовавших составляющий композит режим. Так как 64-разрядный HIToolbox только поддерживает составляющие композит окна так или иначе, мы решили, что существует мало значения в окончании реализации режима ApplicationScaled. Для совместимости с высокой разрешающей способностью приложения должны использовать составляющий композит режим и окна FrameworkScaled.
Для идеальной функциональной совместимости с HIWindowTrackProxyDrag (и таким образом предотвращение Quickdraw), BeginWindowProxyDrag API теперь позволяет, Вы для передачи NULL обрисовываете в общих чертах RgnHandle.
Новый флаговый бит, kHIWindowVisibleInAllSpaces, теперь позволяется для HIWindowChangeAvailability API. Этот флаг указывает, что окно должно быть видимо на всех наборах окна, которыми управляет функция Spaces в Leopard, а не просто набор окна, на котором создавалось окно.
Когда окно архивируется, флаги доступности окна теперь включены в архив.
TrackWindowProxyFromExistingDrag теперь принимает параметр NULL RgnHandle.
Модальный фокус
Менеджеры по Окну и Управлению и стандартные представления HIToolbox теперь поддерживают новый тип пользовательского фокуса, вызванного «модальный фокус». Эта модель фокусировки разделена на уровни поверх существующего пользовательского окна API фокуса, предоставленного HIToolbox. Модальный API фокуса используется компонентами UI, хотящими временно занять клавиатурный фокус из пользовательского окна фокуса в то время как в указанном режиме, и затем возвратить фокус впоследствии. В частности, в то время как отслеживание меню происходит, это используется менеджером по Меню для заимствования клавиатурного фокуса. В то время как меню открыто, это позволяет средствам управления, таким как поля редактирования быть встроенными в меню, такие как Поддерживающее центр внимания Меню справки, и получить нажатия клавиш. То, когда меню, отслеживающее концы, фокус возвращается к любому окну, обычно было бы пользовательским фокусом в той точке.
Модальная реализация фокуса использует модальный штабель фокуса, который является списком фокусируемых окон, переопределяющих пользовательское окно фокуса. В настоящее время нет никакого API для изменения модального штабеля фокуса. Эта возможность резервируется для системных компонентов в Leopard, но может стать достоянием общественности в будущем выпуске. Самое верхнее окно в штабеле фокуса вызывают эффективным фокусом; это - окно, фактически получающее ввод с клавиатуры. Окно, возвращенное GetUserFocusWindow API, теперь вызывают немодальным фокусом; это - окно, становящееся фокусируемым, когда все запросы фокуса удалены из модального штабеля фокуса. Обратите внимание на то, что возможно изменить немодальный фокус с вызовом к SetUserFocusWindow, не изменяя эффективный фокус. В этом случае новое немодальное окно фокуса не начинает получать ввод с клавиатуры, пока не был освобожден модальный штабель фокуса.
Несколько новых событий APIs и Carbon предоставлены для управления модальным фокусом:
- HIApplicationGetFocus API возвращает или эффективный фокус или немодальное окно фокуса. Приложения могут использовать это, чтобы определить, отличаются ли эти два окна. Приложение с пользовательским HIView может также использовать это, чтобы определить, должно ли приложение показать точку вставки. Если представление в окне, возвращенном HIApplicationGetFocus (истина), точка вставки должна только быть видима.
- HIViewShowsFocus API указывает, должно ли представление показать индикаторы фокуса, такие как фокусирующие кольца. Это инкапсулирует множество проверки состояния другого представления, такой как, фокусируется ли представление, активно, включено и находится в окне, показывающем фокус. Приложения с пользовательским HIViews могут использовать это, чтобы определить, должно ли представление в окне показать визуальное появление того, чтобы быть фокусируемым.
- HIWindowShowsFocus API указывает, должно ли содержание окна показать индикаторы фокуса, такие как фокусирующие кольца. В настоящее время это возвращает true, если окно является или немодальным или эффективным окном фокуса, но это может сделать больше в будущем. Приложения, которые не могут использовать HIViewShowsFocus (возможно, потому что у них есть своя собственная частная реализация иерархии представления) могут использовать этот API, чтобы определить, должно ли содержание окна показать визуальное появление того, чтобы быть фокусируемым.
- Когда фокус, соответственно, занят из эффективного окна и возвращен к эффективному окну фокуса, kEventWindowFocusLost и события kEventWindowFocusRestored Carbon отправляются. Они отправляются в получение окна или потерю фокуса, и передаются основным обработчиком окна фокусируемому управлению в том окне, позволяя ему лишить законной силы и перерисовать себя для отражения нового состояния окна.
Приложения не требуются, чтобы делать что-либо для поддержки модального фокуса, но приложения с пользовательским HIView, таким как поле редактирования, имеющее и точку вставки и индикаторы фокусирующего кольца, будет обычно хотеть знать о модальном фокусе для соответствия поведения предоставленных системой представлений. В случае поля редактирования в пользовательском окне фокуса, когда меню открывается, точка вставки в поле редактирования должна прекратить мигать, но должно остаться фокусирующее кольцо вокруг поля редактирования. Пользовательское представление реализовало бы это путем прислушивания к kEventFocusLost и событиям kEventFocusRestored Carbon, отключения его точки вставки, когда фокус потерян и восстановление точки вставки, когда фокус восстанавливается, и при помощи HIViewShowsFocus API, чтобы определить, нарисовать ли фокусирующее кольцо.
Изменения пользовательского интерфейса
Менеджер окон теперь рисует все окна с помощью единственного непротиворечивого визуального появления. kWindowMetalAttribute и флаги kWindowUnifiedTitleAndToolbarAttribute больше не влияют на появление окна, за исключением того, что металлические окна автоматически имеют узкую границу слева, право, и нижнюю часть, для сохранения совместимости с разметками окна перед Leopard.
Windows с видимой панелью инструментов не имеет никакого визуального разделения между строкой заголовка окна и панелью инструментов окна. Поэтому щелчок контекстного меню в строке заголовка окна теперь передается представлению панели инструментов так, чтобы панель инструментов могла показать свое контекстное меню (4479954).
Windows, которые имеют значок прокси теперь дополнительно, реагирует на щелчок контекстного меню в тексте заголовка окна путем отображения всплывающего меню (4031690) пути окна. Ранее, только щелчок команды заставил бы всплывающее меню пути быть выведенным на экран.
Осуждение API
Тип WindowDefProcPtr и вся связанная функциональность определения окна осуждаются для Leopard. Пользовательское появление окна и поведение должны быть реализованы с помощью пользовательской рамки окна HIView, доступный в OS X v10.2 и позже.
Следующий APIs осуждается для Leopard:
- NewWindow
- NewCWindow
- GetNewCWindow
- GetNewWindow
- CreateWindowFromResource
- StoreWindowIntoCollection
- CreateWindowFromCollection
- GetWindowOwnerCount
- CloneWindow
- GetWindowRetainCount
- RetainWindow
- ReleaseWindow
- SetWindowClass
- InstallWindowContentPaintProc
- ClipAbove
- PaintOne
- PaintBehind
- CalcVis
- CalcVisBehind
- CheckUpdate
- FrontWindow
- SetWindowPic
- GetWindowPic
- SetWindowProxyFSSpec
- GetWindowProxyFSSpec
- IsWindowPathSelectClick
- SetWTitle
- GetWTitle
- DrawGrowIcon
- GrowWindow
- DragGrayRgn
- DragTheRgn
- GetWVariant
- GetGrayRgn
Известные исправления ошибок
Стандартное представление рамки окна (используемый для документа и модальных окон) ранее всегда сбрасывало бы прозрачное состояние увеличивать представления поля каждый раз, когда изменились атрибуты окна. (Прозрачность представления увеличивать поля по умолчанию определяется углами окна; окна с круглыми углами имеют прозрачный, увеличивают поля, и окна с прямыми углами имеют, по умолчанию, непрозрачный увеличивают поля.) Это поведение означало, что, если бы Вы хотели измениться, атрибуты окна неметалла с прозрачным увеличивают поле, необходимо было бы всегда делать увеличивать поле прозрачным снова после изменения атрибутов окна, потому что увеличивать поле будет всегда делаться непрозрачным представлением кадра. Когда квадратный загнанный в угол окна изменяется (4687777), представление кадра теперь только сбрасывает увеличивать прозрачность поля; другие изменения атрибута не влияют на увеличивать прозрачность поля.
Copyright © 2005-2007 Apple Inc.