GLK: Converted fillRect to use a Rect to specify bounds

This commit is contained in:
Paul Gilbert 2018-10-28 14:43:09 -07:00 committed by Paul Gilbert
parent 13e2838715
commit ffe0f5220b
25 changed files with 198 additions and 131 deletions

View file

@ -22,7 +22,7 @@
#include "gargoyle/conf.h" #include "gargoyle/conf.h"
#include "gargoyle/fonts.h" #include "gargoyle/fonts.h"
#include "gargoyle/unicode.h" #include "gargoyle/utils.h"
#include "gargoyle/windows.h" #include "gargoyle/windows.h"
#include "common/config-manager.h" #include "common/config-manager.h"
#include "common/system.h" #include "common/system.h"

View file

@ -169,7 +169,7 @@ void Events::handleScroll(bool wheelUp) {
g_vm->_windows->inputHandleKey(wheelUp ? keycode_MouseWheelUp : keycode_MouseWheelDown); g_vm->_windows->inputHandleKey(wheelUp ? keycode_MouseWheelUp : keycode_MouseWheelDown);
} }
void Events::handleMouseMove(const Common::Point &pos) { void Events::handleMouseMove(const Point &pos) {
// hyperlinks and selection // hyperlinks and selection
// TODO: Properly handle commented out lines // TODO: Properly handle commented out lines
if (g_vm->_copySelect) { if (g_vm->_copySelect) {
@ -184,14 +184,14 @@ void Events::handleMouseMove(const Common::Point &pos) {
} }
} }
void Events::handleButtonDown(bool isLeft, const Common::Point &pos) { void Events::handleButtonDown(bool isLeft, const Point &pos) {
if (isLeft) if (isLeft)
g_vm->_windows->inputHandleClick(pos); g_vm->_windows->inputHandleClick(pos);
else else
g_vm->_clipboard->receive(PRIMARY); g_vm->_clipboard->receive(PRIMARY);
} }
void Events::handleButtonUp(bool isLeft, const Common::Point &pos) { void Events::handleButtonUp(bool isLeft, const Point &pos) {
if (isLeft) { if (isLeft) {
g_vm->_copySelect = false; g_vm->_copySelect = false;
//gdk_window_set_cursor((GTK_WIDGET(widget)->window), NULL); //gdk_window_set_cursor((GTK_WIDGET(widget)->window), NULL);

View file

@ -24,6 +24,7 @@
#define GARGOYLE_EVENTS_H #define GARGOYLE_EVENTS_H
#include "common/events.h" #include "common/events.h"
#include "gargoyle/utils.h"
namespace Gargoyle { namespace Gargoyle {
@ -171,17 +172,17 @@ private:
/** /**
* Handle mouse move events * Handle mouse move events
*/ */
void handleMouseMove(const Common::Point &pos); void handleMouseMove(const Point &pos);
/** /**
* Handle mouse down events * Handle mouse down events
*/ */
void handleButtonDown(bool isLeft, const Common::Point &pos); void handleButtonDown(bool isLeft, const Point &pos);
/** /**
* Handle mouse up events * Handle mouse up events
*/ */
void handleButtonUp(bool isLeft, const Common::Point &pos); void handleButtonUp(bool isLeft, const Point &pos);
public: public:
bool _forceClick; bool _forceClick;
public: public:

View file

@ -103,14 +103,14 @@ Graphics::Font *Fonts::loadFont(FACES face, double size, double aspect, int styl
return Graphics::loadTTFFont(f, size, Graphics::kTTFSizeModeCharacter); return Graphics::loadTTFFont(f, size, Graphics::kTTFSizeModeCharacter);
} }
int Fonts::drawString(const Common::Point &pos, int fontIdx, const byte *rgb, const Common::String &text, int spw) { int Fonts::drawString(const Point &pos, int fontIdx, const byte *rgb, const Common::String &text, int spw) {
Graphics::Font *font = _fontTable[fontIdx]; Graphics::Font *font = _fontTable[fontIdx];
const uint32 color = _surface->format.RGBToColor(rgb[0], rgb[1], rgb[2]); const uint32 color = _surface->format.RGBToColor(rgb[0], rgb[1], rgb[2]);
font->drawString(_surface, text, pos.x, pos.y, _surface->w - pos.x, color); font->drawString(_surface, text, pos.x, pos.y, _surface->w - pos.x, color);
return font->getBoundingBox(text, pos.x, pos.y, _surface->w - pos.x).right; return font->getBoundingBox(text, pos.x, pos.y, _surface->w - pos.x).right;
} }
int Fonts::drawStringUni(const Common::Point &pos, int fontIdx, const byte *rgb, const Common::U32String &text, int spw) { int Fonts::drawStringUni(const Point &pos, int fontIdx, const byte *rgb, const Common::U32String &text, int spw) {
Graphics::Font *font = _fontTable[fontIdx]; Graphics::Font *font = _fontTable[fontIdx];
const uint32 color = _surface->format.RGBToColor(rgb[0], rgb[1], rgb[2]); const uint32 color = _surface->format.RGBToColor(rgb[0], rgb[1], rgb[2]);
font->drawString(_surface, text, pos.x, pos.y, _surface->w - pos.x, color); font->drawString(_surface, text, pos.x, pos.y, _surface->w - pos.x, color);

View file

@ -24,6 +24,7 @@
#define GARGOYLE_FONTS_H #define GARGOYLE_FONTS_H
#include "gargoyle/glk_types.h" #include "gargoyle/glk_types.h"
#include "gargoyle/utils.h"
#include "common/str.h" #include "common/str.h"
#include "common/ustr.h" #include "common/ustr.h"
#include "graphics/font.h" #include "graphics/font.h"
@ -58,9 +59,9 @@ public:
*/ */
virtual ~Fonts(); virtual ~Fonts();
int drawString(const Common::Point &pos, int fontIdx, const byte *rgb, const Common::String &text, int spw = 0); int drawString(const Point &pos, int fontIdx, const byte *rgb, const Common::String &text, int spw = 0);
int drawStringUni(const Common::Point &pos, int fontIdx, const byte *rgb, const Common::U32String &text, int spw = 0); int drawStringUni(const Point &pos, int fontIdx, const byte *rgb, const Common::U32String &text, int spw = 0);
size_t stringWidth(int fontIdx, const Common::String &text, int spw = -1); size_t stringWidth(int fontIdx, const Common::String &text, int spw = -1);

View file

@ -295,7 +295,7 @@ void Glk::glk_window_move_cursor(winid_t win, glui32 xpos, glui32 ypos) {
if (!win) { if (!win) {
warning("window_move_cursor: invalid ref"); warning("window_move_cursor: invalid ref");
} else { } else {
win->moveCursor(Common::Point(xpos, ypos)); win->moveCursor(Point(xpos, ypos));
} }
} }
@ -770,7 +770,7 @@ void Glk::glk_window_erase_rect(winid_t win, glsi32 left, glsi32 top, glui32 wid
if (!win) { if (!win) {
warning("window_erase_rect: invalid ref"); warning("window_erase_rect: invalid ref");
} else { } else {
win->eraseRect(false, Common::Rect(left, top, left + width, top + height)); win->eraseRect(false, Rect(left, top, left + width, top + height));
} }
} }
@ -779,7 +779,7 @@ void Glk::glk_window_fill_rect(winid_t win, glui32 color, glsi32 left, glsi32 to
if (!win) { if (!win) {
warning("window_fill_rect: invalid ref"); warning("window_fill_rect: invalid ref");
} else { } else {
win->eraseRect(color, Common::Rect(left, top, left + width, top + height)); win->eraseRect(color, Rect(left, top, left + width, top + height));
} }
} }

View file

@ -14,6 +14,7 @@ MODULE_OBJS := \
time.o \ time.o \
unicode.o \ unicode.o \
unicode_gen.o \ unicode_gen.o \
utils.o \
windows.o \ windows.o \
window_mask.o \ window_mask.o \
window_graphics.o \ window_graphics.o \

View file

@ -29,12 +29,12 @@ void Screen::fill(const byte *rgb) {
clear(color); clear(color);
} }
void Screen::fillRect(uint x, uint y, uint w, uint h, const byte *rgb) { void Screen::fillRect(const Rect &box, const byte *rgb) {
uint color = format.RGBToColor(rgb[0], rgb[1], rgb[2]); uint color = format.RGBToColor(rgb[0], rgb[1], rgb[2]);
Graphics::Screen::fillRect(Common::Rect(x, y, x + w, y + h), color); Graphics::Screen::fillRect(box, color);
} }
void Screen::drawCaret(const Common::Point &pos) { void Screen::drawCaret(const Point &pos) {
// TODO // TODO
} }

View file

@ -43,9 +43,9 @@ public:
/** /**
* Fill a given area of the screen with an rgb color * Fill a given area of the screen with an rgb color
*/ */
void fillRect(uint x, uint y, uint w, uint h, const byte *rgb); void fillRect(const Rect &box, const byte *rgb);
void drawCaret(const Common::Point &pos); void drawCaret(const Point &pos);
}; };
} // End of namespace Gargoyle } // End of namespace Gargoyle

View file

@ -33,22 +33,6 @@ size_t strlen_uni(const uint32 *s) {
return len; return len;
} }
int strToInt(const char *s) {
if (!*s)
// No string at all
return 0;
else if (toupper(s[strlen(s) - 1]) != 'H')
// Standard decimal string
return atoi(s);
// Hexadecimal string
uint tmp = 0;
int read = sscanf(s, "%xh", &tmp);
if (read < 1)
error("strToInt failed on string \"%s\"", s);
return (int)tmp;
}
glui32 bufferChangeCase(glui32 *buf, glui32 len, glui32 numchars, BufferChangeCase destcase, glui32 bufferChangeCase(glui32 *buf, glui32 len, glui32 numchars, BufferChangeCase destcase,
BufferChangeCond cond, int changerest) { BufferChangeCond cond, int changerest) {
glui32 ix, jx; glui32 ix, jx;

View file

@ -46,11 +46,6 @@ size_t strlen_uni(const uint32 *s);
extern glui32 bufferChangeCase(glui32 *buf, glui32 len, extern glui32 bufferChangeCase(glui32 *buf, glui32 len,
glui32 numchars, BufferChangeCase destcase, BufferChangeCond cond, int changerest); glui32 numchars, BufferChangeCase destcase, BufferChangeCond cond, int changerest);
/**
* Converts a decimal or hexadecimal string into a number
*/
int strToInt(const char *s);
} // End of namespace Gargoyle } // End of namespace Gargoyle
#endif #endif

View file

@ -0,0 +1,44 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "gargoyle/utils.h"
#include "common/textconsole.h"
namespace Gargoyle {
int strToInt(const char *s) {
if (!*s)
// No string at all
return 0;
else if (toupper(s[strlen(s) - 1]) != 'H')
// Standard decimal string
return atoi(s);
// Hexadecimal string
uint tmp = 0;
int read = sscanf(s, "%xh", &tmp);
if (read < 1)
error("strToInt failed on string \"%s\"", s);
return (int)tmp;
}
} // End of namespace Gargoyle

51
engines/gargoyle/utils.h Normal file
View file

@ -0,0 +1,51 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef GARGOYLE_UTILS_H
#define GARGOYLE_UTILS_H
#include "common/rect.h"
#include "gargoyle/glk_types.h"
namespace Gargoyle {
typedef Common::Point Point;
struct Rect : public Common::Rect {
public:
static Rect fromXYWH(int x, int y, int w, int h) {
return Rect(x, y, x + w, y + h);
}
Rect() : Common::Rect() {}
Rect(int16 w, int16 h) : Common::Rect(w, h) {}
Rect(int16 x1, int16 y1, int16 x2, int16 y2) : Common::Rect(x1, y1, x2, y2) {}
};
/**
* Converts a decimal or hexadecimal string into a number
*/
int strToInt(const char *s);
} // End of namespace Gargoyle
#endif

View file

@ -36,7 +36,7 @@ GraphicsWindow::~GraphicsWindow() {
delete _surface; delete _surface;
} }
void GraphicsWindow::rearrange(const Common::Rect &box) { void GraphicsWindow::rearrange(const Rect &box) {
int newwid, newhgt; int newwid, newhgt;
int bothwid, bothhgt; int bothwid, bothhgt;
int oldw, oldh; int oldw, oldh;
@ -92,7 +92,7 @@ void GraphicsWindow::redraw() {
_dirty = 0; _dirty = 0;
if (_surface) if (_surface)
screen.blitFrom(*_surface, Common::Point(_bbox.left, _bbox.top)); screen.blitFrom(*_surface, Point(_bbox.left, _bbox.top));
} }
} }
@ -120,7 +120,7 @@ glui32 GraphicsWindow::drawPicture(glui32 image, glsi32 xpos, glsi32 ypos, int s
return true; return true;
} }
void GraphicsWindow::eraseRect(bool whole, const Common::Rect &box) { void GraphicsWindow::eraseRect(bool whole, const Rect &box) {
int x0 = box.left, y0 = box.top, x1 = box.right, y1 = box.bottom; int x0 = box.left, y0 = box.top, x1 = box.right, y1 = box.bottom;
int hx0, hx1, hy0, hy1; int hx0, hx1, hy0, hy1;
@ -148,11 +148,11 @@ void GraphicsWindow::eraseRect(bool whole, const Common::Rect &box) {
/* zero out hyperlinks for these coordinates */ /* zero out hyperlinks for these coordinates */
g_vm->_windowMask->putHyperlink(0, hx0, hy0, hx1, hy1); g_vm->_windowMask->putHyperlink(0, hx0, hy0, hx1, hy1);
_surface->fillRect(Common::Rect(x0, y0, x1, y1), MKTAG(_bgnd[0], _bgnd[1], _bgnd[2], 0)); _surface->fillRect(Rect(x0, y0, x1, y1), MKTAG(_bgnd[0], _bgnd[1], _bgnd[2], 0));
touch(); touch();
} }
void GraphicsWindow::fillRect(glui32 color, const Common::Rect &box) { void GraphicsWindow::fillRect(glui32 color, const Rect &box) {
unsigned char col[3]; unsigned char col[3];
int x0 = box.left, y0 = box.top, x1 = box.right, y1 = box.bottom; int x0 = box.left, y0 = box.top, x1 = box.right, y1 = box.bottom;
int hx0, hx1, hy0, hy1; int hx0, hx1, hy0, hy1;
@ -178,7 +178,7 @@ void GraphicsWindow::fillRect(glui32 color, const Common::Rect &box) {
/* zero out hyperlinks for these coordinates */ /* zero out hyperlinks for these coordinates */
g_vm->_windowMask->putHyperlink(0, hx0, hy0, hx1, hy1); g_vm->_windowMask->putHyperlink(0, hx0, hy0, hx1, hy1);
_surface->fillRect(Common::Rect(x0, y0, x1, y1), MKTAG(col[0], col[1], col[2], 0)); _surface->fillRect(Rect(x0, y0, x1, y1), MKTAG(col[0], col[1], col[2], 0));
touch(); touch();
} }
@ -233,7 +233,7 @@ void GraphicsWindow::drawPicture(Picture *src, int x0, int y0, int width, int h
w = sx1 - sx0; w = sx1 - sx0;
h = sy1 - sy0; h = sy1 - sy0;
_surface->blitFrom(*g_vm->_screen, Common::Rect(sx0, sy0, sx0 + w, sy0 + h), Common::Point(0, 0)); _surface->blitFrom(*g_vm->_screen, Rect(sx0, sy0, sx0 + w, sy0 + h), Point(0, 0));
} }
void GraphicsWindow::getSize(glui32 *width, glui32 *height) const { void GraphicsWindow::getSize(glui32 *width, glui32 *height) const {

View file

@ -58,7 +58,7 @@ public:
/** /**
* Rearranges the window * Rearranges the window
*/ */
virtual void rearrange(const Common::Rect &box) override; virtual void rearrange(const Rect &box) override;
/** /**
* Get window split size within parent pair window * Get window split size within parent pair window
@ -86,9 +86,9 @@ public:
*/ */
virtual void redraw() override; virtual void redraw() override;
virtual void eraseRect(bool whole, const Common::Rect &box) override; virtual void eraseRect(bool whole, const Rect &box) override;
virtual void fillRect(glui32 color, const Common::Rect &box) override; virtual void fillRect(glui32 color, const Rect &box) override;
virtual void getSize(glui32 *width, glui32 *height) const override; virtual void getSize(glui32 *width, glui32 *height) const override;

View file

@ -94,7 +94,7 @@ void WindowMask::putHyperlink(glui32 linkval, uint x0, uint y0, uint x1, uint y1
} }
} }
glui32 WindowMask::getHyperlink(const Common::Point &pos) { glui32 WindowMask::getHyperlink(const Point &pos) {
if (!_hor || !_ver) { if (!_hor || !_ver) {
warning("getHyperlink: struct not initialized"); warning("getHyperlink: struct not initialized");
return 0; return 0;
@ -110,7 +110,7 @@ glui32 WindowMask::getHyperlink(const Common::Point &pos) {
return _links[pos.x][pos.y]; return _links[pos.x][pos.y];
} }
void WindowMask::startSelection(const Common::Point &pos) { void WindowMask::startSelection(const Point &pos) {
int tx, ty; int tx, ty;
if (!_hor || !_ver) { if (!_hor || !_ver) {
@ -129,7 +129,7 @@ void WindowMask::startSelection(const Common::Point &pos) {
g_vm->_windows->selectionChanged(); g_vm->_windows->selectionChanged();
} }
void WindowMask::moveSelection(const Common::Point &pos) { void WindowMask::moveSelection(const Point &pos) {
int tx, ty; int tx, ty;
if (ABS(pos.x - _lastX) < 5 && abs(pos.y - _lastY) < 5) if (ABS(pos.x - _lastX) < 5 && abs(pos.y - _lastY) < 5)

View file

@ -25,6 +25,7 @@
#include "common/rect.h" #include "common/rect.h"
#include "gargoyle/glk_types.h" #include "gargoyle/glk_types.h"
#include "gargoyle/utils.h"
namespace Gargoyle { namespace Gargoyle {
@ -34,7 +35,7 @@ class WindowMask {
public: public:
size_t _hor, _ver; size_t _hor, _ver;
glui32 **_links; glui32 **_links;
Common::Rect _select; Rect _select;
static int _lastX, _lastY; static int _lastX, _lastY;
public: public:
@ -50,11 +51,11 @@ public:
void putHyperlink(glui32 linkval, uint x0, uint y0, uint x1, uint y1); void putHyperlink(glui32 linkval, uint x0, uint y0, uint x1, uint y1);
glui32 getHyperlink(const Common::Point &pos); glui32 getHyperlink(const Point &pos);
void startSelection(const Common::Point &pos); void startSelection(const Point &pos);
void moveSelection(const Common::Point &pos); void moveSelection(const Point &pos);
void clearSelection(); void clearSelection();

View file

@ -36,8 +36,8 @@ PairWindow::PairWindow(Windows *windows, glui32 method, Window *key, glui32 size
_type = wintype_Pair; _type = wintype_Pair;
} }
void PairWindow::rearrange(const Common::Rect &box) { void PairWindow::rearrange(const Rect &box) {
Common::Rect box1, box2; Rect box1, box2;
int min, diff, split, splitwid, max; int min, diff, split, splitwid, max;
Window *ch1, *ch2; Window *ch1, *ch2;

View file

@ -51,7 +51,7 @@ public:
/** /**
* Rearranges the window * Rearranges the window
*/ */
virtual void rearrange(const Common::Rect &box) override; virtual void rearrange(const Rect &box) override;
/** /**
* Redraw the window * Redraw the window

View file

@ -70,7 +70,7 @@ TextBufferWindow::~TextBufferWindow() {
} }
} }
void TextBufferWindow::rearrange(const Common::Rect &box) { void TextBufferWindow::rearrange(const Rect &box) {
Window::rearrange(box); Window::rearrange(box);
int newwid, newhgt; int newwid, newhgt;
int rnd; int rnd;
@ -371,7 +371,7 @@ void TextBufferWindow::touch(int line) {
int y = _bbox.top + g_conf->_tMarginY + (_height - line - 1) * g_conf->_leading; int y = _bbox.top + g_conf->_tMarginY + (_height - line - 1) * g_conf->_leading;
_lines[line]._dirty = 1; _lines[line]._dirty = 1;
g_vm->_windowMask->clearSelection(); g_vm->_windowMask->clearSelection();
_windows->repaint(Common::Rect(_bbox.left, y - 2, _bbox.right, y + g_conf->_leading + 2)); _windows->repaint(Rect(_bbox.left, y - 2, _bbox.right, y + g_conf->_leading + 2));
} }
glui32 TextBufferWindow::getSplit(glui32 size, bool vertical) const { glui32 TextBufferWindow::getSplit(glui32 size, bool vertical) const {
@ -567,7 +567,7 @@ void TextBufferWindow::clear() {
touch(i); touch(i);
} }
void TextBufferWindow::click(const Common::Point &newPos) { void TextBufferWindow::click(const Point &newPos) {
int gh = false; int gh = false;
int gs = false; int gs = false;
@ -843,7 +843,7 @@ void TextBufferWindow::redraw() {
/* repaint previously selected lines if needed */ /* repaint previously selected lines if needed */
if (ln->_repaint && !Windows::_forceRedraw) if (ln->_repaint && !Windows::_forceRedraw)
_windows->redrawRect(Common::Rect(x0 / GLI_SUBPIX, y, _windows->redrawRect(Rect(x0 / GLI_SUBPIX, y,
x1/GLI_SUBPIX, y + g_conf->_leading)); x1/GLI_SUBPIX, y + g_conf->_leading));
/* keep selected line dirty and flag for repaint */ /* keep selected line dirty and flag for repaint */
@ -954,8 +954,7 @@ void TextBufferWindow::redraw() {
* fill in background colors * fill in background colors
*/ */
color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor; color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor;
screen.fillRect(x0/GLI_SUBPIX, y, screen.fillRect(Rect::fromXYWH(x0 / GLI_SUBPIX, y, (x1-x0) / GLI_SUBPIX, g_conf->_leading),
(x1-x0) / GLI_SUBPIX, g_conf->_leading,
color); color);
x = x0 + SLOP + ln->_lm; x = x0 + SLOP + ln->_lm;
@ -967,13 +966,11 @@ void TextBufferWindow::redraw() {
font = ln->_attrs[a].attrFont(_styles); font = ln->_attrs[a].attrFont(_styles);
color = ln->_attrs[a].attrBg(_styles); color = ln->_attrs[a].attrBg(_styles);
w = screen.stringWidthUni(font, Common::U32String(ln->_chars + a, b - a), spw); w = screen.stringWidthUni(font, Common::U32String(ln->_chars + a, b - a), spw);
screen.fillRect(x/GLI_SUBPIX, y, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX, y, w / GLI_SUBPIX, g_conf->_leading),
w/GLI_SUBPIX, g_conf->_leading,
color); color);
if (link) { if (link) {
screen.fillRect(x/GLI_SUBPIX + 1, y + g_conf->_baseLine + 1, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX + 1, y + g_conf->_baseLine + 1,
w/GLI_SUBPIX + 1, g_conf->_linkStyle, w / GLI_SUBPIX + 1, g_conf->_linkStyle), g_conf->_linkColor);
g_conf->_linkColor);
g_vm->_windowMask->putHyperlink(link, x/GLI_SUBPIX, y, g_vm->_windowMask->putHyperlink(link, x/GLI_SUBPIX, y,
x/GLI_SUBPIX + w/GLI_SUBPIX, x/GLI_SUBPIX + w/GLI_SUBPIX,
y + g_conf->_leading); y + g_conf->_leading);
@ -986,22 +983,18 @@ void TextBufferWindow::redraw() {
font = ln->_attrs[a].attrFont(_styles); font = ln->_attrs[a].attrFont(_styles);
color = ln->_attrs[a].attrBg(_styles); color = ln->_attrs[a].attrBg(_styles);
w = screen.stringWidthUni(font, Common::U32String(ln->_chars + a, b - a), spw); w = screen.stringWidthUni(font, Common::U32String(ln->_chars + a, b - a), spw);
screen.fillRect(x/GLI_SUBPIX, y, w/GLI_SUBPIX, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX, y, w / GLI_SUBPIX, g_conf->_leading), color);
g_conf->_leading, color);
if (link) { if (link) {
screen.fillRect(x/GLI_SUBPIX + 1, y + g_conf->_baseLine + 1, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX + 1, y + g_conf->_baseLine + 1,
w/GLI_SUBPIX + 1, g_conf->_linkStyle, w/GLI_SUBPIX + 1, g_conf->_linkStyle), g_conf->_linkColor);
g_conf->_linkColor); g_vm->_windowMask->putHyperlink(link, x / GLI_SUBPIX, y,
g_vm->_windowMask->putHyperlink(link, x/GLI_SUBPIX, y, x / GLI_SUBPIX + w / GLI_SUBPIX,
x/GLI_SUBPIX + w/GLI_SUBPIX,
y + g_conf->_leading); y + g_conf->_leading);
} }
x += w; x += w;
color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor; color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor;
screen.fillRect(x/GLI_SUBPIX, y, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX, y, x1/GLI_SUBPIX - x/GLI_SUBPIX, g_conf->_leading), color);
x1/GLI_SUBPIX - x/GLI_SUBPIX, g_conf->_leading,
color);
/* /*
* draw caret * draw caret
@ -1010,7 +1003,7 @@ void TextBufferWindow::redraw() {
if (_windows->getFocusWindow() == this && i == 0 && (_lineRequest || _lineRequestUni)) { if (_windows->getFocusWindow() == this && i == 0 && (_lineRequest || _lineRequestUni)) {
w = calcWidth(_chars, _attrs, 0, _inCurs, spw); w = calcWidth(_chars, _attrs, 0, _inCurs, spw);
if (w < pw - g_conf->_caretShape * 2 * GLI_SUBPIX) if (w < pw - g_conf->_caretShape * 2 * GLI_SUBPIX)
screen.drawCaret(Common::Point(x0 + SLOP + ln->_lm + w, y + g_conf->_baseLine)); screen.drawCaret(Point(x0 + SLOP + ln->_lm + w, y + g_conf->_baseLine));
} }
/* /*
@ -1025,7 +1018,7 @@ void TextBufferWindow::redraw() {
link = ln->_attrs[a].hyper; link = ln->_attrs[a].hyper;
font = ln->_attrs[a].attrFont(_styles); font = ln->_attrs[a].attrFont(_styles);
color = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(_styles); color = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(_styles);
x = screen.drawStringUni(Common::Point(x, y + g_conf->_baseLine), x = screen.drawStringUni(Point(x, y + g_conf->_baseLine),
font, color, Common::U32String(ln->_chars + a, b - a), spw); font, color, Common::U32String(ln->_chars + a, b - a), spw);
a = b; a = b;
} }
@ -1033,7 +1026,7 @@ void TextBufferWindow::redraw() {
link = ln->_attrs[a].hyper; link = ln->_attrs[a].hyper;
font = ln->_attrs[a].attrFont(_styles); font = ln->_attrs[a].attrFont(_styles);
color = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(_styles); color = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(_styles);
screen.drawStringUni(Common::Point(x, y + g_conf->_baseLine), screen.drawStringUni(Point(x, y + g_conf->_baseLine),
font, color, Common::U32String(ln->_chars + a, linelen - a), spw); font, color, Common::U32String(ln->_chars + a, linelen - a), spw);
} }
@ -1049,9 +1042,7 @@ void TextBufferWindow::redraw() {
x1/GLI_SUBPIX, y + g_conf->_leading); x1/GLI_SUBPIX, y + g_conf->_leading);
color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor; color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor;
screen.fillRect(x/GLI_SUBPIX, y, screen.fillRect(Rect::fromXYWH(x / GLI_SUBPIX, y, x1 / GLI_SUBPIX - x / GLI_SUBPIX, g_conf->_leading), color);
x1/GLI_SUBPIX - x/GLI_SUBPIX, g_conf->_leading,
color);
w = screen.stringWidth(g_conf->_moreFont, g_conf->_morePrompt); w = screen.stringWidth(g_conf->_moreFont, g_conf->_morePrompt);
@ -1061,7 +1052,7 @@ void TextBufferWindow::redraw() {
x = x1 - SLOP - w; x = x1 - SLOP - w;
color = Windows::_overrideFgSet ? g_conf->_moreColor : _fgColor; color = Windows::_overrideFgSet ? g_conf->_moreColor : _fgColor;
screen.drawString(Common::Point(x, y + g_conf->_baseLine), screen.drawString(Point(x, y + g_conf->_baseLine),
g_conf->_moreFont, color, g_conf->_morePrompt); g_conf->_moreFont, color, g_conf->_morePrompt);
y1 = y; /* don't want pictures overdrawing "[more]" */ y1 = y; /* don't want pictures overdrawing "[more]" */
@ -1141,16 +1132,14 @@ void TextBufferWindow::redraw() {
t0 = t1 = y0; t0 = t1 = y0;
} }
screen.fillRect(x0+1, y0, x1-x0-2, y1-y0, g_conf->_scrollBg); screen.fillRect(Rect::fromXYWH(x0 + 1, y0, x1-x0 - 2, y1 - y0), g_conf->_scrollBg);
screen.fillRect(x0+1, t0, x1-x0-2, t1-t0, g_conf->_scrollFg); screen.fillRect(Rect::fromXYWH(x0 + 1, t0, x1-x0 - 2, t1 - t0), g_conf->_scrollFg);
for (i = 0; i < g_conf->_scrollWidth / 2 + 1; i++) { for (i = 0; i < g_conf->_scrollWidth / 2 + 1; i++) {
screen.fillRect(x0+g_conf->_scrollWidth/2-i, screen.fillRect(Rect::fromXYWH(x0 + g_conf->_scrollWidth / 2 - i,
y0 - g_conf->_scrollWidth/2 + i, y0 - g_conf->_scrollWidth/2 + i, i * 2, 1), g_conf->_scrollFg);
i*2, 1, g_conf->_scrollFg); screen.fillRect(Rect::fromXYWH(x0 + g_conf->_scrollWidth / 2 - i,
screen.fillRect(x0+g_conf->_scrollWidth/2-i, y1 + g_conf->_scrollWidth / 2 - i, i * 2, 1), g_conf->_scrollFg);
y1 + g_conf->_scrollWidth/2 - i,
i*2, 1, g_conf->_scrollFg);
} }
} }

View file

@ -147,7 +147,7 @@ public:
/** /**
* Rearranges the window * Rearranges the window
*/ */
virtual void rearrange(const Common::Rect &box) override; virtual void rearrange(const Rect &box) override;
/** /**
* Get window split size within parent pair window * Get window split size within parent pair window
@ -172,7 +172,7 @@ public:
/** /**
* Click the window * Click the window
*/ */
virtual void click(const Common::Point &newPos) override; virtual void click(const Point &newPos) override;
/** /**
* Prepare for inputing a line * Prepare for inputing a line

View file

@ -52,7 +52,7 @@ TextGridWindow::~TextGridWindow() {
delete[] _lineTerminators; delete[] _lineTerminators;
} }
void TextGridWindow::rearrange(const Common::Rect &box) { void TextGridWindow::rearrange(const Rect &box) {
Window::rearrange(box); Window::rearrange(box);
int newwid, newhgt; int newwid, newhgt;
@ -76,7 +76,7 @@ void TextGridWindow::rearrange(const Common::Rect &box) {
void TextGridWindow::touch(int line) { void TextGridWindow::touch(int line) {
int y = _bbox.top + line * g_conf->_leading; int y = _bbox.top + line * g_conf->_leading;
_lines[line].dirty = true; _lines[line].dirty = true;
_windows->repaint(Common::Rect(_bbox.left, y, _bbox.right, y + g_conf->_leading)); _windows->repaint(Rect(_bbox.left, y, _bbox.right, y + g_conf->_leading));
} }
glui32 TextGridWindow::getSplit(glui32 size, bool vertical) const { glui32 TextGridWindow::getSplit(glui32 size, bool vertical) const {
@ -161,7 +161,7 @@ bool TextGridWindow::unputCharUni(uint32 ch) {
} }
} }
void TextGridWindow::moveCursor(const Common::Point &pos) { void TextGridWindow::moveCursor(const Point &pos) {
// If the values are negative, they're really huge positive numbers -- // If the values are negative, they're really huge positive numbers --
// remember that they were cast from glui32. So set them huge and // remember that they were cast from glui32. So set them huge and
// let canonicalization take its course. // let canonicalization take its course.
@ -189,7 +189,7 @@ void TextGridWindow::clear() {
_curY = 0; _curY = 0;
} }
void TextGridWindow::click(const Common::Point &newPos) { void TextGridWindow::click(const Point &newPos) {
int x = newPos.x - _bbox.left; int x = newPos.x - _bbox.left;
int y = newPos.y - _bbox.top; int y = newPos.y - _bbox.top;
@ -603,17 +603,17 @@ void TextGridWindow::redraw() {
fgcolor = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(styles); fgcolor = link ? g_conf->_linkColor : ln->_attrs[a].attrFg(styles);
bgcolor = ln->_attrs[a].attrBg(styles); bgcolor = ln->_attrs[a].attrBg(styles);
w = (b - a) * g_conf->_cellW; w = (b - a) * g_conf->_cellW;
screen.fillRect(x, y, w, g_conf->_leading, bgcolor); screen.fillRect(Rect::fromXYWH(x, y, w, g_conf->_leading), bgcolor);
o = x; o = x;
for (k = a; k < b; k++) { for (k = a; k < b; k++) {
screen.drawStringUni(Common::Point(o * GLI_SUBPIX, y + g_conf->_baseLine), screen.drawStringUni(Point(o * GLI_SUBPIX, y + g_conf->_baseLine),
font, fgcolor, Common::U32String(&ln->_chars[k], 1), -1); font, fgcolor, Common::U32String(&ln->_chars[k], 1), -1);
o += g_conf->_cellW; o += g_conf->_cellW;
} }
if (link) { if (link) {
screen.fillRect(x, y + g_conf->_baseLine + 1, w, screen.fillRect(Rect::fromXYWH(x, y + g_conf->_baseLine + 1, w,
g_conf->_linkStyle, g_conf->_linkColor); g_conf->_linkStyle), g_conf->_linkColor);
g_vm->_windowMask->putHyperlink(link, x, y, x + w, y + g_conf->_leading); g_vm->_windowMask->putHyperlink(link, x, y, x + w, y + g_conf->_leading);
} }
x += w; x += w;
@ -626,17 +626,17 @@ void TextGridWindow::redraw() {
bgcolor = ln->_attrs[a].attrBg(styles); bgcolor = ln->_attrs[a].attrBg(styles);
w = (b - a) * g_conf->_cellW; w = (b - a) * g_conf->_cellW;
w += _bbox.right - (x + w); w += _bbox.right - (x + w);
screen.fillRect(x, y, w, g_conf->_leading, bgcolor); screen.fillRect(Rect::fromXYWH(x, y, w, g_conf->_leading), bgcolor);
o = x; o = x;
for (k = a; k < b; k++) { for (k = a; k < b; k++) {
screen.drawStringUni(Common::Point(o * GLI_SUBPIX, y + g_conf->_baseLine), screen.drawStringUni(Point(o * GLI_SUBPIX, y + g_conf->_baseLine),
font, fgcolor, Common::U32String(&ln->_chars[k], 1)); font, fgcolor, Common::U32String(&ln->_chars[k], 1));
o += g_conf->_cellW; o += g_conf->_cellW;
} }
if (link) { if (link) {
screen.fillRect(x, y + g_conf->_baseLine + 1, w, screen.fillRect(Rect::fromXYWH(x, y + g_conf->_baseLine + 1, w, g_conf->_linkStyle),
g_conf->_linkStyle, g_conf->_linkColor); g_conf->_linkColor);
g_vm->_windowMask->putHyperlink(link, x, y, x + w, y + g_conf->_leading); g_vm->_windowMask->putHyperlink(link, x, y, x + w, y + g_conf->_leading);
} }
} }

View file

@ -90,7 +90,7 @@ public:
/** /**
* Rearranges the window * Rearranges the window
*/ */
virtual void rearrange(const Common::Rect &box) override; virtual void rearrange(const Rect &box) override;
/** /**
* Get window split size within parent pair window * Get window split size within parent pair window
@ -110,7 +110,7 @@ public:
/** /**
* Move the cursor * Move the cursor
*/ */
virtual void moveCursor(const Common::Point &newPos) override; virtual void moveCursor(const Point &newPos) override;
/** /**
* Clear the window * Clear the window
@ -120,7 +120,7 @@ public:
/** /**
* Click the window * Click the window
*/ */
virtual void click(const Common::Point &newPos) override; virtual void click(const Point &newPos) override;
/** /**
* Cancel a hyperlink event * Cancel a hyperlink event

View file

@ -249,7 +249,7 @@ PairWindow *Windows::newPairWindow(glui32 method, Window *key, glui32 size) {
void Windows::rearrange() { void Windows::rearrange() {
if (_rootWin) { if (_rootWin) {
Common::Rect box; Rect box;
if (g_conf->_lockCols) { if (g_conf->_lockCols) {
int desired_width = g_conf->_wMarginSaveX * 2 + g_conf->_cellW * g_conf->_cols; int desired_width = g_conf->_wMarginSaveX * 2 + g_conf->_cellW * g_conf->_cols;
@ -384,7 +384,7 @@ void Windows::inputHandleKey(glui32 key) {
g_vm->quitGame(); g_vm->quitGame();
} }
void Windows::inputHandleClick(const Common::Point &pos) { void Windows::inputHandleClick(const Point &pos) {
if (_rootWin) if (_rootWin)
_rootWin->click(pos); _rootWin->click(pos);
} }
@ -399,7 +399,7 @@ void Windows::redraw() {
_claimSelect = false; _claimSelect = false;
if (_forceRedraw) { if (_forceRedraw) {
repaint(Common::Rect(0, 0, g_conf->_imageW, g_conf->_imageH)); repaint(Rect(0, 0, g_conf->_imageW, g_conf->_imageH));
g_vm->_screen->fill(g_conf->_windowColor); g_vm->_screen->fill(g_conf->_windowColor);
} }
@ -412,12 +412,12 @@ void Windows::redraw() {
_forceRedraw = 0; _forceRedraw = 0;
} }
void Windows::redrawRect(const Common::Rect &r) { void Windows::redrawRect(const Rect &r) {
_drawSelect = true; _drawSelect = true;
repaint(r); repaint(r);
} }
void Windows::repaint(const Common::Rect &box) { void Windows::repaint(const Rect &box) {
// No implementation // No implementation
} }
@ -556,7 +556,7 @@ void Window::cancelLineEvent(Event *ev) {
ev->clear(); ev->clear();
} }
void Window::moveCursor(const Common::Point &newPos) { void Window::moveCursor(const Point &newPos) {
warning("moveCursor: not a TextGrid window"); warning("moveCursor: not a TextGrid window");
} }
@ -572,7 +572,7 @@ void Window::redraw() {
if (Windows::_forceRedraw) { if (Windows::_forceRedraw) {
unsigned char *color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor; unsigned char *color = Windows::_overrideBgSet ? g_conf->_windowColor : _bgColor;
int y0 = _yAdj ? _bbox.top - _yAdj : _bbox.top; int y0 = _yAdj ? _bbox.top - _yAdj : _bbox.top;
g_vm->_screen->fillRect(_bbox.left, y0, _bbox.width(), _bbox.bottom - y0, color); g_vm->_screen->fillRect(Rect(_bbox.left, y0, _bbox.right, _bbox.bottom), color);
} }
} }
@ -604,11 +604,11 @@ void Window::flowBreak() {
warning("flowBreak: not a text buffer window"); warning("flowBreak: not a text buffer window");
} }
void Window::eraseRect(bool whole, const Common::Rect &box) { void Window::eraseRect(bool whole, const Rect &box) {
warning("eraseRect: not a graphics window"); warning("eraseRect: not a graphics window");
} }
void Window::fillRect(glui32 color, const Common::Rect &box) { void Window::fillRect(glui32 color, const Rect &box) {
warning("fillRect: not a graphics window"); warning("fillRect: not a graphics window");
} }

View file

@ -179,7 +179,7 @@ public:
/** /**
* Handle mouse clicks * Handle mouse clicks
*/ */
void inputHandleClick(const Common::Point &pos); void inputHandleClick(const Point &pos);
void selectionChanged(); void selectionChanged();
@ -192,12 +192,12 @@ public:
void redraw(); void redraw();
void redrawRect(const Common::Rect &r); void redrawRect(const Rect &r);
/** /**
* Repaint an area of the windows * Repaint an area of the windows
*/ */
void repaint(const Common::Rect &box); void repaint(const Rect &box);
/** /**
* Get an iterator that will move over the tree * Get an iterator that will move over the tree
@ -282,7 +282,7 @@ public:
Window *_parent; ///< pair window which contains this one Window *_parent; ///< pair window which contains this one
Window *_next, *_prev; ///< in the big linked list of windows Window *_next, *_prev; ///< in the big linked list of windows
Common::Rect _bbox; Rect _bbox;
int _yAdj; int _yAdj;
Stream *_stream; ///< the window stream. Stream *_stream; ///< the window stream.
@ -328,7 +328,7 @@ public:
/** /**
* Rearranges the window * Rearranges the window
*/ */
virtual void rearrange(const Common::Rect &box) { _bbox = box; } virtual void rearrange(const Rect &box) { _bbox = box; }
/** /**
* Get window split size within parent pair window * Get window split size within parent pair window
@ -348,7 +348,7 @@ public:
/** /**
* Move the cursor * Move the cursor
*/ */
virtual void moveCursor(const Common::Point &newPos); virtual void moveCursor(const Point &newPos);
/** /**
* Clear the window * Clear the window
@ -358,7 +358,7 @@ public:
/** /**
* Click the window * Click the window
*/ */
virtual void click(const Common::Point &newPos) {} virtual void click(const Point &newPos) {}
/** /**
* Prepare for inputing a line * Prepare for inputing a line
@ -423,9 +423,9 @@ public:
virtual void flowBreak(); virtual void flowBreak();
virtual void eraseRect(bool whole, const Common::Rect &box); virtual void eraseRect(bool whole, const Rect &box);
virtual void fillRect(glui32 color, const Common::Rect &box); virtual void fillRect(glui32 color, const Rect &box);
virtual void setBackgroundColor(glui32 color); virtual void setBackgroundColor(glui32 color);
}; };