diff options
Diffstat (limited to 'engines/glk/selection.h')
-rw-r--r-- | engines/glk/selection.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/engines/glk/selection.h b/engines/glk/selection.h new file mode 100644 index 0000000000..aa44a1d115 --- /dev/null +++ b/engines/glk/selection.h @@ -0,0 +1,120 @@ +/* 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 GLK_SELECTION_H +#define GLK_SELECTION_H + +#include "glk/glk_types.h" +#include "glk/utils.h" +#include "common/array.h" +#include "common/rect.h" +#include "common/ustr.h" + +namespace Gargoyle { + +enum ClipSource { PRIMARY = 0, CLIPBOARD = 1 }; + +class Window; + +/** + * Acts as interface to and from the system's clipboard storage + */ +class Clipboard { +private: + Common::U32String _text; +public: + /** + * Makes a copy of selected text in preparation for the user copying it + * to the clpboard + */ + void clipboardStore(const Common::U32String &text); + + /** + * Send previously designated text to the clipboard + */ + void clipboardSend(ClipSource source); + + /** + * Receive text from the clipboard, and paste it into the current window + */ + void clipboardReceive(ClipSource source); +}; + +/** + * Manages hyperlinks for the screen + */ +class WindowMask { +public: + size_t _hor, _ver; + glui32 **_links; + Rect _select; + Point _last; +public: + /** + * Constructor + */ + WindowMask(); + + /** + * Resize the links array + */ + void resize(size_t x, size_t y); + + void putHyperlink(glui32 linkval, uint x0, uint y0, uint x1, uint y1); + + glui32 getHyperlink(const Point &pos) const; +}; + +/** + * Overall manager for selecting areas on the screen, copying to/from the clipboard, + * and managing hyperlinks + */ +class Selection : public Clipboard, public WindowMask { +public: + /** + * Start selecting an area of the screen + * @param pos Position to start selection area at + */ + void startSelection(const Point &pos); + + /** + * Move the end point of the selection area + * @param pos Position to end selection area at + */ + void moveSelection(const Point &pos); + + /** + * Remove any previously selected area + */ + void clearSelection(); + + /** + * Checks whether the passed area intersects the selection area + */ + bool checkSelection(const Rect &r) const; + + bool getSelection(const Rect &r, int *rx0, int *rx1) const; +}; + +} // End of namespace Gargoyle + +#endif |