Можно, но если нет сильной необходимости, то лучше явно задать большой range с запасом, чем это делать.
Где-то на англоязычном форуме китайцы что-то такое делали, вроде успешно, но как найти уже не помню. http://www.ogre3d.org/addonforums/viewforum.php?f=17
Мне вот интересно, а сами пользователи иероглифического письма смогут вводить текст в инпут боксы вашего GUI? Я просто понятия не имею, как это у них все происходит. Вы проверяли?
Ну, никто не жаловался :) Главное, чтобы система ввода правильно выдавала utf коды ну или можно было преобразовать. Сам gui ничего про это не знает и знать не должен.
Баг нашёл. Если нажать мышь в любом месте, а потом отпустить на кнопке, то это будет считаться за нажатие и вызовет событие. Такого быть не должно. Юзер должен и нажать на кнопку, и отпустить на ней же.
Или это фича?
Не воспроизводится. Видел похожий баг, когда неправильно вызывались injectMouse*** события (то ли не везде были заполнены координаты, то ли каких-то осбытий вовсе не было).
Как так? Неправильно?
void GUI_InjectMouseInput(POINT mousePosCl, byte mouse[]) { MyGUI::InputManager::getInstance( ).injectMouseMove( mousePosCl.x, mousePosCl.y, 0);//MousePos for( byte i = 0; i < 8; i++)//Loop through all buttons { if( mouse[i] == 1) MyGUI::InputManager::getInstance( ).injectMousePress( mousePosCl.x, mousePosCl.y, MyGUI::MouseButton::Enum( i)); //Pressed if( mouse[i] == 3) MyGUI::InputManager::getInstance( ).injectMouseRelease( mousePosCl.x, mousePosCl.y, MyGUI::MouseButton::Enum( i)); //Released } return; }
Что я не так то сделал? Может объясните все-таки особенности вашего GUI? Или запилите уже вменяемую документацию со всеми ремарками.
Я уже все обсмотрел и перепроверил, но баг не смог починить. Ладно, пусть баг так и остается, проехали.
Теперь появился другой вопрос. Опять по инпуту. Я тут смотрел ваши демки, в надежде разобраться с тем, как вы вводите текст. Вроде бы разобрался - нашел заголовочный файл InputConverter.h. Мне он показался довольно удобным и я решил включить его в свой проект(ведь я имею право, да?) и он даже безо всяких пинков заработал из коробки. А теперь вопрос: как вы отслеживаете смену языка? Я так понял, что все дело в методе
GetKeyboardLayout(0)
который и определяет раскладку клавиатуры. Но у меня ничего не меняется в приложении при нажатии Alt + Shift. Скажите - это у меня проблема в самом приложении или же нужно что-то еще отследить, чтобы язык менялся?
По идее нужно только то, что делается тут: https://github.com/MyGUI/mygui/blob/master/Common/Input/Win32/InputManager.cpp
Саму смену языка явно мы не отслеживаем.
И да, все исходники можно использовать и менять как хочешь, но лучше прислать патч, если было сделано полезное изменение ;)
Вопрос по версии 3.2.0
Бывают моменты, что падает вот на этой строке:
MyGUI_EditText.cpp [808] (void EditText::drawGlyph)
drawQuad(_vertex, _vertexCount, vertexRect, mNode->getNodeDepth( ), _textureRect, _colour);
Дамп показывает, что mNode = nullptr
Ну еще у vertexRect X и Z параметры NAN.
Количество вертексов реальное.
На экране чат. Падает иногда ВДРУГ.
Подозревал кривые символы в чате, но падает не у всех.
Подозревал слишком большой объем вершин из-за текста, что в память не влезает, но вроде в пределах нормы и опять же, падает в этот момент не у всех.
Т.е. по идее, если я все верно понимаю, то при проблемах с текстом или количеством вершин упасть должно у всех пользователей чата в один момент (история одна на всех).
Но нет. Падает то у одного, то у другого. Не часто, но бывает.
Причем может упасть после клика на один из элементов, а может без этого. Может и совпадение.
Так собсна в чем вопрос. Может это что-то известное и уже пофиксенное в новых версиях и можно забрать в 3.2.0? Вдруг по симптомам кто-то узнает ситуацию.
Просто пока нет возможности обновиться на версию из гитхаба.
В общем, в чем суть? Призываю телепатов из отпуска.
Вот коллстэк:
> Game.dll!MyGUI::EditText::drawGlyph(const MyGUI::RenderTargetInfo & _renderTargetInfo={...}, MyGUI::Vertex * & _vertex=0x39df3400, unsigned int & _vertexCount=23016, MyGUI::types::TRect<float> _vertexRect={...}, MyGUI::types::TRect<float> _textureRect={...}, unsigned int _colour=4278190080) Line 808 C++
Game.dll!MyGUI::EditText::doRender() Line 599 C++
Game.dll!MyGUI::RenderItem::renderToTarget(MyGUI::IRenderTarget * _target=0x071ec4e0, bool _update=false) Line 66 C++
Game.dll!MyGUI::LayerNode::renderToTarget(MyGUI::IRenderTarget * _target=0x071ec4e0, bool _update=false) Line 107 C++
Game.dll!MyGUI::SharedLayer::renderToTarget(MyGUI::IRenderTarget * _target=0x071ec4e0, bool _update=false) Line 118 C++
Game.dll!MyGUI::LayerManager::renderToTarget(MyGUI::IRenderTarget * _target=0x071ec4e0, bool _update=false) Line 212 C++
Game.dll!MyGUI::RenderManager::onRenderToTarget(MyGUI::IRenderTarget * _target=0x071ec4e0, bool _update=false) Line 42 C++
А можно посмотреть на 808ю строчку в EditText::drawGlyph? а то ни в последней версии ни в 3.2.0 там не на чем падать.
И кстати после 3.2.0 были улучшения качества отрисовки шрифтов, так что рекомендую обновиться.
Altren
> А можно посмотреть на 808ю строчку в EditText::drawGlyph? а то ни в последней
> версии ни в 3.2.0 там не на чем падать.
Дык я ее и привел в посте.
drawQuad(_vertex, _vertexCount, vertexRect, mNode->getNodeDepth( ), _textureRect, _colour);
Вот здесь mNode пустой. Он nullptr.
Все остальные значения от краша к крашу разные (иногда с NAN в rect иногда нет).
> И кстати после 3.2.0 были улучшения качества отрисовки шрифтов, так что
> рекомендую обновиться.
Да я бы и рад, но сейчас такой возможности нет.
Ну как там у телепатов? Не придумалось ничего?
Тема в архиве.