diff --git a/modules/client_terminal/terminal.lua b/modules/client_terminal/terminal.lua index a5fa9161..9f3d4729 100644 --- a/modules/client_terminal/terminal.lua +++ b/modules/client_terminal/terminal.lua @@ -25,6 +25,7 @@ local function navigateCommand(step) if currentHistoryIndex > 0 then local command = commandHistory[numCommands - currentHistoryIndex + 1] commandTextEdit:setText(command) + commandTextEdit:setCursorPos(-1) else commandTextEdit:clearText() end @@ -52,6 +53,7 @@ local function completeCommand() -- complete command with one match if #possibleCommands == 1 then commandTextEdit:setText(possibleCommands[1]) + commandTextEdit:setCursorPos(-1) -- show command matches elseif #possibleCommands > 0 then print('>> ' .. commandBegin) @@ -75,6 +77,7 @@ local function completeCommand() end end commandTextEdit:setText(commandBegin) + commandTextEdit:setCursorPos(-1) for i,v in ipairs(possibleCommands) do print(v) diff --git a/modules/client_terminal/terminal.otui b/modules/client_terminal/terminal.otui index 4894a19a..9e6945e0 100644 --- a/modules/client_terminal/terminal.otui +++ b/modules/client_terminal/terminal.otui @@ -39,6 +39,8 @@ UIWindow anchors.right: parent.right margin-left: 5 font: terminus-14px-bold + selection-color: black + selection-background-color: white ResizeBorder id: bottomResizeBorder diff --git a/modules/game_console/console.otui b/modules/game_console/console.otui index 436090d7..5b8ccd5a 100644 --- a/modules/game_console/console.otui +++ b/modules/game_console/console.otui @@ -7,6 +7,7 @@ ConsoleLabel < UITextEdit text-auto-resize: true selection-color: #111416 selection-background-color: #999999 + change-cursor-image: false ConsolePhantomLabel < UILabel font: verdana-11px-antialised diff --git a/src/client/mapview.cpp b/src/client/mapview.cpp index 1dac59c9..e59c1e20 100644 --- a/src/client/mapview.cpp +++ b/src/client/mapview.cpp @@ -219,7 +219,7 @@ void MapView::draw(const Rect& rect) continue; PointF jumpOffset = creature->getJumpOffset() * scaleFactor; - Point creatureOffset = Point(16 - creature->getDisplacementX(), -3 - creature->getDisplacementY()); + Point creatureOffset = Point(16 - creature->getDisplacementX(), - creature->getDisplacementY() - 2); Position pos = creature->getPosition(); Point p = transformPositionTo2D(pos, cameraPosition) - drawOffset; p += (creature->getDrawOffset() + creatureOffset) * scaleFactor - Point(stdext::round(jumpOffset.x), stdext::round(jumpOffset.y)); diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index 6edb9871..85fa05b2 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -652,6 +652,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("setCursorPos", &UITextEdit::setCursorPos); g_lua.bindClassMemberFunction("setSelection", &UITextEdit::setSelection); g_lua.bindClassMemberFunction("setCursorVisible", &UITextEdit::setCursorVisible); + g_lua.bindClassMemberFunction("setChangeCursorImage", &UITextEdit::setChangeCursorImage); g_lua.bindClassMemberFunction("setTextHidden", &UITextEdit::setTextHidden); g_lua.bindClassMemberFunction("setValidCharacters", &UITextEdit::setValidCharacters); g_lua.bindClassMemberFunction("setShiftNavigation", &UITextEdit::setShiftNavigation); @@ -690,6 +691,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("isEditable", &UITextEdit::isEditable); g_lua.bindClassMemberFunction("isSelectable", &UITextEdit::isSelectable); g_lua.bindClassMemberFunction("isCursorVisible", &UITextEdit::isCursorVisible); + g_lua.bindClassMemberFunction("isChangingCursorImage", &UITextEdit::isChangingCursorImage); g_lua.bindClassMemberFunction("isTextHidden", &UITextEdit::isTextHidden); g_lua.bindClassMemberFunction("isShiftNavigation", &UITextEdit::isShiftNavigation); g_lua.bindClassMemberFunction("isMultiline", &UITextEdit::isMultiline); diff --git a/src/framework/ui/uitextedit.cpp b/src/framework/ui/uitextedit.cpp index 93f7250e..c50d05d5 100644 --- a/src/framework/ui/uitextedit.cpp +++ b/src/framework/ui/uitextedit.cpp @@ -41,6 +41,7 @@ UITextEdit::UITextEdit() m_maxLength = 0; m_editable = true; m_selectable = true; + m_changeCursorImage = true; m_selectionReference = 0; m_selectionStart = 0; m_selectionEnd = 0; @@ -349,6 +350,9 @@ void UITextEdit::setSelection(int start, int end) if(start > end) std::swap(start, end); + if(end == -1) + end = m_text.length(); + m_selectionStart = std::min(std::max(start, 0), (int)m_text.length()); m_selectionEnd = std::min(std::max(end, 0), (int)m_text.length()); } @@ -584,10 +588,12 @@ void UITextEdit::updateText() void UITextEdit::onHoverChange(bool hovered) { - if(hovered) - g_mouse.setTextCursor(); - else - g_mouse.restoreCursor(); + if(m_changeCursorImage) { + if(hovered) + g_mouse.setTextCursor(); + else + g_mouse.restoreCursor(); + } } void UITextEdit::onStyleApply(const std::string& styleName, const OTMLNodePtr& styleNode) @@ -620,6 +626,8 @@ void UITextEdit::onStyleApply(const std::string& styleName, const OTMLNodePtr& s } else if(node->tag() == "cursor-visible") setCursorVisible(node->value()); + else if(node->tag() == "change-cursor-image") + setChangeCursorImage(node->value()); } } @@ -735,6 +743,18 @@ bool UITextEdit::onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeat setSelection(m_selectionReference, m_cursorPos); } return true; + } else if(keyCode == Fw::KeyHome) { // move cursor to first character + if(m_cursorPos != 0) { + setSelection(m_cursorPos, 0); + setCursorPos(0); + return true; + } + } else if(keyCode == Fw::KeyEnd) { // move cursor to last character + if(m_cursorPos != (int)m_text.length()) { + setSelection(m_cursorPos, m_text.length()); + setCursorPos(m_text.length()); + return true; + } } } diff --git a/src/framework/ui/uitextedit.h b/src/framework/ui/uitextedit.h index 9890e394..f9fdbd24 100644 --- a/src/framework/ui/uitextedit.h +++ b/src/framework/ui/uitextedit.h @@ -41,6 +41,7 @@ public: void setCursorPos(int pos); void setSelection(int start, int end); void setCursorVisible(bool enable) { m_cursorVisible = enable; } + void setChangeCursorImage(bool enable) { m_changeCursorImage = enable; } void setTextHidden(bool hidden); void setValidCharacters(const std::string validCharacters) { m_validCharacters = validCharacters; } void setShiftNavigation(bool enable) { m_shiftNavigation = enable; } @@ -81,6 +82,7 @@ public: Color getSelectionBackgroundColor() { return m_selectionBackgroundColor; } bool hasSelection() { return m_selectionEnd - m_selectionStart > 0; } bool isCursorVisible() { return m_cursorVisible; } + bool isChangingCursorImage() { return m_changeCursorImage; } bool isTextHidden() { return m_textHidden; } bool isShiftNavigation() { return m_shiftNavigation; } bool isMultiline() { return m_multiline; } @@ -118,6 +120,7 @@ private: bool m_cursorInRange; bool m_cursorVisible; bool m_editable; + bool m_changeCursorImage; std::string m_validCharacters; uint m_maxLength; bool m_updatesEnabled;