diff options
author | Kostas Nakos | 2006-07-01 08:13:46 +0000 |
---|---|---|
committer | Kostas Nakos | 2006-07-01 08:13:46 +0000 |
commit | 6a8749ace05649fdf69593c76a75c322f34a5bfa (patch) | |
tree | da214254c9ca56ded22af377fe0763ad73dd7bb5 /backends/platform/wince/CEgui | |
parent | 294dcea3ef063ee4ec95f3f418af4534445da1c6 (diff) | |
download | scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.gz scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.bz2 scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.zip |
move ce port to its new home
svn-id: r23366
Diffstat (limited to 'backends/platform/wince/CEgui')
19 files changed, 1231 insertions, 0 deletions
diff --git a/backends/platform/wince/CEgui/CEGUI.h b/backends/platform/wince/CEgui/CEGUI.h new file mode 100644 index 0000000000..1b5d5197f2 --- /dev/null +++ b/backends/platform/wince/CEgui/CEGUI.h @@ -0,0 +1,27 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "ToolbarHandler.h" +#include "Panel.h" +#include "ItemSwitch.h" +#include "PanelKeyboard.h" + diff --git a/backends/platform/wince/CEgui/GUIElement.cpp b/backends/platform/wince/CEgui/GUIElement.cpp new file mode 100644 index 0000000000..520c17e11d --- /dev/null +++ b/backends/platform/wince/CEgui/GUIElement.cpp @@ -0,0 +1,125 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "Toolbar.h" + +#include "SDL_ImageResource.h" + +namespace CEGUI { + + GUIElement::GUIElement(int x, int y, int width, int height) : + _background(0), _drawn(false), _visible(true), _x(x), _y(y), _width(width), _height(height) + { + } + + bool GUIElement::setBackground(WORD backgroundReference) { + _background = new SDL_ImageResource(); + if (!_background->load(backgroundReference)) { + delete _background; + _background = NULL; + return false; + } + if (!_height && !_width) { + _height = _background->height(); + _width = _background->width(); + } + else + if (_background->height() != _height || _background->width() != _width) { + delete _background; + _background = NULL; + return false; + } + return true; + } + + void GUIElement::move(int x, int y) { + _x = x; + _y = y; + } + + bool GUIElement::draw(SDL_Surface *surface) { + if (_background && !_drawn && _visible) { + SDL_Rect rect; + + rect.x = _x; + rect.y = _y; + rect.w = _width; + rect.h = _height; + + SDL_BlitSurface(_background->get(), NULL, surface, &rect); + + _drawn = true; + + return true; + } + else + return false; + } + + bool GUIElement::checkInside(int x, int y) { + if (x >= _x && x <= _x + _width && y >= _y && y <= _y + _height) + return true; + else + return false; + } + + void GUIElement::setVisible(bool visibility) { + if (visibility && !_visible) + _drawn = false; + _visible = visibility; + } + + bool GUIElement::visible() { + return _visible; + } + + void GUIElement::forceRedraw() { + _drawn = false; + } + + bool GUIElement::drawn() { + return _drawn; + } + + int GUIElement::x() { + return _x; + } + + int GUIElement::y() { + return _y; + } + + int GUIElement::width() { + return _width; + } + + int GUIElement::height() { + return _height; + } + + GUIElement::~GUIElement() { + if (_background) + delete _background; + } + +} diff --git a/backends/platform/wince/CEgui/GUIElement.h b/backends/platform/wince/CEgui/GUIElement.h new file mode 100644 index 0000000000..eef84043b3 --- /dev/null +++ b/backends/platform/wince/CEgui/GUIElement.h @@ -0,0 +1,65 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_GUIELEMENT +#define CEGUI_GUIELEMENT + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "SDL.h" + +#include "SDL_ImageResource.h" + +namespace CEGUI { + + class GUIElement { + public: + bool setBackground(WORD backgroundReference); + void setVisible(bool visibility); + virtual void forceRedraw(); + virtual bool draw(SDL_Surface *surface); + virtual ~GUIElement(); + void move(int x, int y); + int width(); + int height(); + int x(); + int y(); + virtual bool action(int x, int y, bool pushed) = 0; + bool visible(); + bool drawn(); + protected: + GUIElement(int x = 0, int y = 0, int width = 0, int height = 0); + bool checkInside(int x, int y); + bool _visible; + SDL_ImageResource *_background; + int _x; + int _y; + bool _drawn; + private: + int _width; + int _height; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/ItemAction.cpp b/backends/platform/wince/CEgui/ItemAction.cpp new file mode 100644 index 0000000000..9bc9db65bb --- /dev/null +++ b/backends/platform/wince/CEgui/ItemAction.cpp @@ -0,0 +1,48 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "ItemAction.h" + +namespace CEGUI { + + ItemAction::ItemAction(WORD reference, GUI::ActionType action) : + PanelItem(reference) { + _action = action; + if (!GUI::Actions::Instance()->isEnabled(_action)) + _visible = false; + } + + + ItemAction::~ItemAction() { + } + + bool ItemAction::action(int x, int y, bool pushed) { + + if (checkInside(x, y) && _visible && pushed) { + GUI::Actions::Instance()->perform(_action); + return true; + } + else + return false; + } +} diff --git a/backends/platform/wince/CEgui/ItemAction.h b/backends/platform/wince/CEgui/ItemAction.h new file mode 100644 index 0000000000..97202e14a1 --- /dev/null +++ b/backends/platform/wince/CEgui/ItemAction.h @@ -0,0 +1,44 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_ITEMACTION +#define CEGUI_ITEMACTION + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "gui/Actions.h" +#include "CEgui/PanelItem.h" +namespace CEGUI { + + class ItemAction : public PanelItem { + public: + ItemAction(WORD reference, GUI::ActionType action); + virtual ~ItemAction(); + virtual bool action(int x, int y, bool pushed); + private: + GUI::ActionType _action; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/ItemSwitch.cpp b/backends/platform/wince/CEgui/ItemSwitch.cpp new file mode 100644 index 0000000000..7498463871 --- /dev/null +++ b/backends/platform/wince/CEgui/ItemSwitch.cpp @@ -0,0 +1,93 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "ItemSwitch.h" + +namespace CEGUI { + + void ItemSwitch::init(WORD referenceTrue, WORD referenceFalse) { + _backgroundTrue = _background; + _backgroundFalse = new SDL_ImageResource(); + if (!_backgroundFalse->load(referenceFalse)) { + delete _backgroundFalse; + delete _background; + _background = NULL; + _backgroundFalse = NULL; + } + } + + ItemSwitch::ItemSwitch(WORD referenceTrue, WORD referenceFalse, bool *item) : + PanelItem(referenceTrue) { + init(referenceTrue, referenceFalse); + _item = item; + _itemmax = -1; + if (!*_item) + _background = _backgroundFalse; + } + + ItemSwitch::ItemSwitch(WORD referenceTrue, WORD referenceFalse, int *item, int max) : + PanelItem(referenceTrue) { + init(referenceTrue, referenceFalse); + _itemmultiple = item; + _itemmax = max; + if (!*item) + _background = _backgroundFalse; + } + + ItemSwitch::~ItemSwitch() { + if (_backgroundFalse) + delete _backgroundFalse; + } + + bool ItemSwitch::action(int x, int y, bool pushed) { + + if (checkInside(x, y) && _visible && pushed) { + if (_itemmax <= 0) { + *_item = !*_item; + if (*_item) + _background = _backgroundTrue; + else + _background = _backgroundFalse; + + if (_panel) + _panel->forceRedraw(); + + return true; + } else { + *_itemmultiple = *_itemmultiple + 1; + if (*_itemmultiple > _itemmax) + *_itemmultiple = 0; + if (*_itemmultiple) + _background = _backgroundTrue; + else + _background = _backgroundFalse; + + if (_panel) + _panel->forceRedraw(); + + return true; + } + } else + return false; + } +} diff --git a/backends/platform/wince/CEgui/ItemSwitch.h b/backends/platform/wince/CEgui/ItemSwitch.h new file mode 100644 index 0000000000..60a96c4894 --- /dev/null +++ b/backends/platform/wince/CEgui/ItemSwitch.h @@ -0,0 +1,53 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_ITEMSWITCH +#define CEGUI_ITEMSWITCH + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "Panel.h" +#include "EventsBuffer.h" + +using GUI::Key; + +namespace CEGUI { + + class ItemSwitch : public PanelItem { + public: + ItemSwitch(WORD referenceTrue, WORD referenceFalse, bool *item); + ItemSwitch(WORD referenceTrue, WORD referenceFalse, int *item, int max); + virtual ~ItemSwitch(); + virtual bool action(int x, int y, bool pushed); + private: + void init(WORD referenceTrue, WORD referenceFalse); + bool *_item; + static bool _itemdummy; + int *_itemmultiple, _itemmax; + SDL_ImageResource *_backgroundTrue; + SDL_ImageResource *_backgroundFalse; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/Panel.cpp b/backends/platform/wince/CEgui/Panel.cpp new file mode 100644 index 0000000000..8b49b5d3a7 --- /dev/null +++ b/backends/platform/wince/CEgui/Panel.cpp @@ -0,0 +1,83 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "Panel.h" + +namespace CEGUI { + + Panel::Panel(int interleave_first, int interleave) : Toolbar() + { + _interleave = interleave; + _currentItem = interleave_first; + } + + + bool Panel::add(const String &name, const PanelItem *item) { + _itemsMap[name] = (PanelItem*)item; + _itemsMap[name]->move(_currentItem, _y + 10); + _itemsMap[name]->setPanel(this); + _currentItem += _interleave; + + return true; + } + + bool Panel::draw(SDL_Surface *surface) { + ItemMap::const_iterator iterator; + if (!_drawn && _visible) { + GUIElement::draw(surface); + for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator) { + ((GUIElement*)(iterator->_value))->draw(surface); + } + return true; + } + else + return false; + } + + void Panel::forceRedraw() { + ItemMap::const_iterator iterator; + GUIElement::forceRedraw(); + for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator) + ((GUIElement*)(iterator->_value))->forceRedraw(); + } + + bool Panel::action(int x, int y, bool pushed) { + ItemMap::const_iterator iterator; + bool result = false; + if (!_visible || !checkInside(x, y)) + return false; + + for (iterator = _itemsMap.begin(); !result && iterator != _itemsMap.end(); ++iterator) + result = ((GUIElement*)(iterator->_value))->action(x, y, pushed); + return result; + } + + void Panel::clear() { + _itemsMap.clear(); + } + + Panel::~Panel() { + _itemsMap.clear(); + } +} + diff --git a/backends/platform/wince/CEgui/Panel.h b/backends/platform/wince/CEgui/Panel.h new file mode 100644 index 0000000000..8c4f4b3c7f --- /dev/null +++ b/backends/platform/wince/CEgui/Panel.h @@ -0,0 +1,60 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_PANEL +#define CEGUI_PANEL + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "common/hashmap.h" +#include "common/str.h" +#include "common/config-manager.h" + +#include "PanelItem.h" +#include "Toolbar.h" + +using Common::String; +using Common::HashMap; + +namespace CEGUI { + + class Panel : public Toolbar { + public: + Panel(int interleave_first, int interleave); + virtual bool draw(SDL_Surface *surface); + virtual ~Panel(); + bool add(const String &name, const PanelItem *item); + void clear(); + virtual void forceRedraw(); + virtual bool action(int x, int y, bool pushed); + private: + + typedef HashMap<String, PanelItem*, Common::IgnoreCase_Hash , Common::IgnoreCase_EqualTo> ItemMap; + + ItemMap _itemsMap; + int _interleave; + int _currentItem; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/PanelItem.cpp b/backends/platform/wince/CEgui/PanelItem.cpp new file mode 100644 index 0000000000..762fac1047 --- /dev/null +++ b/backends/platform/wince/CEgui/PanelItem.cpp @@ -0,0 +1,45 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "PanelItem.h" + +namespace CEGUI { + + PanelItem::PanelItem(WORD reference) : GUIElement() { + setBackground(reference); + _panel = NULL; + } + + + PanelItem::~PanelItem() { + } + + bool PanelItem::action(int x, int y, bool pushed) { + return false; + } + + void PanelItem::setPanel(Panel *panel) { + _panel = panel; + } +} + diff --git a/backends/platform/wince/CEgui/PanelItem.h b/backends/platform/wince/CEgui/PanelItem.h new file mode 100644 index 0000000000..638a9303d1 --- /dev/null +++ b/backends/platform/wince/CEgui/PanelItem.h @@ -0,0 +1,48 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_PANELITEM +#define CEGUI_PANELITEM + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "Toolbar.h" + +namespace CEGUI { + + class Panel; + + class PanelItem : public GUIElement { + friend class Panel; + public: + PanelItem(WORD reference); + virtual ~PanelItem(); + virtual bool action(int x, int y, bool pushed); + protected: + void setPanel(Panel *panel); + Panel *_panel; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp new file mode 100644 index 0000000000..b554fb3b71 --- /dev/null +++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp @@ -0,0 +1,88 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "PanelKeyboard.h" + +namespace CEGUI { + + const char KEYBOARD_MAPPING_ALPHA_HIGH[] = {"abcdefghijklm"}; + const char KEYBOARD_MAPPING_NUMERIC_HIGH[] = {"12345"}; + const char KEYBOARD_MAPPING_ALPHA_LOW[] = {"nopqrstuvwxyz"}; + const char KEYBOARD_MAPPING_NUMERIC_LOW[] = {"67890"}; + + PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() { + setBackground(reference); + } + + + PanelKeyboard::~PanelKeyboard() { + } + + bool PanelKeyboard::action(int x, int y, bool pushed) { + + if (checkInside(x, y)) { + char keyAscii = 0; + char keyCode = 0; + if (x < 185) { + // Alpha selection + if (y <= _y + 20) + keyAscii = KEYBOARD_MAPPING_ALPHA_HIGH[((x + 10) / 14) - 1]; + else + keyAscii = KEYBOARD_MAPPING_ALPHA_LOW[((x + 10) / 14) - 1]; + keyCode = tolower(keyAscii); + } + else + if (x >= 186 && x <= 255) { + // Numeric selection + if (y <= _y + 20) + keyAscii = KEYBOARD_MAPPING_NUMERIC_HIGH[((x - 187 + 10) / 14) - 1]; + else + keyAscii = KEYBOARD_MAPPING_NUMERIC_LOW[((x - 187 + 10) / 14) - 1]; + keyCode = keyAscii; + } + else + if (x >= 302 && x <= 316 && y < _y + 20) { + // Backspace + keyAscii = VK_BACK; + keyCode = keyAscii; + } + else + if (x >= 302 && x <= 316 && y >= _y + 20) { + // Enter + keyAscii = 13; + keyCode = 10; + } + + if (keyAscii != 0) { + _key.setAscii(keyAscii); + _key.setKeycode(tolower(keyAscii)); + return EventsBuffer::simulateKey(&_key, pushed); + } + else + return false; + } + else + return false; + } +} + diff --git a/backends/platform/wince/CEgui/PanelKeyboard.h b/backends/platform/wince/CEgui/PanelKeyboard.h new file mode 100644 index 0000000000..2f53d0afa3 --- /dev/null +++ b/backends/platform/wince/CEgui/PanelKeyboard.h @@ -0,0 +1,48 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_PANELKEYBOARD +#define CEGUI_PANELKEYBOARD + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "Toolbar.h" +#include "EventsBuffer.h" + +using GUI::Key; +using CEKEYS::EventsBuffer; + +namespace CEGUI { + + class PanelKeyboard : public Toolbar { + public: + PanelKeyboard(WORD reference); + virtual ~PanelKeyboard(); + virtual bool action(int x, int y, bool pushed); + private: + Key _key; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/SDL_ImageResource.cpp b/backends/platform/wince/CEgui/SDL_ImageResource.cpp new file mode 100644 index 0000000000..0261d11684 --- /dev/null +++ b/backends/platform/wince/CEgui/SDL_ImageResource.cpp @@ -0,0 +1,83 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "SDL_ImageResource.h" + +namespace CEGUI { + + SDL_ImageResource::SDL_ImageResource() : + _surface(0) + { + } + + SDL_Surface* SDL_ImageResource::load(WORD resourceID) { + HRSRC resource; + HGLOBAL resourceGlobal; + LPVOID resourcePointer; + DWORD resourceSize; + SDL_RWops *surfaceData; + HMODULE moduleHandle; + + moduleHandle = GetModuleHandle(NULL); + resource = FindResource(moduleHandle, MAKEINTRESOURCE(resourceID), TEXT("BINARY")); + if (!resource) + return NULL; + resourceSize = SizeofResource(moduleHandle, resource); + if (!resourceSize) + return NULL; + resourceGlobal = LoadResource(moduleHandle, resource); + if (!resourceGlobal) + return NULL; + resourcePointer = LockResource(resourceGlobal); + if (!resourcePointer) + return NULL; + + surfaceData = SDL_RWFromMem(resourcePointer, resourceSize); + if (!surfaceData) + return NULL; + _surface = SDL_LoadBMP_RW(surfaceData, 1); + + return _surface; + }; + + SDL_Surface* SDL_ImageResource::get() { + return _surface; + } + + int SDL_ImageResource::height() { + if (_surface) + return _surface->h; + return 0; + } + + int SDL_ImageResource::width() { + if (_surface) + return _surface->w; + return 0; + } + + SDL_ImageResource::~SDL_ImageResource() { + if (_surface) + SDL_FreeSurface(_surface); + } +} diff --git a/backends/platform/wince/CEgui/SDL_ImageResource.h b/backends/platform/wince/CEgui/SDL_ImageResource.h new file mode 100644 index 0000000000..0c46497de8 --- /dev/null +++ b/backends/platform/wince/CEgui/SDL_ImageResource.h @@ -0,0 +1,46 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_SDL_IMAGERESOURCE +#define CEGUI_SDL_IMAGERESOURCE + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "SDL.h" + +namespace CEGUI { + class SDL_ImageResource { + public: + SDL_ImageResource(); + SDL_Surface* load(WORD resourceID); + SDL_Surface* get(); + int height(); + int width(); + virtual ~SDL_ImageResource(); + private: + SDL_Surface *_surface; + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/Toolbar.cpp b/backends/platform/wince/CEgui/Toolbar.cpp new file mode 100644 index 0000000000..03859ab392 --- /dev/null +++ b/backends/platform/wince/CEgui/Toolbar.cpp @@ -0,0 +1,36 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "Toolbar.h" + +namespace CEGUI { + + // Not to be drawn on game screen ! + Toolbar::Toolbar() : GUIElement(0, 0, 320, 40) + { + } + + + Toolbar::~Toolbar() { + } +} diff --git a/backends/platform/wince/CEgui/Toolbar.h b/backends/platform/wince/CEgui/Toolbar.h new file mode 100644 index 0000000000..ae97c1c8d5 --- /dev/null +++ b/backends/platform/wince/CEgui/Toolbar.h @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_TOOLBAR +#define CEGUI_TOOLBAR + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +//#include "common/map.h" +#include "common/str.h" + +#include "GUIElement.h" + + + +namespace CEGUI { + + class Toolbar : public GUIElement { + public: + virtual ~Toolbar(); + virtual bool action(int x, int y, bool pushed) = 0; + protected: + Toolbar(); + + }; +} + +#endif diff --git a/backends/platform/wince/CEgui/ToolbarHandler.cpp b/backends/platform/wince/CEgui/ToolbarHandler.cpp new file mode 100644 index 0000000000..1470479478 --- /dev/null +++ b/backends/platform/wince/CEgui/ToolbarHandler.cpp @@ -0,0 +1,125 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "ToolbarHandler.h" + +namespace CEGUI { + + ToolbarHandler::ToolbarHandler(): + _current(""), _active(NULL) { + } + + + bool ToolbarHandler::add(const String &name, const Toolbar &toolbar) { + _toolbarMap[name] = (Toolbar*)&toolbar; + + if (!_active) { + _active = &((Toolbar&)toolbar); + _current = name; + } + + return true; + } + + String ToolbarHandler::activeName() { + return _current; + } + + bool ToolbarHandler::setActive(const String &name) { + if (!_toolbarMap.contains(name)) + return false; + if (_current == name) + return true; + _current = name; + _active = _toolbarMap[name]; + _active->forceRedraw(); + return true; + } + + bool ToolbarHandler::action(int x, int y, bool pushed) { + if (_active && _active->visible()) { + // FIXME ! + if (_offset > 240) + return _active->action(x / 2, (y - _offset) / 2, pushed); + else + return _active->action(x, y - _offset, pushed); + } + else + return false; + } + + void ToolbarHandler::setVisible(bool visible) { + if (_active) + _active->setVisible(visible); + } + + bool ToolbarHandler::visible() { + if (_active) + return _active->visible(); + else + return false; + } + + void ToolbarHandler::forceRedraw() { + if (_active) + _active->forceRedraw(); + } + + bool ToolbarHandler::drawn() { + if (_active) + return _active->drawn(); + else + return false; + } + + bool ToolbarHandler::draw(SDL_Surface *surface, SDL_Rect *rect) { + if (_active) { + bool result = _active->draw(surface); + if (result) { + rect->x = _active->x(); + rect->y = _active->y(); + rect->w = _active->width(); + rect->h = _active->height(); + } + return result; + } + else + return false; + } + + void ToolbarHandler::setOffset(int offset) { + _offset = offset; + } + + int ToolbarHandler::getOffset() { + return _offset; + } + + Toolbar* ToolbarHandler::active() { + return _active; + } + + ToolbarHandler::~ToolbarHandler() { + _toolbarMap.clear(); + } +} diff --git a/backends/platform/wince/CEgui/ToolbarHandler.h b/backends/platform/wince/CEgui/ToolbarHandler.h new file mode 100644 index 0000000000..376d536dd4 --- /dev/null +++ b/backends/platform/wince/CEgui/ToolbarHandler.h @@ -0,0 +1,65 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CEGUI_TOOLBARHANDLER +#define CEGUI_TOOLBARHANDLER + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "common/str.h" +#include "common/hashmap.h" +#include "common/config-manager.h" + +#include "Toolbar.h" + +using Common::String; +using Common::HashMap; + +namespace CEGUI { + + class ToolbarHandler { + public: + ToolbarHandler(); + bool add(const String &name, const Toolbar &toolbar); + bool setActive(const String &name); + bool action(int x, int y, bool pushed); + void setVisible(bool visible); + bool visible(); + String activeName(); + void forceRedraw(); + void setOffset(int offset); + int getOffset(); + bool draw(SDL_Surface *surface, SDL_Rect *rect); + bool drawn(); + Toolbar *active(); + virtual ~ToolbarHandler(); + private: + + HashMap<String, Toolbar*, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _toolbarMap; + String _current; + Toolbar *_active; + int _offset; + }; +} + +#endif |