Размытый список просмотра данных в браузере при прокрутке длинного списка (OS X / Carbon) - PullRequest
1 голос
/ 26 января 2012

У меня есть углеродное приложение с браузером данных представления списка и вертикальной прокруткой.Когда список длинный (сотни элементов), быстрая прокрутка в окне приводит к размытому, иногда «смазанному» тексту:

Screen shot of ListView

Могут также возникать другие артефакты, такие как обрезка илиперекрывающиеся линии.Иногда все содержимое - не что иное, как вихревой мазок.Нажатие любого элемента вызывает нормальную перерисовку содержимого ListView.Вот как Interface Builder видит ListView:

enter image description here

Я строю против MacOSX10.5.sdk, используя Xcode 3.2.6.Сборка и тестирование до 10.6.Я не делаю никакой специальной обработки событий прокрутки.Я только определил DataBrowserCallbacks для itemDataCallback, itemNotificationCallback и itemCompareCallback.

Мой вопрос: что может вызвать это?

1 Ответ

2 голосов
/ 07 марта 2012

Я понял это, так вот ответ для потомков:

Оказывается, что проблема всегда и только возникает, когда браузер данных представления списка расположен с нецелым горизонтальным смещением.

HIViewSetFrame() принимает аргумент HIRect, который использует типы float для origin и size. Когда размер родительского фрейма изменяется таким образом, что происхождение браузера падает на нецелое число origin.x, возникают графические ошибки. Не имеет значения, является ли вертикальное смещение или размерное измерение нецелым.

Решение состоит в том, чтобы браузеры, которые перемещаются при изменении размеров окна, округляли свое значение x:

frame.origin.x = roundf(frame.origin.x);

Похоже, что никакие другие элементы управления не имеют проблем с нецелым происхождением.

...