Files
2026-02-02 04:50:13 +01:00

217 lines
6.9 KiB
C++

/* 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 AGS_SHARED_GUI_GUI_DEFINES_H
#define AGS_SHARED_GUI_GUI_DEFINES_H
namespace AGS3 {
#define GUIMAGIC 0xcafebeef
#define MAX_GUIOBJ_EVENTS 10
#define TEXTWINDOW_PADDING_DEFAULT 3
// TODO: find out more about gui version history
//=============================================================================
// GUI Version history
//-----------------------------------------------------------------------------
//
// 2.1.4..... (100): Introduced Slider gui control. Gui count is now serialized
// in game file.
// 2.2.2..... (101): Introduced TextBox gui control.
// 2.3.0..... (102): Introduced ListBox gui control.
// 2.6.0..... (105): GUI custom Z-order support.
// 2.7.0..... (110): Added GUI OnClick handler.
// 2.7.2.???? (111): Added text alignment property to buttons.
// 2.7.2.???? (112): Added text alignment property to list boxes.
// 2.7.2.???? (113): Increased permitted length of GUI label text from 200 to
// 2048 characters.
// 2.7.2.???? (114): Obsoleted savegameindex[] array, and added
// ListBox.SaveGameSlots[] array instead.
// 2.7.2.???? (115): Added GUI Control z-order support.
//
// 3.3.0.1132 (116): Added kGUICtrl_Translated flag.
// 3.3.1.???? (117): Added padding variable for text window GUIs.
// 3.4.0 (118): Removed GUI limits
// 3.5.0 (119): Game data contains GUI properties that previously
// could be set only at runtime.
// Since then format value is defined as AGS version represented as NN,NN,NN,NN
//=============================================================================
enum GuiVersion {
// TODO: find out all corresponding engine version numbers
kGuiVersion_Initial = 0,
kGuiVersion_214 = 100,
kGuiVersion_222 = 101,
kGuiVersion_230 = 102,
kGuiVersion_unkn_103 = 103,
kGuiVersion_unkn_104 = 104,
kGuiVersion_260 = 105,
kGuiVersion_unkn_106 = 106,
kGuiVersion_unkn_107 = 107,
kGuiVersion_unkn_108 = 108,
kGuiVersion_unkn_109 = 109,
kGuiVersion_270 = 110,
kGuiVersion_272a = 111,
kGuiVersion_272b = 112,
kGuiVersion_272c = 113,
kGuiVersion_272d = 114,
kGuiVersion_272e = 115,
kGuiVersion_330 = 116,
kGuiVersion_331 = 117,
kGuiVersion_340 = 118,
kGuiVersion_350 = 119,
kGuiVersion_Current = kGuiVersion_350,
};
namespace AGS {
namespace Shared {
// GUIMain's style and behavior flags
enum GUIMainFlags {
kGUIMain_Clickable = 0x0001,
kGUIMain_TextWindow = 0x0002,
kGUIMain_Visible = 0x0004,
kGUIMain_Concealed = 0x0008,
// NOTE: currently default state is Visible to keep this backwards compatible;
// check later if this is still a wanted behavior
kGUIMain_DefFlags = kGUIMain_Clickable | kGUIMain_Visible,
// flags that had inverse meaning in old formats
kGUIMain_OldFmtXorMask = kGUIMain_Clickable
};
// GUIMain's legacy flags, now converted to GUIMainFlags on load
enum GUIMainLegacyFlags {
kGUIMain_LegacyTextWindow = 5
};
// GUIMain's style of getting displayed on screen
enum GUIPopupStyle {
// Normal GUI
kGUIPopupNormal = 0,
// Shown when the mouse cursor moves to the top of the screen
kGUIPopupMouseY = 1,
// Same as Normal, but pauses the game when shown
kGUIPopupModal = 2,
// Same as Normal, but is not removed when interface is off
kGUIPopupNoAutoRemove = 3,
// (legacy option) Normal GUI, initially off
// converts to kGUIPopupNormal with Visible = false
kGUIPopupLegacyNormalOff = 4
};
// The type of GUIControl
enum GUIControlType {
kGUIControlUndefined = -1,
kGUIButton = 1,
kGUILabel = 2,
kGUIInvWindow = 3,
kGUISlider = 4,
kGUITextBox = 5,
kGUIListBox = 6
};
// GUIControl general style and behavior flags
enum GUIControlFlags {
kGUICtrl_Default = 0x0001, // only button
kGUICtrl_Cancel = 0x0002, // unused
kGUICtrl_Enabled = 0x0004,
kGUICtrl_TabStop = 0x0008, // unused
kGUICtrl_Visible = 0x0010,
kGUICtrl_Clip = 0x0020, // only button
kGUICtrl_Clickable = 0x0040,
kGUICtrl_Translated = 0x0080, // 3.3.0.1132
kGUICtrl_Deleted = 0x8000, // unused (probably remains from the old editor?)
kGUICtrl_DefFlags = kGUICtrl_Enabled | kGUICtrl_Visible | kGUICtrl_Clickable | kGUICtrl_Translated,
// flags that had inverse meaning in old formats
kGUICtrl_OldFmtXorMask = kGUICtrl_Enabled | kGUICtrl_Visible | kGUICtrl_Clickable
};
// Label macro flags, define which macros are present in the Label's Text
enum GUILabelMacro {
kLabelMacro_None = 0,
kLabelMacro_Gamename = 0x01,
kLabelMacro_Overhotspot = 0x02,
kLabelMacro_Score = 0x04,
kLabelMacro_ScoreText = 0x08,
kLabelMacro_TotalScore = 0x10,
kLabelMacro_AllScore = kLabelMacro_Score | kLabelMacro_ScoreText,
kLabelMacro_All = 0xFFFF
};
// GUIListBox style and behavior flags
enum GUIListBoxFlags {
kListBox_ShowBorder = 0x01,
kListBox_ShowArrows = 0x02,
kListBox_SvgIndex = 0x04,
kListBox_DefFlags = kListBox_ShowBorder | kListBox_ShowArrows,
// flags that had inverse meaning in old formats
kListBox_OldFmtXorMask = kListBox_ShowBorder | kListBox_ShowArrows
};
// GUITextBox style and behavior flags
enum GUITextBoxFlags {
kTextBox_ShowBorder = 0x0001,
kTextBox_DefFlags = kTextBox_ShowBorder,
// flags that had inverse meaning in old formats
kTextBox_OldFmtXorMask = kTextBox_ShowBorder
};
// Savegame data format
// TODO: move to the engine code
enum GuiSvgVersion {
kGuiSvgVersion_Initial = 0,
kGuiSvgVersion_350,
kGuiSvgVersion_36020,
kGuiSvgVersion_36023,
kGuiSvgVersion_36025
};
// Style of GUI drawing in disabled state
enum GuiDisableStyle {
kGuiDis_Undefined = -1, // this is for marking not-disabled state
kGuiDis_Greyout = 0, // paint "gisabled" effect over controls
kGuiDis_Blackout = 1, // invisible controls (but guis are shown
kGuiDis_Unchanged = 2, // no change, display normally
kGuiDis_Off = 3 // fully invisible guis
};
// Global GUI options
struct GuiOptions {
// Clip GUI control's contents to the control's rectangle
bool ClipControls = true;
// How the GUI controls are drawn when the interface is disabled
GuiDisableStyle DisabledStyle = kGuiDis_Unchanged;
// Whether to graphically outline GUI controls
bool OutlineControls = false;
};
} // namespace Shared
} // namespace AGS
} // namespace AGS3
#endif