aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2016-03-17 18:50:05 +0100
committerEugene Sandulenko2016-03-18 11:45:29 +0100
commit671d3faa7199cdea4f2214742735b36d52f0e7fa (patch)
tree407c7f1bbd56dd189fb94ebe4eeaba830b24ed1e
parentf8cea91890ebbba218cd1b58aa2efaba58839d2d (diff)
downloadscummvm-rg350-671d3faa7199cdea4f2214742735b36d52f0e7fa.tar.gz
scummvm-rg350-671d3faa7199cdea4f2214742735b36d52f0e7fa.tar.bz2
scummvm-rg350-671d3faa7199cdea4f2214742735b36d52f0e7fa.zip
WAGE: Initial code for border manipulation
-rw-r--r--engines/wage/gui.cpp65
-rw-r--r--engines/wage/gui.h11
2 files changed, 62 insertions, 14 deletions
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 387731cc18..91a9cfe8b8 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -294,10 +294,10 @@ void Gui::drawBox(Graphics::Surface *g, int x, int y, int w, int h) {
g->frameRect(r, kColorBlack);
}
-void Gui::fillRect(Graphics::Surface *g, int x, int y, int w, int h) {
+void Gui::fillRect(Graphics::Surface *g, int x, int y, int w, int h, int color) {
Common::Rect r(x, y, x + w, y + h);
- g->fillRect(r, kColorBlack);
+ g->fillRect(r, color);
}
#define ARROW_W 12
@@ -310,8 +310,8 @@ const int arrowPixels[ARROW_H][ARROW_W] = {
{0,1,1,1,1,1,1,1,1,1,1,0},
{1,1,1,1,1,1,1,1,1,1,1,1}};
-void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType) {
- bool active = false, scrollable = false, closeable = false, closeBoxPressed = false, drawTitle = false;
+void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart) {
+ bool active = false, scrollable = false, closeable = false, drawTitle = false;
const int size = kBorderWidth;
int x = r.left - size;
int y = r.top - size;
@@ -323,14 +323,12 @@ void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowTy
active = _sceneIsActive;
scrollable = false;
closeable = _sceneIsActive;
- closeBoxPressed = false;
drawTitle = true;
break;
case kWindowConsole:
active = !_sceneIsActive;
scrollable = true;
closeable = !_sceneIsActive;
- closeBoxPressed = false;
drawTitle = false;
break;
}
@@ -353,29 +351,43 @@ void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowTy
} else {
int x1 = x + width - 15;
int y1 = y + size + 1;
+ int color1 = kColorBlack;
+ int color2 = kColorWhite;
+ if (highlightedPart == kBorderScrollUp) {
+ SWAP(color1, color2);
+ fillRect(g, x + width - kBorderWidth, y, x + width, y + height / 2);
+ }
for (int yy = 0; yy < ARROW_H; yy++) {
for (int xx = 0; xx < ARROW_W; xx++) {
if (arrowPixels[yy][xx] != 0) {
- g->hLine(x1 + xx, y1 + yy, x1 + xx, kColorBlack);
+ g->hLine(x1 + xx, y1 + yy, x1 + xx, color1);
} else {
- g->hLine(x1 + xx, y1 + yy, x1 + xx, kColorWhite);
+ g->hLine(x1 + xx, y1 + yy, x1 + xx, color2);
}
}
}
- fillRect(g, x + width - 13, y + size + ARROW_H, 8, height - 2 * size - 1 - ARROW_H * 2);
+ fillRect(g, x + width - 13, y + size + ARROW_H, 8, height - 2 * size - 1 - ARROW_H * 2, color1);
+
+ color1 = kColorBlack;
+ color2 = kColorWhite;
+ if (highlightedPart == kBorderScrollDown) {
+ SWAP(color1, color2);
+ fillRect(g, x + width - kBorderWidth, y + height / 2, x + width, y + height);
+ }
+ fillRect(g, x + width - 13, y + size + ARROW_H, 8, height - 2 * size - 1 - ARROW_H * 2, color1);
y1 += height - 2 * size - ARROW_H - 2;
for (int yy = 0; yy < ARROW_H; yy++) {
for (int xx = 0; xx < ARROW_W; xx++) {
if (arrowPixels[ARROW_H - yy - 1][xx] != 0) {
- g->hLine(x1 + xx, y1 + yy, x1 + xx, kColorBlack);
+ g->hLine(x1 + xx, y1 + yy, x1 + xx, color1);
} else {
- g->hLine(x1 + xx, y1 + yy, x1 + xx, kColorWhite);
+ g->hLine(x1 + xx, y1 + yy, x1 + xx, color2);
}
}
}
}
if (closeable) {
- if (closeBoxPressed) {
+ if (highlightedPart == kBorderCloseButton) {
fillRect(g, x + 6, y + 6, 6, 6);
} else {
drawBox(g, x + 5, y + 5, 7, 7);
@@ -499,6 +511,26 @@ void Gui::popCursor() {
CursorMan.popCursor();
}
+static int isInBorder(Common::Rect &rect, int x, int y) {
+ if (x >= rect.left - kBorderWidth && x < rect.left && y >= rect.top - kBorderWidth && y < rect.top)
+ return kBorderCloseButton;
+
+ if (x >= rect.right && x < rect.right + kBorderWidth) {
+ if (y < rect.top - kBorderWidth)
+ return kBorderNone;
+
+ if (y >= rect.bottom + kBorderWidth)
+ return kBorderNone;
+
+ if (y >= rect.top + rect.height() / 2)
+ return kBorderScrollDown;
+
+ return kBorderScrollUp;
+ }
+
+ return kBorderNone;
+}
+
Designed *Gui::mouseUp(int x, int y) {
if (_menu->_menuActivated) {
if (_menu->mouseRelease(x, y)) {
@@ -532,6 +564,8 @@ Designed *Gui::mouseUp(int x, int y) {
}
}
+ int borderClick;
+
if (_sceneArea.contains(x, y)) {
if (!_sceneIsActive) {
_sceneIsActive = true;
@@ -552,16 +586,23 @@ Designed *Gui::mouseUp(int x, int y) {
_sceneIsActive = false;
_bordersDirty = true;
}
+ } else if ((borderClick = isInBorder(_consoleTextArea, x, y)) != kBorderNone) {
+ _bordersDirty = true;
+ warning("Border: %d", borderClick);
}
return NULL;
}
void Gui::mouseDown(int x, int y) {
+ int borderClick;
+
if (_menu->mouseClick(x, y)) {
_menuDirty = true;
} else if (_consoleTextArea.contains(x, y)) {
startMarking(x, y);
+ } else if ((borderClick = isInBorder(_consoleTextArea, x, y)) != kBorderNone) {
+ paintBorder(&_screen, _consoleTextArea, kWindowConsole, borderClick);
}
}
diff --git a/engines/wage/gui.h b/engines/wage/gui.h
index 61f8c31a07..73814d39b4 100644
--- a/engines/wage/gui.h
+++ b/engines/wage/gui.h
@@ -84,6 +84,13 @@ enum {
kPatternCheckers2 = 4
};
+enum {
+ kBorderNone = 0,
+ kBorderScrollUp,
+ kBorderScrollDown,
+ kBorderCloseButton
+};
+
class Gui {
public:
Gui(WageEngine *engine);
@@ -116,10 +123,10 @@ public:
private:
void undrawCursor();
void drawDesktop();
- void paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType);
+ void paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart = kBorderNone);
void renderConsole(Graphics::Surface *g, Common::Rect &r);
void drawBox(Graphics::Surface *g, int x, int y, int w, int h);
- void fillRect(Graphics::Surface *g, int x, int y, int w, int h);
+ void fillRect(Graphics::Surface *g, int x, int y, int w, int h, int color = kColorBlack);
void loadFonts();
void flowText(Common::String &str);
const Graphics::Font *getConsoleFont();