GUI-SDL2 – GUI написанный на Haskell. Часть 3. Кнопки. Функциональное событийное программирование
Запись от Curry размещена 29.06.2018 в 16:19
Показов 3058
Комментарии 0
|
(Предыдущая тема) Настало время поговорить об виджетах реагирующих на действия пользователя, то есть о событийном программировании. Рассмотрим пример с основным типом кнопок в GUI-SDL2. Это виджет button. Как обычно, в конце package.yaml, через пустую строку, допишем ещё одно приложение
Здесь используются функция defaultWindow и запись WindowConfig непосредственно из sdl2. По размещению виджетов в окне, думаю, всё понятно из прошлых тем. Виджет button может быть в трёх вариантах : без картинки , только с текстом - по умолчанию, в примере не используется; ButtonLeftPicture -- картинка слева, указывается имя графического файла; и ButtonBottomPicture - картинка под текстом. Указываемые графические файлы вначале ищутся в каталоге ресурсов (GUI.Resources), в подкаталоге имя_скина.skin , если там не найдено, то просто в каталоге ресурсов. Кроме того, можно указать и абсолютный пусть к файлу. Это касается использования картинок и в других виджетах. Новое здесь – это задание реакции на событие (onClick) и динамическое изменение свойств виджета (enableWidget, setText). Но и с этим, не должно быть сложностей у тех, кто вообще использовал когда-либо программирование на основе событий. Выполним
Да, картинки для кнопок великоваты, но это только для демонстрации. Проверьте: - цвет кнопок меняется при прохождении через них указателем мыши; - если щёлкнуть по кнопке, то она принимает фокус, и тогда от неё можно переходить к следующей кнопке (или другому виджету способному принимать фокус) по Tab, к предыдущей по Shift-Tab. Действие кнопки в фокусе выполняется при нажатии Enter или пробел. Можно сделать одну из кнопок в фокусе при открытии окна вписав в конце
Виджет textureButton отображает переданную ему текстуру (может быть загруженную из файла, а может созданную на лету) на весь свой размер. Текстура может быть больше размера виджета, тогда колонки на которую текстура разбивается (если она в несколько раз шире виджета) используются для отображения состояния виджета (мышь над виджетом или нет, нажата кнопка мыши, состояние disabled), а номер ряда (если текстура в несколько раз выше виджета) переключается функцией setRowNum. Виджет pictureButton - вариант предыдущей кнопки для которой текстура загружается из ресурса (из файла). pictureWidget - упрощённый в настройке вариант кнопки, отображающий статическую картинку. Впрочем, и на pictureWidget можно установить обработчик щелчка onClick и переключать ряд картинки по setRowNum. Виджет buttonWithTriangle отображает кнопку на которой нарисована стрелка (треугольник) повёрнутая в указанную сторону с разным оформлением. В демонстрационном приложении из пакета GUI-SDL2 такие кнопки демонстрируются в EXAMPLE_NUM под номером 2. Продолжение следует. | |||||||||||||||||||||||||
Размещено в GUI-SDL2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


