Pull to refresh

Comments 58

а почему у checkbox не работает &ltlabel&gt?
Хм… Скорее всего потому что я изначально решил отделить мух от котлет и не привязывать к checkbox'у функционал, который ему, по большому счету, не нужен. Но если кому-то будет так уж необходимо это в обязательном порядке — попробую сделать, не проблема.
Ну, вообще-то, label является чуть ли не основным элементом чекбокса ;)
Возможно моя позиция действительно выглядит как банальное ламерство и незнание и я оговорился. Я знаю, что в стандартной реализации HTML у чекбокса есть label. И он там не зря, да. Просто я его решил сделать отдельным элементом GUILabel.
Просто в случае с чекбоксами и радиокнопками label выполняет очень важную функцию с точки зрения юзабилити — расширяет поле, куда надо ткнуть, чтобы соответсвующий контрол сработал.
Хм… От этом я не подумал, спасибо. Обязательно добавлю.
ЭТо еще раз говорит о том, что каждый элемент нужно очень подробно изучать.
В целом, это — стандартное поведение label'ов — переводить фокус на связаный элемент. То есть даже если label у текстбокса, то щелчок по такому label'у должен фокусировать текстбокс. Просто в случае с чекбоксами и радиокнопками это наиболее заметно.
И у радиобатона надо бы как-нибудь отличие от чекбокса — кружок вместо квадратика
И еще — почему нельзя ткнуть в какое-либо положение на слайдере чтобы туда поставить сразу, без дёрганья крутилки?
и что за фигня появляется в текстарее по нажатию стрелок?! и где скроллбар? :D
Скины не работают:

Uncaught exception: TypeError: Second argument to 'instanceof' does not implement [[HasInstance]]

Error thrown at line 142, column 8 in <anonymous function: FiveGUI.GUISlider.prototype.initializePathPoints>() in fivegui.elhsmart.net.ru/js/FiveGUI/src/GUISlider.js:
if(img instanceof Image && img.complete)
called from line 191, column 4 in <anonymous function: FiveGUI.GUISlider.prototype.initialize>(parent) in fivegui.elhsmart.net.ru/js/FiveGUI/src/GUISlider.js:
this.initializePathPoints();
called from line 139, column 8 in <anonymous function: FiveGUI.GUIRegion.prototype.bindSubElements>(defaults) in fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIRegion.js:
this.elements[b].initialize(this);
called from line 356, column 8 in <anonymous function: FiveGUI.GUI.prototype.addElement>(element) in fivegui.elhsmart.net.ru/js/FiveGUI/src/GUI.js:
element.bindSubElements(this.defaults);
called from line 725, column 12 in fivegui.elhsmart.net.ru/skinned-dynamic.html:
G.addElement(Region);
Uncaught exception: TypeError: Cannot convert 'window.jam' to object

Error thrown at line 229, column 15 in <anonymous function: Preload.callback>() in fivegui.elhsmart.net.ru/skinned-dynamic.html:
window.jam.load();
called from line 219, column 20 in <anonymous function: image.onload>() in fivegui.elhsmart.net.ru/skinned-dynamic.html:
window[window.preloaderName].callback();
Опера? Я об этом писал в P.S. Поправлю на днях.
В IE8 не работает:

Сведения об ошибке на веб-странице

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 38
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUILabel.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 37
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUICheckbox.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 37
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIRadiobutton.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 41
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUITextfield.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 41
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIDropdown.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 36
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUISelect.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 46
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUITextarea.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 6
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIWindow.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 43
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIOption.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 41
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUISlider.js

Сообщение: 'FiveGUI.GUILib' - есть null или не является объектом
Строка: 39
Символ: 1
Код: 0
URI-код: fivegui.elhsmart.net.ru/js/FiveGUI/src/GUIProgressbar.js

Сообщение: Предполагается наличие идентификатора, строки или числа
Строка: 337
Символ: 13
Код: 0
URI-код: fivegui.elhsmart.net.ru/skinned-dynamic.html
а вас не смутило слово canvas в заголовке?
Дропдаун не закрывается если ничего не выбирать и продолжать работу с интерфейсом.
Спасибо, на днях поправлю.
в IE9 не работает.
пишет ошибку:

SCRIPT438: Объект не поддерживает это свойство или метод
GFX.js, строка 93 символ 5


Спасибо, обязательно поковыряюсь и исправлю, если найду IE9
В Опере обе версии со скинами не работают.
Я уже даже знаю, в чем причина. Спасибо, поправлю.
Не считайте это за придирку, просто как вектор развития — работает из рук вон плохо на iOS и Android.
Спасибо, я вообще удивлен, что работает на iOS и Android. Как только найду доступ к телефонам с этими операционками — постараюсь исправить.
Ну для Андроида можно эмулятор скачать…
UFO just landed and posted this here
Да ладно, для тестов можно и попользовать
Я не знаю. У меня не хватило терпения дождаться пока запуститься браузер. Пару раз уже пробовал.
Проще на тот же VirtualBox поставить android. Быстро, дёшево и сердито =)
А как же тач-интерфейс?
В опере хуже всего работают кнопки. Но вообще интересно.
То, что radiobutton не круглый, а квадратный как checkbox — это убого и не правильно.
Посмотрите внимательно пример. Вид радиобаттона 1. Можно достаточно легко изменить. 2. нет никаких проблем изменить ctx.moveTo() на ctx.bezierCurveTo() или, в графическом варианте, еще легче — картинку checkbox'a на картинку radiobutton'a. Все это достаточно легко делается, у меня просто не было необходимой графики.
я немного недоумеваю…

но разве нельзя поверх канваса разместить html контролы? а дальше уже давно отточенными средствами css настроить внешний вид… зато не придется реализовывать функционал работы с языками (ввод текста, лево/право сторонний, модификаторы и т.п.) устройствами ввода (скролл мыши, сенсорный экран планшетников,..) и многое другое.
www.quirksmode.org/html5/inputs.html
На quirksmode где-то была статья сравнения, где как и какие элементы рендерятся. Так что если мне, к примеру, нужна будет кнопка ровно 100х20 пикселей с текстом по центру — все может быть плохо. Да и не хотелось JS перемешивать с css/html.
Я долго думал как же отрисовывать UI в игре на канвасе, и пришел к выводу, что наиболее производительным будет использование HTML элементов поверх канваса.

Простой текст на канвасе, может жрать до 30% нагрузки и вашем примере это видно, если начать быстро печатать в текстфилде
На самом деле сейчас просто не оптимизированы события. Я думаю, нагрузку там можно значительно уменьшить.
да не в событиях дело, нативно рисовать текст на канвасе (как и использовать градиенты и тени) — очень напряжно и лучше этого избегать. просто попробуйте сравнить)

кроме того, UI статичен и HTML элементы будут органично смотреться (естественно если будут хорошо выполнены графически). А вот когда не годиться использовать HTML, так это когда элемент интерфейса внутри игры может закрываться границами (например контекстная подсказка/меню объекта)
UFO just landed and posted this here
Почему же плохая? Любой GUI под DirectX/OpenGL изначально занимается плохой идеей и переписывает стандартные контролы (посмотрите тот же CeGUI или Guichan), Qt/GTK изначально тоже занимаются плохой идеей и переписывают стандартные контролы. Что уж там говорить, вид стандартных контролов в разных браузерах разный.

Я понимаю, что сейчас реализация очень далека от идеала, но все же, не нужно судить так критично. Спасибо за отзыв.
Qt переписывает? оО как раз у них контролы нативные (или выглядят нативными)
Раньше переписывали, судя по вики. Теперь же «Recent versions of Qt use the native style APIs of the different platforms to query the platform for the desired appearance of the Qt controls, and so do not suffer from such issues as much». Как я понимаю, и сейчас они используют не нативные контролы целевой платформы, но теперь их внешний вид запрашивается у системы. Надо исходники посмотреть.
Если со слайдера увести мышку вверх, то он продолжает работать, а если вниз то нет.
Спасибо, проверю и поправлю.
На самом деле независимо от направления — глючит когда курсор уходит с подложки интерфейса
Текстэрия работает странно. Бэкспейс и стрелки вставляют проценты и делают странные вещи. FF8.
В других браузерах не пробовали? Скорее всего нужно вставить проверну на onkeypress, во время того, как отрабатывает onkeydown.
На самом деле такие вещи надо делать на svg (ие способен показать через рафаель) либо вообще картинками. Сильная сторона канваса в динамике. Имхо
Такие вещи могут быть частью какого-то большего проекта на Canvas…
Как уже сказал товарищ выше, это может быть проблемой, если над элементом GUI нужно отрисовать часть логики проекта, или какой-то набор объектов.

В общем, лучше иметь удобный GUI внутри canvas'a и использовать его как подобие 2D-слоя видеокарты, чем городить над канвасом стандартные элементы или сращивать canvas+svg.
Не без багов, но найс. Жаль, что не как плагин для LibCanvas, я бы использовал =)
Спасибо, ждал твоего комментария. Баги постараюсь в ближайшее время поисправлять, да, х таки очень много, нельзя было в таком состоянии показывать. А вот сделать порт под LibCanvas — это идея, да. И это не так уж сложно, попробую форкнуть и озадачиться портированием.
Та не. Кроме проблемы с Оперой (ох уж эта Опера) и Эксплорером (ох уж этот Эксплорер) остальные баги не так страшны даже для продакшна.
Кстати, основная проблема далеко не в том, чтобы «просто прикрутить его к приложению». Самое важное — это заставить его корректно работать с другими объектами на странице. Чтобы не проваливались события сквозь кнопки, чтобы их было легко показать и убрать. И так далее.
Мне одному скрин напомнил кнопки из Lineage 2?)
И всё-таки нативные контролы — лучшее решение.
О господи! Ну зачем?
Таких ужасных велосипедов еще нужно поискать.
Можно поподробнее, чем он ужасен и чем велосипед?
В селекте множественный выбор не работает.
MacOSX 10.7.2, FF 8.0.1
Sign up to leave a comment.

Articles