1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
/* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef M4_GUI_CHEAPO_H
#define M4_GUI_CHEAPO_H
#include "common/str.h"
#include "m4/graphics/gr_buff.h"
#include "m4/m4_types.h"
namespace M4 {
namespace GUI {
constexpr int16 MAX_BUTTONS = 20;
enum ControlStatus {
NOTHING, IN_CONTROL, OVER_CONTROL, SELECTED, TRACKING
};
enum ButtonState {
BUTTON_0, BUTTON_RELAXED, BUTTON_OVER, BUTTON_PICKED
};
class RectClass;
class ButtonClass;
class InterfaceBox;
class RectClass {
public:
int16 _x1 = 0, _x2 = 0, _y1 = 0, _y2 = 0;
public:
RectClass();
RectClass(int16 x1, int16 y1, int16 x2, int16 y2);
RectClass(const RectClass *);
virtual ~RectClass();
virtual int16 inside(int16 x, int16 y) const;
void copyInto(RectClass *r) const;
void set(int16 x1, int16 y1, int16 x2, int16 y2);
void set(const RectClass *r);
};
class TextField : public RectClass {
private:
char *_string = nullptr;
int16 _string_len = 0;
public:
bool _must_redraw = false;
public:
TextField(int16 x1, int16 y1, int16 x2, int16 y2);
~TextField();
void set_string(const char *string);
void draw(GrBuff *interface_buffer);
};
class ButtonClass : public RectClass {
protected:
int16 _tag = 0;
int16 _unknown = 0;
int16 _relaxed = 0;
int16 _over = 0;
int16 _picked = 0;
int16 _tracking = 0;
int32 _sprite = 0;
bool _highlighted = false;
bool _hidden = false;
void init();
void zap_resources();
public:
ButtonState _state = BUTTON_RELAXED;
Common::String _name;
bool _must_redraw = false;
public:
ButtonClass();
ButtonClass(const RectClass &r, const Common::String &btnName, int16 tag);
ButtonClass(const RectClass &r, const Common::String &btnName, int16 tag,
int16 unknown, int16 relaxed, int16 over, int16 picked, int sprite);
ButtonClass(const RectClass &r, const Common::String &btnName, int16 tag,
int16 relaxed, int16 over, int16 picked, int sprite);
~ButtonClass();
void draw(GrBuff *interface_buffer);
int16 inside(int16 x, int16 y) const override;
virtual ControlStatus track(int32 eventType, int16 x, int16 y);
void set(const ButtonClass *b);
void set(int16 x1, int16 y1, int16 x2, int16 y2, int16 tag);
void set(int16 x1, int16 y1, int16 x2, int16 y2, int16 tag, int16 unknown,
int16 relaxed, int16 over, int16 picked, int32 sprite);
void set_name(const Common::String &btnName);
int16 get_tag() const;
void hide();
void unhide();
bool is_hidden() const;
void set_sprite_relaxed(int16 r);
void set_sprite_picked(int16 p);
void set_sprite_over(int16 o);
void set_sprite_unknown(int16 val);
};
class Toggler : public ButtonClass {
public:
ControlStatus _toggle_state;
public:
Toggler();
ControlStatus track(int32 eventType, int16 x, int16 y);
};
class InterfaceBox : public RectClass {
private:
bool _selected = false;
int16 _index = 0;
ButtonClass *_button[MAX_BUTTONS] = { nullptr };
public:
int16 _highlight_index = 0;
bool _must_redraw_all = false;
public:
InterfaceBox(const RectClass &r);
~InterfaceBox();
void draw(GrBuff *interface_buffer);
int16 inside(int16 x, int16 y) const override;
ControlStatus track(int32 eventType, int16 x, int16 y);
void add(ButtonClass *b);
int16 check_inventory(int16 x, int16 y);
void highlight_button(int16 index);
void set_selected(bool);
};
} // namespace GUI
} // namespace M4
#endif
|