mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-11 05:36:12 +00:00
GLK: Window rearrangement methods
This commit is contained in:
parent
3d8626081c
commit
49b8281ce3
@ -25,6 +25,7 @@
|
||||
#include "gargoyle/streams.h"
|
||||
#include "gargoyle/string.h"
|
||||
#include "gargoyle/windows.h"
|
||||
#include "gargoyle/window_pair.h"
|
||||
|
||||
namespace Gargoyle {
|
||||
|
||||
@ -86,14 +87,21 @@ void Glk::glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr)
|
||||
// TODO
|
||||
}
|
||||
|
||||
void Glk::glk_window_set_arrangement(winid_t win, glui32 method,
|
||||
glui32 size, winid_t keywin) {
|
||||
// TODO
|
||||
void Glk::glk_window_set_arrangement(winid_t win, glui32 method, glui32 size, winid_t keywin) {
|
||||
if (!win) {
|
||||
warning("window_set_arrangement: invalid ref");
|
||||
} else {
|
||||
win->setArrangement(method, size, keywin);
|
||||
}
|
||||
}
|
||||
|
||||
void Glk::glk_window_get_arrangement(winid_t win, glui32 *methodptr,
|
||||
glui32 *sizeptr, winid_t *keywinptr) {
|
||||
// TODO
|
||||
void Glk::glk_window_get_arrangement(winid_t win, glui32 *method,
|
||||
glui32 *size, winid_t *keyWin) {
|
||||
if (!win) {
|
||||
warning("window_get_arrangement: invalid ref");
|
||||
} else {
|
||||
win->getArrangement(method, size, keyWin);
|
||||
}
|
||||
}
|
||||
|
||||
winid_t Glk::glk_window_iterate(winid_t win, glui32 *rockptr) {
|
||||
|
@ -75,8 +75,8 @@ public:
|
||||
glui32 *heightptr);
|
||||
void glk_window_set_arrangement(winid_t win, glui32 method,
|
||||
glui32 size, winid_t keywin);
|
||||
void glk_window_get_arrangement(winid_t win, glui32 *methodptr,
|
||||
glui32 *sizeptr, winid_t *keywinptr);
|
||||
void glk_window_get_arrangement(winid_t win, glui32 *method,
|
||||
glui32 *size, winid_t *keywin);
|
||||
winid_t glk_window_iterate(winid_t win, glui32 *rockptr);
|
||||
glui32 glk_window_get_rock(winid_t win);
|
||||
glui32 glk_window_get_type(winid_t win);
|
||||
|
@ -124,4 +124,85 @@ void PairWindow::redraw() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void PairWindow::getArrangement(glui32 *method, glui32 *size, Window **keyWin) {
|
||||
glui32 val = _dir | _division;
|
||||
if (!_wBorder)
|
||||
val |= winmethod_NoBorder;
|
||||
|
||||
if (size)
|
||||
*size = _size;
|
||||
if (keyWin) {
|
||||
if (_key)
|
||||
*keyWin = _key;
|
||||
else
|
||||
*keyWin = nullptr;
|
||||
}
|
||||
|
||||
if (method)
|
||||
*method = val;
|
||||
}
|
||||
|
||||
void PairWindow::setArrangement(glui32 method, glui32 size, Window *keyWin) {
|
||||
glui32 newDir;
|
||||
bool newVertical, newBackward;
|
||||
|
||||
if (_key) {
|
||||
Window *wx;
|
||||
PairWindow *pairWin = dynamic_cast<PairWindow *>(_key);
|
||||
|
||||
if (pairWin) {
|
||||
warning("setArrangement: keywin cannot be a Pair");
|
||||
return;
|
||||
}
|
||||
|
||||
for (wx = _key; wx; wx = wx->_parent) {
|
||||
if (wx == this)
|
||||
break;
|
||||
}
|
||||
if (wx == nullptr) {
|
||||
warning("setArrangement: keywin must be a descendant");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
newDir = method & winmethod_DirMask;
|
||||
newVertical = (newDir == winmethod_Left || newDir == winmethod_Right);
|
||||
newBackward = (newDir == winmethod_Left || newDir == winmethod_Above);
|
||||
if (!keyWin)
|
||||
keyWin = _key;
|
||||
|
||||
if ((newVertical && !_vertical) || (!newVertical && _vertical)) {
|
||||
if (!_vertical)
|
||||
warning("setArrangement: split must stay horizontal");
|
||||
else
|
||||
warning("setArrangement: split must stay vertical");
|
||||
return;
|
||||
}
|
||||
|
||||
if (keyWin && dynamic_cast<BlankWindow *>(keyWin)
|
||||
&& (method & winmethod_DivisionMask) == winmethod_Fixed) {
|
||||
warning("setArrangement: a Blank window cannot have a fixed size");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((newBackward && !_backward) || (!newBackward && _backward)) {
|
||||
// switch the children
|
||||
Window *tmpWin = _child1;
|
||||
_child1 = _child2;
|
||||
_child2 = tmpWin;
|
||||
}
|
||||
|
||||
// set up everything else
|
||||
_dir = newDir;
|
||||
_division = method & winmethod_DivisionMask;
|
||||
_key = keyWin;
|
||||
_size = size;
|
||||
_wBorder = ((method & winmethod_BorderMask) == winmethod_Border);
|
||||
|
||||
_vertical = (_dir == winmethod_Left || _dir == winmethod_Right);
|
||||
_backward = (_dir == winmethod_Left || _dir == winmethod_Above);
|
||||
|
||||
_windows->rearrange();
|
||||
}
|
||||
|
||||
} // End of namespace Gargoyle
|
||||
|
@ -57,6 +57,10 @@ public:
|
||||
* Redraw the window
|
||||
*/
|
||||
virtual void redraw() override;
|
||||
|
||||
virtual void getArrangement(glui32 *method, glui32 *size, Window **keyWin) override;
|
||||
|
||||
virtual void setArrangement(glui32 method, glui32 size, Window *keyWin) override;
|
||||
};
|
||||
|
||||
} // End of namespace Gargoyle
|
||||
|
@ -471,6 +471,14 @@ void Window::acceptReadChar(glui32 arg) {
|
||||
warning("acceptReadChar:: window does not support keyboard input");
|
||||
}
|
||||
|
||||
void Window::getArrangement(glui32 *method, glui32 *size, Window **keyWin) {
|
||||
warning("getArrangement: not a Pair window");
|
||||
}
|
||||
|
||||
void Window::setArrangement(glui32 method, glui32 size, Window *keyWin) {
|
||||
warning("setArrangement: not a Pair window");
|
||||
}
|
||||
|
||||
bool Window::checkTerminator(glui32 ch) {
|
||||
if (ch == keycode_Escape)
|
||||
return true;
|
||||
|
@ -98,11 +98,6 @@ private:
|
||||
*/
|
||||
PairWindow *newPairWindow(glui32 method, Window *key, glui32 size);
|
||||
|
||||
/**
|
||||
* Rearrange windows
|
||||
*/
|
||||
void rearrange();
|
||||
|
||||
void refocus(Window *win);
|
||||
|
||||
Window *iterateTreeOrder(Window *win);
|
||||
@ -158,6 +153,11 @@ public:
|
||||
|
||||
void clearClaimSelect() { _claimSelect = false; }
|
||||
|
||||
/**
|
||||
* Rearrange windows
|
||||
*/
|
||||
void rearrange();
|
||||
|
||||
void redraw();
|
||||
|
||||
void redrawRect(const Common::Rect &r);
|
||||
@ -366,6 +366,10 @@ public:
|
||||
|
||||
virtual void acceptReadChar(glui32 arg);
|
||||
|
||||
virtual void getArrangement(glui32 *method, glui32 *size, Window **keyWin);
|
||||
|
||||
virtual void setArrangement(glui32 method, glui32 size, Window *keyWin);
|
||||
|
||||
int acceptScroll(glui32 arg);
|
||||
};
|
||||
typedef Window *winid_t;
|
||||
|
Loading…
x
Reference in New Issue
Block a user