diff options
-rw-r--r-- | graphics/macgui/mactext.cpp | 4 | ||||
-rw-r--r-- | graphics/macgui/mactext.h | 2 | ||||
-rw-r--r-- | graphics/macgui/mactextwindow.cpp | 63 | ||||
-rw-r--r-- | graphics/macgui/mactextwindow.h | 4 |
4 files changed, 73 insertions, 0 deletions
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp index 4bb9feff36..6ebbe181c6 100644 --- a/graphics/macgui/mactext.cpp +++ b/graphics/macgui/mactext.cpp @@ -445,4 +445,8 @@ void MacText::removeLastLine() { _textMaxHeight -= h; } +void MacText::getRowCol(int x, int y, int *col, int *row) { + warning("getRowCol(%d, %d, ...)", x, y); +} + } // End of namespace Graphics diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h index d93ad13049..fe5c583ca2 100644 --- a/graphics/macgui/mactext.h +++ b/graphics/macgui/mactext.h @@ -113,6 +113,8 @@ public: void render(); Graphics::ManagedSurface *getSurface() { return _surface; } + void getRowCol(int x, int y, int *col, int *row); + private: void splitString(Common::String &s); void render(int from, int to); diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp index 1743614730..cc7bd268c7 100644 --- a/graphics/macgui/mactextwindow.cpp +++ b/graphics/macgui/mactextwindow.cpp @@ -54,6 +54,7 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco _maxWidth = maxWidth; _inputIsDirty = true; + _inTextSelection = false; _scrollPos = 0; @@ -225,9 +226,71 @@ bool MacTextWindow::processEvent(Common::Event &event) { return false; } + if (click == kBorderInner) { + if (event.type == Common::EVENT_LBUTTONDOWN) { + startMarking(event.mouse.x, event.mouse.y); + + return true; + } else if (event.type == Common::EVENT_LBUTTONUP) { + if (_inTextSelection) { + _inTextSelection = false; + + if (_selectedText.endY == -1 || + (_selectedText.endX == _selectedText.startX && _selectedText.endY == _selectedText.startY)) { + _selectedText.startY = _selectedText.endY = -1; + _contentIsDirty = true; + //_menu->enableCommand(kMenuEdit, kMenuActionCopy, false); + } else { + //_menu->enableCommand(kMenuEdit, kMenuActionCopy, true); + + bool cutAllowed = false; + + if (_selectedText.startY == _selectedText.endY && _selectedText.startY == _mactext->getLineCount() - 1) + cutAllowed = true; + + //_menu->enableCommand(kMenuEdit, kMenuActionCut, cutAllowed); + //_menu->enableCommand(kMenuEdit, kMenuActionClear, cutAllowed); + } + } + + return true; + } else if (event.type == Common::EVENT_MOUSEMOVE) { + if (_inTextSelection) { + updateTextSelection(event.mouse.x, event.mouse.y); + return true; + } + } + + return false; + } + return MacWindow::processEvent(event); } +void MacTextWindow::startMarking(int x, int y) { + x -= getInnerDimensions().left; + y -= getInnerDimensions().top; + + y += _scrollPos; + + _mactext->getRowCol(x, y, &_selectedText.startX, &_selectedText.startY); + + _selectedText.endY = -1; + + _inTextSelection = true; +} + +void MacTextWindow::updateTextSelection(int x, int y) { + x -= getInnerDimensions().left; + y -= getInnerDimensions().top; + + y += _scrollPos; + + _mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY); + + _contentIsDirty = true; +} + void MacTextWindow::undrawInput() { for (uint i = 0; i < _inputTextHeight; i++) _mactext->removeLastLine(); diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h index 313b05b60a..eb3f270ed5 100644 --- a/graphics/macgui/mactextwindow.h +++ b/graphics/macgui/mactextwindow.h @@ -71,6 +71,9 @@ private: void drawInput(); void updateCursorPos(); + void startMarking(int x, int y); + void updateTextSelection(int x, int y); + public: int _cursorX, _cursorY; bool _cursorState; @@ -88,6 +91,7 @@ private: ManagedSurface *_cursorSurface; + bool _inTextSelection; SelectedText _selectedText; int _maxWidth; |