diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/guiFormSpecMenu.cpp | 28 | ||||
-rw-r--r-- | src/intlGUIEditBox.cpp | 37 |
2 files changed, 39 insertions, 26 deletions
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index f62b6e3de..2abb72578 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -1073,7 +1073,6 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>& std::string name = parts[2]; std::string label = parts[3]; std::string default_val = parts[4]; - bool has_vscrollbar = parts.size() > 5 ? is_yes(parts[5]) : false; MY_CHECKPOS(type,0); MY_CHECKGEOM(type,1); @@ -1118,27 +1117,25 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>& bool is_editable = !name.empty(); - if (is_editable) { + if (is_editable) spec.send = true; - } gui::IGUIEditBox *e; #if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 if (g_settings->getBool("freetype")) { - e = (gui::IGUIEditBox *) new gui::intlGUIEditBox(spec.flabel.c_str(), - true, Environment, this, spec.fid, rect, is_editable, has_vscrollbar); + e = (gui::IGUIEditBox *) new gui::intlGUIEditBox(spec.fdefault.c_str(), + true, Environment, this, spec.fid, rect, is_editable, true); e->drop(); } else { #else { #endif - e = new GUIEditBoxWithScrollBar(spec.flabel.c_str(), true, - Environment, this, spec.fid, rect, is_editable, has_vscrollbar); + e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, + Environment, this, spec.fid, rect, is_editable, true); } - if (is_editable && spec.fname == data->focused_fieldname) { + if (is_editable && spec.fname == data->focused_fieldname) Environment->setFocus(e); - } if (e) { if (type == "textarea") @@ -1157,13 +1154,12 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>& e->OnEvent(evt); } } - if (is_editable) { - if (label.length() >= 1) { - int font_height = g_fontengine->getTextHeight(); - rect.UpperLeftCorner.Y -= font_height; - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; - addStaticText(Environment, spec.flabel.c_str(), rect, false, true, this, 0); - } + + if (is_editable && !label.empty()) { + int font_height = g_fontengine->getTextHeight(); + rect.UpperLeftCorner.Y -= font_height; + rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; + addStaticText(Environment, spec.flabel.c_str(), rect, false, true, this, 0); } if (parts.size() >= 6) { diff --git a/src/intlGUIEditBox.cpp b/src/intlGUIEditBox.cpp index a6175231f..ab470c4fc 100644 --- a/src/intlGUIEditBox.cpp +++ b/src/intlGUIEditBox.cpp @@ -260,7 +260,7 @@ void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT //! called if an event happened. bool intlGUIEditBox::OnEvent(const SEvent& event) { - if (IsEnabled && m_writable) + if (IsEnabled) { switch(event.EventType) @@ -780,7 +780,7 @@ void intlGUIEditBox::draw() if (Border) { - if (m_writable) { + if (m_writable) { skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW), false, true, FrameRect, &AbsoluteClippingRect); } @@ -944,8 +944,7 @@ void intlGUIEditBox::draw() font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0); if (m_writable) { - if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350) - { + if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350) { setTextRect(cursorLine); CurrentTextRect.UpperLeftCorner.X += charcursorpos; @@ -1086,6 +1085,14 @@ bool intlGUIEditBox::processMouse(const SEvent& event) calculateScrollPos(); return true; } + break; + case EMIE_MOUSE_WHEEL: + if (m_vscrollbar) { + s32 pos = m_vscrollbar->getPos(); + s32 step = m_vscrollbar->getSmallStep(); + m_vscrollbar->setPos(pos - event.MouseInput.Wheel * step); + } + break; default: break; } @@ -1433,9 +1440,8 @@ void intlGUIEditBox::calculateScrollPos() VScrollPos = 0; // todo: adjust scrollbar - if (m_vscrollbar) { + if (m_vscrollbar) m_vscrollbar->setPos(VScrollPos); - } } //! set text markers @@ -1467,20 +1473,31 @@ void intlGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type) //! Create a vertical scrollbar void intlGUIEditBox::createVScrollBar() { + s32 fontHeight = 1; + + if (OverrideFont) { + fontHeight = OverrideFont->getDimension(L"").Height; + } else { + if (IGUISkin* skin = Environment->getSkin()) { + if (IGUIFont* font = skin->getFont()) { + fontHeight = font->getDimension(L"").Height; + } + } + } + irr::core::rect<s32> scrollbarrect = FrameRect; scrollbarrect.UpperLeftCorner.X += FrameRect.getWidth() - m_scrollbar_width; m_vscrollbar = Environment->addScrollBar(false, scrollbarrect, getParent(), getID()); m_vscrollbar->setVisible(false); - m_vscrollbar->setSmallStep(1); - m_vscrollbar->setLargeStep(1); + m_vscrollbar->setSmallStep(3 * fontHeight); + m_vscrollbar->setLargeStep(10 * fontHeight); } //! Update the vertical scrollbar (visibilty & scroll position) void intlGUIEditBox::updateVScrollBar() { - if (!m_vscrollbar) { + if (!m_vscrollbar) return; - } // OnScrollBarChanged(...) if (m_vscrollbar->getPos() != VScrollPos) { |