aboutsummaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'graphics')
-rw-r--r--graphics/macgui/mactext.cpp4
-rw-r--r--graphics/macgui/mactext.h2
-rw-r--r--graphics/macgui/mactextwindow.cpp63
-rw-r--r--graphics/macgui/mactextwindow.h4
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;