[Scummvm-cvs-logs] scummvm master -> 9877abe93697c016d18f7fee1c252577e6fd47df

sev- sev at scummvm.org
Sun Apr 24 10:47:47 CEST 2016


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b4a2361bf7 WAGE: Started window resize implementation
9877abe936 WAGE: Implemented window resizing


Commit: b4a2361bf726dfd7939b70e62fd902d80d73161f
    https://github.com/scummvm/scummvm/commit/b4a2361bf726dfd7939b70e62fd902d80d73161f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-24T10:29:08+02:00

Commit Message:
WAGE: Started window resize implementation

Changed paths:
    engines/wage/gui.cpp
    engines/wage/macwindow.cpp
    engines/wage/macwindow.h
    engines/wage/macwindowmanager.cpp
    engines/wage/macwindowmanager.h



diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index b9635fb..f2de8ad 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -190,10 +190,10 @@ Gui::Gui(WageEngine *engine) {
 
 	_menu = new Menu(this);
 
-	_sceneWindow = _wm.add(false);
+	_sceneWindow = _wm.add(false, false);
 	_sceneWindow->setCallback(sceneWindowCallback, this);
 
-	_consoleWindow = _wm.add(true);
+	_consoleWindow = _wm.add(true, true);
 	_consoleWindow->setCallback(consoleWindowCallback, this);
 }
 
@@ -393,6 +393,13 @@ bool Gui::processConsoleEvents(WindowClick click, Common::Event &event) {
 		return false;
 	}
 
+	if (click == kBorderResizeButton) {
+		_consoleDirty = true;
+		_consoleFullRedraw = true;
+
+		return true;
+	}
+
 	if (click == kBorderInner) {
 		if (event.type == Common::EVENT_LBUTTONDOWN) {
 			startMarking(event.mouse.x, event.mouse.y);
diff --git a/engines/wage/macwindow.cpp b/engines/wage/macwindow.cpp
index f72def0..42e0362 100644
--- a/engines/wage/macwindow.cpp
+++ b/engines/wage/macwindow.cpp
@@ -54,7 +54,8 @@
 
 namespace Wage {
 
-MacWindow::MacWindow(int id, bool scrollable) : _scrollable(scrollable), _id(id) {
+MacWindow::MacWindow(int id, bool scrollable, bool resizable) :
+		_scrollable(scrollable), _id(id), _resizable(resizable) {
 	_active = false;
 	_borderIsDirty = true;
 	_contentIsDirty = true;
@@ -67,6 +68,7 @@ MacWindow::MacWindow(int id, bool scrollable) : _scrollable(scrollable), _id(id)
 	_dataPtr = 0;
 
 	_beingDragged = false;
+	_beingResized = false;
 }
 
 MacWindow::~MacWindow() {
@@ -277,34 +279,35 @@ void MacWindow::fillRect(Graphics::ManagedSurface *g, int x, int y, int w, int h
 	g->fillRect(r, color);
 }
 
-static WindowClick isInBorder(Common::Rect &rect, int x, int y) {
-	if (rect.contains(x, y))
+WindowClick MacWindow::isInBorder(int x, int y) {
+	if (_innerDims.contains(x, y))
 		return kBorderInner;
 
-	if (x >= rect.left - kBorderWidth && x < rect.left && y >= rect.top - kBorderWidth && y < rect.top)
+	if (x >= _innerDims.left - kBorderWidth && x < _innerDims.left && y >= _innerDims.top - kBorderWidth && y < _innerDims.top)
 		return kBorderCloseButton;
 
-	if (y >= rect.top - kBorderWidth && y < rect.top)
-		return kBorderHeader;
+	if (_resizable)
+		if (x >= _innerDims.right && x < _innerDims.right + kBorderWidth && y >= _innerDims.bottom && y < _innerDims.bottom + kBorderWidth)
+			return kBorderResizeButton;
 
-	if (x >= rect.right && x < rect.right + kBorderWidth) {
-		if (y < rect.top - kBorderWidth)
-			return kBorderNone;
+	if (_scrollable && x >= _innerDims.right && x < _innerDims.right + kBorderWidth) {
+		if (y < _innerDims.top - kBorderWidth)
+			return kBorderBorder;
 
-		if (y >= rect.bottom + kBorderWidth)
-			return kBorderNone;
+		if (y >= _innerDims.bottom + kBorderWidth)
+			return kBorderBorder;
 
-		if (y >= rect.top + rect.height() / 2)
+		if (y >= _innerDims.top + _innerDims.height() / 2)
 			return kBorderScrollDown;
 
 		return kBorderScrollUp;
 	}
 
-	return kBorderNone;
+	return kBorderBorder;
 }
 
 bool MacWindow::processEvent(Common::Event &event) {
-	WindowClick click = isInBorder(_innerDims, event.mouse.x, event.mouse.y);
+	WindowClick click = isInBorder(event.mouse.x, event.mouse.y);
 
 	switch (event.type) {
 	case Common::EVENT_MOUSEMOVE:
@@ -317,21 +320,40 @@ bool MacWindow::processEvent(Common::Event &event) {
 
 			((WageEngine *)g_engine)->_gui->_wm.setFullRefresh(true);
 		}
+
+		if (_beingResized) {
+			_dims.setWidth(MAX(kBorderWidth * 4, _dims.width() + event.mouse.x - _draggedX));
+			_dims.setHeight(MAX(kBorderWidth * 4, _dims.height() + event.mouse.y - _draggedY));
+			updateInnerDims();
+
+			_draggedX = event.mouse.x;
+			_draggedY = event.mouse.y;
+
+			((WageEngine *)g_engine)->_gui->_wm.setFullRefresh(true);
+			(*_callback)(click, event, _dataPtr);
+		}
 		break;
 	case Common::EVENT_LBUTTONDOWN:
 		setHighlight(click);
 
-		if (click == kBorderHeader) {
+		if (click == kBorderBorder) {
 			_beingDragged = true;
 
 			_draggedX = event.mouse.x;
 			_draggedY = event.mouse.y;
 		}
 
+		if (click == kBorderResizeButton) {
+			_beingResized = true;
+
+			_draggedX = event.mouse.x;
+			_draggedY = event.mouse.y;
+		}
+
 		break;
 	case Common::EVENT_LBUTTONUP:
-		if (_beingDragged)
-			_beingDragged = false;
+		_beingDragged = false;
+		_beingResized = false;
 
 		setHighlight(kBorderNone);
 		break;
diff --git a/engines/wage/macwindow.h b/engines/wage/macwindow.h
index a271a54..527de4a 100644
--- a/engines/wage/macwindow.h
+++ b/engines/wage/macwindow.h
@@ -67,12 +67,13 @@ enum WindowClick {
 	kBorderScrollDown,
 	kBorderCloseButton,
 	kBorderInner,
-	kBorderHeader
+	kBorderBorder,
+	kBorderResizeButton
 };
 
 class MacWindow {
 public:
-	MacWindow(int id, bool scrollable);
+	MacWindow(int id, bool scrollable, bool resizable);
 	~MacWindow();
 	void move(int x, int y);
 	void resize(int w, int h);
@@ -89,6 +90,7 @@ public:
 	bool processEvent(Common::Event &event);
 	void setCallback(bool (*callback)(WindowClick, Common::Event &, void *), void *data) { _callback = callback; _dataPtr = data; }
 	bool beingDragged() { return _beingDragged; }
+	bool beingResized() { return _beingResized; }
 
 private:
 	void drawBorder();
@@ -97,18 +99,20 @@ private:
 	const Graphics::Font *getTitleFont();
 	bool builtInFonts();
 	void updateInnerDims();
+	WindowClick isInBorder(int x, int y);
 
 private:
 	Graphics::ManagedSurface _surface;
 	Graphics::ManagedSurface _borderSurface;
 	Graphics::ManagedSurface _composeSurface;
 	bool _scrollable;
+	bool _resizable;
 	bool _active;
 	bool _borderIsDirty;
 	bool _contentIsDirty;
 	int _id;
 
-	bool _beingDragged;
+	bool _beingDragged, _beingResized;
 	int _draggedX, _draggedY;
 
 	WindowClick _highlightedPart;
diff --git a/engines/wage/macwindowmanager.cpp b/engines/wage/macwindowmanager.cpp
index 798d25f..8625e86 100644
--- a/engines/wage/macwindowmanager.cpp
+++ b/engines/wage/macwindowmanager.cpp
@@ -71,8 +71,8 @@ MacWindowManager::~MacWindowManager() {
         delete _windows[i];
 }
 
-MacWindow *MacWindowManager::add(bool scrollable) {
-    MacWindow *w = new MacWindow(_lastId, scrollable);
+MacWindow *MacWindowManager::add(bool scrollable, bool resizable) {
+    MacWindow *w = new MacWindow(_lastId, scrollable, resizable);
 
     _windows.push_back(w);
     _windowStack.push_back(w);
@@ -128,7 +128,7 @@ bool MacWindowManager::processEvent(Common::Event &event) {
         it--;
         MacWindow *w = *it;
 
-        if (w->beingDragged() || w->getDimensions().contains(event.mouse.x, event.mouse.y)) {
+        if (w->beingDragged() || w->beingResized() || w->getDimensions().contains(event.mouse.x, event.mouse.y)) {
             if (event.type == Common::EVENT_LBUTTONDOWN || event.type == Common::EVENT_LBUTTONUP)
                 setActive(w->getId());
 
diff --git a/engines/wage/macwindowmanager.h b/engines/wage/macwindowmanager.h
index 4174493..1e8b24b 100644
--- a/engines/wage/macwindowmanager.h
+++ b/engines/wage/macwindowmanager.h
@@ -59,7 +59,7 @@ public:
 
 	void setScreen(Graphics::ManagedSurface *screen) { _screen = screen; }
 
-	MacWindow *add(bool scrollable);
+	MacWindow *add(bool scrollable, bool resizable);
 	void setActive(int id);
 
 	void setFullRefresh(bool redraw) { _fullRefresh = true; }


Commit: 9877abe93697c016d18f7fee1c252577e6fd47df
    https://github.com/scummvm/scummvm/commit/9877abe93697c016d18f7fee1c252577e6fd47df
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-24T10:47:09+02:00

Commit Message:
WAGE: Implemented window resizing

Changed paths:
    engines/wage/gui-console.cpp
    engines/wage/gui.cpp
    engines/wage/gui.h
    engines/wage/macwindow.cpp
    engines/wage/macwindow.h



diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index ea66826..ca1917b 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -114,7 +114,7 @@ enum {
 
 void Gui::flowText(Common::String &str) {
 	Common::StringArray wrappedLines;
-	int textW = _consoleTextArea.width() - kConWPadding * 2;
+	int textW = _consoleWindow->getInnerDimensions().width() - kConWPadding * 2;
 	const Graphics::Font *font = getConsoleFont();
 
 	font->wordWrapText(str, textW, wrappedLines);
@@ -297,17 +297,17 @@ void Gui::drawInput() {
 	if (_engine->_inputText.contains('\n')) {
 		_consoleDirty = true;
 	} else {
-		int x = kConWPadding + _consoleTextArea.left;
-		int y = _cursorY + _consoleTextArea.top;
+		int x = kConWPadding + _consoleWindow->getInnerDimensions().left;
+		int y = _cursorY + _consoleWindow->getInnerDimensions().top;
 
-		Common::Rect r(x, y, x + _consoleTextArea.width() - kConWPadding, y + font->getFontHeight());
+		Common::Rect r(x, y, x + _consoleWindow->getInnerDimensions().width() - kConWPadding, y + font->getFontHeight());
 		_screen.fillRect(r, kColorWhite);
 
 		undrawCursor();
 
 		font->drawString(&_screen, _out[_inputTextLineNum], x, y, _screen.w, kColorBlack);
 
-		g_system->copyRectToScreen(_screen.getBasePtr(x, y), _screen.pitch, x, y, _consoleTextArea.width(), font->getFontHeight());
+		g_system->copyRectToScreen(_screen.getBasePtr(x, y), _screen.pitch, x, y, _consoleWindow->getInnerDimensions().width(), font->getFontHeight());
 	}
 
 	_cursorX = font->getStringWidth(_out[_inputTextLineNum]) + kConHPadding;
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index f2de8ad..09eeb0f 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -127,8 +127,8 @@ static void cursorTimerHandler(void *refCon) {
 	if (!gui->_screen.getPixels())
 		return;
 
-	x += gui->_consoleTextArea.left;
-	y += gui->_consoleTextArea.top;
+	x += gui->_consoleWindow->getInnerDimensions().left;
+	y += gui->_consoleWindow->getInnerDimensions().top;
 
 	gui->_screen.vLine(x, y, y + kCursorHeight, gui->_cursorState ? kColorBlack : kColorWhite);
 
@@ -302,11 +302,6 @@ void Gui::drawScene() {
 	_consoleDirty = true;
 	_menuDirty = true;
 	_consoleFullRedraw = true;
-
-	_consoleTextArea.left = _scene->_textBounds->left + kBorderWidth - 2;
-	_consoleTextArea.top = _scene->_textBounds->top + kBorderWidth - 2;
-	_consoleTextArea.setWidth(_scene->_textBounds->width() - 2 * kBorderWidth);
-	_consoleTextArea.setHeight(_scene->_textBounds->height() - 2 * kBorderWidth);
 }
 
 static bool sceneWindowCallback(WindowClick click, Common::Event &event, void *g) {
@@ -340,7 +335,7 @@ void Gui::drawConsole() {
 		return;
 
 	renderConsole(_consoleWindow->getSurface(), Common::Rect(kBorderWidth - 2, kBorderWidth - 2,
-				_scene->_textBounds->width() - kBorderWidth, _scene->_textBounds->height() - kBorderWidth));
+				_consoleWindow->getDimensions().width(), _consoleWindow->getDimensions().height()));
 	_consoleWindow->setDirty(true);
 }
 
@@ -358,9 +353,10 @@ bool Gui::processConsoleEvents(WindowClick click, Common::Event &event) {
 
 	if (click == kBorderScrollUp || click == kBorderScrollDown) {
 		if (event.type == Common::EVENT_LBUTTONDOWN) {
-			int textFullSize = _lines.size() * _consoleLineHeight + _consoleTextArea.height();
+			int consoleHeight = _consoleWindow->getInnerDimensions().height();
+			int textFullSize = _lines.size() * _consoleLineHeight + consoleHeight;
 			float scrollPos = (float)_scrollPos / textFullSize;
-			float scrollSize = (float)_consoleTextArea.height() / textFullSize;
+			float scrollSize = (float)consoleHeight / textFullSize;
 
 			_consoleWindow->setScroll(scrollPos, scrollSize);
 
@@ -374,7 +370,7 @@ bool Gui::processConsoleEvents(WindowClick click, Common::Event &event) {
 				undrawCursor();
 				_cursorY -= (_scrollPos - oldScrollPos);
 				_consoleDirty = true;
-				_consoleFullRedraw = true;
+					_consoleFullRedraw = true;
 				break;
 			case kBorderScrollDown:
 				_scrollPos = MIN<int>((_lines.size() - 2) * _consoleLineHeight, _scrollPos + _consoleLineHeight);
@@ -569,7 +565,7 @@ int Gui::calcTextX(int x, int textLine) {
 
 	Common::String str = _lines[textLine];
 
-	x -= _consoleTextArea.left;
+	x -= _consoleWindow->getInnerDimensions().left;
 
 	for (int i = str.size(); i >= 0; i--) {
 		if (font->getStringWidth(str) < x) {
@@ -583,7 +579,7 @@ int Gui::calcTextX(int x, int textLine) {
 }
 
 int Gui::calcTextY(int y) {
-	y -= _consoleTextArea.top;
+	y -= _consoleWindow->getInnerDimensions().top;
 
 	if (y < 0)
 		y = 0;
diff --git a/engines/wage/gui.h b/engines/wage/gui.h
index 4816dac..8a81982 100644
--- a/engines/wage/gui.h
+++ b/engines/wage/gui.h
@@ -136,7 +136,6 @@ public:
 	Graphics::ManagedSurface _screen;
 	int _cursorX, _cursorY;
 	bool _cursorState;
-	Common::Rect _consoleTextArea;
 
 	bool _builtInFonts;
 	WageEngine *_engine;
diff --git a/engines/wage/macwindow.cpp b/engines/wage/macwindow.cpp
index 42e0362..034a52e 100644
--- a/engines/wage/macwindow.cpp
+++ b/engines/wage/macwindow.cpp
@@ -96,6 +96,8 @@ void MacWindow::resize(int w, int h) {
 	_dims.setWidth(w);
 	_dims.setHeight(h);
 
+	updateInnerDims();
+
 	_contentIsDirty = true;
 	_borderIsDirty = true;
 }
@@ -322,9 +324,8 @@ bool MacWindow::processEvent(Common::Event &event) {
 		}
 
 		if (_beingResized) {
-			_dims.setWidth(MAX(kBorderWidth * 4, _dims.width() + event.mouse.x - _draggedX));
-			_dims.setHeight(MAX(kBorderWidth * 4, _dims.height() + event.mouse.y - _draggedY));
-			updateInnerDims();
+			resize(MAX(kBorderWidth * 4, _dims.width()  + event.mouse.x - _draggedX),
+				   MAX(kBorderWidth * 4, _dims.height() + event.mouse.y - _draggedY));
 
 			_draggedX = event.mouse.x;
 			_draggedY = event.mouse.y;
diff --git a/engines/wage/macwindow.h b/engines/wage/macwindow.h
index 527de4a..315203b 100644
--- a/engines/wage/macwindow.h
+++ b/engines/wage/macwindow.h
@@ -79,6 +79,7 @@ public:
 	void resize(int w, int h);
 	void setDimensions(const Common::Rect &r);
 	const Common::Rect &getDimensions() { return _dims; }
+	const Common::Rect &getInnerDimensions() { return _innerDims; }
 	bool draw(Graphics::ManagedSurface *g, bool forceRedraw = false);
 	void setActive(bool active);
 	Graphics::ManagedSurface *getSurface() { return &_surface; }






More information about the Scummvm-git-logs mailing list