aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/StyleSpec.h31
-rw-r--r--src/gui/cheatMenu.cpp79
-rw-r--r--src/gui/cheatMenu.h13
-rw-r--r--src/gui/guiAnimatedImage.cpp16
-rw-r--r--src/gui/guiAnimatedImage.h9
-rw-r--r--src/gui/guiBackgroundImage.cpp15
-rw-r--r--src/gui/guiBackgroundImage.h5
-rw-r--r--src/gui/guiBox.cpp10
-rw-r--r--src/gui/guiBox.h2
-rw-r--r--src/gui/guiButton.cpp466
-rw-r--r--src/gui/guiButton.h251
-rw-r--r--src/gui/guiButtonImage.cpp20
-rw-r--r--src/gui/guiButtonImage.h4
-rw-r--r--src/gui/guiButtonItemImage.cpp11
-rw-r--r--src/gui/guiButtonItemImage.h4
-rw-r--r--src/gui/guiChatConsole.cpp389
-rw-r--r--src/gui/guiChatConsole.h25
-rw-r--r--src/gui/guiConfirmRegistration.cpp24
-rw-r--r--src/gui/guiEditBoxWithScrollbar.cpp586
-rw-r--r--src/gui/guiEditBoxWithScrollbar.h35
-rw-r--r--src/gui/guiEngine.cpp208
-rw-r--r--src/gui/guiEngine.h79
-rw-r--r--src/gui/guiFormSpecMenu.cpp2045
-rw-r--r--src/gui/guiFormSpecMenu.h207
-rw-r--r--src/gui/guiHyperText.cpp161
-rw-r--r--src/gui/guiHyperText.h7
-rw-r--r--src/gui/guiInventoryList.cpp108
-rw-r--r--src/gui/guiInventoryList.h42
-rw-r--r--src/gui/guiItemImage.cpp11
-rw-r--r--src/gui/guiItemImage.h9
-rw-r--r--src/gui/guiKeyChangeMenu.cpp289
-rw-r--r--src/gui/guiMainMenu.h6
-rw-r--r--src/gui/guiPasswordChange.cpp37
-rw-r--r--src/gui/guiPathSelectMenu.cpp14
-rw-r--r--src/gui/guiScrollBar.cpp17
-rw-r--r--src/gui/guiSkin.cpp475
-rw-r--r--src/gui/guiSkin.h652
-rw-r--r--src/gui/guiTable.cpp361
-rw-r--r--src/gui/guiTable.h35
-rw-r--r--src/gui/guiVolumeChange.cpp58
-rw-r--r--src/gui/guiVolumeChange.h5
-rw-r--r--src/gui/intlGUIEditBox.cpp1072
-rw-r--r--src/gui/intlGUIEditBox.h306
-rw-r--r--src/gui/mainmenumanager.h48
-rw-r--r--src/gui/modalMenu.h8
-rw-r--r--src/gui/touchscreengui.cpp682
46 files changed, 4461 insertions, 4476 deletions
diff --git a/src/gui/StyleSpec.h b/src/gui/StyleSpec.h
index aae2d46f8..67caf4f7b 100644
--- a/src/gui/StyleSpec.h
+++ b/src/gui/StyleSpec.h
@@ -138,7 +138,10 @@ public:
}
//! Gets the state that this style is intended for
- State getState() const { return state_map; }
+ State getState() const
+ {
+ return state_map;
+ }
//! Set the given state on this style
void addState(State state)
@@ -150,8 +153,7 @@ public:
//! Using a list of styles mapped to state values, calculate the final
// combined style for a state by propagating values in its component states
- static StyleSpec getStyleFromStatePropagation(
- const std::array<StyleSpec, NUM_STATES> &styles, State state)
+ static StyleSpec getStyleFromStatePropagation(const std::array<StyleSpec, NUM_STATES> &styles, State state)
{
StyleSpec temp = styles[StyleSpec::STATE_DEFAULT];
temp.state_map = state;
@@ -208,8 +210,7 @@ public:
return rect;
}
- irr::core::vector2d<s32> getVector2i(
- Property prop, irr::core::vector2d<s32> def) const
+ irr::core::vector2d<s32> getVector2i(Property prop, irr::core::vector2d<s32> def) const
{
const auto &val = properties[prop];
if (val.empty())
@@ -259,13 +260,10 @@ public:
int calc_size = 1;
if (size[0] == '*') {
- std::string new_size = size.substr(
- 1); // Remove '*' (invalid for stof)
- calc_size = stof(new_size) *
- g_fontengine->getFontSize(spec.mode);
+ std::string new_size = size.substr(1); // Remove '*' (invalid for stof)
+ calc_size = stof(new_size) * g_fontengine->getFontSize(spec.mode);
} else if (size[0] == '+' || size[0] == '-') {
- calc_size = stoi(size) +
- g_fontengine->getFontSize(spec.mode);
+ calc_size = stoi(size) + g_fontengine->getFontSize(spec.mode);
} else {
calc_size = stoi(size);
}
@@ -347,7 +345,7 @@ private:
rect.LowerRightCorner = irr::core::vector2di(-x, -x);
} else if (v_rect.size() == 2) {
s32 x = stoi(v_rect[0]);
- s32 y = stoi(v_rect[1]);
+ s32 y = stoi(v_rect[1]);
rect.UpperLeftCorner = irr::core::vector2di(x, y);
rect.LowerRightCorner = irr::core::vector2di(-x, -y);
// `-x` is interpreted as `w - x`
@@ -358,7 +356,7 @@ private:
stoi(v_rect[2]), stoi(v_rect[3]));
} else {
warningstream << "Invalid rectangle string format: \"" << value
- << "\"" << std::endl;
+ << "\"" << std::endl;
return false;
}
@@ -367,8 +365,7 @@ private:
return true;
}
- bool parseVector2i(const std::string &value,
- irr::core::vector2d<s32> *parsed_vec) const
+ bool parseVector2i(const std::string &value, irr::core::vector2d<s32> *parsed_vec) const
{
irr::core::vector2d<s32> vec;
std::vector<std::string> v_vector = split(value, ',');
@@ -379,12 +376,12 @@ private:
vec.Y = x;
} else if (v_vector.size() == 2) {
s32 x = stoi(v_vector[0]);
- s32 y = stoi(v_vector[1]);
+ s32 y = stoi(v_vector[1]);
vec.X = x;
vec.Y = y;
} else {
warningstream << "Invalid vector2d string format: \"" << value
- << "\"" << std::endl;
+ << "\"" << std::endl;
return false;
}
diff --git a/src/gui/cheatMenu.cpp b/src/gui/cheatMenu.cpp
index d441e8dfc..e66fbc250 100644
--- a/src/gui/cheatMenu.cpp
+++ b/src/gui/cheatMenu.cpp
@@ -23,9 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cheatMenu.h"
#include <cstddef>
-FontMode CheatMenu::fontStringToEnum(std::string str)
-{
- if (str == "FM_Standard")
+FontMode CheatMenu::fontStringToEnum(std::string str) {
+ if (str == "FM_Standard")
return FM_Standard;
else if (str == "FM_Mono")
return FM_Mono;
@@ -53,21 +52,18 @@ CheatMenu::CheatMenu(Client *client) : m_client(client)
font_color = g_settings->getV3F("cheat_menu_font_color");
selected_font_color = g_settings->getV3F("cheat_menu_selected_font_color");
- m_bg_color = video::SColor(g_settings->getU32("cheat_menu_bg_color_alpha"),
- bg_color.X, bg_color.Y, bg_color.Z);
-
- m_active_bg_color = video::SColor(
- g_settings->getU32("cheat_menu_active_bg_color_alpha"),
- active_bg_color.X, active_bg_color.Y, active_bg_color.Z);
+ m_bg_color = video::SColor(g_settings->getU32("cheat_menu_bg_color_alpha"),
+ bg_color.X, bg_color.Y, bg_color.Z);
+
+ m_active_bg_color = video::SColor(g_settings->getU32("cheat_menu_active_bg_color_alpha"),
+ active_bg_color.X, active_bg_color.Y, active_bg_color.Z);
m_font_color = video::SColor(g_settings->getU32("cheat_menu_font_color_alpha"),
- font_color.X, font_color.Y, font_color.Z);
-
- m_selected_font_color = video::SColor(
- g_settings->getU32("cheat_menu_selected_font_color_alpha"),
- selected_font_color.X, selected_font_color.Y,
- selected_font_color.Z);
+ font_color.X, font_color.Y, font_color.Z);
+ m_selected_font_color = video::SColor(g_settings->getU32("cheat_menu_selected_font_color_alpha"),
+ selected_font_color.X, selected_font_color.Y, selected_font_color.Z);
+
m_font = g_fontengine->getFont(FONT_SIZE_UNSPECIFIED, fontMode);
if (!m_font) {
@@ -141,73 +137,64 @@ void CheatMenu::draw(video::IVideoDriver *driver, bool show_debug)
void CheatMenu::drawHUD(video::IVideoDriver *driver, double dtime)
{
CHEAT_MENU_GET_SCRIPTPTR
-
+
m_rainbow_offset += dtime;
m_rainbow_offset = fmod(m_rainbow_offset, 6.0f);
-
+
std::vector<std::string> enabled_cheats;
-
+
int cheat_count = 0;
-
- for (auto category = script->m_cheat_categories.begin();
- category != script->m_cheat_categories.end(); category++) {
- for (auto cheat = (*category)->m_cheats.begin();
- cheat != (*category)->m_cheats.end(); cheat++) {
+
+ for (auto category = script->m_cheat_categories.begin(); category != script->m_cheat_categories.end(); category++) {
+ for (auto cheat = (*category)->m_cheats.begin(); cheat != (*category)->m_cheats.end(); cheat++) {
if ((*cheat)->is_enabled()) {
enabled_cheats.push_back((*cheat)->m_name);
cheat_count++;
}
}
}
-
+
if (enabled_cheats.empty())
return;
-
+
std::vector<video::SColor> colors;
-
+
for (int i = 0; i < cheat_count; i++) {
video::SColor color;
f32 h = (f32)i * 2.0f / (f32)cheat_count - m_rainbow_offset;
if (h < 0)
h = 6.0f + h;
f32 x = (1 - fabs(fmod(h, 2.0f) - 1.0f)) * 255.0f;
- switch ((int)h) {
+ switch((int)h) {
case 0:
- color = video::SColor(255, 255, x, 0);
- break;
+ color = video::SColor(255, 255, x, 0); break;
case 1:
- color = video::SColor(255, x, 255, 0);
- break;
+ color = video::SColor(255, x, 255, 0); break;
case 2:
- color = video::SColor(255, 0, 255, x);
- break;
+ color = video::SColor(255, 0, 255, x); break;
case 3:
- color = video::SColor(255, 0, x, 255);
- break;
+ color = video::SColor(255, 0, x, 255); break;
case 4:
- color = video::SColor(255, x, 0, 255);
- break;
+ color = video::SColor(255, x, 0, 255); break;
case 5:
- color = video::SColor(255, 255, 0, x);
- break;
+ color = video::SColor(255, 255, 0, x); break;
}
colors.push_back(color);
}
-
+
core::dimension2d<u32> screensize = driver->getScreenSize();
-
+
u32 y = 5;
-
+
int i = 0;
for (std::string cheat : enabled_cheats) {
- core::dimension2d<u32> dim =
- m_font->getDimension(utf8_to_wide(cheat).c_str());
+ core::dimension2d<u32> dim = m_font->getDimension(utf8_to_wide(cheat).c_str());
u32 x = screensize.Width - 5 - dim.Width;
-
+
core::rect<s32> fontbounds(x, y, x + dim.Width, y + dim.Height);
m_font->draw(cheat.c_str(), fontbounds, colors[i], false, false);
-
+
y += dim.Height;
i++;
}
diff --git a/src/gui/cheatMenu.h b/src/gui/cheatMenu.h
index b15858a48..8be73c483 100644
--- a/src/gui/cheatMenu.h
+++ b/src/gui/cheatMenu.h
@@ -42,15 +42,18 @@ class CheatMenu
public:
CheatMenu(Client *client);
- ClientScripting *getScript() { return m_client->getScript(); }
+ ClientScripting *getScript()
+ {
+ return m_client->getScript();
+ }
void draw(video::IVideoDriver *driver, bool show_debug);
-
+
void drawHUD(video::IVideoDriver *driver, double dtime);
void drawEntry(video::IVideoDriver *driver, std::string name, int number,
- bool selected, bool active,
- CheatMenuEntryType entry_type = CHEAT_MENU_ENTRY_TYPE_ENTRY);
+ bool selected, bool active,
+ CheatMenuEntryType entry_type = CHEAT_MENU_ENTRY_TYPE_ENTRY);
void selectUp();
void selectDown();
@@ -79,6 +82,6 @@ private:
gui::IGUIFont *m_font = nullptr;
v2u32 m_fontsize;
-
+
float m_rainbow_offset = 0.0;
};
diff --git a/src/gui/guiAnimatedImage.cpp b/src/gui/guiAnimatedImage.cpp
index d8648111f..b1447c45f 100644
--- a/src/gui/guiAnimatedImage.cpp
+++ b/src/gui/guiAnimatedImage.cpp
@@ -9,14 +9,13 @@
#include <vector>
GUIAnimatedImage::GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, const core::rect<s32> &rectangle, const std::string &texture_name,
- s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_tsrc(tsrc)
+ s32 id, const core::rect<s32> &rectangle, const std::string &texture_name,
+ s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle), m_tsrc(tsrc)
{
m_texture = m_tsrc->getTexture(texture_name);
- m_frame_count = std::max(frame_count, 1);
+ m_frame_count = std::max(frame_count, 1);
m_frame_duration = std::max(frame_duration, 0);
if (m_texture != nullptr) {
@@ -42,10 +41,8 @@ void GUIAnimatedImage::draw()
size.Height /= m_frame_count;
draw2DImageFilterScaled(driver, m_texture, AbsoluteRect,
- core::rect<s32>(core::position2d<s32>(0,
- size.Height * m_frame_idx),
- size),
- NoClip ? nullptr : &AbsoluteClippingRect, colors, true);
+ core::rect<s32>(core::position2d<s32>(0, size.Height * m_frame_idx), size),
+ NoClip ? nullptr : &AbsoluteClippingRect, colors, true);
}
// Step the animation
@@ -67,6 +64,7 @@ void GUIAnimatedImage::draw()
}
}
+
void GUIAnimatedImage::setFrameIndex(s32 frame)
{
s32 idx = std::max(frame, 0);
diff --git a/src/gui/guiAnimatedImage.h b/src/gui/guiAnimatedImage.h
index c814f609c..f8e6a506e 100644
--- a/src/gui/guiAnimatedImage.h
+++ b/src/gui/guiAnimatedImage.h
@@ -5,12 +5,11 @@
class ISimpleTextureSource;
-class GUIAnimatedImage : public gui::IGUIElement
-{
+class GUIAnimatedImage : public gui::IGUIElement {
public:
- GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const std::string &texture_name,
- s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc);
+ GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
+ s32 id, const core::rect<s32> &rectangle, const std::string &texture_name,
+ s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc);
virtual void draw() override;
diff --git a/src/gui/guiBackgroundImage.cpp b/src/gui/guiBackgroundImage.cpp
index 6b9559087..21c1e88cf 100644
--- a/src/gui/guiBackgroundImage.cpp
+++ b/src/gui/guiBackgroundImage.cpp
@@ -20,11 +20,11 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "log.h"
GUIBackgroundImage::GUIBackgroundImage(gui::IGUIEnvironment *env,
- gui::IGUIElement *parent, s32 id, const core::rect<s32> &rectangle,
- const std::string &name, const core::rect<s32> &middle,
- ISimpleTextureSource *tsrc, bool autoclip) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_name(name), m_middle(middle), m_tsrc(tsrc), m_autoclip(autoclip)
+ gui::IGUIElement *parent, s32 id, const core::rect<s32> &rectangle,
+ const std::string &name, const core::rect<s32> &middle,
+ ISimpleTextureSource *tsrc, bool autoclip) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_name(name), m_middle(middle), m_tsrc(tsrc), m_autoclip(autoclip)
{
}
@@ -37,7 +37,7 @@ void GUIBackgroundImage::draw()
if (!texture) {
errorstream << "GUIBackgroundImage::draw() Unable to load texture:"
- << std::endl;
+ << std::endl;
errorstream << "\t" << m_name << std::endl;
return;
}
@@ -53,8 +53,7 @@ void GUIBackgroundImage::draw()
const video::SColor colors[] = {color, color, color, color};
draw2DImageFilterScaled(driver, texture, rect,
core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(
- texture->getOriginalSize())),
+ core::dimension2di(texture->getOriginalSize())),
nullptr, colors, true);
} else {
core::rect<s32> middle = m_middle;
diff --git a/src/gui/guiBackgroundImage.h b/src/gui/guiBackgroundImage.h
index 5c8ca690d..31fbfd09c 100644
--- a/src/gui/guiBackgroundImage.h
+++ b/src/gui/guiBackgroundImage.h
@@ -25,9 +25,8 @@ class GUIBackgroundImage : public gui::IGUIElement
{
public:
GUIBackgroundImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const std::string &name,
- const core::rect<s32> &middle, ISimpleTextureSource *tsrc,
- bool autoclip);
+ const core::rect<s32> &rectangle, const std::string &name,
+ const core::rect<s32> &middle, ISimpleTextureSource *tsrc, bool autoclip);
virtual void draw() override;
diff --git a/src/gui/guiBox.cpp b/src/gui/guiBox.cpp
index 23551a7c7..7f329cc32 100644
--- a/src/gui/guiBox.cpp
+++ b/src/gui/guiBox.cpp
@@ -20,9 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiBox.h"
GUIBox::GUIBox(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const video::SColor &color) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_color(color)
+ const core::rect<s32> &rectangle, const video::SColor &color) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_color(color)
{
}
@@ -31,8 +31,8 @@ void GUIBox::draw()
if (!IsVisible)
return;
- Environment->getVideoDriver()->draw2DRectangle(
- m_color, AbsoluteRect, &AbsoluteClippingRect);
+ Environment->getVideoDriver()->draw2DRectangle(m_color, AbsoluteRect,
+ &AbsoluteClippingRect);
IGUIElement::draw();
}
diff --git a/src/gui/guiBox.h b/src/gui/guiBox.h
index 2367e43e3..5306fdf65 100644
--- a/src/gui/guiBox.h
+++ b/src/gui/guiBox.h
@@ -25,7 +25,7 @@ class GUIBox : public gui::IGUIElement
{
public:
GUIBox(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const video::SColor &color);
+ const core::rect<s32> &rectangle, const video::SColor &color);
virtual void draw() override;
diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp
index 2fb7659d7..e0d6337cd 100644
--- a/src/gui/guiButton.cpp
+++ b/src/gui/guiButton.cpp
@@ -4,6 +4,7 @@
#include "guiButton.h"
+
#include "client/guiscalingfilter.h"
#include "client/tile.h"
#include "IGUISkin.h"
@@ -25,14 +26,16 @@ using namespace gui;
#define COLOR_PRESSED_MOD 0.85f
//! constructor
-GUIButton::GUIButton(IGUIEnvironment *environment, IGUIElement *parent, s32 id,
- core::rect<s32> rectangle, ISimpleTextureSource *tsrc, bool noclip) :
- IGUIButton(environment, parent, id, rectangle),
- SpriteBank(0), OverrideFont(0), OverrideColorEnabled(false),
- OverrideColor(video::SColor(101, 255, 255, 255)), ClickTime(0),
- HoverTime(0), FocusTime(0), ClickShiftState(false),
- ClickControlState(false), IsPushButton(false), Pressed(false),
- UseAlphaChannel(false), DrawBorder(true), ScaleImage(false), TSrc(tsrc)
+GUIButton::GUIButton(IGUIEnvironment* environment, IGUIElement* parent,
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ bool noclip)
+: IGUIButton(environment, parent, id, rectangle),
+ SpriteBank(0), OverrideFont(0),
+ OverrideColorEnabled(false), OverrideColor(video::SColor(101,255,255,255)),
+ ClickTime(0), HoverTime(0), FocusTime(0),
+ ClickShiftState(false), ClickControlState(false),
+ IsPushButton(false), Pressed(false),
+ UseAlphaChannel(false), DrawBorder(true), ScaleImage(false), TSrc(tsrc)
{
setNotClipped(noclip);
@@ -44,10 +47,7 @@ GUIButton::GUIButton(IGUIEnvironment *environment, IGUIElement *parent, s32 id,
for (size_t i = 0; i < 4; i++) {
Colors[i] = Environment->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
}
- StaticText = gui::StaticText::add(Environment, Text.c_str(),
- core::rect<s32>(0, 0, rectangle.getWidth(),
- rectangle.getHeight()),
- false, false, this, id);
+ StaticText = gui::StaticText::add(Environment, Text.c_str(), core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), false, false, this, id);
StaticText->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
// END PATCH
}
@@ -62,25 +62,29 @@ GUIButton::~GUIButton()
SpriteBank->drop();
}
+
//! Sets if the images should be scaled to fit the button
void GUIButton::setScaleImage(bool scaleImage)
{
ScaleImage = scaleImage;
}
+
//! Returns whether the button scale the used images
bool GUIButton::isScalingImage() const
{
return ScaleImage;
}
+
//! Sets if the button should use the skin to draw its border
void GUIButton::setDrawBorder(bool border)
{
DrawBorder = border;
}
-void GUIButton::setSpriteBank(IGUISpriteBank *sprites)
+
+void GUIButton::setSpriteBank(IGUISpriteBank* sprites)
{
if (sprites)
sprites->grab();
@@ -91,12 +95,11 @@ void GUIButton::setSpriteBank(IGUISpriteBank *sprites)
SpriteBank = sprites;
}
-void GUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color,
- bool loop, bool scale)
+void GUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop, bool scale)
{
- ButtonSprites[(u32)state].Index = index;
- ButtonSprites[(u32)state].Color = color;
- ButtonSprites[(u32)state].Loop = loop;
+ ButtonSprites[(u32)state].Index = index;
+ ButtonSprites[(u32)state].Color = color;
+ ButtonSprites[(u32)state].Loop = loop;
ButtonSprites[(u32)state].Scale = scale;
}
@@ -125,16 +128,17 @@ bool GUIButton::getSpriteScale(EGUI_BUTTON_STATE state) const
}
//! called if an event happened.
-bool GUIButton::OnEvent(const SEvent &event)
+bool GUIButton::OnEvent(const SEvent& event)
{
if (!isEnabled())
return IGUIElement::OnEvent(event);
- switch (event.EventType) {
+ switch(event.EventType)
+ {
case EET_KEY_INPUT_EVENT:
if (event.KeyInput.PressedDown &&
- (event.KeyInput.Key == KEY_RETURN ||
- event.KeyInput.Key == KEY_SPACE)) {
+ (event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE))
+ {
if (!IsPushButton)
setPressed(true);
else
@@ -142,18 +146,21 @@ bool GUIButton::OnEvent(const SEvent &event)
return true;
}
- if (Pressed && !IsPushButton && event.KeyInput.PressedDown &&
- event.KeyInput.Key == KEY_ESCAPE) {
+ if (Pressed && !IsPushButton && event.KeyInput.PressedDown && event.KeyInput.Key == KEY_ESCAPE)
+ {
setPressed(false);
return true;
- } else if (!event.KeyInput.PressedDown && Pressed &&
- (event.KeyInput.Key == KEY_RETURN ||
- event.KeyInput.Key == KEY_SPACE)) {
+ }
+ else
+ if (!event.KeyInput.PressedDown && Pressed &&
+ (event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE))
+ {
if (!IsPushButton)
setPressed(false);
- if (Parent) {
+ if (Parent)
+ {
ClickShiftState = event.KeyInput.Shift;
ClickControlState = event.KeyInput.Control;
@@ -168,37 +175,43 @@ bool GUIButton::OnEvent(const SEvent &event)
}
break;
case EET_GUI_EVENT:
- if (event.GUIEvent.Caller == this) {
- if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) {
+ if (event.GUIEvent.Caller == this)
+ {
+ if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
+ {
if (!IsPushButton)
setPressed(false);
FocusTime = (u32)porting::getTimeMs();
- } else if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED) {
+ }
+ else if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED)
+ {
FocusTime = (u32)porting::getTimeMs();
- } else if (event.GUIEvent.EventType == EGET_ELEMENT_HOVERED ||
- event.GUIEvent.EventType == EGET_ELEMENT_LEFT) {
+ }
+ else if (event.GUIEvent.EventType == EGET_ELEMENT_HOVERED || event.GUIEvent.EventType == EGET_ELEMENT_LEFT)
+ {
HoverTime = (u32)porting::getTimeMs();
}
}
break;
case EET_MOUSE_INPUT_EVENT:
- if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
+ if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
+ {
// Sometimes formspec elements can receive mouse events when the
- // mouse is outside of the formspec. Thus, we test the position
- // here.
- if (!IsPushButton &&
- AbsoluteClippingRect.isPointInside(core::position2d<
- s32>(event.MouseInput.X,
- event.MouseInput.Y))) {
+ // mouse is outside of the formspec. Thus, we test the position here.
+ if ( !IsPushButton && AbsoluteClippingRect.isPointInside(
+ core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y ))) {
setPressed(true);
}
return true;
- } else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) {
+ }
+ else
+ if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
+ {
bool wasPressed = Pressed;
- if (!AbsoluteClippingRect.isPointInside(core::position2d<s32>(
- event.MouseInput.X, event.MouseInput.Y))) {
+ if ( !AbsoluteClippingRect.isPointInside( core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y ) ) )
+ {
if (!IsPushButton)
setPressed(false);
return true;
@@ -206,12 +219,14 @@ bool GUIButton::OnEvent(const SEvent &event)
if (!IsPushButton)
setPressed(false);
- else {
+ else
+ {
setPressed(!Pressed);
}
if ((!IsPushButton && wasPressed && Parent) ||
- (IsPushButton && wasPressed != Pressed)) {
+ (IsPushButton && wasPressed != Pressed))
+ {
ClickShiftState = event.MouseInput.Shift;
ClickControlState = event.MouseInput.Control;
@@ -233,6 +248,7 @@ bool GUIButton::OnEvent(const SEvent &event)
return Parent ? Parent->OnEvent(event) : false;
}
+
//! draws the element and its children
void GUIButton::draw()
{
@@ -247,17 +263,21 @@ void GUIButton::draw()
setFromState();
}
- GUISkin *skin = dynamic_cast<GUISkin *>(Environment->getSkin());
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());
+ video::IVideoDriver* driver = Environment->getVideoDriver();
// END PATCH
- if (DrawBorder) {
- if (!Pressed) {
+ if (DrawBorder)
+ {
+ if (!Pressed)
+ {
// PATCH
skin->drawColored3DButtonPaneStandard(this, AbsoluteRect,
&AbsoluteClippingRect, Colors);
// END PATCH
- } else {
+ }
+ else
+ {
// PATCH
skin->drawColored3DButtonPanePressed(this, AbsoluteRect,
&AbsoluteClippingRect, Colors);
@@ -270,108 +290,94 @@ void GUIButton::draw()
// The image changes based on the state, so we use the default every time.
EGUI_BUTTON_IMAGE_STATE imageState = EGBIS_IMAGE_UP;
// END PATCH
- if (ButtonImages[(u32)imageState].Texture) {
+ if ( ButtonImages[(u32)imageState].Texture )
+ {
core::position2d<s32> pos(buttonCenter);
core::rect<s32> sourceRect(ButtonImages[(u32)imageState].SourceRect);
- if (sourceRect.getWidth() == 0 && sourceRect.getHeight() == 0)
- sourceRect = core::rect<s32>(core::position2di(0, 0),
- ButtonImages[(u32)imageState]
- .Texture->getOriginalSize());
+ if ( sourceRect.getWidth() == 0 && sourceRect.getHeight() == 0 )
+ sourceRect = core::rect<s32>(core::position2di(0,0), ButtonImages[(u32)imageState].Texture->getOriginalSize());
pos.X -= sourceRect.getWidth() / 2;
pos.Y -= sourceRect.getHeight() / 2;
- if (Pressed) {
- // Create a pressed-down effect by moving the image when it looks
- // identical to the unpressed state image
+ if ( Pressed )
+ {
+ // Create a pressed-down effect by moving the image when it looks identical to the unpressed state image
EGUI_BUTTON_IMAGE_STATE unpressedState = getImageState(false);
- if (unpressedState == imageState ||
- ButtonImages[(u32)imageState] ==
- ButtonImages[(u32)unpressedState]) {
- pos.X += skin->getSize(
- EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X);
- pos.Y += skin->getSize(
- EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y);
+ if ( unpressedState == imageState || ButtonImages[(u32)imageState] == ButtonImages[(u32)unpressedState] )
+ {
+ pos.X += skin->getSize(EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X);
+ pos.Y += skin->getSize(EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y);
}
}
// PATCH
- video::ITexture *texture = ButtonImages[(u32)imageState].Texture;
+ video::ITexture* texture = ButtonImages[(u32)imageState].Texture;
if (BgMiddle.getArea() == 0) {
driver->draw2DImage(texture,
- ScaleImage ? AbsoluteRect
- : core::rect<s32>(pos,
- sourceRect.getSize()),
- sourceRect, &AbsoluteClippingRect, 0,
- UseAlphaChannel);
+ ScaleImage? AbsoluteRect : core::rect<s32>(pos, sourceRect.getSize()),
+ sourceRect, &AbsoluteClippingRect,
+ 0, UseAlphaChannel);
} else {
core::rect<s32> middle = BgMiddle;
// `-x` is interpreted as `w - x`
if (middle.LowerRightCorner.X < 0)
- middle.LowerRightCorner.X +=
- texture->getOriginalSize().Width;
+ middle.LowerRightCorner.X += texture->getOriginalSize().Width;
if (middle.LowerRightCorner.Y < 0)
- middle.LowerRightCorner.Y +=
- texture->getOriginalSize().Height;
+ middle.LowerRightCorner.Y += texture->getOriginalSize().Height;
draw2DImage9Slice(driver, texture,
- ScaleImage ? AbsoluteRect
- : core::rect<s32>(pos,
- sourceRect.getSize()),
+ ScaleImage ? AbsoluteRect : core::rect<s32>(pos, sourceRect.getSize()),
middle, &AbsoluteClippingRect);
}
// END PATCH
}
- if (SpriteBank) {
+ if (SpriteBank)
+ {
core::position2di pos(buttonCenter);
- if (isEnabled()) {
+ if (isEnabled())
+ {
// pressed / unpressed animation
- EGUI_BUTTON_STATE state =
- Pressed ? EGBS_BUTTON_DOWN : EGBS_BUTTON_UP;
+ EGUI_BUTTON_STATE state = Pressed ? EGBS_BUTTON_DOWN : EGBS_BUTTON_UP;
drawSprite(state, ClickTime, pos);
// focused / unfocused animation
- state = Environment->hasFocus(this) ? EGBS_BUTTON_FOCUSED
- : EGBS_BUTTON_NOT_FOCUSED;
+ state = Environment->hasFocus(this) ? EGBS_BUTTON_FOCUSED : EGBS_BUTTON_NOT_FOCUSED;
drawSprite(state, FocusTime, pos);
// mouse over / off animation
- state = isHovered() ? EGBS_BUTTON_MOUSE_OVER
- : EGBS_BUTTON_MOUSE_OFF;
+ state = isHovered() ? EGBS_BUTTON_MOUSE_OVER : EGBS_BUTTON_MOUSE_OFF;
drawSprite(state, HoverTime, pos);
- } else {
+ }
+ else
+ {
// draw disabled
- // drawSprite(EGBS_BUTTON_DISABLED, 0, pos);
+// drawSprite(EGBS_BUTTON_DISABLED, 0, pos);
}
}
IGUIElement::draw();
}
-void GUIButton::drawSprite(
- EGUI_BUTTON_STATE state, u32 startTime, const core::position2di &center)
+void GUIButton::drawSprite(EGUI_BUTTON_STATE state, u32 startTime, const core::position2di& center)
{
u32 stateIdx = (u32)state;
- if (ButtonSprites[stateIdx].Index != -1) {
- if (ButtonSprites[stateIdx].Scale) {
- const video::SColor colors[] = {ButtonSprites[stateIdx].Color,
- ButtonSprites[stateIdx].Color,
- ButtonSprites[stateIdx].Color,
- ButtonSprites[stateIdx].Color};
- SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index,
- AbsoluteRect.UpperLeftCorner,
- &AbsoluteClippingRect,
- colors[0], // FIXME: remove [0]
- porting::getTimeMs() - startTime,
- ButtonSprites[stateIdx].Loop);
- } else {
+ if (ButtonSprites[stateIdx].Index != -1)
+ {
+ if ( ButtonSprites[stateIdx].Scale )
+ {
+ const video::SColor colors[] = {ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color};
+ SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, AbsoluteRect.UpperLeftCorner,
+ &AbsoluteClippingRect, colors[0], // FIXME: remove [0]
+ porting::getTimeMs()-startTime, ButtonSprites[stateIdx].Loop);
+ }
+ else
+ {
SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, center,
- &AbsoluteClippingRect,
- ButtonSprites[stateIdx].Color, startTime,
- porting::getTimeMs(),
- ButtonSprites[stateIdx].Loop, true);
+ &AbsoluteClippingRect, ButtonSprites[stateIdx].Color, startTime, porting::getTimeMs(),
+ ButtonSprites[stateIdx].Loop, true);
}
}
}
@@ -383,30 +389,32 @@ EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(bool pressed) const
// END PATCH
}
-EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(
- bool pressed, const ButtonImage *images) const
+EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(bool pressed, const ButtonImage* images) const
{
// figure state we should have
EGUI_BUTTON_IMAGE_STATE state = EGBIS_IMAGE_DISABLED;
- bool focused = Environment->hasFocus((IGUIElement *)this);
+ bool focused = Environment->hasFocus((IGUIElement*)this);
bool mouseOver = isHovered();
- if (isEnabled()) {
- if (pressed) {
- if (focused && mouseOver)
+ if (isEnabled())
+ {
+ if ( pressed )
+ {
+ if ( focused && mouseOver )
state = EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER;
- else if (focused)
+ else if ( focused )
state = EGBIS_IMAGE_DOWN_FOCUSED;
- else if (mouseOver)
+ else if ( mouseOver )
state = EGBIS_IMAGE_DOWN_MOUSEOVER;
else
state = EGBIS_IMAGE_DOWN;
- } else // !pressed
+ }
+ else // !pressed
{
- if (focused && mouseOver)
+ if ( focused && mouseOver )
state = EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER;
- else if (focused)
+ else if ( focused )
state = EGBIS_IMAGE_UP_FOCUSED;
- else if (mouseOver)
+ else if ( mouseOver )
state = EGBIS_IMAGE_UP_MOUSEOVER;
else
state = EGBIS_IMAGE_UP;
@@ -414,32 +422,34 @@ EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(
}
// find a compatible state that has images
- while (state != EGBIS_IMAGE_UP && !images[(u32)state].Texture) {
+ while ( state != EGBIS_IMAGE_UP && !images[(u32)state].Texture )
+ {
// PATCH
- switch (state) {
- case EGBIS_IMAGE_UP_FOCUSED:
- state = EGBIS_IMAGE_UP;
- break;
- case EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER:
- state = EGBIS_IMAGE_UP_FOCUSED;
- break;
- case EGBIS_IMAGE_DOWN_MOUSEOVER:
- state = EGBIS_IMAGE_DOWN;
- break;
- case EGBIS_IMAGE_DOWN_FOCUSED:
- state = EGBIS_IMAGE_DOWN;
- break;
- case EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER:
- state = EGBIS_IMAGE_DOWN_FOCUSED;
- break;
- case EGBIS_IMAGE_DISABLED:
- if (pressed)
+ switch ( state )
+ {
+ case EGBIS_IMAGE_UP_FOCUSED:
+ state = EGBIS_IMAGE_UP;
+ break;
+ case EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER:
+ state = EGBIS_IMAGE_UP_FOCUSED;
+ break;
+ case EGBIS_IMAGE_DOWN_MOUSEOVER:
state = EGBIS_IMAGE_DOWN;
- else
+ break;
+ case EGBIS_IMAGE_DOWN_FOCUSED:
+ state = EGBIS_IMAGE_DOWN;
+ break;
+ case EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER:
+ state = EGBIS_IMAGE_DOWN_FOCUSED;
+ break;
+ case EGBIS_IMAGE_DISABLED:
+ if ( pressed )
+ state = EGBIS_IMAGE_DOWN;
+ else
+ state = EGBIS_IMAGE_UP;
+ break;
+ default:
state = EGBIS_IMAGE_UP;
- break;
- default:
- state = EGBIS_IMAGE_UP;
}
// END PATCH
}
@@ -447,9 +457,8 @@ EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(
return state;
}
-//! sets another skin independent font. if this is set to zero, the button uses the font
-//! of the skin.
-void GUIButton::setOverrideFont(IGUIFont *font)
+//! sets another skin independent font. if this is set to zero, the button uses the font of the skin.
+void GUIButton::setOverrideFont(IGUIFont* font)
{
if (OverrideFont == font)
return;
@@ -466,17 +475,17 @@ void GUIButton::setOverrideFont(IGUIFont *font)
}
//! Gets the override font (if any)
-IGUIFont *GUIButton::getOverrideFont() const
+IGUIFont * GUIButton::getOverrideFont() const
{
return OverrideFont;
}
//! Get the font which is used right now for drawing
-IGUIFont *GUIButton::getActiveFont() const
+IGUIFont* GUIButton::getActiveFont() const
{
- if (OverrideFont)
+ if ( OverrideFont )
return OverrideFont;
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (skin)
return skin->getFont(EGDF_BUTTON);
return 0;
@@ -506,17 +515,16 @@ bool GUIButton::isOverrideColorEnabled() const
return OverrideColorEnabled;
}
-void GUIButton::setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture *image,
- const core::rect<s32> &sourceRect)
+void GUIButton::setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image, const core::rect<s32>& sourceRect)
{
- if (state >= EGBIS_COUNT)
+ if ( state >= EGBIS_COUNT )
return;
- if (image)
+ if ( image )
image->grab();
u32 stateIdx = (u32)state;
- if (ButtonImages[stateIdx].Texture)
+ if ( ButtonImages[stateIdx].Texture )
ButtonImages[stateIdx].Texture->drop();
ButtonImages[stateIdx].Texture = image;
@@ -524,28 +532,28 @@ void GUIButton::setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture *image,
}
// PATCH
-void GUIButton::setImage(video::ITexture *image)
+void GUIButton::setImage(video::ITexture* image)
{
setImage(gui::EGBIS_IMAGE_UP, image);
}
-void GUIButton::setImage(video::ITexture *image, const core::rect<s32> &pos)
+void GUIButton::setImage(video::ITexture* image, const core::rect<s32>& pos)
{
setImage(gui::EGBIS_IMAGE_UP, image, pos);
}
-void GUIButton::setPressedImage(video::ITexture *image)
+void GUIButton::setPressedImage(video::ITexture* image)
{
setImage(gui::EGBIS_IMAGE_DOWN, image);
}
-void GUIButton::setPressedImage(video::ITexture *image, const core::rect<s32> &pos)
+void GUIButton::setPressedImage(video::ITexture* image, const core::rect<s32>& pos)
{
setImage(gui::EGBIS_IMAGE_DOWN, image, pos);
}
//! Sets the text displayed by the button
-void GUIButton::setText(const wchar_t *text)
+void GUIButton::setText(const wchar_t* text)
{
StaticText->setText(text);
@@ -561,6 +569,7 @@ void GUIButton::setIsPushButton(bool isPushButton)
IsPushButton = isPushButton;
}
+
//! Returns if the button is currently pressed
bool GUIButton::isPressed() const
{
@@ -572,110 +581,118 @@ bool GUIButton::isPressed() const
bool GUIButton::isHovered() const
{
IGUIElement *hovered = Environment->getHovered();
- return hovered == this || (hovered != nullptr && hovered->getParent() == this);
+ return hovered == this || (hovered != nullptr && hovered->getParent() == this);
}
// END PATCH
//! Sets the pressed state of the button if this is a pushbutton
void GUIButton::setPressed(bool pressed)
{
- if (Pressed != pressed) {
+ if (Pressed != pressed)
+ {
ClickTime = porting::getTimeMs();
Pressed = pressed;
setFromState();
}
}
+
//! Returns whether the button is a push button
bool GUIButton::isPushButton() const
{
return IsPushButton;
}
-//! Sets if the alpha channel should be used for drawing images on the button (default is
-//! false)
+
+//! Sets if the alpha channel should be used for drawing images on the button (default is false)
void GUIButton::setUseAlphaChannel(bool useAlphaChannel)
{
UseAlphaChannel = useAlphaChannel;
}
+
//! Returns if the alpha channel should be used for drawing images on the button
bool GUIButton::isAlphaChannelUsed() const
{
return UseAlphaChannel;
}
+
bool GUIButton::isDrawingBorder() const
{
return DrawBorder;
}
+
//! Writes attributes of the element.
-void GUIButton::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options = 0) const
+void GUIButton::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
{
- IGUIButton::serializeAttributes(out, options);
+ IGUIButton::serializeAttributes(out,options);
- out->addBool("PushButton", IsPushButton);
+ out->addBool ("PushButton", IsPushButton );
if (IsPushButton)
- out->addBool("Pressed", Pressed);
+ out->addBool("Pressed", Pressed);
- for (u32 i = 0; i < (u32)EGBIS_COUNT; ++i) {
- if (ButtonImages[i].Texture) {
- core::stringc name(GUIButtonImageStateNames[i]);
+ for ( u32 i=0; i<(u32)EGBIS_COUNT; ++i )
+ {
+ if ( ButtonImages[i].Texture )
+ {
+ core::stringc name( GUIButtonImageStateNames[i] );
out->addTexture(name.c_str(), ButtonImages[i].Texture);
name += "Rect";
out->addRect(name.c_str(), ButtonImages[i].SourceRect);
}
}
- out->addBool("UseAlphaChannel", UseAlphaChannel);
- out->addBool("Border", DrawBorder);
- out->addBool("ScaleImage", ScaleImage);
+ out->addBool ("UseAlphaChannel", UseAlphaChannel);
+ out->addBool ("Border", DrawBorder);
+ out->addBool ("ScaleImage", ScaleImage);
- for (u32 i = 0; i < (u32)EGBS_COUNT; ++i) {
- if (ButtonSprites[i].Index >= 0) {
- core::stringc nameIndex(GUIButtonStateNames[i]);
+ for ( u32 i=0; i<(u32)EGBS_COUNT; ++i )
+ {
+ if ( ButtonSprites[i].Index >= 0 )
+ {
+ core::stringc nameIndex( GUIButtonStateNames[i] );
nameIndex += "Index";
- out->addInt(nameIndex.c_str(), ButtonSprites[i].Index);
+ out->addInt(nameIndex.c_str(), ButtonSprites[i].Index );
- core::stringc nameColor(GUIButtonStateNames[i]);
+ core::stringc nameColor( GUIButtonStateNames[i] );
nameColor += "Color";
- out->addColor(nameColor.c_str(), ButtonSprites[i].Color);
+ out->addColor(nameColor.c_str(), ButtonSprites[i].Color );
- core::stringc nameLoop(GUIButtonStateNames[i]);
+ core::stringc nameLoop( GUIButtonStateNames[i] );
nameLoop += "Loop";
- out->addBool(nameLoop.c_str(), ButtonSprites[i].Loop);
+ out->addBool(nameLoop.c_str(), ButtonSprites[i].Loop );
- core::stringc nameScale(GUIButtonStateNames[i]);
+ core::stringc nameScale( GUIButtonStateNames[i] );
nameScale += "Scale";
- out->addBool(nameScale.c_str(), ButtonSprites[i].Scale);
+ out->addBool(nameScale.c_str(), ButtonSprites[i].Scale );
}
}
// out->addString ("OverrideFont", OverrideFont);
}
+
//! Reads attributes of the element
-void GUIButton::deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options = 0)
+void GUIButton::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
{
- IGUIButton::deserializeAttributes(in, options);
+ IGUIButton::deserializeAttributes(in,options);
- IsPushButton = in->getAttributeAsBool("PushButton");
- Pressed = IsPushButton ? in->getAttributeAsBool("Pressed") : false;
+ IsPushButton = in->getAttributeAsBool("PushButton");
+ Pressed = IsPushButton ? in->getAttributeAsBool("Pressed") : false;
core::rect<s32> rec = in->getAttributeAsRect("ImageRect");
if (rec.isValid())
- setImage(in->getAttributeAsTexture("Image"), rec);
+ setImage( in->getAttributeAsTexture("Image"), rec);
else
- setImage(in->getAttributeAsTexture("Image"));
+ setImage( in->getAttributeAsTexture("Image") );
rec = in->getAttributeAsRect("PressedImageRect");
if (rec.isValid())
- setPressedImage(in->getAttributeAsTexture("PressedImage"), rec);
+ setPressedImage( in->getAttributeAsTexture("PressedImage"), rec);
else
- setPressedImage(in->getAttributeAsTexture("PressedImage"));
+ setPressedImage( in->getAttributeAsTexture("PressedImage") );
setDrawBorder(in->getAttributeAsBool("Border"));
setUseAlphaChannel(in->getAttributeAsBool("UseAlphaChannel"));
@@ -687,19 +704,17 @@ void GUIButton::deserializeAttributes(
}
// PATCH
-GUIButton *GUIButton::addButton(IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
- IGUIElement *parent, s32 id, const wchar_t *text,
+GUIButton* GUIButton::addButton(IGUIEnvironment *environment,
+ const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement* parent, s32 id, const wchar_t* text,
const wchar_t *tooltiptext)
{
- GUIButton *button = new GUIButton(environment,
- parent ? parent : environment->getRootGUIElement(), id, rectangle,
- tsrc);
+ GUIButton* button = new GUIButton(environment, parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc);
if (text)
button->setText(text);
- if (tooltiptext)
- button->setToolTipText(tooltiptext);
+ if ( tooltiptext )
+ button->setToolTipText ( tooltiptext );
button->drop();
return button;
@@ -709,8 +724,7 @@ void GUIButton::setColor(video::SColor color)
{
float d = 0.65f;
for (size_t i = 0; i < 4; i++) {
- video::SColor base = Environment->getSkin()->getColor(
- (gui::EGUI_DEFAULT_COLOR)i);
+ video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
Colors[i] = base.getInterpolated(color, d);
}
}
@@ -730,7 +744,7 @@ void GUIButton::setFromState()
}
//! Set element properties from a StyleSpec
-void GUIButton::setFromStyle(const StyleSpec &style)
+void GUIButton::setFromStyle(const StyleSpec& style)
{
bool hovered = (style.getState() & StyleSpec::STATE_HOVERED) != 0;
bool pressed = (style.getState() & StyleSpec::STATE_PRESSED) != 0;
@@ -744,19 +758,17 @@ void GUIButton::setFromStyle(const StyleSpec &style)
if (!Styles[style.getState()].isNotDefault(StyleSpec::BGCOLOR)) {
for (size_t i = 0; i < 4; i++) {
if (pressed) {
- Colors[i] = multiplyColorValue(
- Colors[i], COLOR_PRESSED_MOD);
+ Colors[i] = multiplyColorValue(Colors[i], COLOR_PRESSED_MOD);
} else if (hovered) {
- Colors[i] = multiplyColorValue(
- Colors[i], COLOR_HOVERED_MOD);
+ Colors[i] = multiplyColorValue(Colors[i], COLOR_HOVERED_MOD);
}
}
}
} else {
for (size_t i = 0; i < 4; i++) {
- video::SColor base = Environment->getSkin()->getColor(
- (gui::EGUI_DEFAULT_COLOR)i);
+ video::SColor base =
+ Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
if (pressed) {
Colors[i] = multiplyColorValue(base, COLOR_PRESSED_MOD);
} else if (hovered) {
@@ -770,7 +782,7 @@ void GUIButton::setFromStyle(const StyleSpec &style)
if (style.isNotDefault(StyleSpec::TEXTCOLOR)) {
setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR));
} else {
- setOverrideColor(video::SColor(255, 255, 255, 255));
+ setOverrideColor(video::SColor(255,255,255,255));
OverrideColorEnabled = false;
}
setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
@@ -779,10 +791,11 @@ void GUIButton::setFromStyle(const StyleSpec &style)
setOverrideFont(style.getFont());
if (style.isNotDefault(StyleSpec::BGIMG)) {
- video::ITexture *texture =
- style.getTexture(StyleSpec::BGIMG, getTextureSource());
- setImage(guiScalingImageButton(Environment->getVideoDriver(), texture,
- AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
+ video::ITexture *texture = style.getTexture(StyleSpec::BGIMG,
+ getTextureSource());
+ setImage(guiScalingImageButton(
+ Environment->getVideoDriver(), texture,
+ AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
setScaleImage(true);
} else {
setImage(nullptr);
@@ -792,22 +805,23 @@ void GUIButton::setFromStyle(const StyleSpec &style)
// Child padding and offset
Padding = style.getRect(StyleSpec::PADDING, core::rect<s32>());
- Padding = core::rect<s32>(Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner,
+ Padding = core::rect<s32>(
+ Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner,
Padding.LowerRightCorner + BgMiddle.LowerRightCorner);
- GUISkin *skin = dynamic_cast<GUISkin *>(Environment->getSkin());
+ GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());
core::vector2d<s32> defaultPressOffset(
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
- ContentOffset = style.getVector2i(StyleSpec::CONTENT_OFFSET,
- isPressed() ? defaultPressOffset : core::vector2d<s32>(0));
+ ContentOffset = style.getVector2i(StyleSpec::CONTENT_OFFSET, isPressed()
+ ? defaultPressOffset
+ : core::vector2d<s32>(0));
- core::rect<s32> childBounds(Padding.UpperLeftCorner.X + ContentOffset.X,
- Padding.UpperLeftCorner.Y + ContentOffset.Y,
- AbsoluteRect.getWidth() + Padding.LowerRightCorner.X +
- ContentOffset.X,
- AbsoluteRect.getHeight() + Padding.LowerRightCorner.Y +
- ContentOffset.Y);
+ core::rect<s32> childBounds(
+ Padding.UpperLeftCorner.X + ContentOffset.X,
+ Padding.UpperLeftCorner.Y + ContentOffset.Y,
+ AbsoluteRect.getWidth() + Padding.LowerRightCorner.X + ContentOffset.X,
+ AbsoluteRect.getHeight() + Padding.LowerRightCorner.Y + ContentOffset.Y);
for (IGUIElement *child : getChildren()) {
child->setRelativePosition(childBounds);
@@ -815,7 +829,7 @@ void GUIButton::setFromStyle(const StyleSpec &style)
}
//! Set the styles used for each state
-void GUIButton::setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES> &styles)
+void GUIButton::setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES>& styles)
{
Styles = styles;
setFromState();
diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h
index cd0b4ec5f..95fa1a2a1 100644
--- a/src/gui/guiButton.h
+++ b/src/gui/guiButton.h
@@ -18,55 +18,52 @@
using namespace irr;
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
-namespace irr
-{
-namespace gui
-{
-
-//! State of buttons used for drawing texture images.
-//! Note that only a single state is active at a time
-//! Also when no image is defined for a state it will use images from another state
-//! and if that state is not set from the replacement for that,etc.
-//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
-enum EGUI_BUTTON_IMAGE_STATE
-{
- //! When no other states have images they will all use this one.
- EGBIS_IMAGE_UP,
- //! When not set EGBIS_IMAGE_UP is used.
- EGBIS_IMAGE_UP_MOUSEOVER,
- //! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
- EGBIS_IMAGE_UP_FOCUSED,
- //! When not set EGBIS_IMAGE_UP_FOCUSED is used.
- EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
- //! When not set EGBIS_IMAGE_UP is used.
- EGBIS_IMAGE_DOWN,
- //! When not set EGBIS_IMAGE_DOWN is used.
- EGBIS_IMAGE_DOWN_MOUSEOVER,
- //! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
- EGBIS_IMAGE_DOWN_FOCUSED,
- //! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
- EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
- //! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button
- //! state).
- EGBIS_IMAGE_DISABLED,
- //! not used, counts the number of enumerated items
- EGBIS_COUNT
-};
-
-//! Names for gui button image states
-const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
- "Image", // not "ImageUp" as it otherwise breaks serialization of old
- // files
- "ImageUpOver", "ImageUpFocused", "ImageUpFocusedOver",
- "PressedImage", // not "ImageDown" as it otherwise breaks serialization of
- // old files
- "ImageDownOver", "ImageDownFocused", "ImageDownFocusedOver",
- "ImageDisabled",
- 0 // count
-};
-
-}
-}
+ namespace irr { namespace gui {
+
+ //! State of buttons used for drawing texture images.
+ //! Note that only a single state is active at a time
+ //! Also when no image is defined for a state it will use images from another state
+ //! and if that state is not set from the replacement for that,etc.
+ //! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
+ enum EGUI_BUTTON_IMAGE_STATE {
+ //! When no other states have images they will all use this one.
+ EGBIS_IMAGE_UP,
+ //! When not set EGBIS_IMAGE_UP is used.
+ EGBIS_IMAGE_UP_MOUSEOVER,
+ //! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
+ EGBIS_IMAGE_UP_FOCUSED,
+ //! When not set EGBIS_IMAGE_UP_FOCUSED is used.
+ EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
+ //! When not set EGBIS_IMAGE_UP is used.
+ EGBIS_IMAGE_DOWN,
+ //! When not set EGBIS_IMAGE_DOWN is used.
+ EGBIS_IMAGE_DOWN_MOUSEOVER,
+ //! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
+ EGBIS_IMAGE_DOWN_FOCUSED,
+ //! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
+ EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
+ //! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button state).
+ EGBIS_IMAGE_DISABLED,
+ //! not used, counts the number of enumerated items
+ EGBIS_COUNT
+ };
+
+ //! Names for gui button image states
+ const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] =
+ {
+ "Image", // not "ImageUp" as it otherwise breaks serialization of old files
+ "ImageUpOver",
+ "ImageUpFocused",
+ "ImageUpFocusedOver",
+ "PressedImage", // not "ImageDown" as it otherwise breaks serialization of old files
+ "ImageDownOver",
+ "ImageDownFocused",
+ "ImageDownFocusedOver",
+ "ImageDisabled",
+ 0 // count
+ };
+
+ }}
#endif
@@ -75,29 +72,29 @@ class ISimpleTextureSource;
class GUIButton : public gui::IGUIButton
{
public:
+
//! constructor
- GUIButton(gui::IGUIEnvironment *environment, gui::IGUIElement *parent, s32 id,
- core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
- bool noclip = false);
+ GUIButton(gui::IGUIEnvironment* environment, gui::IGUIElement* parent,
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ bool noclip=false);
//! destructor
virtual ~GUIButton();
//! called if an event happened.
- virtual bool OnEvent(const SEvent &event) override;
+ virtual bool OnEvent(const SEvent& event) override;
//! draws the element and its children
virtual void draw() override;
- //! sets another skin independent font. if this is set to zero, the button uses
- //! the font of the skin.
- virtual void setOverrideFont(gui::IGUIFont *font = 0) override;
+ //! sets another skin independent font. if this is set to zero, the button uses the font of the skin.
+ virtual void setOverrideFont(gui::IGUIFont* font=0) override;
//! Gets the override font (if any)
- virtual gui::IGUIFont *getOverrideFont() const override;
+ virtual gui::IGUIFont* getOverrideFont() const override;
//! Get the font which is used right now for drawing
- virtual gui::IGUIFont *getActiveFont() const override;
+ virtual gui::IGUIFont* getActiveFont() const override;
//! Sets another color for the button text.
virtual void setOverrideColor(video::SColor color);
@@ -105,58 +102,49 @@ public:
//! Gets the override color
virtual video::SColor getOverrideColor(void) const;
- //! Sets if the button text should use the override color or the color in the gui
- //! skin.
+ //! Sets if the button text should use the override color or the color in the gui skin.
virtual void enableOverrideColor(bool enable);
//! Checks if an override color is enabled
virtual bool isOverrideColorEnabled(void) const;
// PATCH
- //! Sets an image which should be displayed on the button when it is in the given
- //! state.
+ //! Sets an image which should be displayed on the button when it is in the given state.
virtual void setImage(gui::EGUI_BUTTON_IMAGE_STATE state,
- video::ITexture *image = nullptr,
- const core::rect<s32> &sourceRect = core::rect<s32>(0, 0, 0, 0));
+ video::ITexture* image=nullptr,
+ const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0));
- //! Sets an image which should be displayed on the button when it is in normal
- //! state.
- virtual void setImage(video::ITexture *image = nullptr) override;
+ //! Sets an image which should be displayed on the button when it is in normal state.
+ virtual void setImage(video::ITexture* image=nullptr) override;
- //! Sets an image which should be displayed on the button when it is in normal
- //! state.
- virtual void setImage(
- video::ITexture *image, const core::rect<s32> &pos) override;
+ //! Sets an image which should be displayed on the button when it is in normal state.
+ virtual void setImage(video::ITexture* image, const core::rect<s32>& pos) override;
- //! Sets an image which should be displayed on the button when it is in pressed
- //! state.
- virtual void setPressedImage(video::ITexture *image = nullptr) override;
+ //! Sets an image which should be displayed on the button when it is in pressed state.
+ virtual void setPressedImage(video::ITexture* image=nullptr) override;
- //! Sets an image which should be displayed on the button when it is in pressed
- //! state.
- virtual void setPressedImage(
- video::ITexture *image, const core::rect<s32> &pos) override;
+ //! Sets an image which should be displayed on the button when it is in pressed state.
+ virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& pos) override;
//! Sets the text displayed by the button
- virtual void setText(const wchar_t *text) override;
+ virtual void setText(const wchar_t* text) override;
// END PATCH
//! Sets the sprite bank used by the button
- virtual void setSpriteBank(gui::IGUISpriteBank *bank = 0) override;
+ virtual void setSpriteBank(gui::IGUISpriteBank* bank=0) override;
//! Sets the animated sprite for a specific button state
- /** \param index: Number of the sprite within the sprite bank, use -1 for no
- sprite \param state: State of the button to set the sprite for \param index: The
- sprite number from the current sprite bank \param color: The color of the sprite
+ /** \param index: Number of the sprite within the sprite bank, use -1 for no sprite
+ \param state: State of the button to set the sprite for
+ \param index: The sprite number from the current sprite bank
+ \param color: The color of the sprite
*/
virtual void setSprite(gui::EGUI_BUTTON_STATE state, s32 index,
- video::SColor color = video::SColor(255, 255, 255, 255),
- bool loop = false, bool scale = false);
+ video::SColor color=video::SColor(255,255,255,255),
+ bool loop=false, bool scale=false);
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
- void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color,
- bool loop) override
- {
+ void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) override {
setSprite(state, index, color, loop, false);
}
#endif
@@ -164,8 +152,7 @@ public:
//! Get the sprite-index for the given state or -1 when no sprite is set
virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const;
- //! Get the sprite color for the given state. Color is only used when a sprite is
- //! set.
+ //! Get the sprite color for the given state. Color is only used when a sprite is set.
virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const;
//! Returns if the sprite in the given state does loop
@@ -177,13 +164,13 @@ public:
//! Sets if the button should behave like a push button. Which means it
//! can be in two states: Normal or Pressed. With a click on the button,
//! the user can change the state of the button.
- virtual void setIsPushButton(bool isPushButton = true) override;
+ virtual void setIsPushButton(bool isPushButton=true) override;
//! Checks whether the button is a push button
virtual bool isPushButton() const override;
//! Sets the pressed state of the button if this is a pushbutton
- virtual void setPressed(bool pressed = true) override;
+ virtual void setPressed(bool pressed=true) override;
//! Returns if the button is currently pressed
virtual bool isPressed() const override;
@@ -194,37 +181,42 @@ public:
// END PATCH
//! Sets if the button should use the skin to draw its border
- virtual void setDrawBorder(bool border = true) override;
+ virtual void setDrawBorder(bool border=true) override;
//! Checks if the button face and border are being drawn
virtual bool isDrawingBorder() const override;
- //! Sets if the alpha channel should be used for drawing images on the button
- //! (default is false)
- virtual void setUseAlphaChannel(bool useAlphaChannel = true) override;
+ //! Sets if the alpha channel should be used for drawing images on the button (default is false)
+ virtual void setUseAlphaChannel(bool useAlphaChannel=true) override;
//! Checks if the alpha channel should be used for drawing images on the button
virtual bool isAlphaChannelUsed() const override;
//! Sets if the button should scale the button images to fit
- virtual void setScaleImage(bool scaleImage = true) override;
+ virtual void setScaleImage(bool scaleImage=true) override;
//! Checks whether the button scales the used images
virtual bool isScalingImage() const override;
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickShiftState() const { return ClickShiftState; }
+ virtual bool getClickShiftState() const
+ {
+ return ClickShiftState;
+ }
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickControlState() const { return ClickControlState; }
+ virtual bool getClickControlState() const
+ {
+ return ClickControlState;
+ }
//! Writes attributes of the element.
- virtual void serializeAttributes(io::IAttributes *out,
- io::SAttributeReadWriteOptions *options) const override;
+ virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const override;
//! Reads attributes of the element
- virtual void deserializeAttributes(io::IAttributes *in,
- io::SAttributeReadWriteOptions *options) override;
+ virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) override;
+
+
void setColor(video::SColor color);
// PATCH
@@ -232,76 +224,79 @@ public:
void setFromState();
//! Set element properties from a StyleSpec
- virtual void setFromStyle(const StyleSpec &style);
+ virtual void setFromStyle(const StyleSpec& style);
//! Set the styles used for each state
- void setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES> &styles);
+ void setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES>& styles);
// END PATCH
+
//! Do not drop returned handle
- static GUIButton *addButton(gui::IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
- IGUIElement *parent, s32 id, const wchar_t *text,
- const wchar_t *tooltiptext = L"");
+ static GUIButton* addButton(gui::IGUIEnvironment *environment,
+ const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement* parent, s32 id, const wchar_t* text,
+ const wchar_t *tooltiptext=L"");
protected:
- void drawSprite(gui::EGUI_BUTTON_STATE state, u32 startTime,
- const core::position2di &center);
+ void drawSprite(gui::EGUI_BUTTON_STATE state, u32 startTime, const core::position2di& center);
gui::EGUI_BUTTON_IMAGE_STATE getImageState(bool pressed) const;
ISimpleTextureSource *getTextureSource() { return TSrc; }
struct ButtonImage
{
- ButtonImage() : Texture(0), SourceRect(core::rect<s32>(0, 0, 0, 0)) {}
+ ButtonImage() : Texture(0), SourceRect(core::rect<s32>(0,0,0,0))
+ {
+ }
- ButtonImage(const ButtonImage &other) :
- Texture(0), SourceRect(core::rect<s32>(0, 0, 0, 0))
+ ButtonImage(const ButtonImage& other) : Texture(0), SourceRect(core::rect<s32>(0,0,0,0))
{
*this = other;
}
~ButtonImage()
{
- if (Texture)
+ if ( Texture )
Texture->drop();
}
- ButtonImage &operator=(const ButtonImage &other)
+ ButtonImage& operator=(const ButtonImage& other)
{
- if (this == &other)
+ if ( this == &other )
return *this;
if (other.Texture)
other.Texture->grab();
- if (Texture)
+ if ( Texture )
Texture->drop();
Texture = other.Texture;
SourceRect = other.SourceRect;
return *this;
}
- bool operator==(const ButtonImage &other) const
+ bool operator==(const ButtonImage& other) const
{
return Texture == other.Texture && SourceRect == other.SourceRect;
}
- video::ITexture *Texture;
+
+ video::ITexture* Texture;
core::rect<s32> SourceRect;
};
- gui::EGUI_BUTTON_IMAGE_STATE getImageState(
- bool pressed, const ButtonImage *images) const;
+ gui::EGUI_BUTTON_IMAGE_STATE getImageState(bool pressed, const ButtonImage* images) const;
private:
+
struct ButtonSprite
{
- ButtonSprite() : Index(-1), Loop(false), Scale(false) {}
+ ButtonSprite() : Index(-1), Loop(false), Scale(false)
+ {
+ }
- bool operator==(const ButtonSprite &other) const
+ bool operator==(const ButtonSprite& other) const
{
- return Index == other.Index && Color == other.Color &&
- Loop == other.Loop && Scale == other.Scale;
+ return Index == other.Index && Color == other.Color && Loop == other.Loop && Scale == other.Scale;
}
s32 Index;
@@ -311,13 +306,13 @@ private:
};
ButtonSprite ButtonSprites[gui::EGBS_COUNT];
- gui::IGUISpriteBank *SpriteBank;
+ gui::IGUISpriteBank* SpriteBank;
ButtonImage ButtonImages[gui::EGBIS_COUNT];
std::array<StyleSpec, StyleSpec::NUM_STATES> Styles;
- gui::IGUIFont *OverrideFont;
+ gui::IGUIFont* OverrideFont;
bool OverrideColorEnabled;
video::SColor OverrideColor;
diff --git a/src/gui/guiButtonImage.cpp b/src/gui/guiButtonImage.cpp
index 2f574c1a8..b507ffece 100644
--- a/src/gui/guiButtonImage.cpp
+++ b/src/gui/guiButtonImage.cpp
@@ -31,12 +31,11 @@ using namespace gui;
GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment,
gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle,
- ISimpleTextureSource *tsrc, bool noclip) :
- GUIButton(environment, parent, id, rectangle, tsrc, noclip)
+ ISimpleTextureSource *tsrc, bool noclip)
+ : GUIButton (environment, parent, id, rectangle, tsrc, noclip)
{
- m_image = Environment->addImage(core::rect<s32>(0, 0, rectangle.getWidth(),
- rectangle.getHeight()),
- this);
+ m_image = Environment->addImage(
+ core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), this);
m_image->setScaleImage(isScalingImage());
sendToBack(m_image);
}
@@ -57,18 +56,18 @@ void GUIButtonImage::setForegroundImage(video::ITexture *image)
}
//! Set element properties from a StyleSpec
-void GUIButtonImage::setFromStyle(const StyleSpec &style)
+void GUIButtonImage::setFromStyle(const StyleSpec& style)
{
GUIButton::setFromStyle(style);
video::IVideoDriver *driver = Environment->getVideoDriver();
if (style.isNotDefault(StyleSpec::FGIMG)) {
- video::ITexture *texture =
- style.getTexture(StyleSpec::FGIMG, getTextureSource());
+ video::ITexture *texture = style.getTexture(StyleSpec::FGIMG,
+ getTextureSource());
setForegroundImage(guiScalingImageButton(driver, texture,
- AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
+ AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
setScaleImage(true);
} else {
setForegroundImage(nullptr);
@@ -87,8 +86,7 @@ GUIButtonImage *GUIButtonImage::addButton(IGUIEnvironment *environment,
const wchar_t *tooltiptext)
{
GUIButtonImage *button = new GUIButtonImage(environment,
- parent ? parent : environment->getRootGUIElement(), id, rectangle,
- tsrc);
+ parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc);
if (text)
button->setText(text);
diff --git a/src/gui/guiButtonImage.h b/src/gui/guiButtonImage.h
index c46ef36f0..59a25b4f0 100644
--- a/src/gui/guiButtonImage.h
+++ b/src/gui/guiButtonImage.h
@@ -35,9 +35,9 @@ public:
void setForegroundImage(video::ITexture *image = nullptr);
//! Set element properties from a StyleSpec
- virtual void setFromStyle(const StyleSpec &style) override;
+ virtual void setFromStyle(const StyleSpec& style) override;
- virtual void setScaleImage(bool scaleImage = true) override;
+ virtual void setScaleImage(bool scaleImage=true) override;
//! Do not drop returned handle
static GUIButtonImage *addButton(gui::IGUIEnvironment *environment,
diff --git a/src/gui/guiButtonItemImage.cpp b/src/gui/guiButtonItemImage.cpp
index bbd20582b..d8b9042ac 100644
--- a/src/gui/guiButtonItemImage.cpp
+++ b/src/gui/guiButtonItemImage.cpp
@@ -31,12 +31,11 @@ using namespace gui;
GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment,
gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle,
ISimpleTextureSource *tsrc, std::string item, Client *client,
- bool noclip) :
- GUIButton(environment, parent, id, rectangle, tsrc, noclip)
+ bool noclip)
+ : GUIButton (environment, parent, id, rectangle, tsrc, noclip)
{
m_image = new GUIItemImage(environment, this, id,
- core::rect<s32>(0, 0, rectangle.getWidth(),
- rectangle.getHeight()),
+ core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()),
item, getActiveFont(), client);
sendToBack(m_image);
@@ -50,8 +49,8 @@ GUIButtonItemImage *GUIButtonItemImage::addButton(IGUIEnvironment *environment,
Client *client)
{
GUIButtonItemImage *button = new GUIButtonItemImage(environment,
- parent ? parent : environment->getRootGUIElement(), id, rectangle,
- tsrc, item, client);
+ parent ? parent : environment->getRootGUIElement(),
+ id, rectangle, tsrc, item, client);
if (text)
button->setText(text);
diff --git a/src/gui/guiButtonItemImage.h b/src/gui/guiButtonItemImage.h
index bc93c08d2..aad923bda 100644
--- a/src/gui/guiButtonItemImage.h
+++ b/src/gui/guiButtonItemImage.h
@@ -38,8 +38,8 @@ public:
//! Do not drop returned handle
static GUIButtonItemImage *addButton(gui::IGUIEnvironment *environment,
const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
- IGUIElement *parent, s32 id, const wchar_t *text,
- std::string item, Client *client);
+ IGUIElement *parent, s32 id, const wchar_t *text, std::string item,
+ Client *client);
private:
std::string m_item_name;
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index 7170fad15..8de00c12f 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -32,20 +32,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#if USE_FREETYPE
-#include "irrlicht_changes/CGUITTFont.h"
+ #include "irrlicht_changes/CGUITTFont.h"
#endif
inline u32 clamp_u8(s32 value)
{
- return (u32)MYMIN(MYMAX(value, 0), 255);
+ return (u32) MYMIN(MYMAX(value, 0), 255);
}
-GUIChatConsole::GUIChatConsole(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, ChatBackend *backend, Client *client, IMenuManager *menumgr) :
- IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
- core::rect<s32>(0, 0, 100, 100)),
- m_chat_backend(backend), m_client(client), m_menumgr(menumgr),
- m_animate_time_old(porting::getTimeMs())
+
+GUIChatConsole::GUIChatConsole(
+ gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent,
+ s32 id,
+ ChatBackend* backend,
+ Client* client,
+ IMenuManager* menumgr
+):
+ IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
+ core::rect<s32>(0,0,100,100)),
+ m_chat_backend(backend),
+ m_client(client),
+ m_menumgr(menumgr),
+ m_animate_time_old(porting::getTimeMs())
{
// load background settings
s32 console_alpha = g_settings->getS32("console_alpha");
@@ -66,9 +75,8 @@ GUIChatConsole::GUIChatConsole(gui::IGUIEnvironment *env, gui::IGUIElement *pare
}
u16 chat_font_size = g_settings->getU16("chat_font_size");
- m_font = g_fontengine->getFont(
- chat_font_size != 0 ? chat_font_size : FONT_SIZE_UNSPECIFIED,
- FM_Mono);
+ m_font = g_fontengine->getFont(chat_font_size != 0 ?
+ chat_font_size : FONT_SIZE_UNSPECIFIED, FM_Mono);
if (!m_font) {
errorstream << "GUIChatConsole: Unable to load mono font" << std::endl;
@@ -135,24 +143,31 @@ f32 GUIChatConsole::getDesiredHeight() const
void GUIChatConsole::replaceAndAddToHistory(const std::wstring &line)
{
- ChatPrompt &prompt = m_chat_backend->getPrompt();
+ ChatPrompt& prompt = m_chat_backend->getPrompt();
prompt.addToHistory(prompt.getLine());
prompt.replace(line);
}
+
void GUIChatConsole::setCursor(
- bool visible, bool blinking, f32 blink_speed, f32 relative_height)
+ bool visible, bool blinking, f32 blink_speed, f32 relative_height)
{
- if (visible) {
- if (blinking) {
+ if (visible)
+ {
+ if (blinking)
+ {
// leave m_cursor_blink unchanged
m_cursor_blink_speed = blink_speed;
- } else {
- m_cursor_blink = 0x8000; // on
+ }
+ else
+ {
+ m_cursor_blink = 0x8000; // on
m_cursor_blink_speed = 0.0;
}
- } else {
- m_cursor_blink = 0; // off
+ }
+ else
+ {
+ m_cursor_blink = 0; // off
m_cursor_blink_speed = 0.0;
}
m_cursor_height = relative_height;
@@ -160,14 +175,15 @@ void GUIChatConsole::setCursor(
void GUIChatConsole::draw()
{
- if (!IsVisible)
+ if(!IsVisible)
return;
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
// Check screen size
v2u32 screensize = driver->getScreenSize();
- if (screensize != m_screensize) {
+ if (screensize != m_screensize)
+ {
// screen size has changed
// scale current console height to new window size
if (m_screensize.Y != 0)
@@ -183,7 +199,8 @@ void GUIChatConsole::draw()
m_animate_time_old = now;
// Draw console elements if visible
- if (m_height > 0) {
+ if (m_height > 0)
+ {
drawBackground();
drawText();
drawPrompt();
@@ -194,8 +211,7 @@ void GUIChatConsole::draw()
void GUIChatConsole::reformatConsole()
{
- s32 cols = m_screensize.X / m_fontsize.X -
- 2; // make room for a margin (looks better)
+ s32 cols = m_screensize.X / m_fontsize.X - 2; // make room for a margin (looks better)
s32 rows = m_desired_height / m_fontsize.Y - 1; // make room for the input prompt
if (cols <= 0 || rows <= 0)
cols = rows = 0;
@@ -216,24 +232,27 @@ void GUIChatConsole::animate(u32 msec)
s32 goal = m_open ? m_desired_height : 0;
// Set invisible if close animation finished (reset by openConsole)
- // This function (animate()) is never called once its visibility becomes false so
- // do not
+ // This function (animate()) is never called once its visibility becomes false so do not
// actually set visible to false before the inhibited period is over
if (!m_open && m_height == 0 && m_open_inhibited == 0)
IGUIElement::setVisible(false);
- if (m_height != goal) {
+ if (m_height != goal)
+ {
s32 max_change = msec * m_screensize.Y * (m_height_speed / 1000.0);
if (max_change == 0)
max_change = 1;
- if (m_height < goal) {
+ if (m_height < goal)
+ {
// increase height
if (m_height + max_change < goal)
m_height += max_change;
else
m_height = goal;
- } else {
+ }
+ else
+ {
// decrease height
if (m_height > goal + max_change)
m_height -= max_change;
@@ -245,7 +264,8 @@ void GUIChatConsole::animate(u32 msec)
}
// blink the cursor
- if (m_cursor_blink_speed != 0.0) {
+ if (m_cursor_blink_speed != 0.0)
+ {
u32 blink_increase = 0x10000 * msec * (m_cursor_blink_speed / 1000.0);
if (blink_increase == 0)
blink_increase = 1;
@@ -261,15 +281,24 @@ void GUIChatConsole::animate(u32 msec)
void GUIChatConsole::drawBackground()
{
- video::IVideoDriver *driver = Environment->getVideoDriver();
- if (m_background != NULL) {
+ video::IVideoDriver* driver = Environment->getVideoDriver();
+ if (m_background != NULL)
+ {
core::rect<s32> sourcerect(0, -m_height, m_screensize.X, 0);
- driver->draw2DImage(m_background, v2s32(0, 0), sourcerect,
- &AbsoluteClippingRect, m_background_color, false);
- } else {
- driver->draw2DRectangle(m_background_color,
- core::rect<s32>(0, 0, m_screensize.X, m_height),
- &AbsoluteClippingRect);
+ driver->draw2DImage(
+ m_background,
+ v2s32(0, 0),
+ sourcerect,
+ &AbsoluteClippingRect,
+ m_background_color,
+ false);
+ }
+ else
+ {
+ driver->draw2DRectangle(
+ m_background_color,
+ core::rect<s32>(0, 0, m_screensize.X, m_height),
+ &AbsoluteClippingRect);
}
}
@@ -278,9 +307,10 @@ void GUIChatConsole::drawText()
if (m_font == NULL)
return;
- ChatBuffer &buf = m_chat_backend->getConsoleBuffer();
- for (u32 row = 0; row < buf.getRows(); ++row) {
- const ChatFormattedLine &line = buf.getFormattedLine(row);
+ ChatBuffer& buf = m_chat_backend->getConsoleBuffer();
+ for (u32 row = 0; row < buf.getRows(); ++row)
+ {
+ const ChatFormattedLine& line = buf.getFormattedLine(row);
if (line.fragments.empty())
continue;
@@ -291,26 +321,31 @@ void GUIChatConsole::drawText()
for (const ChatFormattedFragment &fragment : line.fragments) {
s32 x = (fragment.column + 1) * m_fontsize.X;
- core::rect<s32> destrect(x, y,
- x + m_fontsize.X * fragment.text.size(),
- y + m_fontsize.Y);
+ core::rect<s32> destrect(
+ x, y, x + m_fontsize.X * fragment.text.size(), y + m_fontsize.Y);
#if USE_FREETYPE
if (m_font->getType() == irr::gui::EGFT_CUSTOM) {
// Draw colored text if FreeType is enabled
- irr::gui::CGUITTFont *tmp =
- dynamic_cast<irr::gui::CGUITTFont *>(
- m_font);
- tmp->draw(fragment.text, destrect,
- video::SColor(255, 255, 255, 255), false,
- false, &AbsoluteClippingRect);
- } else
+ irr::gui::CGUITTFont *tmp = dynamic_cast<irr::gui::CGUITTFont *>(m_font);
+ tmp->draw(
+ fragment.text,
+ destrect,
+ video::SColor(255, 255, 255, 255),
+ false,
+ false,
+ &AbsoluteClippingRect);
+ } else
#endif
{
// Otherwise use standard text
- m_font->draw(fragment.text.c_str(), destrect,
- video::SColor(255, 255, 255, 255), false,
- false, &AbsoluteClippingRect);
+ m_font->draw(
+ fragment.text.c_str(),
+ destrect,
+ video::SColor(255, 255, 255, 255),
+ false,
+ false,
+ &AbsoluteClippingRect);
}
}
}
@@ -325,44 +360,58 @@ void GUIChatConsole::drawPrompt()
s32 line_height = m_fontsize.Y;
s32 y = row * line_height + m_height - m_desired_height;
- ChatPrompt &prompt = m_chat_backend->getPrompt();
+ ChatPrompt& prompt = m_chat_backend->getPrompt();
std::wstring prompt_text = prompt.getVisiblePortion();
// FIXME Draw string at once, not character by character
// That will only work with the cursor once we have a monospace font
- for (u32 i = 0; i < prompt_text.size(); ++i) {
+ for (u32 i = 0; i < prompt_text.size(); ++i)
+ {
wchar_t ws[2] = {prompt_text[i], 0};
s32 x = (1 + i) * m_fontsize.X;
- core::rect<s32> destrect(x, y, x + m_fontsize.X, y + m_fontsize.Y);
- m_font->draw(ws, destrect, video::SColor(255, 255, 255, 255), false,
- false, &AbsoluteClippingRect);
+ core::rect<s32> destrect(
+ x, y, x + m_fontsize.X, y + m_fontsize.Y);
+ m_font->draw(
+ ws,
+ destrect,
+ video::SColor(255, 255, 255, 255),
+ false,
+ false,
+ &AbsoluteClippingRect);
}
// Draw the cursor during on periods
- if ((m_cursor_blink & 0x8000) != 0) {
+ if ((m_cursor_blink & 0x8000) != 0)
+ {
s32 cursor_pos = prompt.getVisibleCursorPosition();
- if (cursor_pos >= 0) {
+ if (cursor_pos >= 0)
+ {
s32 cursor_len = prompt.getCursorLength();
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
s32 x = (1 + cursor_pos) * m_fontsize.X;
- core::rect<s32> destrect(x,
- y + m_fontsize.Y * (1.0 - m_cursor_height),
- x + m_fontsize.X * MYMAX(cursor_len, 1),
- y + m_fontsize.Y * (cursor_len ? m_cursor_height + 1
- : 1));
- video::SColor cursor_color(255, 255, 255, 255);
+ core::rect<s32> destrect(
+ x,
+ y + m_fontsize.Y * (1.0 - m_cursor_height),
+ x + m_fontsize.X * MYMAX(cursor_len, 1),
+ y + m_fontsize.Y * (cursor_len ? m_cursor_height+1 : 1)
+ );
+ video::SColor cursor_color(255,255,255,255);
driver->draw2DRectangle(
- cursor_color, destrect, &AbsoluteClippingRect);
+ cursor_color,
+ destrect,
+ &AbsoluteClippingRect);
}
}
+
}
-bool GUIChatConsole::OnEvent(const SEvent &event)
+bool GUIChatConsole::OnEvent(const SEvent& event)
{
ChatPrompt &prompt = m_chat_backend->getPrompt();
- if (event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown) {
+ if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
+ {
// Key input
if (KeyPress(event.KeyInput) == getKeySetting("keymap_console")) {
closeConsole();
@@ -377,16 +426,21 @@ bool GUIChatConsole::OnEvent(const SEvent &event)
closeConsoleAtOnce();
m_close_on_enter = false;
// inhibit open so the_game doesn't reopen immediately
- m_open_inhibited = 1; // so the ESCAPE button doesn't open the
- // "pause menu"
+ m_open_inhibited = 1; // so the ESCAPE button doesn't open the "pause menu"
return true;
- } else if (event.KeyInput.Key == KEY_PRIOR) {
+ }
+ else if(event.KeyInput.Key == KEY_PRIOR)
+ {
m_chat_backend->scrollPageUp();
return true;
- } else if (event.KeyInput.Key == KEY_NEXT) {
+ }
+ else if(event.KeyInput.Key == KEY_NEXT)
+ {
m_chat_backend->scrollPageDown();
return true;
- } else if (event.KeyInput.Key == KEY_RETURN) {
+ }
+ else if(event.KeyInput.Key == KEY_RETURN)
+ {
prompt.addToHistory(prompt.getLine());
std::wstring text = prompt.replace(L"");
m_client->typeChatMessage(text);
@@ -395,76 +449,97 @@ bool GUIChatConsole::OnEvent(const SEvent &event)
m_close_on_enter = false;
}
return true;
- } else if (event.KeyInput.Key == KEY_UP) {
+ }
+ else if(event.KeyInput.Key == KEY_UP)
+ {
// Up pressed
// Move back in history
prompt.historyPrev();
return true;
- } else if (event.KeyInput.Key == KEY_DOWN) {
+ }
+ else if(event.KeyInput.Key == KEY_DOWN)
+ {
// Down pressed
// Move forward in history
prompt.historyNext();
return true;
- } else if (event.KeyInput.Key == KEY_LEFT ||
- event.KeyInput.Key == KEY_RIGHT) {
+ }
+ else if(event.KeyInput.Key == KEY_LEFT || event.KeyInput.Key == KEY_RIGHT)
+ {
// Left/right pressed
- // Move/select character/word to the left depending on control and
- // shift keys
- ChatPrompt::CursorOp op =
- event.KeyInput.Shift ? ChatPrompt::CURSOROP_SELECT
- : ChatPrompt::CURSOROP_MOVE;
- ChatPrompt::CursorOpDir dir =
- event.KeyInput.Key == KEY_LEFT
- ? ChatPrompt::CURSOROP_DIR_LEFT
- : ChatPrompt::CURSOROP_DIR_RIGHT;
- ChatPrompt::CursorOpScope scope =
- event.KeyInput.Control
- ? ChatPrompt::CURSOROP_SCOPE_WORD
- : ChatPrompt::CURSOROP_SCOPE_CHARACTER;
+ // Move/select character/word to the left depending on control and shift keys
+ ChatPrompt::CursorOp op = event.KeyInput.Shift ?
+ ChatPrompt::CURSOROP_SELECT :
+ ChatPrompt::CURSOROP_MOVE;
+ ChatPrompt::CursorOpDir dir = event.KeyInput.Key == KEY_LEFT ?
+ ChatPrompt::CURSOROP_DIR_LEFT :
+ ChatPrompt::CURSOROP_DIR_RIGHT;
+ ChatPrompt::CursorOpScope scope = event.KeyInput.Control ?
+ ChatPrompt::CURSOROP_SCOPE_WORD :
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER;
prompt.cursorOperation(op, dir, scope);
return true;
- } else if (event.KeyInput.Key == KEY_HOME) {
+ }
+ else if(event.KeyInput.Key == KEY_HOME)
+ {
// Home pressed
// move to beginning of line
- prompt.cursorOperation(ChatPrompt::CURSOROP_MOVE,
- ChatPrompt::CURSOROP_DIR_LEFT,
- ChatPrompt::CURSOROP_SCOPE_LINE);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
return true;
- } else if (event.KeyInput.Key == KEY_END) {
+ }
+ else if(event.KeyInput.Key == KEY_END)
+ {
// End pressed
// move to end of line
- prompt.cursorOperation(ChatPrompt::CURSOROP_MOVE,
- ChatPrompt::CURSOROP_DIR_RIGHT,
- ChatPrompt::CURSOROP_SCOPE_LINE);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
return true;
- } else if (event.KeyInput.Key == KEY_BACK) {
+ }
+ else if(event.KeyInput.Key == KEY_BACK)
+ {
// Backspace or Ctrl-Backspace pressed
// delete character / word to the left
ChatPrompt::CursorOpScope scope =
- event.KeyInput.Control
- ? ChatPrompt::CURSOROP_SCOPE_WORD
- : ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_LEFT, scope);
+ event.KeyInput.Control ?
+ ChatPrompt::CURSOROP_SCOPE_WORD :
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER;
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ scope);
return true;
- } else if (event.KeyInput.Key == KEY_DELETE) {
+ }
+ else if(event.KeyInput.Key == KEY_DELETE)
+ {
// Delete or Ctrl-Delete pressed
// delete character / word to the right
ChatPrompt::CursorOpScope scope =
- event.KeyInput.Control
- ? ChatPrompt::CURSOROP_SCOPE_WORD
- : ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_RIGHT, scope);
+ event.KeyInput.Control ?
+ ChatPrompt::CURSOROP_SCOPE_WORD :
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER;
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ scope);
return true;
- } else if (event.KeyInput.Key == KEY_KEY_A && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_A && event.KeyInput.Control)
+ {
// Ctrl-A pressed
// Select all text
- prompt.cursorOperation(ChatPrompt::CURSOROP_SELECT,
- ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
- ChatPrompt::CURSOROP_SCOPE_LINE);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_SELECT,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_LINE);
return true;
- } else if (event.KeyInput.Key == KEY_KEY_C && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_C && event.KeyInput.Control)
+ {
// Ctrl-C pressed
// Copy text to clipboard
if (prompt.getCursorLength() <= 0)
@@ -473,23 +548,28 @@ bool GUIChatConsole::OnEvent(const SEvent &event)
std::string selected(wselected.begin(), wselected.end());
Environment->getOSOperator()->copyToClipboard(selected.c_str());
return true;
- } else if (event.KeyInput.Key == KEY_KEY_V && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_V && event.KeyInput.Control)
+ {
// Ctrl-V pressed
// paste text from clipboard
if (prompt.getCursorLength() > 0) {
// Delete selected section of text
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
- ChatPrompt::CURSOROP_SCOPE_SELECTION);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_SELECTION);
}
IOSOperator *os_operator = Environment->getOSOperator();
const c8 *text = os_operator->getTextFromClipboard();
if (!text)
return true;
- std::basic_string<unsigned char> str((const unsigned char *)text);
+ std::basic_string<unsigned char> str((const unsigned char*)text);
prompt.input(std::wstring(str.begin(), str.end()));
return true;
- } else if (event.KeyInput.Key == KEY_KEY_X && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_X && event.KeyInput.Control)
+ {
// Ctrl-X pressed
// Cut text to clipboard
if (prompt.getCursorLength() <= 0)
@@ -497,45 +577,55 @@ bool GUIChatConsole::OnEvent(const SEvent &event)
std::wstring wselected = prompt.getSelection();
std::string selected(wselected.begin(), wselected.end());
Environment->getOSOperator()->copyToClipboard(selected.c_str());
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
- ChatPrompt::CURSOROP_SCOPE_SELECTION);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_SELECTION);
return true;
- } else if (event.KeyInput.Key == KEY_KEY_U && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_U && event.KeyInput.Control)
+ {
// Ctrl-U pressed
// kill line to left end
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_LEFT,
- ChatPrompt::CURSOROP_SCOPE_LINE);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
return true;
- } else if (event.KeyInput.Key == KEY_KEY_K && event.KeyInput.Control) {
+ }
+ else if(event.KeyInput.Key == KEY_KEY_K && event.KeyInput.Control)
+ {
// Ctrl-K pressed
// kill line to right end
- prompt.cursorOperation(ChatPrompt::CURSOROP_DELETE,
- ChatPrompt::CURSOROP_DIR_RIGHT,
- ChatPrompt::CURSOROP_SCOPE_LINE);
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
return true;
- } else if (event.KeyInput.Key == KEY_TAB) {
+ }
+ else if(event.KeyInput.Key == KEY_TAB)
+ {
// Tab or Shift-Tab pressed
// Nick completion
- std::list<std::string> names =
- m_client->getConnectedPlayerNames();
+ std::list<std::string> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
prompt.nickCompletion(names, backwards);
return true;
} else if (!iswcntrl(event.KeyInput.Char) && !event.KeyInput.Control) {
-#if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9)
- wchar_t wc = L'_';
- mbtowc(&wc, (char *)&event.KeyInput.Char,
- sizeof(event.KeyInput.Char));
- prompt.input(wc);
-#else
- prompt.input(event.KeyInput.Char);
-#endif
+ #if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9)
+ wchar_t wc = L'_';
+ mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
+ prompt.input(wc);
+ #else
+ prompt.input(event.KeyInput.Char);
+ #endif
return true;
}
- } else if (event.EventType == EET_MOUSE_INPUT_EVENT) {
- if (event.MouseInput.Event == EMIE_MOUSE_WHEEL) {
+ }
+ else if(event.EventType == EET_MOUSE_INPUT_EVENT)
+ {
+ if(event.MouseInput.Event == EMIE_MOUSE_WHEEL)
+ {
s32 rows = myround(-3.0 * event.MouseInput.Wheel);
m_chat_backend->scroll(rows);
}
@@ -553,3 +643,4 @@ void GUIChatConsole::setVisible(bool visible)
recalculateConsolePosition();
}
}
+
diff --git a/src/gui/guiChatConsole.h b/src/gui/guiChatConsole.h
index adf89e88c..7be40e27c 100644
--- a/src/gui/guiChatConsole.h
+++ b/src/gui/guiChatConsole.h
@@ -29,8 +29,12 @@ class Client;
class GUIChatConsole : public gui::IGUIElement
{
public:
- GUIChatConsole(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- ChatBackend *backend, Client *client, IMenuManager *menumgr);
+ GUIChatConsole(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent,
+ s32 id,
+ ChatBackend* backend,
+ Client* client,
+ IMenuManager* menumgr);
virtual ~GUIChatConsole();
// Open the console (height = desired fraction of screen size)
@@ -59,15 +63,18 @@ public:
void replaceAndAddToHistory(const std::wstring &line);
// Change how the cursor looks
- void setCursor(bool visible, bool blinking = false, f32 blink_speed = 1.0,
- f32 relative_height = 1.0);
+ void setCursor(
+ bool visible,
+ bool blinking = false,
+ f32 blink_speed = 1.0,
+ f32 relative_height = 1.0);
// Irrlicht draw method
virtual void draw();
- bool canTakeFocus(gui::IGUIElement *element) { return false; }
+ bool canTakeFocus(gui::IGUIElement* element) { return false; }
- virtual bool OnEvent(const SEvent &event);
+ virtual bool OnEvent(const SEvent& event);
virtual void setVisible(bool visible);
@@ -82,9 +89,9 @@ private:
void drawPrompt();
private:
- ChatBackend *m_chat_backend;
- Client *m_client;
- IMenuManager *m_menumgr;
+ ChatBackend* m_chat_backend;
+ Client* m_client;
+ IMenuManager* m_menumgr;
// current screen size
v2u32 m_screensize;
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
index d4679b5dc..55c111df8 100644
--- a/src/gui/guiConfirmRegistration.cpp
+++ b/src/gui/guiConfirmRegistration.cpp
@@ -39,8 +39,8 @@ const int ID_message = 266;
GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client,
- const std::string &playername, const std::string &password, bool *aborted,
- ISimpleTextureSource *tsrc) :
+ const std::string &playername, const std::string &password,
+ bool *aborted, ISimpleTextureSource *tsrc) :
GUIModalMenu(env, parent, id, menumgr),
m_client(client), m_playername(playername), m_password(password),
m_aborted(aborted), m_tsrc(tsrc)
@@ -74,9 +74,12 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
Calculate new sizes and positions
*/
const float s = m_gui_scale;
- DesiredRect = core::rect<s32>(screensize.X / 2 - 600 * s / 2,
- screensize.Y / 2 - 360 * s / 2, screensize.X / 2 + 600 * s / 2,
- screensize.Y / 2 + 360 * s / 2);
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 600 * s / 2,
+ screensize.Y / 2 - 360 * s / 2,
+ screensize.X / 2 + 600 * s / 2,
+ screensize.Y / 2 + 360 * s / 2
+ );
recalculateAbsolutePosition(false);
v2s32 size = DesiredRect.getSize();
@@ -92,14 +95,11 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
core::rect<s32> rect2(0, 0, 540 * s, 180 * s);
rect2 += topleft_client + v2s32(30 * s, ypos);
static const std::string info_text_template = strgettext(
- "You are about to join this server with the name \"%s\" "
- "for the "
+ "You are about to join this server with the name \"%s\" for the "
"first time.\n"
- "If you proceed, a new account using your credentials "
- "will be "
+ "If you proceed, a new account using your credentials will be "
"created on this server.\n"
- "Please retype your password and click 'Register and "
- "Join' to "
+ "Please retype your password and click 'Register and Join' to "
"confirm account creation, or click 'Cancel' to abort.");
char info_text_buf[1024];
porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
@@ -223,7 +223,7 @@ bool GUIConfirmRegistration::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
infostream << "GUIConfirmRegistration: Not allowing focus change."
- << std::endl;
+ << std::endl;
// Returning true disables focus change
return true;
}
diff --git a/src/gui/guiEditBoxWithScrollbar.cpp b/src/gui/guiEditBoxWithScrollbar.cpp
index c803ba58c..442406688 100644
--- a/src/gui/guiEditBoxWithScrollbar.cpp
+++ b/src/gui/guiEditBoxWithScrollbar.cpp
@@ -17,30 +17,31 @@
todo:
optional scrollbars [done]
ctrl+left/right to select word
-double click/ctrl click: word select + drag to select whole words, triple click to select
-line optional? dragging selected text numerical
+double click/ctrl click: word select + drag to select whole words, triple click to select line
+optional? dragging selected text
+numerical
*/
+
//! constructor
-GUIEditBoxWithScrollBar::GUIEditBoxWithScrollBar(const wchar_t *text, bool border,
- IGUIEnvironment *environment, IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, bool writable, bool has_vscrollbar) :
- IGUIEditBox(environment, parent, id, rectangle),
- m_mouse_marking(false), m_border(border), m_background(true),
- m_override_color_enabled(false), m_mark_begin(0), m_mark_end(0),
- m_override_color(video::SColor(101, 255, 255, 255)), m_override_font(0),
- m_last_break_font(0), m_operator(0), m_blink_start_time(0),
- m_cursor_pos(0), m_hscroll_pos(0), m_vscroll_pos(0), m_max(0),
- m_word_wrap(false), m_multiline(false), m_autoscroll(true),
- m_passwordbox(false), m_passwordchar(L'*'), m_halign(EGUIA_UPPERLEFT),
- m_valign(EGUIA_CENTER), m_current_text_rect(0, 0, 1, 1),
- m_frame_rect(rectangle), m_scrollbar_width(0), m_vscrollbar(NULL),
- m_writable(writable), m_bg_color_used(false)
+GUIEditBoxWithScrollBar::GUIEditBoxWithScrollBar(const wchar_t* text, bool border,
+ IGUIEnvironment* environment, IGUIElement* parent, s32 id,
+ const core::rect<s32>& rectangle, bool writable, bool has_vscrollbar)
+ : IGUIEditBox(environment, parent, id, rectangle), m_mouse_marking(false),
+ m_border(border), m_background(true), m_override_color_enabled(false), m_mark_begin(0), m_mark_end(0),
+ m_override_color(video::SColor(101, 255, 255, 255)), m_override_font(0), m_last_break_font(0),
+ m_operator(0), m_blink_start_time(0), m_cursor_pos(0), m_hscroll_pos(0), m_vscroll_pos(0), m_max(0),
+ m_word_wrap(false), m_multiline(false), m_autoscroll(true), m_passwordbox(false),
+ m_passwordchar(L'*'), m_halign(EGUIA_UPPERLEFT), m_valign(EGUIA_CENTER),
+ m_current_text_rect(0, 0, 1, 1), m_frame_rect(rectangle),
+ m_scrollbar_width(0), m_vscrollbar(NULL), m_writable(writable),
+ m_bg_color_used(false)
{
#ifdef _DEBUG
setDebugName("GUIEditBoxWithScrollBar");
#endif
+
Text = text;
if (Environment)
@@ -64,6 +65,7 @@ GUIEditBoxWithScrollBar::GUIEditBoxWithScrollBar(const wchar_t *text, bool borde
setWritable(writable);
}
+
//! destructor
GUIEditBoxWithScrollBar::~GUIEditBoxWithScrollBar()
{
@@ -77,8 +79,9 @@ GUIEditBoxWithScrollBar::~GUIEditBoxWithScrollBar()
m_vscrollbar->drop();
}
+
//! Sets another skin independent font.
-void GUIEditBoxWithScrollBar::setOverrideFont(IGUIFont *font)
+void GUIEditBoxWithScrollBar::setOverrideFont(IGUIFont* font)
{
if (m_override_font == font)
return;
@@ -95,17 +98,17 @@ void GUIEditBoxWithScrollBar::setOverrideFont(IGUIFont *font)
}
//! Gets the override font (if any)
-IGUIFont *GUIEditBoxWithScrollBar::getOverrideFont() const
+IGUIFont * GUIEditBoxWithScrollBar::getOverrideFont() const
{
return m_override_font;
}
//! Get the font which is used right now for drawing
-IGUIFont *GUIEditBoxWithScrollBar::getActiveFont() const
+IGUIFont* GUIEditBoxWithScrollBar::getActiveFont() const
{
if (m_override_font)
return m_override_font;
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (skin)
return skin->getFont();
return 0;
@@ -118,11 +121,13 @@ void GUIEditBoxWithScrollBar::setOverrideColor(video::SColor color)
m_override_color_enabled = true;
}
+
video::SColor GUIEditBoxWithScrollBar::getOverrideColor() const
{
return m_override_color;
}
+
//! Turns the border on or off
void GUIEditBoxWithScrollBar::setDrawBorder(bool border)
{
@@ -153,6 +158,7 @@ void GUIEditBoxWithScrollBar::setWordWrap(bool enable)
breakText();
}
+
void GUIEditBoxWithScrollBar::updateAbsolutePosition()
{
core::rect<s32> old_absolute_rect(AbsoluteRect);
@@ -170,18 +176,21 @@ bool GUIEditBoxWithScrollBar::isWordWrapEnabled() const
return m_word_wrap;
}
+
//! Enables or disables newlines.
void GUIEditBoxWithScrollBar::setMultiLine(bool enable)
{
m_multiline = enable;
}
+
//! Checks if multi line editing is enabled
bool GUIEditBoxWithScrollBar::isMultiLineEnabled() const
{
return m_multiline;
}
+
void GUIEditBoxWithScrollBar::setPasswordBox(bool password_box, wchar_t password_char)
{
m_passwordbox = password_box;
@@ -193,24 +202,27 @@ void GUIEditBoxWithScrollBar::setPasswordBox(bool password_box, wchar_t password
}
}
+
bool GUIEditBoxWithScrollBar::isPasswordBox() const
{
return m_passwordbox;
}
+
//! Sets text justification
-void GUIEditBoxWithScrollBar::setTextAlignment(
- EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical)
+void GUIEditBoxWithScrollBar::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical)
{
m_halign = horizontal;
m_valign = vertical;
}
+
//! called if an event happened.
-bool GUIEditBoxWithScrollBar::OnEvent(const SEvent &event)
+bool GUIEditBoxWithScrollBar::OnEvent(const SEvent& event)
{
if (isEnabled()) {
- switch (event.EventType) {
+ switch (event.EventType)
+ {
case EET_GUI_EVENT:
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) {
if (event.GUIEvent.Caller == this) {
@@ -235,7 +247,8 @@ bool GUIEditBoxWithScrollBar::OnEvent(const SEvent &event)
return IGUIElement::OnEvent(event);
}
-bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
+
+bool GUIEditBoxWithScrollBar::processKey(const SEvent& event)
{
if (!m_writable) {
return false;
@@ -266,13 +279,10 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
break;
case KEY_KEY_C:
// copy to clipboard
- if (!m_passwordbox && m_operator && m_mark_begin != m_mark_end) {
- const s32 realmbgn = m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ if (!m_passwordbox && m_operator && m_mark_begin != m_mark_end)
+ {
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
core::stringc s;
s = Text.subString(realmbgn, realmend - realmbgn).c_str();
@@ -282,25 +292,20 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
case KEY_KEY_X:
// cut to the clipboard
if (!m_passwordbox && m_operator && m_mark_begin != m_mark_end) {
- const s32 realmbgn = m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
// copy
core::stringc sc;
- sc = Text.subString(realmbgn, realmend - realmbgn)
- .c_str();
+ sc = Text.subString(realmbgn, realmend - realmbgn).c_str();
m_operator->copyToClipboard(sc.c_str());
- if (isEnabled()) {
+ if (isEnabled())
+ {
// delete
core::stringw s;
s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append(Text.subString(realmend, Text.size() - realmend));
Text = s;
m_cursor_pos = realmbgn;
@@ -316,28 +321,19 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
// paste from the clipboard
if (m_operator) {
- const s32 realmbgn = m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
// add new character
- const c8 *p = m_operator->getTextFromClipboard();
+ const c8* p = m_operator->getTextFromClipboard();
if (p) {
if (m_mark_begin == m_mark_end) {
// insert text
- core::stringw s = Text.subString(
- 0, m_cursor_pos);
+ core::stringw s = Text.subString(0, m_cursor_pos);
s.append(p);
- s.append(Text.subString(m_cursor_pos,
- Text.size() - m_cursor_pos));
+ s.append(Text.subString(m_cursor_pos, Text.size() - m_cursor_pos));
- if (!m_max || s.size() <= m_max) // thx to
- // Fish
- // FH for
- // fix
+ if (!m_max || s.size() <= m_max) // thx to Fish FH for fix
{
Text = s;
s = p;
@@ -346,21 +342,15 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
} else {
// replace text
- core::stringw s = Text.subString(
- 0, realmbgn);
+ core::stringw s = Text.subString(0, realmbgn);
s.append(p);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append(Text.subString(realmend, Text.size() - realmend));
- if (!m_max || s.size() <= m_max) // thx to
- // Fish
- // FH for
- // fix
+ if (!m_max || s.size() <= m_max) // thx to Fish FH for fix
{
Text = s;
s = p;
- m_cursor_pos = realmbgn +
- s.size();
+ m_cursor_pos = realmbgn + s.size();
}
}
}
@@ -400,15 +390,14 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
}
// default keyboard handling
else
- switch (event.KeyInput.Key) {
- case KEY_END: {
+ switch (event.KeyInput.Key) {
+ case KEY_END:
+ {
s32 p = Text.size();
if (m_word_wrap || m_multiline) {
p = getLineFromPos(m_cursor_pos);
- p = m_broken_text_positions[p] +
- (s32)m_broken_text[p].size();
- if (p > 0 && (Text[p - 1] == L'\r' ||
- Text[p - 1] == L'\n'))
+ p = m_broken_text_positions[p] + (s32)m_broken_text[p].size();
+ if (p > 0 && (Text[p - 1] == L'\r' || Text[p - 1] == L'\n'))
p -= 1;
}
@@ -423,8 +412,10 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
}
m_cursor_pos = p;
m_blink_start_time = porting::getTimeMs();
- } break;
- case KEY_HOME: {
+ }
+ break;
+ case KEY_HOME:
+ {
s32 p = 0;
if (m_word_wrap || m_multiline) {
@@ -442,7 +433,8 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
}
m_cursor_pos = p;
m_blink_start_time = porting::getTimeMs();
- } break;
+ }
+ break;
case KEY_RETURN:
if (m_multiline) {
inputChar(L'\n');
@@ -490,25 +482,13 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
case KEY_UP:
if (m_multiline || (m_word_wrap && m_broken_text.size() > 1)) {
s32 lineNo = getLineFromPos(m_cursor_pos);
- s32 mb = (m_mark_begin == m_mark_end)
- ? m_cursor_pos
- : (m_mark_begin > m_mark_end ? m_mark_begin
- : m_mark_end);
- if (lineNo > 0) {
- s32 cp = m_cursor_pos -
- m_broken_text_positions[lineNo];
+ s32 mb = (m_mark_begin == m_mark_end) ? m_cursor_pos : (m_mark_begin > m_mark_end ? m_mark_begin : m_mark_end);
+ if (lineNo > 0) {
+ s32 cp = m_cursor_pos - m_broken_text_positions[lineNo];
if ((s32)m_broken_text[lineNo - 1].size() < cp)
- m_cursor_pos = m_broken_text_positions
- [lineNo - 1] +
- core::max_((u32)1,
- m_broken_text[lineNo -
- 1]
- .size()) -
- 1;
+ m_cursor_pos = m_broken_text_positions[lineNo - 1] + core::max_((u32)1, m_broken_text[lineNo - 1].size()) - 1;
else
- m_cursor_pos = m_broken_text_positions
- [lineNo - 1] +
- cp;
+ m_cursor_pos = m_broken_text_positions[lineNo - 1] + cp;
}
if (event.KeyInput.Shift) {
@@ -525,25 +505,14 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
case KEY_DOWN:
if (m_multiline || (m_word_wrap && m_broken_text.size() > 1)) {
s32 lineNo = getLineFromPos(m_cursor_pos);
- s32 mb = (m_mark_begin == m_mark_end)
- ? m_cursor_pos
- : (m_mark_begin < m_mark_end ? m_mark_begin
- : m_mark_end);
- if (lineNo < (s32)m_broken_text.size() - 1) {
- s32 cp = m_cursor_pos -
- m_broken_text_positions[lineNo];
+ s32 mb = (m_mark_begin == m_mark_end) ? m_cursor_pos : (m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end);
+ if (lineNo < (s32)m_broken_text.size() - 1)
+ {
+ s32 cp = m_cursor_pos - m_broken_text_positions[lineNo];
if ((s32)m_broken_text[lineNo + 1].size() < cp)
- m_cursor_pos = m_broken_text_positions
- [lineNo + 1] +
- core::max_((u32)1,
- m_broken_text[lineNo +
- 1]
- .size()) -
- 1;
+ m_cursor_pos = m_broken_text_positions[lineNo + 1] + core::max_((u32)1, m_broken_text[lineNo + 1].size()) - 1;
else
- m_cursor_pos = m_broken_text_positions
- [lineNo + 1] +
- cp;
+ m_cursor_pos = m_broken_text_positions[lineNo + 1] + cp;
}
if (event.KeyInput.Shift) {
@@ -568,18 +537,11 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
if (m_mark_begin != m_mark_end) {
// delete marked text
- const s32 realmbgn =
- m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend =
- m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append(Text.subString(realmend, Text.size() - realmend));
Text = s;
m_cursor_pos = realmbgn;
@@ -589,16 +551,14 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
s = Text.subString(0, m_cursor_pos - 1);
else
s = L"";
- s.append(Text.subString(m_cursor_pos,
- Text.size() - m_cursor_pos));
+ s.append(Text.subString(m_cursor_pos, Text.size() - m_cursor_pos));
Text = s;
--m_cursor_pos;
}
if (m_cursor_pos < 0)
m_cursor_pos = 0;
- m_blink_start_time = porting::
- getTimeMs(); // os::Timer::getTime();
+ m_blink_start_time = porting::getTimeMs(); // os::Timer::getTime();
new_mark_begin = 0;
new_mark_end = 0;
text_changed = true;
@@ -613,34 +573,25 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
if (m_mark_begin != m_mark_end) {
// delete marked text
- const s32 realmbgn =
- m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend =
- m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append(Text.subString(realmend, Text.size() - realmend));
Text = s;
m_cursor_pos = realmbgn;
} else {
// delete text before cursor
s = Text.subString(0, m_cursor_pos);
- s.append(Text.subString(m_cursor_pos + 1,
- Text.size() - m_cursor_pos - 1));
+ s.append(Text.subString(m_cursor_pos + 1, Text.size() - m_cursor_pos - 1));
Text = s;
}
if (m_cursor_pos > (s32)Text.size())
m_cursor_pos = (s32)Text.size();
- m_blink_start_time = porting::
- getTimeMs(); // os::Timer::getTime();
+ m_blink_start_time = porting::getTimeMs(); // os::Timer::getTime();
new_mark_begin = 0;
new_mark_end = 0;
text_changed = true;
@@ -690,13 +641,16 @@ bool GUIEditBoxWithScrollBar::processKey(const SEvent &event)
breakText();
calculateScrollPos();
sendGuiEvent(EGET_EDITBOX_CHANGED);
- } else {
+ }
+ else
+ {
calculateScrollPos();
}
return true;
}
+
//! draws the element and its children
void GUIEditBoxWithScrollBar::draw()
{
@@ -705,7 +659,7 @@ void GUIEditBoxWithScrollBar::draw()
const bool focus = Environment->hasFocus(this);
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
@@ -716,8 +670,7 @@ void GUIEditBoxWithScrollBar::draw()
bg_color = m_bg_color_used ? m_bg_color : default_bg_color;
if (!m_border && m_background) {
- skin->draw2DRectangle(
- this, bg_color, AbsoluteRect, &AbsoluteClippingRect);
+ skin->draw2DRectangle(this, bg_color, AbsoluteRect, &AbsoluteClippingRect);
}
// draw the border
@@ -726,7 +679,7 @@ void GUIEditBoxWithScrollBar::draw()
if (m_writable) {
skin->draw3DSunkenPane(this, bg_color, false, m_background,
- AbsoluteRect, &AbsoluteClippingRect);
+ AbsoluteRect, &AbsoluteClippingRect);
}
calculateFrameRect();
@@ -737,7 +690,7 @@ void GUIEditBoxWithScrollBar::draw()
// draw the text
- IGUIFont *font = getActiveFont();
+ IGUIFont* font = getActiveFont();
s32 cursor_line = 0;
s32 charcursorpos = 0;
@@ -756,13 +709,10 @@ void GUIEditBoxWithScrollBar::draw()
// get mark position
const bool ml = (!m_passwordbox && (m_word_wrap || m_multiline));
- const s32 realmbgn =
- m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
- const s32 realmend =
- m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
const s32 hline_start = ml ? getLineFromPos(realmbgn) : 0;
- const s32 hline_count =
- ml ? getLineFromPos(realmend) - hline_start + 1 : 1;
+ const s32 hline_count = ml ? getLineFromPos(realmend) - hline_start + 1 : 1;
const s32 line_count = ml ? m_broken_text.size() : 1;
// Save the override color information.
@@ -779,8 +729,7 @@ void GUIEditBoxWithScrollBar::draw()
for (s32 i = 0; i < line_count; ++i) {
setTextRect(i);
- // clipping test - don't draw anything outside the visible
- // area
+ // clipping test - don't draw anything outside the visible area
core::rect<s32> c = local_clip_rect;
c.clipAgainst(m_current_text_rect);
if (!c.isValid())
@@ -792,11 +741,11 @@ void GUIEditBoxWithScrollBar::draw()
m_broken_text.clear();
m_broken_text.emplace_back();
}
- if (m_broken_text[0].size() != Text.size()) {
+ if (m_broken_text[0].size() != Text.size()){
m_broken_text[0] = Text;
- for (u32 q = 0; q < Text.size(); ++q) {
- m_broken_text[0][q] =
- m_passwordchar;
+ for (u32 q = 0; q < Text.size(); ++q)
+ {
+ m_broken_text[0][q] = m_passwordchar;
}
}
txt_line = &m_broken_text[0];
@@ -806,77 +755,55 @@ void GUIEditBoxWithScrollBar::draw()
start_pos = ml ? m_broken_text_positions[i] : 0;
}
+
// draw normal text
font->draw(txt_line->c_str(), m_current_text_rect,
- m_override_color_enabled
- ? m_override_color
- : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &local_clip_rect);
+ m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
+ false, true, &local_clip_rect);
// draw mark and marked text
- if (focus && m_mark_begin != m_mark_end &&
- i >= hline_start &&
- i < hline_start + hline_count) {
+ if (focus && m_mark_begin != m_mark_end && i >= hline_start && i < hline_start + hline_count) {
s32 mbegin = 0, mend = 0;
- s32 lineStartPos = 0,
- lineEndPos = txt_line->size();
+ s32 lineStartPos = 0, lineEndPos = txt_line->size();
if (i == hline_start) {
// highlight start is on this line
- s = txt_line->subString(
- 0, realmbgn - start_pos);
- mbegin = font->getDimension(s.c_str())
- .Width;
+ s = txt_line->subString(0, realmbgn - start_pos);
+ mbegin = font->getDimension(s.c_str()).Width;
// deal with kerning
mbegin += font->getKerningWidth(
- &((*txt_line)[realmbgn -
- start_pos]),
- realmbgn - start_pos > 0
- ? &((*txt_line)[realmbgn -
- start_pos -
- 1])
- : 0);
+ &((*txt_line)[realmbgn - start_pos]),
+ realmbgn - start_pos > 0 ? &((*txt_line)[realmbgn - start_pos - 1]) : 0);
lineStartPos = realmbgn - start_pos;
}
if (i == hline_start + hline_count - 1) {
// highlight end is on this line
- s2 = txt_line->subString(
- 0, realmend - start_pos);
- mend = font->getDimension(s2.c_str())
- .Width;
+ s2 = txt_line->subString(0, realmend - start_pos);
+ mend = font->getDimension(s2.c_str()).Width;
lineEndPos = (s32)s2.size();
} else {
- mend = font->getDimension(txt_line->c_str())
- .Width;
+ mend = font->getDimension(txt_line->c_str()).Width;
}
+
m_current_text_rect.UpperLeftCorner.X += mbegin;
- m_current_text_rect.LowerRightCorner.X =
- m_current_text_rect
- .UpperLeftCorner
- .X +
- mend - mbegin;
+ m_current_text_rect.LowerRightCorner.X = m_current_text_rect.UpperLeftCorner.X + mend - mbegin;
+
// draw mark
- skin->draw2DRectangle(this,
- skin->getColor(EGDC_HIGH_LIGHT),
- m_current_text_rect,
- &local_clip_rect);
+ skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), m_current_text_rect, &local_clip_rect);
// draw marked text
- s = txt_line->subString(lineStartPos,
- lineEndPos - lineStartPos);
+ s = txt_line->subString(lineStartPos, lineEndPos - lineStartPos);
if (s.size())
font->draw(s.c_str(), m_current_text_rect,
- m_override_color_enabled
- ? m_override_color
- : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
- false, true,
- &local_clip_rect);
+ m_override_color_enabled ? m_override_color : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
+ false, true, &local_clip_rect);
+
}
}
@@ -894,23 +821,15 @@ void GUIEditBoxWithScrollBar::draw()
}
s = txt_line->subString(0, m_cursor_pos - start_pos);
charcursorpos = font->getDimension(s.c_str()).Width +
- font->getKerningWidth(L"_",
- m_cursor_pos - start_pos > 0
- ? &((*txt_line)[m_cursor_pos -
- start_pos -
- 1])
- : 0);
-
- if (focus && (porting::getTimeMs() - m_blink_start_time) % 700 <
- 350) {
+ font->getKerningWidth(L"_", m_cursor_pos - start_pos > 0 ? &((*txt_line)[m_cursor_pos - start_pos - 1]) : 0);
+
+ if (focus && (porting::getTimeMs() - m_blink_start_time) % 700 < 350) {
setTextRect(cursor_line);
m_current_text_rect.UpperLeftCorner.X += charcursorpos;
font->draw(L"_", m_current_text_rect,
- m_override_color_enabled
- ? m_override_color
- : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &local_clip_rect);
+ m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
+ false, true, &local_clip_rect);
}
}
}
@@ -919,8 +838,9 @@ void GUIEditBoxWithScrollBar::draw()
IGUIElement::draw();
}
+
//! Sets the new caption of this element.
-void GUIEditBoxWithScrollBar::setText(const wchar_t *text)
+void GUIEditBoxWithScrollBar::setText(const wchar_t* text)
{
Text = text;
if (u32(m_cursor_pos) > Text.size())
@@ -929,6 +849,7 @@ void GUIEditBoxWithScrollBar::setText(const wchar_t *text)
breakText();
}
+
//! Enables or disables automatic scrolling with cursor position
//! \param enable: If set to true, the text will move around with the cursor position
void GUIEditBoxWithScrollBar::setAutoScroll(bool enable)
@@ -936,6 +857,7 @@ void GUIEditBoxWithScrollBar::setAutoScroll(bool enable)
m_autoscroll = enable;
}
+
//! Checks to see if automatic scrolling is enabled
//! \return true if automatic scrolling is enabled, false if not
bool GUIEditBoxWithScrollBar::isAutoScrollEnabled() const
@@ -943,6 +865,7 @@ bool GUIEditBoxWithScrollBar::isAutoScrollEnabled() const
return m_autoscroll;
}
+
//! Gets the area of the text in the edit box
//! \return Returns the size in pixels of the text
core::dimension2du GUIEditBoxWithScrollBar::getTextDimension()
@@ -961,6 +884,7 @@ core::dimension2du GUIEditBoxWithScrollBar::getTextDimension()
return core::dimension2du(ret.getSize());
}
+
//! Sets the maximum amount of characters which may be entered in the box.
//! \param max: Maximum amount of characters. If 0, the character amount is
//! infinity.
@@ -972,19 +896,21 @@ void GUIEditBoxWithScrollBar::setMax(u32 max)
Text = Text.subString(0, m_max);
}
+
//! Returns maximum amount of characters, previously set by setMax();
u32 GUIEditBoxWithScrollBar::getMax() const
{
return m_max;
}
-bool GUIEditBoxWithScrollBar::processMouse(const SEvent &event)
+
+bool GUIEditBoxWithScrollBar::processMouse(const SEvent& event)
{
- switch (event.MouseInput.Event) {
+ switch (event.MouseInput.Event)
+ {
case irr::EMIE_LMOUSE_LEFT_UP:
if (Environment->hasFocus(this)) {
- m_cursor_pos = getCursorPos(
- event.MouseInput.X, event.MouseInput.Y);
+ m_cursor_pos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
if (m_mouse_marking) {
setTextMarkers(m_mark_begin, m_cursor_pos);
}
@@ -993,33 +919,32 @@ bool GUIEditBoxWithScrollBar::processMouse(const SEvent &event)
return true;
}
break;
- case irr::EMIE_MOUSE_MOVED: {
+ case irr::EMIE_MOUSE_MOVED:
+ {
if (m_mouse_marking) {
- m_cursor_pos = getCursorPos(
- event.MouseInput.X, event.MouseInput.Y);
+ m_cursor_pos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
setTextMarkers(m_mark_begin, m_cursor_pos);
calculateScrollPos();
return true;
}
- } break;
+ }
+ break;
case EMIE_LMOUSE_PRESSED_DOWN:
if (!Environment->hasFocus(this)) {
m_blink_start_time = porting::getTimeMs();
m_mouse_marking = true;
- m_cursor_pos = getCursorPos(
- event.MouseInput.X, event.MouseInput.Y);
+ m_cursor_pos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
setTextMarkers(m_cursor_pos, m_cursor_pos);
calculateScrollPos();
return true;
} else {
- if (!AbsoluteClippingRect.isPointInside(core::position2d<s32>(
- event.MouseInput.X, event.MouseInput.Y))) {
+ if (!AbsoluteClippingRect.isPointInside(
+ core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y))) {
return false;
} else {
// move cursor
- m_cursor_pos = getCursorPos(
- event.MouseInput.X, event.MouseInput.Y);
+ m_cursor_pos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
s32 newMarkBegin = m_mark_begin;
if (!m_mouse_marking)
@@ -1038,9 +963,10 @@ bool GUIEditBoxWithScrollBar::processMouse(const SEvent &event)
return false;
}
+
s32 GUIEditBoxWithScrollBar::getCursorPos(s32 x, s32 y)
{
- IGUIFont *font = getActiveFont();
+ IGUIFont* font = getActiveFont();
const u32 line_count = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1;
@@ -1056,14 +982,10 @@ s32 GUIEditBoxWithScrollBar::getCursorPos(s32 x, s32 y)
y = m_current_text_rect.LowerRightCorner.Y;
// is it inside this region?
- if (y >= m_current_text_rect.UpperLeftCorner.Y &&
- y <= m_current_text_rect.LowerRightCorner.Y) {
+ if (y >= m_current_text_rect.UpperLeftCorner.Y && y <= m_current_text_rect.LowerRightCorner.Y) {
// we've found the clicked line
- txt_line = (m_word_wrap || m_multiline) ? &m_broken_text[i]
- : &Text;
- start_pos = (m_word_wrap || m_multiline)
- ? m_broken_text_positions[i]
- : 0;
+ txt_line = (m_word_wrap || m_multiline) ? &m_broken_text[i] : &Text;
+ start_pos = (m_word_wrap || m_multiline) ? m_broken_text_positions[i] : 0;
break;
}
}
@@ -1074,8 +996,7 @@ s32 GUIEditBoxWithScrollBar::getCursorPos(s32 x, s32 y)
if (!txt_line)
return 0;
- s32 idx = font->getCharacterFromPos(
- txt_line->c_str(), x - m_current_text_rect.UpperLeftCorner.X);
+ s32 idx = font->getCharacterFromPos(txt_line->c_str(), x - m_current_text_rect.UpperLeftCorner.X);
// click was on or left of the line
if (idx != -1)
@@ -1085,6 +1006,7 @@ s32 GUIEditBoxWithScrollBar::getCursorPos(s32 x, s32 y)
return txt_line->size() + start_pos;
}
+
//! Breaks the single text line.
void GUIEditBoxWithScrollBar::breakText()
{
@@ -1094,7 +1016,7 @@ void GUIEditBoxWithScrollBar::breakText()
m_broken_text.clear(); // need to reallocate :/
m_broken_text_positions.clear();
- IGUIFont *font = getActiveFont();
+ IGUIFont* font = getActiveFont();
if (!font)
return;
@@ -1118,11 +1040,9 @@ void GUIEditBoxWithScrollBar::breakText()
line_break = true;
c = 0;
if (Text[i + 1] == L'\n') { // Windows breaks
- // TODO: I (Michael) think that we shouldn't change the
- // text given by the user for whatever reason. Instead
- // rework the cursor positioning to be able to handle this
- // (but not in stable release branch as users might
- // already expect this behavior).
+ // TODO: I (Michael) think that we shouldn't change the text given by the user for whatever reason.
+ // Instead rework the cursor positioning to be able to handle this (but not in stable release
+ // branch as users might already expect this behavior).
Text.erase(i + 1);
--size;
if (m_cursor_pos > i)
@@ -1140,13 +1060,11 @@ void GUIEditBoxWithScrollBar::breakText()
if (c == L' ' || c == 0 || i == (size - 1)) {
// here comes the next whitespace, look if
// we can break the last word to the next line
- // We also break whitespace, otherwise cursor would vanish beside
- // the right border.
+ // We also break whitespace, otherwise cursor would vanish beside the right border.
s32 whitelgth = font->getDimension(whitespace.c_str()).Width;
s32 worldlgth = font->getDimension(word.c_str()).Width;
- if (m_word_wrap && length + worldlgth + whitelgth > el_width &&
- line.size() > 0) {
+ if (m_word_wrap && length + worldlgth + whitelgth > el_width && line.size() > 0) {
// break to next line
length = worldlgth;
m_broken_text.push_back(line);
@@ -1163,6 +1081,7 @@ void GUIEditBoxWithScrollBar::breakText()
word = L"";
whitespace = L"";
+
if (c)
whitespace += c;
@@ -1202,7 +1121,7 @@ void GUIEditBoxWithScrollBar::setTextRect(s32 line)
if (line < 0)
return;
- IGUIFont *font = getActiveFont();
+ IGUIFont* font = getActiveFont();
if (!font)
return;
@@ -1222,10 +1141,8 @@ void GUIEditBoxWithScrollBar::setTextRect(s32 line)
switch (m_halign) {
case EGUIA_CENTER:
// align to h centre
- m_current_text_rect.UpperLeftCorner.X =
- (m_frame_rect.getWidth() / 2) - (d.Width / 2);
- m_current_text_rect.LowerRightCorner.X =
- (m_frame_rect.getWidth() / 2) + (d.Width / 2);
+ m_current_text_rect.UpperLeftCorner.X = (m_frame_rect.getWidth() / 2) - (d.Width / 2);
+ m_current_text_rect.LowerRightCorner.X = (m_frame_rect.getWidth() / 2) + (d.Width / 2);
break;
case EGUIA_LOWERRIGHT:
// align to right edge
@@ -1236,36 +1153,35 @@ void GUIEditBoxWithScrollBar::setTextRect(s32 line)
// align to left edge
m_current_text_rect.UpperLeftCorner.X = 0;
m_current_text_rect.LowerRightCorner.X = d.Width;
+
}
switch (m_valign) {
case EGUIA_CENTER:
// align to v centre
- m_current_text_rect.UpperLeftCorner.Y = (m_frame_rect.getHeight() / 2) -
- (line_count * d.Height) / 2 +
- d.Height * line;
+ m_current_text_rect.UpperLeftCorner.Y =
+ (m_frame_rect.getHeight() / 2) - (line_count*d.Height) / 2 + d.Height*line;
break;
case EGUIA_LOWERRIGHT:
// align to bottom edge
- m_current_text_rect.UpperLeftCorner.Y = m_frame_rect.getHeight() -
- line_count * d.Height +
- d.Height * line;
+ m_current_text_rect.UpperLeftCorner.Y =
+ m_frame_rect.getHeight() - line_count*d.Height + d.Height*line;
break;
default:
// align to top edge
- m_current_text_rect.UpperLeftCorner.Y = d.Height * line;
+ m_current_text_rect.UpperLeftCorner.Y = d.Height*line;
break;
}
m_current_text_rect.UpperLeftCorner.X -= m_hscroll_pos;
m_current_text_rect.LowerRightCorner.X -= m_hscroll_pos;
m_current_text_rect.UpperLeftCorner.Y -= m_vscroll_pos;
- m_current_text_rect.LowerRightCorner.Y =
- m_current_text_rect.UpperLeftCorner.Y + d.Height;
+ m_current_text_rect.LowerRightCorner.Y = m_current_text_rect.UpperLeftCorner.Y + d.Height;
m_current_text_rect += m_frame_rect.UpperLeftCorner;
}
+
s32 GUIEditBoxWithScrollBar::getLineFromPos(s32 pos)
{
if (!m_word_wrap && !m_multiline)
@@ -1280,36 +1196,31 @@ s32 GUIEditBoxWithScrollBar::getLineFromPos(s32 pos)
return (s32)m_broken_text_positions.size() - 1;
}
+
void GUIEditBoxWithScrollBar::inputChar(wchar_t c)
{
if (!isEnabled())
return;
- if (c != 0) {
+ if (c != 0) {
if (Text.size() < m_max || m_max == 0) {
core::stringw s;
if (m_mark_begin != m_mark_end) {
// replace marked text
- const s32 realmbgn = m_mark_begin < m_mark_end
- ? m_mark_begin
- : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end
- ? m_mark_end
- : m_mark_begin;
+ const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
s = Text.subString(0, realmbgn);
s.append(c);
- s.append(Text.subString(
- realmend, Text.size() - realmend));
+ s.append(Text.subString(realmend, Text.size() - realmend));
Text = s;
m_cursor_pos = realmbgn + 1;
} else {
// add new character
s = Text.subString(0, m_cursor_pos);
s.append(c);
- s.append(Text.subString(m_cursor_pos,
- Text.size() - m_cursor_pos));
+ s.append(Text.subString(m_cursor_pos, Text.size() - m_cursor_pos));
Text = s;
++m_cursor_pos;
}
@@ -1329,10 +1240,10 @@ void GUIEditBoxWithScrollBar::calculateScrollPos()
if (!m_autoscroll)
return;
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
- IGUIFont *font = m_override_font ? m_override_font : skin->getFont();
+ IGUIFont* font = m_override_font ? m_override_font : skin->getFont();
if (!font)
return;
@@ -1343,59 +1254,46 @@ void GUIEditBoxWithScrollBar::calculateScrollPos()
const bool has_broken_text = m_multiline || m_word_wrap;
// Check horizonal scrolling
- // NOTE: Calculations different to vertical scrolling because setTextRect
- // interprets VAlign relative to line but HAlign not relative to row
+ // NOTE: Calculations different to vertical scrolling because setTextRect interprets VAlign relative to line but HAlign not relative to row
{
// get cursor position
- IGUIFont *font = getActiveFont();
+ IGUIFont* font = getActiveFont();
if (!font)
return;
// get cursor area
irr::u32 cursor_width = font->getDimension(L"_").Width;
- core::stringw *txt_line =
- has_broken_text ? &m_broken_text[curs_line] : &Text;
- s32 cpos = has_broken_text ? m_cursor_pos - m_broken_text_positions
- [curs_line]
- : m_cursor_pos; // column
- s32 cstart = font->getDimension(txt_line->subString(0, cpos).c_str())
- .Width; // pixels from text-start
+ core::stringw *txt_line = has_broken_text ? &m_broken_text[curs_line] : &Text;
+ s32 cpos = has_broken_text ? m_cursor_pos - m_broken_text_positions[curs_line] : m_cursor_pos; // column
+ s32 cstart = font->getDimension(txt_line->subString(0, cpos).c_str()).Width; // pixels from text-start
s32 cend = cstart + cursor_width;
s32 txt_width = font->getDimension(txt_line->c_str()).Width;
if (txt_width < m_frame_rect.getWidth()) {
- // TODO: Needs a clean left and right gap removal depending on
- // HAlign, similar to vertical scrolling tests for top/bottom.
- // This check just fixes the case where it was most noticable
- // (text smaller than clipping area).
+ // TODO: Needs a clean left and right gap removal depending on HAlign, similar to vertical scrolling tests for top/bottom.
+ // This check just fixes the case where it was most noticable (text smaller than clipping area).
m_hscroll_pos = 0;
setTextRect(curs_line);
}
- if (m_current_text_rect.UpperLeftCorner.X + cstart <
- m_frame_rect.UpperLeftCorner.X) {
+ if (m_current_text_rect.UpperLeftCorner.X + cstart < m_frame_rect.UpperLeftCorner.X) {
// cursor to the left of the clipping area
- m_hscroll_pos -= m_frame_rect.UpperLeftCorner.X -
- (m_current_text_rect.UpperLeftCorner.X + cstart);
+ m_hscroll_pos -= m_frame_rect.UpperLeftCorner.X - (m_current_text_rect.UpperLeftCorner.X + cstart);
setTextRect(curs_line);
- // TODO: should show more characters to the left when we're
- // scrolling left
+ // TODO: should show more characters to the left when we're scrolling left
// and the cursor reaches the border.
- } else if (m_current_text_rect.UpperLeftCorner.X + cend >
- m_frame_rect.LowerRightCorner.X) {
+ } else if (m_current_text_rect.UpperLeftCorner.X + cend > m_frame_rect.LowerRightCorner.X) {
// cursor to the right of the clipping area
- m_hscroll_pos += (m_current_text_rect.UpperLeftCorner.X + cend) -
- m_frame_rect.LowerRightCorner.X;
+ m_hscroll_pos += (m_current_text_rect.UpperLeftCorner.X + cend) - m_frame_rect.LowerRightCorner.X;
setTextRect(curs_line);
}
}
// calculate vertical scrolling
if (has_broken_text) {
- irr::u32 line_height = font->getDimension(L"A").Height +
- font->getKerningHeight();
+ irr::u32 line_height = font->getDimension(L"A").Height + font->getKerningHeight();
// only up to 1 line fits?
if (line_height >= (irr::u32)m_frame_rect.getHeight()) {
m_vscroll_pos = 0;
@@ -1419,39 +1317,27 @@ void GUIEditBoxWithScrollBar::calculateScrollPos()
} else {
// First 2 checks are necessary when people delete lines
setTextRect(0);
- if (m_current_text_rect.UpperLeftCorner.Y >
- m_frame_rect.UpperLeftCorner.Y &&
- m_valign != EGUIA_LOWERRIGHT) {
+ if (m_current_text_rect.UpperLeftCorner.Y > m_frame_rect.UpperLeftCorner.Y && m_valign != EGUIA_LOWERRIGHT) {
// first line is leaving a gap on top
m_vscroll_pos = 0;
} else if (m_valign != EGUIA_UPPERLEFT) {
- u32 lastLine = m_broken_text_positions.empty()
- ? 0
- : m_broken_text_positions.size() -
- 1;
+ u32 lastLine = m_broken_text_positions.empty() ? 0 : m_broken_text_positions.size() - 1;
setTextRect(lastLine);
- if (m_current_text_rect.LowerRightCorner.Y <
- m_frame_rect.LowerRightCorner.Y) {
+ if (m_current_text_rect.LowerRightCorner.Y < m_frame_rect.LowerRightCorner.Y)
+ {
// last line is leaving a gap on bottom
- m_vscroll_pos -= m_frame_rect.LowerRightCorner.Y -
- m_current_text_rect
- .LowerRightCorner
- .Y;
+ m_vscroll_pos -= m_frame_rect.LowerRightCorner.Y - m_current_text_rect.LowerRightCorner.Y;
}
}
setTextRect(curs_line);
- if (m_current_text_rect.UpperLeftCorner.Y <
- m_frame_rect.UpperLeftCorner.Y) {
+ if (m_current_text_rect.UpperLeftCorner.Y < m_frame_rect.UpperLeftCorner.Y) {
// text above valid area
- m_vscroll_pos -= m_frame_rect.UpperLeftCorner.Y -
- m_current_text_rect.UpperLeftCorner.Y;
+ m_vscroll_pos -= m_frame_rect.UpperLeftCorner.Y - m_current_text_rect.UpperLeftCorner.Y;
setTextRect(curs_line);
- } else if (m_current_text_rect.LowerRightCorner.Y >
- m_frame_rect.LowerRightCorner.Y) {
+ } else if (m_current_text_rect.LowerRightCorner.Y > m_frame_rect.LowerRightCorner.Y){
// text below valid area
- m_vscroll_pos += m_current_text_rect.LowerRightCorner.Y -
- m_frame_rect.LowerRightCorner.Y;
+ m_vscroll_pos += m_current_text_rect.LowerRightCorner.Y - m_frame_rect.LowerRightCorner.Y;
setTextRect(curs_line);
}
}
@@ -1466,16 +1352,15 @@ void GUIEditBoxWithScrollBar::calculateFrameRect()
{
m_frame_rect = AbsoluteRect;
+
IGUISkin *skin = 0;
if (Environment)
skin = Environment->getSkin();
if (m_border && skin) {
m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
- m_frame_rect.LowerRightCorner.X -=
- skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
- m_frame_rect.LowerRightCorner.Y -=
- skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
+ m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
+ m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
}
updateVScrollBar();
@@ -1518,8 +1403,8 @@ void GUIEditBoxWithScrollBar::createVScrollBar()
irr::core::rect<s32> scrollbarrect = m_frame_rect;
scrollbarrect.UpperLeftCorner.X += m_frame_rect.getWidth() - m_scrollbar_width;
- m_vscrollbar = new GUIScrollBar(
- Environment, getParent(), -1, scrollbarrect, false, true);
+ m_vscrollbar = new GUIScrollBar(Environment, getParent(), -1,
+ scrollbarrect, false, true);
m_vscrollbar->setVisible(false);
m_vscrollbar->setSmallStep(1);
@@ -1551,7 +1436,7 @@ void GUIEditBoxWithScrollBar::updateVScrollBar()
}
// check if a vertical scrollbar is needed ?
- if (getTextDimension().Height > (u32)m_frame_rect.getHeight()) {
+ if (getTextDimension().Height > (u32) m_frame_rect.getHeight()) {
m_frame_rect.LowerRightCorner.X -= m_scrollbar_width;
s32 scrollymax = getTextDimension().Height - m_frame_rect.getHeight();
@@ -1564,7 +1449,8 @@ void GUIEditBoxWithScrollBar::updateVScrollBar()
m_vscrollbar->setVisible(true);
}
} else {
- if (m_vscrollbar->isVisible()) {
+ if (m_vscrollbar->isVisible())
+ {
m_vscrollbar->setVisible(false);
m_vscroll_pos = 0;
m_vscrollbar->setPos(0);
@@ -1572,6 +1458,7 @@ void GUIEditBoxWithScrollBar::updateVScrollBar()
m_vscrollbar->setPageSize(s32(getTextDimension().Height));
}
}
+
}
//! set true if this editbox is writable
@@ -1588,8 +1475,7 @@ void GUIEditBoxWithScrollBar::setBackgroundColor(const video::SColor &bg_color)
}
//! Writes attributes of the element.
-void GUIEditBoxWithScrollBar::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options = 0) const
+void GUIEditBoxWithScrollBar::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options = 0) const
{
// IGUIEditBox::serializeAttributes(out,options);
@@ -1613,9 +1499,9 @@ void GUIEditBoxWithScrollBar::serializeAttributes(
IGUIEditBox::serializeAttributes(out, options);
}
+
//! Reads attributes of the element
-void GUIEditBoxWithScrollBar::deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options = 0)
+void GUIEditBoxWithScrollBar::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options = 0)
{
IGUIEditBox::deserializeAttributes(in, options);
@@ -1634,34 +1520,16 @@ void GUIEditBoxWithScrollBar::deserializeAttributes(
else
setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]);
- setTextAlignment((EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "HTextAlign", GUIAlignmentNames),
- (EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "VTextAlign", GUIAlignmentNames));
+ setTextAlignment((EGUI_ALIGNMENT)in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames),
+ (EGUI_ALIGNMENT)in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames));
// setOverrideFont(in->getAttributeAsFont("OverrideFont"));
setWritable(in->getAttributeAsBool("Writable"));
}
-bool GUIEditBoxWithScrollBar::isDrawBackgroundEnabled() const
-{
- return false;
-}
-bool GUIEditBoxWithScrollBar::isDrawBorderEnabled() const
-{
- return false;
-}
-void GUIEditBoxWithScrollBar::setCursorChar(const wchar_t cursorChar)
-{
-}
-wchar_t GUIEditBoxWithScrollBar::getCursorChar() const
-{
- return '|';
-}
-void GUIEditBoxWithScrollBar::setCursorBlinkTime(irr::u32 timeMs)
-{
-}
-irr::u32 GUIEditBoxWithScrollBar::getCursorBlinkTime() const
-{
- return 500;
-}
+bool GUIEditBoxWithScrollBar::isDrawBackgroundEnabled() const { return false; }
+bool GUIEditBoxWithScrollBar::isDrawBorderEnabled() const { return false; }
+void GUIEditBoxWithScrollBar::setCursorChar(const wchar_t cursorChar) { }
+wchar_t GUIEditBoxWithScrollBar::getCursorChar() const { return '|'; }
+void GUIEditBoxWithScrollBar::setCursorBlinkTime(irr::u32 timeMs) { }
+irr::u32 GUIEditBoxWithScrollBar::getCursorBlinkTime() const { return 500; }
diff --git a/src/gui/guiEditBoxWithScrollbar.h b/src/gui/guiEditBoxWithScrollbar.h
index ff98fe4cb..77538e2f7 100644
--- a/src/gui/guiEditBoxWithScrollbar.h
+++ b/src/gui/guiEditBoxWithScrollbar.h
@@ -16,26 +16,26 @@ using namespace irr::gui;
class GUIEditBoxWithScrollBar : public IGUIEditBox
{
public:
+
//! constructor
- GUIEditBoxWithScrollBar(const wchar_t *text, bool border,
- IGUIEnvironment *environment, IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, bool writable = true,
- bool has_vscrollbar = true);
+ GUIEditBoxWithScrollBar(const wchar_t* text, bool border, IGUIEnvironment* environment,
+ IGUIElement* parent, s32 id, const core::rect<s32>& rectangle,
+ bool writable = true, bool has_vscrollbar = true);
//! destructor
virtual ~GUIEditBoxWithScrollBar();
//! Sets another skin independent font.
- virtual void setOverrideFont(IGUIFont *font = 0);
+ virtual void setOverrideFont(IGUIFont* font = 0);
//! Gets the override font (if any)
/** \return The override font (may be 0) */
- virtual IGUIFont *getOverrideFont() const;
+ virtual IGUIFont* getOverrideFont() const;
//! Get the font which is used right now for drawing
/** Currently this is the override font when one is set and the
font of the active skin otherwise */
- virtual IGUIFont *getActiveFont() const;
+ virtual IGUIFont* getActiveFont() const;
//! Sets another color for the text.
virtual void setOverrideColor(video::SColor color);
@@ -74,8 +74,7 @@ public:
virtual bool isMultiLineEnabled() const;
//! Enables or disables automatic scrolling with cursor position
- //! \param enable: If set to true, the text will move around with the cursor
- //! position
+ //! \param enable: If set to true, the text will move around with the cursor position
virtual void setAutoScroll(bool enable);
//! Checks to see if automatic scrolling is enabled
@@ -90,13 +89,13 @@ public:
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical);
//! called if an event happened.
- virtual bool OnEvent(const SEvent &event);
+ virtual bool OnEvent(const SEvent& event);
//! draws the element and its children
virtual void draw();
//! Sets the new caption of this element.
- virtual void setText(const wchar_t *text);
+ virtual void setText(const wchar_t* text);
//! Sets the maximum amount of characters which may be entered in the box.
//! \param max: Maximum amount of characters. If 0, the character amount is
@@ -124,12 +123,10 @@ public:
virtual void setBackgroundColor(const video::SColor &bg_color);
//! Writes attributes of the element.
- virtual void serializeAttributes(io::IAttributes *out,
- io::SAttributeReadWriteOptions *options) const;
+ virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const;
//! Reads attributes of the element
- virtual void deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options);
+ virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options);
virtual bool isDrawBackgroundEnabled() const;
virtual bool isDrawBorderEnabled() const;
@@ -160,8 +157,8 @@ protected:
//! update the vertical scrollBar (visibilty & position)
void updateVScrollBar();
- bool processKey(const SEvent &event);
- bool processMouse(const SEvent &event);
+ bool processKey(const SEvent& event);
+ bool processMouse(const SEvent& event);
s32 getCursorPos(s32 x, s32 y);
bool m_mouse_marking;
@@ -173,7 +170,7 @@ protected:
video::SColor m_override_color;
gui::IGUIFont *m_override_font, *m_last_break_font;
- IOSOperator *m_operator;
+ IOSOperator* m_operator;
u32 m_blink_start_time;
s32 m_cursor_pos;
@@ -197,4 +194,6 @@ protected:
video::SColor m_bg_color;
};
+
#endif // GUIEDITBOXWITHSCROLLBAR_HEADER
+
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index 2e1bc7fed..b40707d01 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/tile.h"
#endif
+
/******************************************************************************/
void TextDestGuiEngine::gotText(const StringMap &fields)
{
@@ -98,72 +99,84 @@ video::ITexture *MenuTextureSource::getTexture(const std::string &name, u32 *id)
/** MenuMusicFetcher */
/******************************************************************************/
void MenuMusicFetcher::fetchSounds(const std::string &name,
- std::set<std::string> &dst_paths, std::set<std::string> &dst_datas)
+ std::set<std::string> &dst_paths,
+ std::set<std::string> &dst_datas)
{
- if (m_fetched.count(name))
+ if(m_fetched.count(name))
return;
m_fetched.insert(name);
std::string base;
base = porting::path_share + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
int i;
- for (i = 0; i < 10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "." + itos(i) + ".ogg");
+ for(i=0; i<10; i++)
+ dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
base = porting::path_user + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
- for (i = 0; i < 10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "." + itos(i) + ".ogg");
+ for(i=0; i<10; i++)
+ dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
}
/******************************************************************************/
/** GUIEngine */
/******************************************************************************/
-GUIEngine::GUIEngine(JoystickController *joystick, gui::IGUIElement *parent,
- IMenuManager *menumgr, MainMenuData *data, bool &kill) :
- m_parent(parent),
- m_menumanager(menumgr), m_smgr(RenderingEngine::get_scene_manager()),
- m_data(data), m_kill(kill)
+GUIEngine::GUIEngine(JoystickController *joystick,
+ gui::IGUIElement *parent,
+ IMenuManager *menumgr,
+ MainMenuData *data,
+ bool &kill) :
+ m_parent(parent),
+ m_menumanager(menumgr),
+ m_smgr(RenderingEngine::get_scene_manager()),
+ m_data(data),
+ m_kill(kill)
{
- // initialize texture pointers
+ //initialize texture pointers
for (image_definition &texture : m_textures) {
texture.texture = NULL;
}
// is deleted by guiformspec!
m_buttonhandler = new TextDestGuiEngine(this);
- // create texture source
+ //create texture source
m_texture_source = new MenuTextureSource(RenderingEngine::get_video_driver());
- // create soundmanager
+ //create soundmanager
MenuMusicFetcher soundfetcher;
#if USE_SOUND
if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get())
- m_sound_manager = createOpenALSoundManager(
- g_sound_manager_singleton.get(), &soundfetcher);
+ m_sound_manager = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher);
#endif
if (!m_sound_manager)
m_sound_manager = &dummySoundManager;
- // create topleft header
+ //create topleft header
m_toplefttext = L"";
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(m_toplefttext.c_str()),
- g_fontengine->getTextHeight());
+ g_fontengine->getTextHeight());
rect += v2s32(4, 0);
m_irr_toplefttext = gui::StaticText::add(RenderingEngine::get_gui_env(),
m_toplefttext, rect, false, true, 0, -1);
- // create formspecsource
+ //create formspecsource
m_formspecgui = new FormspecFormSource("");
/* Create menu */
- m_menu = new GUIFormSpecMenu(joystick, m_parent, -1, m_menumanager,
- NULL /* &client */, m_texture_source, m_formspecgui,
- m_buttonhandler, "", false);
+ m_menu = new GUIFormSpecMenu(joystick,
+ m_parent,
+ -1,
+ m_menumanager,
+ NULL /* &client */,
+ m_texture_source,
+ m_formspecgui,
+ m_buttonhandler,
+ "",
+ false);
m_menu->allowClose(false);
- m_menu->lockSize(true, v2u32(800, 600));
+ m_menu->lockSize(true,v2u32(800,600));
// Initialize scripting
@@ -197,20 +210,18 @@ bool GUIEngine::loadMainMenuScript()
// Set main menu path (for core.get_mainmenu_path())
m_scriptdir = g_settings->get("main_menu_path");
if (m_scriptdir.empty()) {
- m_scriptdir = porting::path_share + DIR_DELIM + "builtin" + DIR_DELIM +
- "mainmenu";
+ m_scriptdir = porting::path_share + DIR_DELIM + "builtin" + DIR_DELIM + "mainmenu";
}
// Load builtin (which will load the main menu script)
- std::string script =
- porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
+ std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
try {
m_script->loadScript(script);
// Menu script loaded
return true;
} catch (const ModError &e) {
- errorstream << "GUIEngine: execution of menu script failed: " << e.what()
- << std::endl;
+ errorstream << "GUIEngine: execution of menu script failed: "
+ << e.what() << std::endl;
}
return false;
@@ -227,8 +238,8 @@ void GUIEngine::run()
unsigned int text_height = g_fontengine->getTextHeight();
- irr::core::dimension2d<u32> previous_screen_size(
- g_settings->getU16("screen_w"), g_settings->getU16("screen_h"));
+ irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"),
+ g_settings->getU16("screen_h"));
static const video::SColor sky_color(255, 140, 186, 250);
@@ -251,20 +262,19 @@ void GUIEngine::run()
while (RenderingEngine::run() && (!m_startgame) && (!m_kill)) {
const irr::core::dimension2d<u32> &current_screen_size =
- RenderingEngine::get_video_driver()->getScreenSize();
+ RenderingEngine::get_video_driver()->getScreenSize();
// Verify if window size has changed and save it if it's the case
// Ensure evaluating settings->getBool after verifying screensize
// First condition is cheaper
if (previous_screen_size != current_screen_size &&
- current_screen_size !=
- irr::core::dimension2d<u32>(0, 0) &&
+ current_screen_size != irr::core::dimension2d<u32>(0,0) &&
g_settings->getBool("autosave_screensize")) {
g_settings->setU16("screen_w", current_screen_size.Width);
g_settings->setU16("screen_h", current_screen_size.Height);
previous_screen_size = current_screen_size;
}
- // check if we need to update the "upper left corner"-text
+ //check if we need to update the "upper left corner"-text
if (text_height != g_fontengine->getTextHeight()) {
updateTopLeftTextSize();
text_height = g_fontengine->getTextHeight();
@@ -272,10 +282,12 @@ void GUIEngine::run()
driver->beginScene(true, true, sky_color);
- if (m_clouds_enabled) {
+ if (m_clouds_enabled)
+ {
cloudPreProcess();
drawOverlay(driver);
- } else
+ }
+ else
drawBackground(driver);
drawHeader(driver);
@@ -301,21 +313,20 @@ void GUIEngine::run()
/******************************************************************************/
GUIEngine::~GUIEngine()
{
- if (m_sound_manager != &dummySoundManager) {
+ if (m_sound_manager != &dummySoundManager){
delete m_sound_manager;
m_sound_manager = NULL;
}
- infostream << "GUIEngine: Deinitializing scripting" << std::endl;
+ infostream<<"GUIEngine: Deinitializing scripting"<<std::endl;
delete m_script;
m_irr_toplefttext->setText(L"");
- // clean up texture pointers
+ //clean up texture pointers
for (image_definition &texture : m_textures) {
if (texture.texture)
- RenderingEngine::get_video_driver()->removeTexture(
- texture.texture);
+ RenderingEngine::get_video_driver()->removeTexture(texture.texture);
}
delete m_texture_source;
@@ -329,9 +340,10 @@ void GUIEngine::cloudInit()
{
m_cloud.clouds = new Clouds(m_smgr, -1, rand());
m_cloud.clouds->setHeight(100.0f);
- m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255));
+ m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255,240,240,255));
- m_cloud.camera = m_smgr->addCameraSceneNode(0, v3f(0, 0, 0), v3f(0, 60, 100));
+ m_cloud.camera = m_smgr->addCameraSceneNode(0,
+ v3f(0,0,0), v3f(0, 60, 100));
m_cloud.camera->setFarValue(10000);
m_cloud.lasttime = RenderingEngine::get_timer_time();
@@ -342,14 +354,14 @@ void GUIEngine::cloudPreProcess()
{
u32 time = RenderingEngine::get_timer_time();
- if (time > m_cloud.lasttime)
+ if(time > m_cloud.lasttime)
m_cloud.dtime = (time - m_cloud.lasttime) / 1000.0;
else
m_cloud.dtime = 0;
m_cloud.lasttime = time;
- m_cloud.clouds->step(m_cloud.dtime * 3);
+ m_cloud.clouds->step(m_cloud.dtime*3);
m_cloud.clouds->render();
m_smgr->drawAll();
}
@@ -363,13 +375,13 @@ void GUIEngine::cloudPostProcess()
// not using getRealTime is necessary for wine
u32 time = RenderingEngine::get_timer_time();
- if (time > m_cloud.lasttime)
+ if(time > m_cloud.lasttime)
busytime_u32 = time - m_cloud.lasttime;
else
busytime_u32 = 0;
// FPS limiter
- u32 frametime_min = 1000. / fps_max;
+ u32 frametime_min = 1000./fps_max;
if (busytime_u32 < frametime_min) {
u32 sleeptime = frametime_min - busytime_u32;
@@ -385,16 +397,17 @@ void GUIEngine::setFormspecPrepend(const std::string &fs)
}
}
+
/******************************************************************************/
void GUIEngine::drawBackground(video::IVideoDriver *driver)
{
v2u32 screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_BACKGROUND].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_BACKGROUND].texture;
/* If no texture, draw background of solid color */
- if (!texture) {
- video::SColor color(255, 80, 58, 37);
+ if(!texture){
+ video::SColor color(255,80,58,37);
core::rect<s32> rect(0, 0, screensize.X, screensize.Y);
driver->draw2DRectangle(color, rect, NULL);
return;
@@ -402,19 +415,19 @@ void GUIEngine::drawBackground(video::IVideoDriver *driver)
v2u32 sourcesize = texture->getOriginalSize();
- if (m_textures[TEX_LAYER_BACKGROUND].tile) {
- v2u32 tilesize(MYMAX(sourcesize.X,
- m_textures[TEX_LAYER_BACKGROUND].minsize),
- MYMAX(sourcesize.Y, m_textures[TEX_LAYER_BACKGROUND]
- .minsize));
- for (unsigned int x = 0; x < screensize.X; x += tilesize.X) {
- for (unsigned int y = 0; y < screensize.Y; y += tilesize.Y) {
+ if (m_textures[TEX_LAYER_BACKGROUND].tile)
+ {
+ v2u32 tilesize(
+ MYMAX(sourcesize.X,m_textures[TEX_LAYER_BACKGROUND].minsize),
+ MYMAX(sourcesize.Y,m_textures[TEX_LAYER_BACKGROUND].minsize));
+ for (unsigned int x = 0; x < screensize.X; x += tilesize.X )
+ {
+ for (unsigned int y = 0; y < screensize.Y; y += tilesize.Y )
+ {
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(x, y, x + tilesize.X,
- y + tilesize.Y),
- core::rect<s32>(0, 0, sourcesize.X,
- sourcesize.Y),
- NULL, NULL, true);
+ core::rect<s32>(x, y, x+tilesize.X, y+tilesize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
}
return;
@@ -422,9 +435,9 @@ void GUIEngine::drawBackground(video::IVideoDriver *driver)
/* Draw background texture */
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(0, 0, screensize.X, screensize.Y),
- core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y), NULL, NULL,
- true);
+ core::rect<s32>(0, 0, screensize.X, screensize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
/******************************************************************************/
@@ -432,18 +445,18 @@ void GUIEngine::drawOverlay(video::IVideoDriver *driver)
{
v2u32 screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_OVERLAY].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_OVERLAY].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
/* Draw background texture */
v2u32 sourcesize = texture->getOriginalSize();
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(0, 0, screensize.X, screensize.Y),
- core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y), NULL, NULL,
- true);
+ core::rect<s32>(0, 0, screensize.X, screensize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
/******************************************************************************/
@@ -451,33 +464,32 @@ void GUIEngine::drawHeader(video::IVideoDriver *driver)
{
core::dimension2d<u32> screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_HEADER].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_HEADER].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
f32 mult = (((f32)screensize.Width / 2.0)) /
- ((f32)texture->getOriginalSize().Width);
+ ((f32)texture->getOriginalSize().Width);
v2s32 splashsize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the header if there isn't enough room
- s32 free_space = (((s32)screensize.Height) - 320) / 2;
+ s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > splashsize.Y) {
core::rect<s32> splashrect(0, 0, splashsize.X, splashsize.Y);
- splashrect += v2s32((screensize.Width / 2) - (splashsize.X / 2),
- ((free_space / 2) - splashsize.Y / 2) + 10);
+ splashrect += v2s32((screensize.Width/2)-(splashsize.X/2),
+ ((free_space/2)-splashsize.Y/2)+10);
- video::SColor bgcolor(255, 50, 50, 50);
+ video::SColor bgcolor(255,50,50,50);
- draw2DImageFilterScaled(driver, texture, splashrect,
- core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(
- texture->getOriginalSize())),
- NULL, NULL, true);
+ draw2DImageFilterScaled(driver, texture, splashrect,
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(texture->getOriginalSize())),
+ NULL, NULL, true);
}
}
@@ -486,30 +498,30 @@ void GUIEngine::drawFooter(video::IVideoDriver *driver)
{
core::dimension2d<u32> screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_FOOTER].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_FOOTER].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
- f32 mult = (((f32)screensize.Width)) / ((f32)texture->getOriginalSize().Width);
+ f32 mult = (((f32)screensize.Width)) /
+ ((f32)texture->getOriginalSize().Width);
v2s32 footersize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the footer if there isn't enough room
- s32 free_space = (((s32)screensize.Height) - 320) / 2;
+ s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > footersize.Y) {
- core::rect<s32> rect(0, 0, footersize.X, footersize.Y);
- rect += v2s32(screensize.Width / 2, screensize.Height - footersize.Y);
- rect -= v2s32(footersize.X / 2, 0);
+ core::rect<s32> rect(0,0,footersize.X,footersize.Y);
+ rect += v2s32(screensize.Width/2,screensize.Height-footersize.Y);
+ rect -= v2s32(footersize.X/2, 0);
draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(
- texture->getOriginalSize())),
- NULL, NULL, true);
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(texture->getOriginalSize())),
+ NULL, NULL, true);
}
}
@@ -529,7 +541,7 @@ bool GUIEngine::setTexture(texture_layer layer, const std::string &texturepath,
}
m_textures[layer].texture = driver->getTexture(texturepath.c_str());
- m_textures[layer].tile = tile_image;
+ m_textures[layer].tile = tile_image;
m_textures[layer].minsize = minsize;
if (!m_textures[layer].texture) {
@@ -580,7 +592,7 @@ void GUIEngine::setTopleftText(const std::string &text)
void GUIEngine::updateTopLeftTextSize()
{
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(m_toplefttext.c_str()),
- g_fontengine->getTextHeight());
+ g_fontengine->getTextHeight());
rect += v2s32(4, 0);
m_irr_toplefttext->remove();
@@ -602,8 +614,8 @@ void GUIEngine::stopSound(s32 handle)
}
/******************************************************************************/
-unsigned int GUIEngine::queueAsync(
- const std::string &serialized_func, const std::string &serialized_params)
+unsigned int GUIEngine::queueAsync(const std::string &serialized_func,
+ const std::string &serialized_params)
{
return m_script->queueAsync(serialized_func, serialized_params);
}
diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h
index b94bbef12..f9ad0fb0a 100644
--- a/src/gui/guiEngine.h
+++ b/src/gui/guiEngine.h
@@ -32,8 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Typedefs and macros */
/******************************************************************************/
/** texture layer ids */
-typedef enum
-{
+typedef enum {
TEX_LAYER_BACKGROUND = 0,
TEX_LAYER_OVERLAY,
TEX_LAYER_HEADER,
@@ -41,11 +40,10 @@ typedef enum
TEX_LAYER_MAX
} texture_layer;
-typedef struct
-{
+typedef struct {
video::ITexture *texture = nullptr;
- bool tile;
- unsigned int minsize;
+ bool tile;
+ unsigned int minsize;
} image_definition;
/******************************************************************************/
@@ -68,7 +66,7 @@ public:
* default constructor
* @param engine the engine data is transmitted for further processing
*/
- TextDestGuiEngine(GUIEngine *engine) : m_engine(engine){};
+ TextDestGuiEngine(GUIEngine* engine) : m_engine(engine) {};
/**
* receive fields transmitted by guiFormSpecMenu
@@ -95,7 +93,7 @@ public:
* default constructor
* @param driver the video driver to load textures from
*/
- MenuTextureSource(video::IVideoDriver *driver) : m_driver(driver){};
+ MenuTextureSource(video::IVideoDriver *driver) : m_driver(driver) {};
/**
* destructor, removes all loaded textures
@@ -117,7 +115,7 @@ private:
};
/** GUIEngine specific implementation of OnDemandSoundFetcher */
-class MenuMusicFetcher : public OnDemandSoundFetcher
+class MenuMusicFetcher: public OnDemandSoundFetcher
{
public:
/**
@@ -126,7 +124,8 @@ public:
* @param dst_paths receives possible paths to sound files
* @param dst_datas receives binary sound data (not used here)
*/
- void fetchSounds(const std::string &name, std::set<std::string> &dst_paths,
+ void fetchSounds(const std::string &name,
+ std::set<std::string> &dst_paths,
std::set<std::string> &dst_datas);
private:
@@ -135,8 +134,7 @@ private:
};
/** implementation of main menu based uppon formspecs */
-class GUIEngine
-{
+class GUIEngine {
/** grant ModApiMainMenu access to private members */
friend class ModApiMainMenu;
friend class ModApiSound;
@@ -150,8 +148,11 @@ public:
* @param smgr scene manager to add scene elements to
* @param data struct to transfer data to main game handling
*/
- GUIEngine(JoystickController *joystick, gui::IGUIElement *parent,
- IMenuManager *menumgr, MainMenuData *data, bool &kill);
+ GUIEngine(JoystickController *joystick,
+ gui::IGUIElement *parent,
+ IMenuManager *menumgr,
+ MainMenuData *data,
+ bool &kill);
/** default destructor */
virtual ~GUIEngine();
@@ -159,18 +160,25 @@ public:
/**
* return MainMenuScripting interface
*/
- MainMenuScripting *getScriptIface() { return m_script; }
+ MainMenuScripting *getScriptIface()
+ {
+ return m_script;
+ }
/**
* return dir of current menuscript
*/
- std::string getScriptDir() { return m_scriptdir; }
+ std::string getScriptDir()
+ {
+ return m_scriptdir;
+ }
/** pass async callback to scriptengine **/
unsigned int queueAsync(const std::string &serialized_fct,
const std::string &serialized_params);
private:
+
/** find and run the main menu script */
bool loadMainMenuScript();
@@ -181,36 +189,36 @@ private:
void updateTopLeftTextSize();
/** parent gui element */
- gui::IGUIElement *m_parent = nullptr;
+ gui::IGUIElement *m_parent = nullptr;
/** manager to add menus to */
- IMenuManager *m_menumanager = nullptr;
+ IMenuManager *m_menumanager = nullptr;
/** scene manager to add scene elements to */
- scene::ISceneManager *m_smgr = nullptr;
+ scene::ISceneManager *m_smgr = nullptr;
/** pointer to data beeing transfered back to main game handling */
- MainMenuData *m_data = nullptr;
+ MainMenuData *m_data = nullptr;
/** pointer to texture source */
- ISimpleTextureSource *m_texture_source = nullptr;
+ ISimpleTextureSource *m_texture_source = nullptr;
/** pointer to soundmanager*/
- ISoundManager *m_sound_manager = nullptr;
+ ISoundManager *m_sound_manager = nullptr;
/** representation of form source to be used in mainmenu formspec */
- FormspecFormSource *m_formspecgui = nullptr;
+ FormspecFormSource *m_formspecgui = nullptr;
/** formspec input receiver */
- TextDestGuiEngine *m_buttonhandler = nullptr;
+ TextDestGuiEngine *m_buttonhandler = nullptr;
/** the formspec menu */
- GUIFormSpecMenu *m_menu = nullptr;
+ GUIFormSpecMenu *m_menu = nullptr;
/** reference to kill variable managed by SIGINT handler */
- bool &m_kill;
+ bool &m_kill;
/** variable used to abort menu and return back to main game handling */
- bool m_startgame = false;
+ bool m_startgame = false;
/** scripting interface */
- MainMenuScripting *m_script = nullptr;
+ MainMenuScripting *m_script = nullptr;
/** script basefolder */
- std::string m_scriptdir = "";
+ std::string m_scriptdir = "";
void setFormspecPrepend(const std::string &fs);
@@ -272,12 +280,11 @@ private:
void cloudPostProcess();
/** internam data required for drawing clouds */
- struct clouddata
- {
+ struct clouddata {
/** delta time since last cloud processing */
- f32 dtime;
+ f32 dtime;
/** absolute time of last cloud processing */
- u32 lasttime;
+ u32 lasttime;
/** pointer to cloud class */
Clouds *clouds = nullptr;
/** camera required for drawing clouds */
@@ -285,12 +292,14 @@ private:
};
/** is drawing of clouds enabled atm */
- bool m_clouds_enabled = true;
+ bool m_clouds_enabled = true;
/** data used to draw clouds */
- clouddata m_cloud;
+ clouddata m_cloud;
/** start playing a sound and return handle */
s32 playSound(const SimpleSoundSpec &spec, bool looped);
/** stop playing a sound started with playSound() */
void stopSound(s32 handle);
+
+
};
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 5013ffe14..601c5c18e 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+
#include <cstdlib>
#include <algorithm>
#include <iterator>
@@ -37,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/renderingengine.h"
#include "log.h"
#include "client/tile.h" // ITextureSource
-#include "client/hud.h" // drawItemStack
+#include "client/hud.h" // drawItemStack
#include "filesys.h"
#include "gettime.h"
#include "gettext.h"
@@ -65,18 +66,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "intlGUIEditBox.h"
#include "guiHyperText.h"
-#define MY_CHECKPOS(a, b) \
- if (v_pos.size() != 2) { \
- errorstream << "Invalid pos for element " << a << "specified: \"" \
- << parts[b] << "\"" << std::endl; \
- return; \
+#define MY_CHECKPOS(a,b) \
+ if (v_pos.size() != 2) { \
+ errorstream<< "Invalid pos for element " << a << "specified: \"" \
+ << parts[b] << "\"" << std::endl; \
+ return; \
}
-#define MY_CHECKGEOM(a, b) \
- if (v_geom.size() != 2) { \
- errorstream << "Invalid geometry for element " << a << "specified: \"" \
- << parts[b] << "\"" << std::endl; \
- return; \
+#define MY_CHECKGEOM(a,b) \
+ if (v_geom.size() != 2) { \
+ errorstream<< "Invalid geometry for element " << a << \
+ "specified: \"" << parts[b] << "\"" << std::endl; \
+ return; \
}
/*
GUIFormSpecMenu
@@ -88,18 +89,21 @@ static unsigned int font_line_height(gui::IGUIFont *font)
inline u32 clamp_u8(s32 value)
{
- return (u32)MYMIN(MYMAX(value, 0), 255);
+ return (u32) MYMIN(MYMAX(value, 0), 255);
}
-GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, Client *client, ISimpleTextureSource *tsrc,
- IFormSource *fsrc, TextDest *tdst, const std::string &formspecPrepend,
- bool remap_dbl_click) :
- GUIModalMenu(RenderingEngine::get_gui_env(), parent, id, menumgr,
- remap_dbl_click),
- m_invmgr(client), m_tsrc(tsrc), m_client(client),
- m_formspec_prepend(formspecPrepend), m_form_src(fsrc), m_text_dst(tdst),
- m_joystick(joystick)
+GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick,
+ gui::IGUIElement *parent, s32 id, IMenuManager *menumgr,
+ Client *client, ISimpleTextureSource *tsrc, IFormSource *fsrc, TextDest *tdst,
+ const std::string &formspecPrepend, bool remap_dbl_click):
+ GUIModalMenu(RenderingEngine::get_gui_env(), parent, id, menumgr, remap_dbl_click),
+ m_invmgr(client),
+ m_tsrc(tsrc),
+ m_client(client),
+ m_formspec_prepend(formspecPrepend),
+ m_form_src(fsrc),
+ m_text_dst(tdst),
+ m_joystick(joystick)
{
current_keys_pending.key_down = false;
current_keys_pending.key_up = false;
@@ -137,13 +141,12 @@ GUIFormSpecMenu::~GUIFormSpecMenu()
}
void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
- JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
- const std::string &formspecPrepend)
+ JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
+ const std::string &formspecPrepend)
{
if (cur_formspec == nullptr) {
cur_formspec = new GUIFormSpecMenu(joystick, guiroot, -1, &g_menumgr,
- client, client->getTextureSource(), fs_src, txt_dest,
- formspecPrepend);
+ client, client->getTextureSource(), fs_src, txt_dest, formspecPrepend);
cur_formspec->doPause = false;
/*
@@ -163,7 +166,7 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
void GUIFormSpecMenu::removeChildren()
{
- const core::list<gui::IGUIElement *> &children = getChildren();
+ const core::list<gui::IGUIElement*> &children = getChildren();
while (!children.empty()) {
(*children.getLast())->remove();
@@ -186,10 +189,10 @@ void GUIFormSpecMenu::setInitialFocus()
// 5. first focusable (not statictext, not tabheader)
// 6. first child element
- core::list<gui::IGUIElement *> children = getChildren();
+ core::list<gui::IGUIElement*> children = getChildren();
// in case "children" contains any NULL elements, remove them
- for (core::list<gui::IGUIElement *>::Iterator it = children.begin();
+ for (core::list<gui::IGUIElement*>::Iterator it = children.begin();
it != children.end();) {
if (*it)
++it;
@@ -199,7 +202,8 @@ void GUIFormSpecMenu::setInitialFocus()
// 1. first empty editbox
for (gui::IGUIElement *it : children) {
- if (it->getType() == gui::EGUIET_EDIT_BOX && it->getText()[0] == 0) {
+ if (it->getType() == gui::EGUIET_EDIT_BOX
+ && it->getText()[0] == 0) {
Environment->setFocus(it);
return;
}
@@ -222,7 +226,7 @@ void GUIFormSpecMenu::setInitialFocus()
}
// 4. last button
- for (core::list<gui::IGUIElement *>::Iterator it = children.getLast();
+ for (core::list<gui::IGUIElement*>::Iterator it = children.getLast();
it != children.end(); --it) {
if ((*it)->getType() == gui::EGUIET_BUTTON) {
Environment->setFocus(*it);
@@ -233,7 +237,7 @@ void GUIFormSpecMenu::setInitialFocus()
// 5. first focusable (not statictext, not tabheader)
for (gui::IGUIElement *it : children) {
if (it->getType() != gui::EGUIET_STATIC_TEXT &&
- it->getType() != gui::EGUIET_TAB_CONTROL) {
+ it->getType() != gui::EGUIET_TAB_CONTROL) {
Environment->setFocus(it);
return;
}
@@ -246,7 +250,7 @@ void GUIFormSpecMenu::setInitialFocus()
Environment->setFocus(*(children.begin()));
}
-GUITable *GUIFormSpecMenu::getTable(const std::string &tablename)
+GUITable* GUIFormSpecMenu::getTable(const std::string &tablename)
{
for (auto &table : m_tables) {
if (tablename == table.first.fname)
@@ -255,7 +259,7 @@ GUITable *GUIFormSpecMenu::getTable(const std::string &tablename)
return 0;
}
-std::vector<std::string> *GUIFormSpecMenu::getDropDownValues(const std::string &name)
+std::vector<std::string>* GUIFormSpecMenu::getDropDownValues(const std::string &name)
{
for (auto &dropdown : m_dropdowns) {
if (name == dropdown.first.fname)
@@ -277,7 +281,7 @@ v2s32 GUIFormSpecMenu::getElementBasePos(const std::vector<std::string> *v_pos)
v2s32 GUIFormSpecMenu::getRealCoordinateBasePos(const std::vector<std::string> &v_pos)
{
return v2s32((stof(v_pos[0]) + pos_offset.X) * imgsize.X,
- (stof(v_pos[1]) + pos_offset.Y) * imgsize.Y);
+ (stof(v_pos[1]) + pos_offset.Y) * imgsize.Y);
}
v2s32 GUIFormSpecMenu::getRealCoordinateGeometry(const std::vector<std::string> &v_geom)
@@ -285,15 +289,15 @@ v2s32 GUIFormSpecMenu::getRealCoordinateGeometry(const std::vector<std::string>
return v2s32(stof(v_geom[0]) * imgsize.X, stof(v_geom[1]) * imgsize.Y);
}
-void GUIFormSpecMenu::parseSize(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ',');
+ std::vector<std::string> parts = split(element,',');
if (((parts.size() == 2) || parts.size() == 3) ||
- ((parts.size() > 3) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
+ ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
if (parts[1].find(';') != std::string::npos)
- parts[1] = parts[1].substr(0, parts[1].find(';'));
+ parts[1] = parts[1].substr(0,parts[1].find(';'));
data->invsize.X = MYMAX(0, stof(parts[0]));
data->invsize.Y = MYMAX(0, stof(parts[1]));
@@ -302,18 +306,17 @@ void GUIFormSpecMenu::parseSize(parserData *data, const std::string &element)
#ifndef __ANDROID__
if (parts.size() == 3) {
if (parts[2] == "true") {
- lockSize(true, v2u32(800, 600));
+ lockSize(true,v2u32(800,600));
}
}
#endif
data->explicit_size = true;
return;
}
- errorstream << "Invalid size element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid size element (" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseContainer(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseContainer(parserData* data, const std::string &element)
{
std::vector<std::string> parts = split(element, ',');
@@ -326,16 +329,13 @@ void GUIFormSpecMenu::parseContainer(parserData *data, const std::string &elemen
pos_offset.Y += stof(parts[1]);
return;
}
- errorstream << "Invalid container start element (" << parts.size() << "): '"
- << element << "'" << std::endl;
+ errorstream<< "Invalid container start element (" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseContainerEnd(parserData *data)
+void GUIFormSpecMenu::parseContainerEnd(parserData* data)
{
if (container_stack.empty()) {
- errorstream << "Invalid container end element, no matching container "
- "start element"
- << std::endl;
+ errorstream<< "Invalid container end element, no matching container start element" << std::endl;
} else {
pos_offset = container_stack.top();
container_stack.pop();
@@ -347,14 +347,13 @@ void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &
std::vector<std::string> parts = split(element, ';');
if (parts.size() < 4 ||
- (parts.size() > 5 &&
- m_formspec_version <= FORMSPEC_API_VERSION)) {
+ (parts.size() > 5 && m_formspec_version <= FORMSPEC_API_VERSION)) {
errorstream << "Invalid scroll_container start element (" << parts.size()
- << "): '" << element << "'" << std::endl;
+ << "): '" << element << "'" << std::endl;
return;
}
- std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
std::string scrollbar_name = parts[2];
std::string orientation = parts[3];
@@ -374,8 +373,8 @@ void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &
scroll_factor *= -imgsize.X;
else
warningstream << "GUIFormSpecMenu::parseScrollContainer(): "
- << "Invalid scroll_container orientation: " << orientation
- << std::endl;
+ << "Invalid scroll_container orientation: " << orientation
+ << std::endl;
// old parent (at first: this)
// ^ is parent of clipper
@@ -389,12 +388,17 @@ void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &
data->current_parent, 0, rect_clipper);
// make mover
- FieldSpec spec_mover("", L"", L"", 258 + m_fields.size());
+ FieldSpec spec_mover(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
core::rect<s32> rect_mover = core::rect<s32>(0, 0, geom.X, geom.Y);
- GUIScrollContainer *mover = new GUIScrollContainer(Environment, clipper,
- spec_mover.fid, rect_mover, orientation, scroll_factor);
+ GUIScrollContainer *mover = new GUIScrollContainer(Environment,
+ clipper, spec_mover.fid, rect_mover, orientation, scroll_factor);
data->current_parent = mover;
@@ -415,7 +419,7 @@ void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
if (data->current_parent == this || data->current_parent->getParent() == this ||
container_stack.empty()) {
errorstream << "Invalid scroll_container end element, "
- << "no matching scroll_container start element" << std::endl;
+ << "no matching scroll_container start element" << std::endl;
return;
}
@@ -425,7 +429,7 @@ void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
// not 0,0, it is a normal container that was opened last, not a
// scroll_container
errorstream << "Invalid scroll_container end element, "
- << "an inner container was left open" << std::endl;
+ << "an inner container was left open" << std::endl;
return;
}
@@ -437,25 +441,25 @@ void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
{
if (m_client == 0) {
- warningstream << "invalid use of 'list' with m_client==0" << std::endl;
+ warningstream<<"invalid use of 'list' with m_client==0"<<std::endl;
return;
}
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (((parts.size() == 4) || (parts.size() == 5)) ||
- ((parts.size() > 5) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
+ ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
std::string location = parts[0];
std::string listname = parts[1];
- std::vector<std::string> v_pos = split(parts[2], ',');
- std::vector<std::string> v_geom = split(parts[3], ',');
+ std::vector<std::string> v_pos = split(parts[2],',');
+ std::vector<std::string> v_geom = split(parts[3],',');
std::string startindex;
if (parts.size() == 5)
startindex = parts[4];
- MY_CHECKPOS("list", 2);
- MY_CHECKGEOM("list", 3);
+ MY_CHECKPOS("list",2);
+ MY_CHECKGEOM("list",3);
InventoryLocation loc;
@@ -473,47 +477,46 @@ void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
start_i = stoi(startindex);
if (geom.X < 0 || geom.Y < 0 || start_i < 0) {
- errorstream << "Invalid list element: '" << element << "'"
- << std::endl;
+ errorstream << "Invalid list element: '" << element << "'" << std::endl;
return;
}
if (!data->explicit_size)
- warningstream << "invalid use of list without a size[] element"
- << std::endl;
+ warningstream << "invalid use of list without a size[] element" << std::endl;
- FieldSpec spec("", L"", L"", 258 + m_fields.size(), 3);
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ 3
+ );
- v2f32 slot_spacing = data->real_coordinates
- ? v2f32(imgsize.X * 1.25f,
- imgsize.Y * 1.25f)
- : spacing;
+ v2f32 slot_spacing = data->real_coordinates ?
+ v2f32(imgsize.X * 1.25f, imgsize.Y * 1.25f) : spacing;
v2s32 pos = data->real_coordinates ? getRealCoordinateBasePos(v_pos)
- : getElementBasePos(&v_pos);
+ : getElementBasePos(&v_pos);
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y,
pos.X + (geom.X - 1) * slot_spacing.X + imgsize.X,
pos.Y + (geom.Y - 1) * slot_spacing.Y + imgsize.Y);
- GUIInventoryList *e = new GUIInventoryList(Environment,
- data->current_parent, spec.fid, rect, m_invmgr, loc,
- listname, geom, start_i, imgsize, slot_spacing, this,
- data->inventorylist_options, m_font);
+ GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent,
+ spec.fid, rect, m_invmgr, loc, listname, geom, start_i, imgsize,
+ slot_spacing, this, data->inventorylist_options, m_font);
m_inventorylists.push_back(e);
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid list element(" << parts.size() << "): '" << element << "'"
- << std::endl;
+ errorstream<< "Invalid list element(" << parts.size() << "): '" << element << "'" << std::endl;
}
void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element)
{
if (m_client == 0) {
- errorstream << "WARNING: invalid use of 'listring' with m_client==0"
- << std::endl;
+ errorstream << "WARNING: invalid use of 'listring' with m_client==0" << std::endl;
return;
}
@@ -539,25 +542,23 @@ void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element
// insert the last two inv list elements into the list ring
const GUIInventoryList *spa = m_inventorylists[siz - 2];
const GUIInventoryList *spb = m_inventorylists[siz - 1];
- m_inventory_rings.emplace_back(
- spa->getInventoryloc(), spa->getListname());
- m_inventory_rings.emplace_back(
- spb->getInventoryloc(), spb->getListname());
+ m_inventory_rings.emplace_back(spa->getInventoryloc(), spa->getListname());
+ m_inventory_rings.emplace_back(spb->getInventoryloc(), spb->getListname());
return;
}
- errorstream << "Invalid list ring element(" << parts.size() << ", "
- << m_inventorylists.size() << "): '" << element << "'" << std::endl;
+ errorstream<< "Invalid list ring element(" << parts.size() << ", "
+ << m_inventorylists.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseCheckbox(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (((parts.size() >= 3) && (parts.size() <= 4)) ||
- ((parts.size() > 4) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
std::string name = parts[1];
std::string label = parts[2];
std::string selected;
@@ -565,17 +566,15 @@ void GUIFormSpecMenu::parseCheckbox(parserData *data, const std::string &element
if (parts.size() >= 4)
selected = parts[3];
- MY_CHECKPOS("checkbox", 0);
+ MY_CHECKPOS("checkbox",0);
bool fselected = false;
if (selected == "true")
fselected = true;
- std::wstring wlabel =
- translate_string(utf8_to_wide(unescape_string(label)));
- const core::dimension2d<u32> label_size =
- m_font->getDimension(wlabel.c_str());
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
+ const core::dimension2d<u32> label_size = m_font->getDimension(wlabel.c_str());
s32 cb_size = Environment->getSkin()->getSize(gui::EGDS_CHECK_BOX_WIDTH);
s32 y_center = (std::max(label_size.Height, (u32)cb_size) + 1) / 2;
@@ -585,19 +584,28 @@ void GUIFormSpecMenu::parseCheckbox(parserData *data, const std::string &element
if (data->real_coordinates) {
pos = getRealCoordinateBasePos(v_pos);
- rect = core::rect<s32>(pos.X, pos.Y - y_center,
+ rect = core::rect<s32>(
+ pos.X,
+ pos.Y - y_center,
pos.X + label_size.Width + cb_size + 7,
- pos.Y + y_center);
+ pos.Y + y_center
+ );
} else {
pos = getElementBasePos(&v_pos);
- rect = core::rect<s32>(pos.X, pos.Y + imgsize.Y / 2 - y_center,
+ rect = core::rect<s32>(
+ pos.X,
+ pos.Y + imgsize.Y / 2 - y_center,
pos.X + label_size.Width + cb_size + 7,
- pos.Y + imgsize.Y / 2 + y_center);
+ pos.Y + imgsize.Y / 2 + y_center
+ );
}
- FieldSpec spec(name,
- wlabel, // Needed for displaying text on MSVC
- wlabel, 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ wlabel, //Needed for displaying text on MSVC
+ wlabel,
+ 258+m_fields.size()
+ );
spec.ftype = f_CheckBox;
@@ -616,22 +624,21 @@ void GUIFormSpecMenu::parseCheckbox(parserData *data, const std::string &element
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid checkbox element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid checkbox element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseScrollBar(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (parts.size() >= 5) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[3];
std::string value = parts[4];
- MY_CHECKPOS("scrollbar", 0);
- MY_CHECKGEOM("scrollbar", 1);
+ MY_CHECKPOS("scrollbar",0);
+ MY_CHECKGEOM("scrollbar",1);
v2s32 pos;
v2s32 dim;
@@ -645,10 +652,15 @@ void GUIFormSpecMenu::parseScrollBar(parserData *data, const std::string &elemen
dim.Y = stof(v_geom[1]) * spacing.Y;
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y);
+ core::rect<s32> rect =
+ core::rect<s32>(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y);
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258+m_fields.size()
+ );
bool is_horizontal = true;
@@ -656,7 +668,7 @@ void GUIFormSpecMenu::parseScrollBar(parserData *data, const std::string &elemen
is_horizontal = false;
spec.ftype = f_ScrollBar;
- spec.send = true;
+ spec.send = true;
GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent,
spec.fid, rect, is_horizontal, true);
@@ -677,28 +689,27 @@ void GUIFormSpecMenu::parseScrollBar(parserData *data, const std::string &elemen
s32 scrollbar_size = is_horizontal ? dim.X : dim.Y;
- e->setPageSize(scrollbar_size * (max - min + 1) /
- data->scrollbar_options.thumb_size);
+ e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size);
if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
- m_scrollbars.emplace_back(spec, e);
+ m_scrollbars.emplace_back(spec,e);
m_fields.push_back(spec);
return;
}
errorstream << "Invalid scrollbar element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ << "'" << std::endl;
}
-void GUIFormSpecMenu::parseScrollBarOptions(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string &element)
{
std::vector<std::string> parts = split(element, ';');
if (parts.size() == 0) {
- warningstream << "Invalid scrollbaroptions element(" << parts.size()
- << "): '" << element << "'" << std::endl;
+ warningstream << "Invalid scrollbaroptions element(" << parts.size() << "): '" <<
+ element << "'" << std::endl;
return;
}
@@ -706,8 +717,8 @@ void GUIFormSpecMenu::parseScrollBarOptions(parserData *data, const std::string
std::vector<std::string> options = split(i, '=');
if (options.size() != 2) {
- warningstream << "Invalid scrollbaroptions option syntax: '"
- << element << "'" << std::endl;
+ warningstream << "Invalid scrollbaroptions option syntax: '" <<
+ element << "'" << std::endl;
continue; // Go to next option
}
@@ -732,31 +743,28 @@ void GUIFormSpecMenu::parseScrollBarOptions(parserData *data, const std::string
} else if (options[0] == "arrows") {
std::string value = trim(options[1]);
if (value == "hide")
- data->scrollbar_options.arrow_visiblity =
- GUIScrollBar::HIDE;
+ data->scrollbar_options.arrow_visiblity = GUIScrollBar::HIDE;
else if (value == "show")
- data->scrollbar_options.arrow_visiblity =
- GUIScrollBar::SHOW;
+ data->scrollbar_options.arrow_visiblity = GUIScrollBar::SHOW;
else // Auto hide/show
- data->scrollbar_options.arrow_visiblity =
- GUIScrollBar::DEFAULT;
+ data->scrollbar_options.arrow_visiblity = GUIScrollBar::DEFAULT;
continue;
}
- warningstream << "Invalid scrollbaroptions option(" << options[0]
- << "): '" << element << "'" << std::endl;
+ warningstream << "Invalid scrollbaroptions option(" << options[0] <<
+ "): '" << element << "'" << std::endl;
}
}
-void GUIFormSpecMenu::parseImage(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 3) ||
- ((parts.size() > 3) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = unescape_string(parts[2]);
MY_CHECKPOS("image", 0);
@@ -775,27 +783,29 @@ void GUIFormSpecMenu::parseImage(parserData *data, const std::string &element)
}
if (!data->explicit_size)
- warningstream << "invalid use of image without a size[] element"
- << std::endl;
+ warningstream<<"invalid use of image without a size[] element"<<std::endl;
video::ITexture *texture = m_tsrc->getTexture(name);
if (!texture) {
- errorstream << "GUIFormSpecMenu::parseImage() Unable to load "
- "texture:"
- << std::endl
- << "\t" << name << std::endl;
+ errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
+ << std::endl << "\t" << name << std::endl;
return;
}
- FieldSpec spec(name, L"", L"", 258 + m_fields.size(), 1);
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ 1
+ );
core::rect<s32> rect(pos, pos + geom);
- gui::IGUIImage *e = Environment->addImage(
- rect, data->current_parent, spec.fid, 0, true);
+ gui::IGUIImage *e = Environment->addImage(rect, data->current_parent,
+ spec.fid, 0, true);
e->setImage(texture);
e->setScaleImage(true);
auto style = getDefaultStyleForElement("image", spec.fname);
- e->setNotClipped(
- style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
m_fields.push_back(spec);
// images should let events through
@@ -805,7 +815,7 @@ void GUIFormSpecMenu::parseImage(parserData *data, const std::string &element)
}
if (parts.size() == 2) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_pos = split(parts[0],',');
std::string name = unescape_string(parts[1]);
MY_CHECKPOS("image", 0);
@@ -813,24 +823,25 @@ void GUIFormSpecMenu::parseImage(parserData *data, const std::string &element)
v2s32 pos = getElementBasePos(&v_pos);
if (!data->explicit_size)
- warningstream << "invalid use of image without a size[] element"
- << std::endl;
+ warningstream<<"invalid use of image without a size[] element"<<std::endl;
video::ITexture *texture = m_tsrc->getTexture(name);
if (!texture) {
- errorstream << "GUIFormSpecMenu::parseImage() Unable to load "
- "texture:"
- << std::endl
- << "\t" << name << std::endl;
+ errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
+ << std::endl << "\t" << name << std::endl;
return;
}
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
- gui::IGUIImage *e = Environment->addImage(
- texture, pos, true, data->current_parent, spec.fid, 0);
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
+ gui::IGUIImage *e = Environment->addImage(texture, pos, true,
+ data->current_parent, spec.fid, 0);
auto style = getDefaultStyleForElement("image", spec.fname);
- e->setNotClipped(
- style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
m_fields.push_back(spec);
// images should let events through
@@ -838,8 +849,7 @@ void GUIFormSpecMenu::parseImage(parserData *data, const std::string &element)
m_clickthrough_elements.push_back(e);
return;
}
- errorstream << "Invalid image element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid image element(" << parts.size() << "): '" << element << "'" << std::endl;
}
void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &element)
@@ -847,14 +857,13 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
std::vector<std::string> parts = split(element, ';');
if (parts.size() != 6 && parts.size() != 7 &&
- !(parts.size() > 7 &&
- m_formspec_version > FORMSPEC_API_VERSION)) {
- errorstream << "Invalid animated_image element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ !(parts.size() > 7 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ errorstream << "Invalid animated_image element(" << parts.size()
+ << "): '" << element << "'" << std::endl;
return;
}
- std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
std::string name = parts[2];
std::string texture_name = unescape_string(parts[3]);
@@ -877,17 +886,21 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
}
if (!data->explicit_size)
- warningstream << "Invalid use of animated_image without a size[] element"
- << std::endl;
-
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ warningstream << "Invalid use of animated_image without a size[] element" << std::endl;
+
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_AnimatedImage;
spec.send = true;
core::rect<s32> rect = core::rect<s32>(pos, pos + geom);
- GUIAnimatedImage *e = new GUIAnimatedImage(Environment, this, spec.fid, rect,
- texture_name, frame_count, frame_duration, m_tsrc);
+ GUIAnimatedImage *e = new GUIAnimatedImage(Environment, this, spec.fid,
+ rect, texture_name, frame_count, frame_duration, m_tsrc);
if (parts.size() >= 7)
e->setFrameIndex(stoi(parts[6]) - 1);
@@ -901,19 +914,19 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
m_fields.push_back(spec);
}
-void GUIFormSpecMenu::parseItemImage(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 3) ||
- ((parts.size() > 3) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
- MY_CHECKPOS("itemimage", 0);
- MY_CHECKGEOM("itemimage", 1);
+ MY_CHECKPOS("itemimage",0);
+ MY_CHECKGEOM("itemimage",1);
v2s32 pos;
v2s32 geom;
@@ -927,17 +940,20 @@ void GUIFormSpecMenu::parseItemImage(parserData *data, const std::string &elemen
geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
}
- if (!data->explicit_size)
- warningstream << "invalid use of item_image without a size[] "
- "element"
- << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of item_image without a size[] element"<<std::endl;
- FieldSpec spec("", L"", L"", 258 + m_fields.size(), 2);
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ 2
+ );
spec.ftype = f_ItemImage;
- GUIItemImage *e = new GUIItemImage(Environment, data->current_parent,
- spec.fid, core::rect<s32>(pos, pos + geom), name, m_font,
- m_client);
+ GUIItemImage *e = new GUIItemImage(Environment, data->current_parent, spec.fid,
+ core::rect<s32>(pos, pos + geom), name, m_font, m_client);
auto style = getDefaultStyleForElement("item_image", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
@@ -947,25 +963,24 @@ void GUIFormSpecMenu::parseItemImage(parserData *data, const std::string &elemen
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid ItemImage element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid ItemImage element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseButton(
- parserData *data, const std::string &element, const std::string &type)
+void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
+ const std::string &type)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 4) ||
- ((parts.size() > 4) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
std::string label = parts[3];
- MY_CHECKPOS("button", 0);
- MY_CHECKGEOM("button", 1);
+ MY_CHECKPOS("button",0);
+ MY_CHECKGEOM("button",1);
v2s32 pos;
v2s32 geom;
@@ -974,34 +989,36 @@ void GUIFormSpecMenu::parseButton(
if (data->real_coordinates) {
pos = getRealCoordinateBasePos(v_pos);
geom = getRealCoordinateGeometry(v_geom);
- rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
} else {
pos = getElementBasePos(&v_pos);
geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- pos.Y += (stof(v_geom[1]) * (float)imgsize.Y) / 2;
+ pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
rect = core::rect<s32>(pos.X, pos.Y - m_btn_height,
- pos.X + geom.X, pos.Y + m_btn_height);
+ pos.X + geom.X, pos.Y + m_btn_height);
}
- if (!data->explicit_size)
- warningstream << "invalid use of button without a size[] element"
- << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of button without a size[] element"<<std::endl;
- std::wstring wlabel =
- translate_string(utf8_to_wide(unescape_string(label)));
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- FieldSpec spec(name, wlabel, L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ wlabel,
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_Button;
- if (type == "button_exit")
+ if(type == "button_exit")
spec.is_exit = true;
GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc,
data->current_parent, spec.fid, spec.flabel.c_str());
- auto style = getStyleForElement(
- type, name, (type != "button") ? "button" : "");
+ auto style = getStyleForElement(type, name, (type != "button") ? "button" : "");
e->setStyles(style);
if (spec.fname == m_focused_element) {
@@ -1011,22 +1028,21 @@ void GUIFormSpecMenu::parseButton(
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid button element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid button element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseBackground(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() >= 3 && parts.size() <= 5) ||
(parts.size() > 5 && m_formspec_version > FORMSPEC_API_VERSION)) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = unescape_string(parts[2]);
- MY_CHECKPOS("background", 0);
- MY_CHECKGEOM("background", 1);
+ MY_CHECKPOS("background",0);
+ MY_CHECKGEOM("background",1);
v2s32 pos;
v2s32 geom;
@@ -1049,7 +1065,7 @@ void GUIFormSpecMenu::parseBackground(parserData *data, const std::string &eleme
pos = getRealCoordinateBasePos(v_pos) * -1;
geom = v2s32(0, 0);
} else {
- pos.X = stoi(v_pos[0]); // acts as offset
+ pos.X = stoi(v_pos[0]); //acts as offset
pos.Y = stoi(v_pos[1]);
}
clip = true;
@@ -1064,28 +1080,27 @@ void GUIFormSpecMenu::parseBackground(parserData *data, const std::string &eleme
middle.LowerRightCorner = core::vector2di(-x, -x);
} else if (v_middle.size() == 2) {
s32 x = stoi(v_middle[0]);
- s32 y = stoi(v_middle[1]);
+ s32 y = stoi(v_middle[1]);
middle.UpperLeftCorner = core::vector2di(x, y);
middle.LowerRightCorner = core::vector2di(-x, -y);
// `-x` is interpreted as `w - x`
} else if (v_middle.size() == 4) {
- middle.UpperLeftCorner = core::vector2di(
- stoi(v_middle[0]), stoi(v_middle[1]));
- middle.LowerRightCorner = core::vector2di(
- stoi(v_middle[2]), stoi(v_middle[3]));
+ middle.UpperLeftCorner = core::vector2di(stoi(v_middle[0]), stoi(v_middle[1]));
+ middle.LowerRightCorner = core::vector2di(stoi(v_middle[2]), stoi(v_middle[3]));
} else {
- warningstream << "Invalid rectangle given to middle "
- "param of background[] element"
- << std::endl;
+ warningstream << "Invalid rectangle given to middle param of background[] element" << std::endl;
}
}
if (!data->explicit_size && !clip)
- warningstream << "invalid use of unclipped background without a "
- "size[] element"
- << std::endl;
+ warningstream << "invalid use of unclipped background without a size[] element" << std::endl;
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
core::rect<s32> rect;
if (!clip) {
@@ -1096,8 +1111,8 @@ void GUIFormSpecMenu::parseBackground(parserData *data, const std::string &eleme
rect = core::rect<s32>(-pos, pos);
}
- GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this,
- spec.fid, rect, name, middle, m_tsrc, clip);
+ GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this, spec.fid,
+ rect, name, middle, m_tsrc, clip);
FATAL_ERROR_IF(!e, "Failed to create background formspec element");
@@ -1109,13 +1124,12 @@ void GUIFormSpecMenu::parseBackground(parserData *data, const std::string &eleme
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid background element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid background element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseTableOptions(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTableOptions(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
data->table_options.clear();
for (const std::string &part : parts) {
@@ -1125,13 +1139,13 @@ void GUIFormSpecMenu::parseTableOptions(parserData *data, const std::string &ele
}
}
-void GUIFormSpecMenu::parseTableColumns(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTableColumns(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
data->table_columns.clear();
for (const std::string &part : parts) {
- std::vector<std::string> col_parts = split(part, ',');
+ std::vector<std::string> col_parts = split(part,',');
GUITable::TableColumn column;
// Parse column type
if (!col_parts.empty())
@@ -1145,25 +1159,25 @@ void GUIFormSpecMenu::parseTableColumns(parserData *data, const std::string &ele
}
}
-void GUIFormSpecMenu::parseTable(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (((parts.size() == 4) || (parts.size() == 5)) ||
- ((parts.size() > 5) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
- std::vector<std::string> items = split(parts[3], ',');
+ std::vector<std::string> items = split(parts[3],',');
std::string str_initial_selection;
std::string str_transparent = "false";
if (parts.size() >= 5)
str_initial_selection = parts[4];
- MY_CHECKPOS("table", 0);
- MY_CHECKGEOM("table", 1);
+ MY_CHECKPOS("table",0);
+ MY_CHECKGEOM("table",1);
v2s32 pos;
v2s32 geom;
@@ -1177,19 +1191,22 @@ void GUIFormSpecMenu::parseTable(parserData *data, const std::string &element)
geom.Y = stof(v_geom[1]) * spacing.Y;
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_Table;
for (std::string &item : items) {
- item = wide_to_utf8(unescape_translate(
- utf8_to_wide(unescape_string(item))));
+ item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
}
- // now really show table
+ //now really show table
GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
rect, m_tsrc);
@@ -1213,21 +1230,20 @@ void GUIFormSpecMenu::parseTable(parserData *data, const std::string &element)
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid table element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid table element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseTextList(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (((parts.size() == 4) || (parts.size() == 5) || (parts.size() == 6)) ||
- ((parts.size() > 6) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 6) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
- std::vector<std::string> items = split(parts[3], ',');
+ std::vector<std::string> items = split(parts[3],',');
std::string str_initial_selection;
std::string str_transparent = "false";
@@ -1237,8 +1253,8 @@ void GUIFormSpecMenu::parseTextList(parserData *data, const std::string &element
if (parts.size() >= 6)
str_transparent = parts[5];
- MY_CHECKPOS("textlist", 0);
- MY_CHECKGEOM("textlist", 1);
+ MY_CHECKPOS("textlist",0);
+ MY_CHECKGEOM("textlist",1);
v2s32 pos;
v2s32 geom;
@@ -1252,19 +1268,22 @@ void GUIFormSpecMenu::parseTextList(parserData *data, const std::string &element
geom.Y = stof(v_geom[1]) * spacing.Y;
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_Table;
for (std::string &item : items) {
- item = wide_to_utf8(unescape_translate(
- utf8_to_wide(unescape_string(item))));
+ item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
}
- // now really show list
+ //now really show list
GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
rect, m_tsrc);
@@ -1288,16 +1307,16 @@ void GUIFormSpecMenu::parseTextList(parserData *data, const std::string &element
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid textlist element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid textlist element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseDropDown(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element)
{
std::vector<std::string> parts = split(element, ';');
if (parts.size() == 5 || parts.size() == 6 ||
- (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION))
+ {
std::vector<std::string> v_pos = split(parts[0], ',');
std::string name = parts[2];
std::vector<std::string> items = split(parts[3], ',');
@@ -1306,53 +1325,57 @@ void GUIFormSpecMenu::parseDropDown(parserData *data, const std::string &element
if (parts.size() >= 6 && is_yes(parts[5]))
m_dropdown_index_event[name] = true;
- MY_CHECKPOS("dropdown", 0);
+ MY_CHECKPOS("dropdown",0);
v2s32 pos;
v2s32 geom;
core::rect<s32> rect;
if (data->real_coordinates) {
- std::vector<std::string> v_geom = split(parts[1], ',');
+ std::vector<std::string> v_geom = split(parts[1],',');
if (v_geom.size() == 1)
v_geom.emplace_back("1");
- MY_CHECKGEOM("dropdown", 1);
+ MY_CHECKGEOM("dropdown",1);
pos = getRealCoordinateBasePos(v_pos);
geom = getRealCoordinateGeometry(v_geom);
- rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
} else {
pos = getElementBasePos(&v_pos);
s32 width = stof(parts[1]) * spacing.Y;
- rect = core::rect<s32>(pos.X, pos.Y, pos.X + width,
- pos.Y + (m_btn_height * 2));
+ rect = core::rect<s32>(pos.X, pos.Y,
+ pos.X + width, pos.Y + (m_btn_height * 2));
}
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_DropDown;
spec.send = true;
- // now really show list
- gui::IGUIComboBox *e = Environment->addComboBox(
- rect, data->current_parent, spec.fid);
+ //now really show list
+ gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent,
+ spec.fid);
if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
for (const std::string &item : items) {
- e->addItem(unescape_translate(unescape_string(utf8_to_wide(item)))
- .c_str());
+ e->addItem(unescape_translate(unescape_string(
+ utf8_to_wide(item))).c_str());
}
if (!str_initial_selection.empty())
- e->setSelected(stoi(str_initial_selection) - 1);
+ e->setSelected(stoi(str_initial_selection)-1);
auto style = getDefaultStyleForElement("dropdown", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
@@ -1368,31 +1391,32 @@ void GUIFormSpecMenu::parseDropDown(parserData *data, const std::string &element
return;
}
errorstream << "Invalid dropdown element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ << "'" << std::endl;
}
void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (parts.size() == 2 ||
(parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) {
field_close_on_enter[parts[0]] = is_yes(parts[1]);
}
}
-void GUIFormSpecMenu::parsePwdField(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (parts.size() == 4 ||
- (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION)) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
std::string label = parts[3];
- MY_CHECKPOS("pwdfield", 0);
- MY_CHECKGEOM("pwdfield", 1);
+ MY_CHECKPOS("pwdfield",0);
+ MY_CHECKGEOM("pwdfield",1);
v2s32 pos;
v2s32 geom;
@@ -1406,22 +1430,27 @@ void GUIFormSpecMenu::parsePwdField(parserData *data, const std::string &element
geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- pos.Y += (stof(v_geom[1]) * (float)imgsize.Y) / 2;
+ pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
pos.Y -= m_btn_height;
- geom.Y = m_btn_height * 2;
+ geom.Y = m_btn_height*2;
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- std::wstring wlabel =
- translate_string(utf8_to_wide(unescape_string(label)));
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- FieldSpec spec(name, wlabel, L"", 258 + m_fields.size(), 0, ECI_IBEAM);
+ FieldSpec spec(
+ name,
+ wlabel,
+ L"",
+ 258 + m_fields.size(),
+ 0,
+ ECI_IBEAM
+ );
spec.send = true;
- gui::IGUIEditBox *e = Environment->addEditBox(
- 0, rect, true, data->current_parent, spec.fid);
+ gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true,
+ data->current_parent, spec.fid);
if (spec.fname == m_focused_element) {
Environment->setFocus(e);
@@ -1431,25 +1460,24 @@ void GUIFormSpecMenu::parsePwdField(parserData *data, const std::string &element
int font_height = g_fontengine->getTextHeight();
rect.UpperLeftCorner.Y -= font_height;
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height;
- gui::StaticText::add(Environment, spec.flabel.c_str(), rect,
- false, true, data->current_parent, 0);
+ gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
+ data->current_parent, 0);
}
- e->setPasswordBox(true, L'*');
+ e->setPasswordBox(true,L'*');
auto style = getDefaultStyleForElement("pwdfield", name, "field");
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
- e->setOverrideColor(style.getColor(
- StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
e->setOverrideFont(style.getFont());
irr::SEvent evt;
- evt.EventType = EET_KEY_INPUT_EVENT;
- evt.KeyInput.Key = KEY_END;
- evt.KeyInput.Char = 0;
- evt.KeyInput.Control = false;
- evt.KeyInput.Shift = false;
+ evt.EventType = EET_KEY_INPUT_EVENT;
+ evt.KeyInput.Key = KEY_END;
+ evt.KeyInput.Char = 0;
+ evt.KeyInput.Control = false;
+ evt.KeyInput.Shift = false;
evt.KeyInput.PressedDown = true;
e->OnEvent(evt);
@@ -1459,17 +1487,15 @@ void GUIFormSpecMenu::parsePwdField(parserData *data, const std::string &element
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid pwdfield element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid pwdfield element(" << parts.size() << "): '" << element << "'" << std::endl;
}
void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
- core::rect<s32> &rect, bool is_multiline)
+ core::rect<s32> &rect, bool is_multiline)
{
bool is_editable = !spec.fname.empty();
if (!is_editable && !is_multiline) {
- // spec field id to 0, this stops submit searching for a value that isn't
- // there
+ // spec field id to 0, this stops submit searching for a value that isn't there
gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
data->current_parent, 0);
return;
@@ -1477,25 +1503,23 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
if (is_editable) {
spec.send = true;
- } else if (is_multiline && spec.fdefault.empty() && !spec.flabel.empty()) {
+ } else if (is_multiline &&
+ spec.fdefault.empty() && !spec.flabel.empty()) {
// Multiline textareas: swap default and label for backwards compat
spec.flabel.swap(spec.fdefault);
}
gui::IGUIEditBox *e = nullptr;
static constexpr bool use_intl_edit_box = USE_FREETYPE &&
- IRRLICHT_VERSION_MAJOR == 1 &&
- IRRLICHT_VERSION_MINOR < 9;
+ IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9;
if (use_intl_edit_box && g_settings->getBool("freetype")) {
e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment,
- data->current_parent, spec.fid, rect, is_editable,
- is_multiline);
+ data->current_parent, spec.fid, rect, is_editable, is_multiline);
} else {
if (is_multiline) {
- e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true,
- Environment, data->current_parent, spec.fid, rect,
- is_editable, true);
+ e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment,
+ data->current_parent, spec.fid, rect, is_editable, true);
} else if (is_editable) {
e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
data->current_parent, spec.fid);
@@ -1503,8 +1527,7 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
}
}
- auto style = getDefaultStyleForElement(
- is_multiline ? "textarea" : "field", spec.fname);
+ auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname);
if (e) {
if (is_editable && spec.fname == m_focused_element)
@@ -1516,19 +1539,18 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_UPPERLEFT);
} else {
irr::SEvent evt;
- evt.EventType = EET_KEY_INPUT_EVENT;
- evt.KeyInput.Key = KEY_END;
- evt.KeyInput.Char = 0;
- evt.KeyInput.Control = 0;
- evt.KeyInput.Shift = 0;
+ evt.EventType = EET_KEY_INPUT_EVENT;
+ evt.KeyInput.Key = KEY_END;
+ evt.KeyInput.Char = 0;
+ evt.KeyInput.Control = 0;
+ evt.KeyInput.Shift = 0;
evt.KeyInput.PressedDown = true;
e->OnEvent(evt);
}
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
- e->setOverrideColor(style.getColor(
- StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
if (style.get(StyleSpec::BGCOLOR, "") == "transparent") {
e->setDrawBackground(false);
}
@@ -1549,7 +1571,8 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
}
}
-void GUIFormSpecMenu::parseSimpleField(parserData *data, std::vector<std::string> &parts)
+void GUIFormSpecMenu::parseSimpleField(parserData *data,
+ std::vector<std::string> &parts)
{
std::string name = parts[0];
std::string label = parts[1];
@@ -1558,23 +1581,32 @@ void GUIFormSpecMenu::parseSimpleField(parserData *data, std::vector<std::string
core::rect<s32> rect;
if (data->explicit_size)
- warningstream << "invalid use of unpositioned \"field\" in inventory"
- << std::endl;
+ warningstream << "invalid use of unpositioned \"field\" in inventory" << std::endl;
v2s32 pos = getElementBasePos(nullptr);
pos.Y = (data->simple_field_count + 2) * 60;
v2s32 size = DesiredRect.getSize();
- rect = core::rect<s32>(size.X / 2 - 150, pos.Y, size.X / 2 - 150 + 300,
- pos.Y + m_btn_height * 2);
+ rect = core::rect<s32>(
+ size.X / 2 - 150, pos.Y,
+ size.X / 2 - 150 + 300, pos.Y + m_btn_height * 2
+ );
+
if (m_form_src)
default_val = m_form_src->resolveText(default_val);
+
std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- FieldSpec spec(name, wlabel, utf8_to_wide(unescape_string(default_val)),
- 258 + m_fields.size(), 0, ECI_IBEAM);
+ FieldSpec spec(
+ name,
+ wlabel,
+ utf8_to_wide(unescape_string(default_val)),
+ 258 + m_fields.size(),
+ 0,
+ ECI_IBEAM
+ );
createTextField(data, spec, rect, false);
@@ -1583,17 +1615,17 @@ void GUIFormSpecMenu::parseSimpleField(parserData *data, std::vector<std::string
data->simple_field_count++;
}
-void GUIFormSpecMenu::parseTextArea(parserData *data, std::vector<std::string> &parts,
+void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>& parts,
const std::string &type)
{
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
std::string label = parts[3];
std::string default_val = parts[4];
- MY_CHECKPOS(type, 0);
- MY_CHECKGEOM(type, 1);
+ MY_CHECKPOS(type,0);
+ MY_CHECKGEOM(type,1);
v2s32 pos;
v2s32 geom;
@@ -1607,31 +1639,38 @@ void GUIFormSpecMenu::parseTextArea(parserData *data, std::vector<std::string> &
geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- if (type == "textarea") {
- geom.Y = (stof(v_geom[1]) * (float)imgsize.Y) -
- (spacing.Y - imgsize.Y);
+ if (type == "textarea")
+ {
+ geom.Y = (stof(v_geom[1]) * (float)imgsize.Y) - (spacing.Y-imgsize.Y);
pos.Y += m_btn_height;
- } else {
- pos.Y += (stof(v_geom[1]) * (float)imgsize.Y) / 2;
+ }
+ else
+ {
+ pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
pos.Y -= m_btn_height;
- geom.Y = m_btn_height * 2;
+ geom.Y = m_btn_height*2;
}
}
- core::rect<s32> rect =
- core::rect<s32>(pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- if (!data->explicit_size)
- warningstream << "invalid use of positioned " << type
- << " without a size[] element" << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of positioned "<<type<<" without a size[] element"<<std::endl;
- if (m_form_src)
+ if(m_form_src)
default_val = m_form_src->resolveText(default_val);
+
std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- FieldSpec spec(name, wlabel, utf8_to_wide(unescape_string(default_val)),
- 258 + m_fields.size(), 0, ECI_IBEAM);
+ FieldSpec spec(
+ name,
+ wlabel,
+ utf8_to_wide(unescape_string(default_val)),
+ 258 + m_fields.size(),
+ 0,
+ ECI_IBEAM
+ );
createTextField(data, spec, rect, type == "textarea");
@@ -1641,24 +1680,23 @@ void GUIFormSpecMenu::parseTextArea(parserData *data, std::vector<std::string> &
m_fields.push_back(spec);
}
-void GUIFormSpecMenu::parseField(
- parserData *data, const std::string &element, const std::string &type)
+void GUIFormSpecMenu::parseField(parserData* data, const std::string &element,
+ const std::string &type)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (parts.size() == 3 || parts.size() == 4) {
- parseSimpleField(data, parts);
+ parseSimpleField(data,parts);
return;
}
if ((parts.size() == 5) ||
- ((parts.size() > 5) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- parseTextArea(data, parts, type);
+ ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ parseTextArea(data,parts,type);
return;
}
- errorstream << "Invalid field element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid field element(" << parts.size() << "): '" << element << "'" << std::endl;
}
void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element)
@@ -1666,8 +1704,7 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen
std::vector<std::string> parts = split(element, ';');
if (parts.size() != 4 && m_formspec_version < FORMSPEC_API_VERSION) {
- errorstream << "Invalid text element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ errorstream << "Invalid text element(" << parts.size() << "): '" << element << "'" << std::endl;
return;
}
@@ -1694,14 +1731,17 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen
pos.Y += m_btn_height;
}
- core::rect<s32> rect =
- core::rect<s32>(pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
- if (m_form_src)
+ if(m_form_src)
text = m_form_src->resolveText(text);
- FieldSpec spec(name, utf8_to_wide(unescape_string(text)), L"",
- 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ utf8_to_wide(unescape_string(text)),
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_HyperText;
GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment,
@@ -1711,21 +1751,20 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen
m_fields.push_back(spec);
}
-void GUIFormSpecMenu::parseLabel(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 2) ||
- ((parts.size() > 2) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
std::string text = parts[1];
- MY_CHECKPOS("label", 0);
+ MY_CHECKPOS("label",0);
- if (!data->explicit_size)
- warningstream << "invalid use of label without a size[] element"
- << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
std::vector<std::string> lines = split(text, '\n');
@@ -1736,7 +1775,7 @@ void GUIFormSpecMenu::parseLabel(parserData *data, const std::string &element)
for (unsigned int i = 0; i != lines.size(); i++) {
std::wstring wlabel_colors = translate_string(
- utf8_to_wide(unescape_string(lines[i])));
+ utf8_to_wide(unescape_string(lines[i])));
// Without color escapes to get the font dimensions
std::wstring wlabel_plain = unescape_enriched(wlabel_colors);
@@ -1751,13 +1790,12 @@ void GUIFormSpecMenu::parseLabel(parserData *data, const std::string &element)
v2s32 pos = getRealCoordinateBasePos(v_pos);
// Labels are positioned by their center, not their top.
- pos.Y += (((float)imgsize.Y) / -2) +
- (((float)imgsize.Y) * i / 2);
+ pos.Y += (((float) imgsize.Y) / -2) + (((float) imgsize.Y) * i / 2);
- rect = core::rect<s32>(pos.X, pos.Y,
- pos.X + font->getDimension(wlabel_plain.c_str())
- .Width,
- pos.Y + imgsize.Y);
+ rect = core::rect<s32>(
+ pos.X, pos.Y,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.Y + imgsize.Y);
} else {
// Lines are spaced at the nominal distance of
@@ -1774,23 +1812,28 @@ void GUIFormSpecMenu::parseLabel(parserData *data, const std::string &element)
pos.X += stof(v_pos[0]) * spacing.X;
pos.Y += (stof(v_pos[1]) + 7.0f / 30.0f) * spacing.Y;
- pos.Y += ((float)i) * spacing.Y * 2.0 / 5.0;
+ pos.Y += ((float) i) * spacing.Y * 2.0 / 5.0;
- rect = core::rect<s32>(pos.X, pos.Y - m_btn_height,
- pos.X + font->getDimension(wlabel_plain.c_str())
- .Width,
- pos.Y + m_btn_height);
+ rect = core::rect<s32>(
+ pos.X, pos.Y - m_btn_height,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.Y + m_btn_height);
}
- FieldSpec spec("", wlabel_colors, L"", 258 + m_fields.size(), 4);
+ FieldSpec spec(
+ "",
+ wlabel_colors,
+ L"",
+ 258 + m_fields.size(),
+ 4
+ );
gui::IGUIStaticText *e = gui::StaticText::add(Environment,
- spec.flabel.c_str(), rect, false, false,
- data->current_parent, spec.fid);
+ spec.flabel.c_str(), rect, false, false, data->current_parent,
+ spec.fid);
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideColor(style.getColor(
- StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
e->setOverrideFont(font);
m_fields.push_back(spec);
@@ -1803,21 +1846,21 @@ void GUIFormSpecMenu::parseLabel(parserData *data, const std::string &element)
return;
}
errorstream << "Invalid label element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ << "'" << std::endl;
}
-void GUIFormSpecMenu::parseVertLabel(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 2) ||
- ((parts.size() > 2) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
std::wstring text = unescape_translate(
- unescape_string(utf8_to_wide(parts[1])));
+ unescape_string(utf8_to_wide(parts[1])));
- MY_CHECKPOS("vertlabel", 1);
+ MY_CHECKPOS("vertlabel",1);
auto style = getDefaultStyleForElement("vertlabel", "", "label");
gui::IGUIFont *font = style.getFont();
@@ -1835,10 +1878,10 @@ void GUIFormSpecMenu::parseVertLabel(parserData *data, const std::string &elemen
// We use text.length + 1 because without it, the rect
// isn't quite tall enough and cuts off the text.
- rect = core::rect<s32>(pos.X, pos.Y, pos.X + imgsize.X,
- pos.Y + font_line_height(font) *
- (text.length() +
- 1));
+ rect = core::rect<s32>(pos.X, pos.Y,
+ pos.X + imgsize.X,
+ pos.Y + font_line_height(font) *
+ (text.length() + 1));
} else {
pos = getElementBasePos(&v_pos);
@@ -1846,19 +1889,16 @@ void GUIFormSpecMenu::parseVertLabel(parserData *data, const std::string &elemen
// As above, the length must be one longer. The width of
// the rect (15 pixels) seems rather arbitrary, but
// changing it might break something.
- rect = core::rect<s32>(pos.X,
- pos.Y + ((imgsize.Y / 2) - m_btn_height),
- pos.X + 15,
- pos.Y +
- font_line_height(font) *
- (text.length() +
- 1) +
- ((imgsize.Y / 2) - m_btn_height));
+ rect = core::rect<s32>(
+ pos.X, pos.Y+((imgsize.Y/2) - m_btn_height),
+ pos.X+15, pos.Y +
+ font_line_height(font) *
+ (text.length() + 1) +
+ ((imgsize.Y/2) - m_btn_height));
}
- if (!data->explicit_size)
- warningstream << "invalid use of label without a size[] element"
- << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
std::wstring label;
@@ -1867,15 +1907,18 @@ void GUIFormSpecMenu::parseVertLabel(parserData *data, const std::string &elemen
label += L"\n";
}
- FieldSpec spec("", label, L"", 258 + m_fields.size());
- gui::IGUIStaticText *e = gui::StaticText::add(Environment,
- spec.flabel.c_str(), rect, false, false,
- data->current_parent, spec.fid);
+ FieldSpec spec(
+ "",
+ label,
+ L"",
+ 258 + m_fields.size()
+ );
+ gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(),
+ rect, false, false, data->current_parent, spec.fid);
e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideColor(style.getColor(
- StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
e->setOverrideFont(font);
m_fields.push_back(spec);
@@ -1885,26 +1928,25 @@ void GUIFormSpecMenu::parseVertLabel(parserData *data, const std::string &elemen
m_clickthrough_elements.push_back(e);
return;
}
- errorstream << "Invalid vertlabel element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid vertlabel element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseImageButton(
- parserData *data, const std::string &element, const std::string &type)
+void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element,
+ const std::string &type)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((((parts.size() >= 5) && (parts.size() <= 8)) && (parts.size() != 6)) ||
- ((parts.size() > 8) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 8) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string image_name = parts[2];
std::string name = parts[3];
std::string label = parts[4];
- MY_CHECKPOS("imagebutton", 0);
- MY_CHECKGEOM("imagebutton", 1);
+ MY_CHECKPOS("imagebutton",0);
+ MY_CHECKGEOM("imagebutton",1);
std::string pressed_image_name;
@@ -1924,21 +1966,23 @@ void GUIFormSpecMenu::parseImageButton(
geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
if (!data->explicit_size)
- warningstream << "invalid use of image_button without a size[] "
- "element"
- << std::endl;
+ warningstream<<"invalid use of image_button without a size[] element"<<std::endl;
image_name = unescape_string(image_name);
pressed_image_name = unescape_string(pressed_image_name);
std::wstring wlabel = utf8_to_wide(unescape_string(label));
- FieldSpec spec(name, wlabel, utf8_to_wide(image_name),
- 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ wlabel,
+ utf8_to_wide(image_name),
+ 258 + m_fields.size()
+ );
spec.ftype = f_Button;
if (type == "image_button_exit")
spec.is_exit = true;
@@ -1957,8 +2001,7 @@ void GUIFormSpecMenu::parseImageButton(
style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name);
if (!pressed_image_name.empty())
- style[StyleSpec::STATE_PRESSED].set(
- StyleSpec::FGIMG, pressed_image_name);
+ style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name);
if (parts.size() >= 7) {
style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]);
@@ -1972,19 +2015,18 @@ void GUIFormSpecMenu::parseImageButton(
return;
}
- errorstream << "Invalid imagebutton element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid imagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseTabHeader(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &element)
{
std::vector<std::string> parts = split(element, ';');
- if (((parts.size() == 4) || (parts.size() == 6)) ||
- (parts.size() == 7 && data->real_coordinates) ||
- ((parts.size() > 6) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ if (((parts.size() == 4) || (parts.size() == 6)) || (parts.size() == 7 &&
+ data->real_coordinates) || ((parts.size() > 6) &&
+ (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
// If we're using real coordinates, add an extra field for height.
// Width is not here because tabs are the width of the text, and
@@ -2002,9 +2044,9 @@ void GUIFormSpecMenu::parseTabHeader(parserData *data, const std::string &elemen
auto_width = false;
}
- std::string name = parts[i + 1];
- std::vector<std::string> buttons = split(parts[i + 2], ',');
- std::string str_index = parts[i + 3];
+ std::string name = parts[i+1];
+ std::vector<std::string> buttons = split(parts[i+2], ',');
+ std::string str_index = parts[i+3];
bool show_background = true;
bool show_border = true;
int tab_index = stoi(str_index) - 1;
@@ -2012,13 +2054,18 @@ void GUIFormSpecMenu::parseTabHeader(parserData *data, const std::string &elemen
MY_CHECKPOS("tabheader", 0);
if (parts.size() == 6 + i) {
- if (parts[4 + i] == "true")
+ if (parts[4+i] == "true")
show_background = false;
- if (parts[5 + i] == "false")
+ if (parts[5+i] == "false")
show_border = false;
}
- FieldSpec spec(name, L"", L"", 258 + m_fields.size());
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
spec.ftype = f_TabHeader;
@@ -2047,12 +2094,11 @@ void GUIFormSpecMenu::parseTabHeader(parserData *data, const std::string &elemen
geom.X = DesiredRect.getWidth();
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
- gui::IGUITabControl *e =
- Environment->addTabControl(rect, data->current_parent,
- show_background, show_border, spec.fid);
+ gui::IGUITabControl *e = Environment->addTabControl(rect,
+ data->current_parent, show_background, show_border, spec.fid);
e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT,
irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT);
e->setTabHeight(geom.Y);
@@ -2061,45 +2107,41 @@ void GUIFormSpecMenu::parseTabHeader(parserData *data, const std::string &elemen
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true));
for (const std::string &button : buttons) {
- auto tab = e->addTab(
- unescape_translate(unescape_string(utf8_to_wide(
- button)))
- .c_str(),
- -1);
+ auto tab = e->addTab(unescape_translate(unescape_string(
+ utf8_to_wide(button))).c_str(), -1);
if (style.isNotDefault(StyleSpec::BGCOLOR))
- tab->setBackgroundColor(
- style.getColor(StyleSpec::BGCOLOR));
+ tab->setBackgroundColor(style.getColor(StyleSpec::BGCOLOR));
- tab->setTextColor(style.getColor(
- StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ tab->setTextColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
}
- if ((tab_index >= 0) && (buttons.size() < INT_MAX) &&
- (tab_index < (int)buttons.size()))
+ if ((tab_index >= 0) &&
+ (buttons.size() < INT_MAX) &&
+ (tab_index < (int) buttons.size()))
e->setActiveTab(tab_index);
m_fields.push_back(spec);
return;
}
- errorstream << "Invalid TabHeader element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream << "Invalid TabHeader element(" << parts.size() << "): '"
+ << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseItemImageButton(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &element)
{
if (m_client == 0) {
warningstream << "invalid use of item_image_button with m_client==0"
- << std::endl;
+ << std::endl;
return;
}
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 5) ||
- ((parts.size() > 5) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
std::string item_name = parts[2];
std::string name = parts[3];
std::string label = parts[4];
@@ -2107,8 +2149,8 @@ void GUIFormSpecMenu::parseItemImageButton(parserData *data, const std::string &
label = unescape_string(label);
item_name = unescape_string(item_name);
- MY_CHECKPOS("itemimagebutton", 0);
- MY_CHECKGEOM("itemimagebutton", 1);
+ MY_CHECKPOS("itemimagebutton",0);
+ MY_CHECKGEOM("itemimagebutton",1);
v2s32 pos;
v2s32 geom;
@@ -2122,32 +2164,34 @@ void GUIFormSpecMenu::parseItemImageButton(parserData *data, const std::string &
geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
}
- core::rect<s32> rect = core::rect<s32>(
- pos.X, pos.Y, pos.X + geom.X, pos.Y + geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- if (!data->explicit_size)
- warningstream << "invalid use of item_image_button without a "
- "size[] element"
- << std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of item_image_button without a size[] element"<<std::endl;
IItemDefManager *idef = m_client->idef();
ItemStack item;
item.deSerialize(item_name, idef);
- m_tooltips[name] = TooltipSpec(
- utf8_to_wide(item.getDefinition(idef).description),
- m_default_tooltip_bgcolor, m_default_tooltip_color);
+ m_tooltips[name] =
+ TooltipSpec(utf8_to_wide(item.getDefinition(idef).description),
+ m_default_tooltip_bgcolor,
+ m_default_tooltip_color);
// the spec for the button
- FieldSpec spec_btn(name, utf8_to_wide(label), utf8_to_wide(item_name),
- 258 + m_fields.size(), 2);
+ FieldSpec spec_btn(
+ name,
+ utf8_to_wide(label),
+ utf8_to_wide(item_name),
+ 258 + m_fields.size(),
+ 2
+ );
GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment,
- rect, m_tsrc, data->current_parent, spec_btn.fid,
- spec_btn.flabel.c_str(), item_name, m_client);
+ rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(),
+ item_name, m_client);
- auto style = getStyleForElement(
- "item_image_button", spec_btn.fname, "image_button");
+ auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button");
e_btn->setStyles(style);
if (spec_btn.fname == m_focused_element) {
@@ -2155,27 +2199,26 @@ void GUIFormSpecMenu::parseItemImageButton(parserData *data, const std::string &
}
spec_btn.ftype = f_Button;
- rect += data->basepos - padding;
+ rect += data->basepos-padding;
spec_btn.rect = rect;
m_fields.push_back(spec_btn);
return;
}
- errorstream << "Invalid ItemImagebutton element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseBox(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if ((parts.size() == 3) ||
- ((parts.size() > 3) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
- MY_CHECKPOS("box", 0);
- MY_CHECKGEOM("box", 1);
+ MY_CHECKPOS("box",0);
+ MY_CHECKGEOM("box",1);
v2s32 pos;
v2s32 geom;
@@ -2192,42 +2235,44 @@ void GUIFormSpecMenu::parseBox(parserData *data, const std::string &element)
video::SColor tmp_color;
if (parseColorString(parts[2], tmp_color, false, 0x8C)) {
- FieldSpec spec("", L"", L"", 258 + m_fields.size(), -2);
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ -2
+ );
spec.ftype = f_Box;
core::rect<s32> rect(pos, pos + geom);
- GUIBox *e = new GUIBox(Environment, data->current_parent,
- spec.fid, rect, tmp_color);
+ GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid,
+ rect, tmp_color);
auto style = getDefaultStyleForElement("box", spec.fname);
- e->setNotClipped(style.getBool(
- StyleSpec::NOCLIP, m_formspec_version < 3));
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
e->drop();
m_fields.push_back(spec);
} else {
- errorstream << "Invalid Box element(" << parts.size() << "): '"
- << element << "' INVALID COLOR" << std::endl;
+ errorstream<< "Invalid Box element(" << parts.size() << "): '" << element << "' INVALID COLOR" << std::endl;
}
return;
}
- errorstream << "Invalid Box element(" << parts.size() << "): '" << element << "'"
- << std::endl;
+ errorstream<< "Invalid Box element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseBackgroundColor(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
const u32 parameter_count = parts.size();
if ((parameter_count > 2 && m_formspec_version < 3) ||
- (parameter_count > 3 &&
- m_formspec_version <= FORMSPEC_API_VERSION)) {
+ (parameter_count > 3 && m_formspec_version <= FORMSPEC_API_VERSION)) {
errorstream << "Invalid bgcolor element(" << parameter_count << "): '"
- << element << "'" << std::endl;
+ << element << "'" << std::endl;
return;
}
@@ -2254,20 +2299,19 @@ void GUIFormSpecMenu::parseBackgroundColor(parserData *data, const std::string &
parseColorString(parts[2], m_fullscreen_bgcolor, false);
}
-void GUIFormSpecMenu::parseListColors(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseListColors(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (((parts.size() == 2) || (parts.size() == 3) || (parts.size() == 5)) ||
- ((parts.size() > 5) &&
- (m_formspec_version > FORMSPEC_API_VERSION))) {
+ ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ {
parseColorString(parts[0], data->inventorylist_options.slotbg_n, false);
parseColorString(parts[1], data->inventorylist_options.slotbg_h, false);
if (parts.size() >= 3) {
- if (parseColorString(parts[2],
- data->inventorylist_options.slotbordercolor,
- false)) {
+ if (parseColorString(parts[2], data->inventorylist_options.slotbordercolor,
+ false)) {
data->inventorylist_options.slotborder = true;
}
}
@@ -2289,16 +2333,15 @@ void GUIFormSpecMenu::parseListColors(parserData *data, const std::string &eleme
}
return;
}
- errorstream << "Invalid listcolors element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream<< "Invalid listcolors element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-void GUIFormSpecMenu::parseTooltip(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseTooltip(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts = split(element,';');
if (parts.size() < 2) {
errorstream << "Invalid tooltip element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ << element << "'" << std::endl;
return;
}
@@ -2307,19 +2350,18 @@ void GUIFormSpecMenu::parseTooltip(parserData *data, const std::string &element)
size_t base_size = rect_mode ? 3 : 2;
if (parts.size() != base_size && parts.size() != base_size + 2) {
errorstream << "Invalid tooltip element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ << element << "'" << std::endl;
return;
}
// Read colors
video::SColor bgcolor = m_default_tooltip_bgcolor;
- video::SColor color = m_default_tooltip_color;
+ video::SColor color = m_default_tooltip_color;
if (parts.size() == base_size + 2 &&
(!parseColorString(parts[base_size], bgcolor, false) ||
- !parseColorString(parts[base_size + 1], color,
- false))) {
+ !parseColorString(parts[base_size + 1], color, false))) {
errorstream << "Invalid color in tooltip element(" << parts.size()
- << "): '" << element << "'" << std::endl;
+ << "): '" << element << "'" << std::endl;
return;
}
@@ -2329,7 +2371,7 @@ void GUIFormSpecMenu::parseTooltip(parserData *data, const std::string &element)
// Add tooltip
if (rect_mode) {
- std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
MY_CHECKPOS("tooltip", 0);
@@ -2347,7 +2389,12 @@ void GUIFormSpecMenu::parseTooltip(parserData *data, const std::string &element)
geom.Y = stof(v_geom[1]) * spacing.Y;
}
- FieldSpec fieldspec("", L"", L"", 258 + m_fields.size());
+ FieldSpec fieldspec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
core::rect<s32> rect(pos, pos + geom);
@@ -2367,11 +2414,11 @@ void GUIFormSpecMenu::parseTooltip(parserData *data, const std::string &element)
bool GUIFormSpecMenu::parseVersionDirect(const std::string &data)
{
- // some prechecks
+ //some prechecks
if (data.empty())
return false;
- std::vector<std::string> parts = split(data, '[');
+ std::vector<std::string> parts = split(data,'[');
if (parts.size() < 2) {
return false;
@@ -2389,12 +2436,12 @@ bool GUIFormSpecMenu::parseVersionDirect(const std::string &data)
return false;
}
-bool GUIFormSpecMenu::parseSizeDirect(parserData *data, const std::string &element)
+bool GUIFormSpecMenu::parseSizeDirect(parserData* data, const std::string &element)
{
if (element.empty())
return false;
- std::vector<std::string> parts = split(element, '[');
+ std::vector<std::string> parts = split(element,'[');
if (parts.size() < 2)
return false;
@@ -2406,8 +2453,7 @@ bool GUIFormSpecMenu::parseSizeDirect(parserData *data, const std::string &eleme
return false;
if (type == "invsize")
- warningstream << "Deprecated formspec element \"invsize\" is used"
- << std::endl;
+ warningstream << "Deprecated formspec element \"invsize\" is used" << std::endl;
parseSize(data, description);
@@ -2445,8 +2491,7 @@ void GUIFormSpecMenu::parsePosition(parserData *data, const std::string &element
return;
}
- errorstream << "Invalid position element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ errorstream << "Invalid position element (" << parts.size() << "): '" << element << "'" << std::endl;
}
bool GUIFormSpecMenu::parseAnchorDirect(parserData *data, const std::string &element)
@@ -2481,17 +2526,16 @@ void GUIFormSpecMenu::parseAnchor(parserData *data, const std::string &element)
}
errorstream << "Invalid anchor element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ << "'" << std::endl;
}
-bool GUIFormSpecMenu::parseStyle(
- parserData *data, const std::string &element, bool style_type)
+bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, bool style_type)
{
std::vector<std::string> parts = split(element, ';');
if (parts.size() < 2) {
- errorstream << "Invalid style element (" << parts.size() << "): '"
- << element << "'" << std::endl;
+ errorstream << "Invalid style element (" << parts.size() << "): '" << element
+ << "'" << std::endl;
return false;
}
@@ -2501,24 +2545,22 @@ bool GUIFormSpecMenu::parseStyle(
for (size_t i = 1; i < parts.size(); i++) {
size_t equal_pos = parts[i].find('=');
if (equal_pos == std::string::npos) {
- errorstream << "Invalid style element (Property missing value): '"
- << element << "'" << std::endl;
+ errorstream << "Invalid style element (Property missing value): '" << element
+ << "'" << std::endl;
return false;
}
std::string propname = trim(parts[i].substr(0, equal_pos));
- std::string value = trim(unescape_string(parts[i].substr(equal_pos + 1)));
+ std::string value = trim(unescape_string(parts[i].substr(equal_pos + 1)));
- std::transform(propname.begin(), propname.end(), propname.begin(),
- ::tolower);
+ std::transform(propname.begin(), propname.end(), propname.begin(), ::tolower);
StyleSpec::Property prop = StyleSpec::GetPropertyByName(propname);
if (prop == StyleSpec::NONE) {
if (property_warned.find(propname) != property_warned.end()) {
- warningstream << "Invalid style element (Unknown "
- "property "
- << propname << "): '" << element << "'"
- << std::endl;
+ warningstream << "Invalid style element (Unknown property " << propname << "): '"
+ << element
+ << "'" << std::endl;
property_warned.insert(propname);
}
continue;
@@ -2543,18 +2585,16 @@ bool GUIFormSpecMenu::parseStyle(
selector = selector.substr(0, state_pos);
if (state_str.empty()) {
- errorstream << "Invalid style element (Invalid state): '"
- << element << "'" << std::endl;
+ errorstream << "Invalid style element (Invalid state): '" << element
+ << "'" << std::endl;
state_valid = false;
} else {
std::vector<std::string> states = split(state_str, '+');
for (std::string &state : states) {
- StyleSpec::State converted =
- StyleSpec::getStateByName(state);
+ StyleSpec::State converted = StyleSpec::getStateByName(state);
if (converted == StyleSpec::STATE_INVALID) {
- infostream << "Unknown style state "
- << state << " in element '"
- << element << "'" << std::endl;
+ infostream << "Unknown style state " << state <<
+ " in element '" << element << "'" << std::endl;
state_valid = false;
break;
}
@@ -2576,29 +2616,20 @@ bool GUIFormSpecMenu::parseStyle(
}
// Backwards-compatibility for existing _hovered/_pressed properties
- if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED) ||
- selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED) ||
- selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) {
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED)
+ || selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED)
+ || selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) {
StyleSpec hover_spec;
hover_spec.addState(StyleSpec::STATE_HOVERED);
if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED)) {
- hover_spec.set(StyleSpec::BGCOLOR,
- selector_spec.get(
- StyleSpec::BGCOLOR_HOVERED,
- ""));
+ hover_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_HOVERED, ""));
}
if (selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED)) {
- hover_spec.set(StyleSpec::BGIMG,
- selector_spec.get(
- StyleSpec::BGIMG_HOVERED,
- ""));
+ hover_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_HOVERED, ""));
}
if (selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) {
- hover_spec.set(StyleSpec::FGIMG,
- selector_spec.get(
- StyleSpec::FGIMG_HOVERED,
- ""));
+ hover_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_HOVERED, ""));
}
if (style_type) {
@@ -2607,29 +2638,20 @@ bool GUIFormSpecMenu::parseStyle(
theme_by_name[selector].push_back(hover_spec);
}
}
- if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED) ||
- selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED) ||
- selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) {
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED)
+ || selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED)
+ || selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) {
StyleSpec press_spec;
press_spec.addState(StyleSpec::STATE_PRESSED);
if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED)) {
- press_spec.set(StyleSpec::BGCOLOR,
- selector_spec.get(
- StyleSpec::BGCOLOR_PRESSED,
- ""));
+ press_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_PRESSED, ""));
}
if (selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED)) {
- press_spec.set(StyleSpec::BGIMG,
- selector_spec.get(
- StyleSpec::BGIMG_PRESSED,
- ""));
+ press_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_PRESSED, ""));
}
if (selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) {
- press_spec.set(StyleSpec::FGIMG,
- selector_spec.get(
- StyleSpec::FGIMG_PRESSED,
- ""));
+ press_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_PRESSED, ""));
}
if (style_type) {
@@ -2648,7 +2670,8 @@ void GUIFormSpecMenu::parseSetFocus(const std::string &element)
std::vector<std::string> parts = split(element, ';');
if (parts.size() <= 2 ||
- (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION))
+ {
if (m_is_form_regenerated)
return; // Never focus on resizing
@@ -2660,12 +2683,12 @@ void GUIFormSpecMenu::parseSetFocus(const std::string &element)
}
errorstream << "Invalid set_focus element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ << "'" << std::endl;
}
-void GUIFormSpecMenu::parseElement(parserData *data, const std::string &element)
+void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
{
- // some prechecks
+ //some prechecks
if (element.empty())
return;
@@ -2677,7 +2700,7 @@ void GUIFormSpecMenu::parseElement(parserData *data, const std::string &element)
return;
std::string type = trim(element.substr(0, pos));
- std::string description = element.substr(pos + 1);
+ std::string description = element.substr(pos+1);
if (type == "container") {
parseContainer(data, description);
@@ -2729,28 +2752,28 @@ void GUIFormSpecMenu::parseElement(parserData *data, const std::string &element)
return;
}
- if (type == "tableoptions") {
- parseTableOptions(data, description);
+ if (type == "tableoptions"){
+ parseTableOptions(data,description);
return;
}
- if (type == "tablecolumns") {
- parseTableColumns(data, description);
+ if (type == "tablecolumns"){
+ parseTableColumns(data,description);
return;
}
- if (type == "table") {
- parseTable(data, description);
+ if (type == "table"){
+ parseTable(data,description);
return;
}
- if (type == "textlist") {
- parseTextList(data, description);
+ if (type == "textlist"){
+ parseTextList(data,description);
return;
}
- if (type == "dropdown") {
- parseDropDown(data, description);
+ if (type == "dropdown"){
+ parseDropDown(data,description);
return;
}
@@ -2760,62 +2783,62 @@ void GUIFormSpecMenu::parseElement(parserData *data, const std::string &element)
}
if (type == "pwdfield") {
- parsePwdField(data, description);
+ parsePwdField(data,description);
return;
}
- if ((type == "field") || (type == "textarea")) {
- parseField(data, description, type);
+ if ((type == "field") || (type == "textarea")){
+ parseField(data,description,type);
return;
}
if (type == "hypertext") {
- parseHyperText(data, description);
+ parseHyperText(data,description);
return;
}
if (type == "label") {
- parseLabel(data, description);
+ parseLabel(data,description);
return;
}
if (type == "vertlabel") {
- parseVertLabel(data, description);
+ parseVertLabel(data,description);
return;
}
if (type == "item_image_button") {
- parseItemImageButton(data, description);
+ parseItemImageButton(data,description);
return;
}
if ((type == "image_button") || (type == "image_button_exit")) {
- parseImageButton(data, description, type);
+ parseImageButton(data,description,type);
return;
}
if (type == "tabheader") {
- parseTabHeader(data, description);
+ parseTabHeader(data,description);
return;
}
if (type == "box") {
- parseBox(data, description);
+ parseBox(data,description);
return;
}
if (type == "bgcolor") {
- parseBackgroundColor(data, description);
+ parseBackgroundColor(data,description);
return;
}
if (type == "listcolors") {
- parseListColors(data, description);
+ parseListColors(data,description);
return;
}
if (type == "tooltip") {
- parseTooltip(data, description);
+ parseTooltip(data,description);
return;
}
@@ -2860,8 +2883,8 @@ void GUIFormSpecMenu::parseElement(parserData *data, const std::string &element)
}
// Ignore others
- infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description
- << "\"" << std::endl;
+ infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description << "\""
+ << std::endl;
}
void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
@@ -2956,33 +2979,33 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
{
v3f formspec_bgcolor = g_settings->getV3F("formspec_default_bg_color");
- m_bgcolor = video::SColor((u8)clamp_u8(g_settings->getS32(
- "formspec_default_bg_opacity")),
- clamp_u8(myround(formspec_bgcolor.X)),
- clamp_u8(myround(formspec_bgcolor.Y)),
- clamp_u8(myround(formspec_bgcolor.Z)));
+ m_bgcolor = video::SColor(
+ (u8) clamp_u8(g_settings->getS32("formspec_default_bg_opacity")),
+ clamp_u8(myround(formspec_bgcolor.X)),
+ clamp_u8(myround(formspec_bgcolor.Y)),
+ clamp_u8(myround(formspec_bgcolor.Z))
+ );
}
{
v3f formspec_bgcolor = g_settings->getV3F("formspec_fullscreen_bg_color");
m_fullscreen_bgcolor = video::SColor(
- (u8)clamp_u8(g_settings->getS32(
- "formspec_fullscreen_bg_opacity")),
- clamp_u8(myround(formspec_bgcolor.X)),
- clamp_u8(myround(formspec_bgcolor.Y)),
- clamp_u8(myround(formspec_bgcolor.Z)));
+ (u8) clamp_u8(g_settings->getS32("formspec_fullscreen_bg_opacity")),
+ clamp_u8(myround(formspec_bgcolor.X)),
+ clamp_u8(myround(formspec_bgcolor.Y)),
+ clamp_u8(myround(formspec_bgcolor.Z))
+ );
}
- m_default_tooltip_bgcolor = video::SColor(255, 110, 130, 60);
- m_default_tooltip_color = video::SColor(255, 255, 255, 255);
+ m_default_tooltip_bgcolor = video::SColor(255,110,130,60);
+ m_default_tooltip_color = video::SColor(255,255,255,255);
// Add tooltip
{
assert(!m_tooltip_element);
- // Note: parent != this so that the tooltip isn't clipped by the menu
- // rectangle
- m_tooltip_element = gui::StaticText::add(
- Environment, L"", core::rect<s32>(0, 0, 110, 18));
+ // Note: parent != this so that the tooltip isn't clipped by the menu rectangle
+ m_tooltip_element = gui::StaticText::add(Environment, L"",
+ core::rect<s32>(0, 0, 110, 18));
m_tooltip_element->enableOverrideColor(true);
m_tooltip_element->setBackgroundColor(m_default_tooltip_bgcolor);
m_tooltip_element->setDrawBackground(true);
@@ -2990,11 +3013,11 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
m_tooltip_element->setOverrideColor(m_default_tooltip_color);
m_tooltip_element->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
m_tooltip_element->setWordWrap(false);
- // we're not parent so no autograb for this one!
+ //we're not parent so no autograb for this one!
m_tooltip_element->grab();
}
- std::vector<std::string> elements = split(m_formspec_string, ']');
+ std::vector<std::string> elements = split(m_formspec_string,']');
unsigned int i = 0;
/* try to read version from first element only */
@@ -3006,28 +3029,27 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
/* we need size first in order to calculate image scale */
mydata.explicit_size = false;
- for (; i < elements.size(); i++) {
+ for (; i< elements.size(); i++) {
if (!parseSizeDirect(&mydata, elements[i])) {
break;
}
}
/* "position" element is always after "size" element if it used */
- for (; i < elements.size(); i++) {
+ for (; i< elements.size(); i++) {
if (!parsePositionDirect(&mydata, elements[i])) {
break;
}
}
/* "anchor" element is always after "position" (or "size" element) if it used */
- for (; i < elements.size(); i++) {
+ for (; i< elements.size(); i++) {
if (!parseAnchorDirect(&mydata, elements[i])) {
break;
}
}
- /* "no_prepend" element is always after "position" (or "size" element) if it used
- */
+ /* "no_prepend" element is always after "position" (or "size" element) if it used */
bool enable_prepends = true;
for (; i < elements.size(); i++) {
if (elements[i].empty())
@@ -3054,8 +3076,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
if (mydata.explicit_size) {
// compute scaling for specified form size
if (m_lock) {
- v2u32 current_screensize = RenderingEngine::get_video_driver()
- ->getScreenSize();
+ v2u32 current_screensize = RenderingEngine::get_video_driver()->getScreenSize();
v2u32 delta = current_screensize - m_lockscreensize;
if (current_screensize.Y > m_lockscreensize.Y)
@@ -3068,11 +3089,11 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
else
delta.X = 0;
- offset = v2s32(delta.X, delta.Y);
+ offset = v2s32(delta.X,delta.Y);
mydata.screensize = m_lockscreensize;
} else {
- offset = v2s32(0, 0);
+ offset = v2s32(0,0);
}
double gui_scaling = g_settings->getFloat("gui_scaling");
@@ -3109,23 +3130,21 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// maximum screen space available.
double prefer_imgsize = mydata.screensize.Y / 10 * gui_scaling;
double fitx_imgsize = mydata.screensize.X /
- ((12.0 / 8.0) * (0.5 + mydata.invsize.X));
+ ((12.0 / 8.0) * (0.5 + mydata.invsize.X));
double fity_imgsize = mydata.screensize.Y /
- ((15.0 / 11.0) * (0.85 + mydata.invsize.Y));
+ ((15.0 / 11.0) * (0.85 + mydata.invsize.Y));
use_imgsize = MYMIN(prefer_imgsize,
MYMIN(fitx_imgsize, fity_imgsize));
#else
double prefer_imgsize = mydata.screensize.Y / 15 * gui_scaling;
double fitx_imgsize = mydata.screensize.X /
- ((5.0 / 4.0) * (0.5 + mydata.invsize.X));
+ ((5.0 / 4.0) * (0.5 + mydata.invsize.X));
double fity_imgsize = mydata.screensize.Y /
- ((15.0 / 13.0) * (0.85 * mydata.invsize.Y));
+ ((15.0 / 13.0) * (0.85 * mydata.invsize.Y));
double screen_dpi = RenderingEngine::getDisplayDensity() * 96;
double min_imgsize = 0.3 * screen_dpi * gui_scaling;
- use_imgsize = MYMAX(min_imgsize,
- MYMIN(prefer_imgsize,
- MYMIN(fitx_imgsize,
- fity_imgsize)));
+ use_imgsize = MYMAX(min_imgsize, MYMIN(prefer_imgsize,
+ MYMIN(fitx_imgsize, fity_imgsize)));
#endif
}
@@ -3138,45 +3157,30 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// is 2/5 vertical inventory slot spacing, and button
// half-height is 7/8 of font height.
imgsize = v2s32(use_imgsize, use_imgsize);
- spacing = v2f32(use_imgsize * 5.0 / 4, use_imgsize * 15.0 / 13);
- padding = v2s32(use_imgsize * 3.0 / 8, use_imgsize * 3.0 / 8);
- m_btn_height = use_imgsize * 15.0 / 13 * 0.35;
+ spacing = v2f32(use_imgsize*5.0/4, use_imgsize*15.0/13);
+ padding = v2s32(use_imgsize*3.0/8, use_imgsize*3.0/8);
+ m_btn_height = use_imgsize*15.0/13 * 0.35;
m_font = g_fontengine->getFont();
if (mydata.real_coordinates) {
- mydata.size = v2s32(mydata.invsize.X * imgsize.X,
- mydata.invsize.Y * imgsize.Y);
+ mydata.size = v2s32(
+ mydata.invsize.X*imgsize.X,
+ mydata.invsize.Y*imgsize.Y
+ );
} else {
mydata.size = v2s32(
- padding.X * 2 +
- spacing.X * (mydata.invsize.X -
- 1.0) +
- imgsize.X,
- padding.Y * 2 +
- spacing.Y * (mydata.invsize.Y -
- 1.0) +
- imgsize.Y +
- m_btn_height * 2.0 / 3.0);
+ padding.X*2+spacing.X*(mydata.invsize.X-1.0)+imgsize.X,
+ padding.Y*2+spacing.Y*(mydata.invsize.Y-1.0)+imgsize.Y + m_btn_height*2.0/3.0
+ );
}
DesiredRect = mydata.rect = core::rect<s32>(
- (s32)((f32)mydata.screensize.X * mydata.offset.X) -
- (s32)(mydata.anchor.X *
- (f32)mydata.size.X) +
- offset.X,
- (s32)((f32)mydata.screensize.Y * mydata.offset.Y) -
- (s32)(mydata.anchor.Y *
- (f32)mydata.size.Y) +
- offset.Y,
- (s32)((f32)mydata.screensize.X * mydata.offset.X) +
- (s32)((1.0 - mydata.anchor.X) *
- (f32)mydata.size.X) +
- offset.X,
- (s32)((f32)mydata.screensize.Y * mydata.offset.Y) +
- (s32)((1.0 - mydata.anchor.Y) *
- (f32)mydata.size.Y) +
- offset.Y);
+ (s32)((f32)mydata.screensize.X * mydata.offset.X) - (s32)(mydata.anchor.X * (f32)mydata.size.X) + offset.X,
+ (s32)((f32)mydata.screensize.Y * mydata.offset.Y) - (s32)(mydata.anchor.Y * (f32)mydata.size.Y) + offset.Y,
+ (s32)((f32)mydata.screensize.X * mydata.offset.X) + (s32)((1.0 - mydata.anchor.X) * (f32)mydata.size.X) + offset.X,
+ (s32)((f32)mydata.screensize.Y * mydata.offset.Y) + (s32)((1.0 - mydata.anchor.Y) * (f32)mydata.size.Y) + offset.Y
+ );
} else {
// Non-size[] form must consist only of text fields and
// implicit "Proceed" button. Use default font, and
@@ -3184,14 +3188,11 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
m_font = g_fontengine->getFont();
m_btn_height = font_line_height(m_font) * 0.875;
DesiredRect = core::rect<s32>(
- (s32)((f32)mydata.screensize.X * mydata.offset.X) -
- (s32)(mydata.anchor.X * 580.0),
- (s32)((f32)mydata.screensize.Y * mydata.offset.Y) -
- (s32)(mydata.anchor.Y * 300.0),
- (s32)((f32)mydata.screensize.X * mydata.offset.X) +
- (s32)((1.0 - mydata.anchor.X) * 580.0),
- (s32)((f32)mydata.screensize.Y * mydata.offset.Y) +
- (s32)((1.0 - mydata.anchor.Y) * 300.0));
+ (s32)((f32)mydata.screensize.X * mydata.offset.X) - (s32)(mydata.anchor.X * 580.0),
+ (s32)((f32)mydata.screensize.Y * mydata.offset.Y) - (s32)(mydata.anchor.Y * 300.0),
+ (s32)((f32)mydata.screensize.X * mydata.offset.X) + (s32)((1.0 - mydata.anchor.X) * 580.0),
+ (s32)((f32)mydata.screensize.Y * mydata.offset.Y) + (s32)((1.0 - mydata.anchor.Y) * 300.0)
+ );
}
recalculateAbsolutePosition(false);
mydata.basepos = getBasePos();
@@ -3208,14 +3209,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
core::list<IGUIElement *>::Iterator legacy_sort_start = Children.getLast();
if (enable_prepends) {
- // Backup the coordinates so that prepends can use the coordinates of
- // choice.
+ // Backup the coordinates so that prepends can use the coordinates of choice.
bool rc_backup = mydata.real_coordinates;
u16 version_backup = m_formspec_version;
mydata.real_coordinates = false; // Old coordinates by default.
- std::vector<std::string> prepend_elements =
- split(m_formspec_prepend, ']');
+ std::vector<std::string> prepend_elements = split(m_formspec_prepend, ']');
for (const auto &element : prepend_elements)
parseElement(&mydata, element);
@@ -3231,22 +3230,20 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
mydata.real_coordinates = rc_backup; // Restore coordinates
}
- for (; i < elements.size(); i++) {
+ for (; i< elements.size(); i++) {
parseElement(&mydata, elements[i]);
}
if (mydata.current_parent != this) {
- errorstream << "Invalid formspec string: scroll_container was never "
- "closed!"
- << std::endl;
+ errorstream << "Invalid formspec string: scroll_container was never closed!"
+ << std::endl;
} else if (!container_stack.empty()) {
errorstream << "Invalid formspec string: container was never closed!"
- << std::endl;
+ << std::endl;
}
// get the scrollbar elements for scroll_containers
- for (const std::pair<std::string, GUIScrollContainer *> &c :
- m_scroll_containers) {
+ for (const std::pair<std::string, GUIScrollContainer *> &c : m_scroll_containers) {
for (const std::pair<FieldSpec, GUIScrollBar *> &b : m_scrollbars) {
if (c.first == b.first.fname) {
c.second->setScrollBar(b.second);
@@ -3258,11 +3255,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// If there are fields without explicit size[], add a "Proceed"
// button and adjust size to fit all the fields.
if (mydata.simple_field_count > 0 && !mydata.explicit_size) {
- mydata.rect = core::rect<s32>(mydata.screensize.X / 2 - 580 / 2,
+ mydata.rect = core::rect<s32>(
+ mydata.screensize.X / 2 - 580 / 2,
mydata.screensize.Y / 2 - 300 / 2,
mydata.screensize.X / 2 + 580 / 2,
- mydata.screensize.Y / 2 + 240 / 2 +
- mydata.simple_field_count * 60);
+ mydata.screensize.Y / 2 + 240 / 2 + mydata.simple_field_count * 60
+ );
DesiredRect = mydata.rect;
recalculateAbsolutePosition(false);
@@ -3273,19 +3271,21 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
pos.Y = (mydata.simple_field_count + 2) * 60;
v2s32 size = DesiredRect.getSize();
- mydata.rect = core::rect<s32>(size.X / 2 - 70, pos.Y,
- size.X / 2 - 70 + 140, pos.Y + m_btn_height * 2);
+ mydata.rect = core::rect<s32>(
+ size.X / 2 - 70, pos.Y,
+ size.X / 2 - 70 + 140, pos.Y + m_btn_height * 2
+ );
const wchar_t *text = wgettext("Proceed");
- GUIButton::addButton(Environment, mydata.rect, m_tsrc, this, 257,
- text);
+ GUIButton::addButton(Environment, mydata.rect, m_tsrc, this, 257, text);
delete[] text;
}
}
// Set initial focus if parser didn't set it
gui::IGUIElement *focused_element = Environment->getFocus();
- if (!focused_element || !isMyChild(focused_element) ||
- focused_element->getType() == gui::EGUIET_TAB_CONTROL)
+ if (!focused_element
+ || !isMyChild(focused_element)
+ || focused_element->getType() == gui::EGUIET_TAB_CONTROL)
setInitialFocus();
skin->setFont(old_font);
@@ -3329,12 +3329,12 @@ void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator fro
// 2: Sort the container
std::stable_sort(elements.begin(), elements.end(),
- [this](const IGUIElement *a, const IGUIElement *b) -> bool {
- const FieldSpec *spec_a = getSpecByID(a->getID());
- const FieldSpec *spec_b = getSpecByID(b->getID());
- return spec_a && spec_b &&
- spec_a->priority < spec_b->priority;
- });
+ [this] (const IGUIElement *a, const IGUIElement *b) -> bool {
+ const FieldSpec *spec_a = getSpecByID(a->getID());
+ const FieldSpec *spec_b = getSpecByID(b->getID());
+ return spec_a && spec_b &&
+ spec_a->priority < spec_b->priority;
+ });
// 3: Re-assign the pointers
for (auto e : elements) {
@@ -3379,8 +3379,8 @@ GUIInventoryList::ItemSpec GUIFormSpecMenu::getItemAtPos(v2s32 p) const
for (const GUIInventoryList *e : m_inventorylists) {
s32 item_index = e->getItemIndexAtPos(p);
if (item_index != -1)
- return GUIInventoryList::ItemSpec(e->getInventoryloc(),
- e->getListname(), item_index);
+ return GUIInventoryList::ItemSpec(e->getInventoryloc(), e->getListname(),
+ item_index);
}
return GUIInventoryList::ItemSpec(InventoryLocation(), "", -1);
@@ -3388,13 +3388,13 @@ GUIInventoryList::ItemSpec GUIFormSpecMenu::getItemAtPos(v2s32 p) const
void GUIFormSpecMenu::drawSelectedItem()
{
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
if (!m_selected_item) {
// reset rotation time
drawItemStack(driver, m_font, ItemStack(),
- core::rect<s32>(v2s32(0, 0), v2s32(0, 0)), NULL, m_client,
- IT_ROT_DRAGGED);
+ core::rect<s32>(v2s32(0, 0), v2s32(0, 0)), NULL,
+ m_client, IT_ROT_DRAGGED);
return;
}
@@ -3405,7 +3405,7 @@ void GUIFormSpecMenu::drawSelectedItem()
ItemStack stack = list->getItem(m_selected_item->i);
stack.count = m_selected_amount;
- core::rect<s32> imgrect(0, 0, imgsize.X, imgsize.Y);
+ core::rect<s32> imgrect(0,0,imgsize.X,imgsize.Y);
core::rect<s32> rect = imgrect + (m_pointer - imgrect.getCenter());
rect.constrainTo(driver->getViewPort());
drawItemStack(driver, m_font, stack, rect, NULL, m_client, IT_ROT_DRAGGED);
@@ -3422,7 +3422,7 @@ void GUIFormSpecMenu::drawMenu()
}
}
- gui::IGUISkin *skin = Environment->getSkin();
+ gui::IGUISkin* skin = Environment->getSkin();
sanity_check(skin != NULL);
gui::IGUIFont *old_font = skin->getFont();
skin->setFont(m_font);
@@ -3431,7 +3431,7 @@ void GUIFormSpecMenu::drawMenu()
updateSelectedItem();
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
/*
Draw background color
@@ -3491,8 +3491,8 @@ void GUIFormSpecMenu::drawMenu()
if (m_hovered_item_tooltips.empty()) {
// reset rotation time
drawItemStack(driver, m_font, ItemStack(),
- core::rect<s32>(v2s32(0, 0), v2s32(0, 0)), NULL, m_client,
- IT_ROT_HOVERED);
+ core::rect<s32>(v2s32(0, 0), v2s32(0, 0)),
+ NULL, m_client, IT_ROT_HOVERED);
}
/* TODO find way to show tooltips on touchscreen */
@@ -3507,8 +3507,8 @@ void GUIFormSpecMenu::drawMenu()
Environment->getRootGUIElement()->getElementFromPoint(m_pointer);
#ifndef HAVE_TOUCHSCREENGUI
- gui::ICursorControl *cursor_control =
- RenderingEngine::get_raw_device()->getCursorControl();
+ gui::ICursorControl *cursor_control = RenderingEngine::get_raw_device()->
+ getCursorControl();
gui::ECURSOR_ICON current_cursor_icon = cursor_control->getActiveIcon();
#endif
bool hovered_element_found = false;
@@ -3525,8 +3525,7 @@ void GUIFormSpecMenu::drawMenu()
m_old_tooltip_id = id;
} else {
if (id == m_old_tooltip_id) {
- delta = porting::getDeltaMs(
- m_hovered_time, porting::getTimeMs());
+ delta = porting::getDeltaMs(m_hovered_time, porting::getTimeMs());
} else {
m_hovered_time = porting::getTimeMs();
m_old_tooltip_id = id;
@@ -3541,19 +3540,14 @@ void GUIFormSpecMenu::drawMenu()
continue;
if (delta >= m_tooltip_show_delay) {
- const std::wstring &text =
- m_tooltips[field.fname].tooltip;
+ const std::wstring &text = m_tooltips[field.fname].tooltip;
if (!text.empty())
- showTooltip(text,
- m_tooltips[field.fname]
- .color,
- m_tooltips[field.fname]
- .bgcolor);
+ showTooltip(text, m_tooltips[field.fname].color,
+ m_tooltips[field.fname].bgcolor);
}
#ifndef HAVE_TOUCHSCREENGUI
- if (field.ftype != f_HyperText && // Handled directly in
- // guiHyperText
+ if (field.ftype != f_HyperText && // Handled directly in guiHyperText
current_cursor_icon != field.fcursor_icon)
cursor_control->setActiveIcon(field.fcursor_icon);
#endif
@@ -3583,8 +3577,9 @@ void GUIFormSpecMenu::drawMenu()
skin->setFont(old_font);
}
+
void GUIFormSpecMenu::showTooltip(const std::wstring &text,
- const irr::video::SColor &color, const irr::video::SColor &bgcolor)
+ const irr::video::SColor &color, const irr::video::SColor &bgcolor)
{
EnrichedString ntext(text);
ntext.setDefaultColor(color);
@@ -3601,7 +3596,7 @@ void GUIFormSpecMenu::showTooltip(const std::wstring &text,
int tooltip_offset_y = m_btn_height;
#ifdef __ANDROID__
tooltip_offset_x *= 3;
- tooltip_offset_y = 0;
+ tooltip_offset_y = 0;
if (m_pointer.X > (s32)screenSize.X / 2)
tooltip_offset_x = -(tooltip_offset_x + tooltip_width);
@@ -3614,13 +3609,16 @@ void GUIFormSpecMenu::showTooltip(const std::wstring &text,
s32 tooltip_x = m_pointer.X + tooltip_offset_x;
s32 tooltip_y = m_pointer.Y + tooltip_offset_y;
if (tooltip_x + tooltip_width > (s32)screenSize.X)
- tooltip_x = (s32)screenSize.X - tooltip_width - m_btn_height;
+ tooltip_x = (s32)screenSize.X - tooltip_width - m_btn_height;
if (tooltip_y + tooltip_height > (s32)screenSize.Y)
tooltip_y = (s32)screenSize.Y - tooltip_height - m_btn_height;
- m_tooltip_element->setRelativePosition(core::rect<s32>(
+ m_tooltip_element->setRelativePosition(
+ core::rect<s32>(
core::position2d<s32>(tooltip_x, tooltip_y),
- core::dimension2d<s32>(tooltip_width, tooltip_height)));
+ core::dimension2d<s32>(tooltip_width, tooltip_height)
+ )
+ );
// Display the tooltip
m_tooltip_element->setVisible(true);
@@ -3675,23 +3673,17 @@ ItemStack GUIFormSpecMenu::verifySelectedItem()
if (m_selected_item) {
if (m_selected_item->isValid()) {
- Inventory *inv = m_invmgr->getInventory(
- m_selected_item->inventoryloc);
+ Inventory *inv = m_invmgr->getInventory(m_selected_item->inventoryloc);
if (inv) {
- InventoryList *list =
- inv->getList(m_selected_item->listname);
- if (list && (u32)m_selected_item->i < list->getSize()) {
- ItemStack stack =
- list->getItem(m_selected_item->i);
+ InventoryList *list = inv->getList(m_selected_item->listname);
+ if (list && (u32) m_selected_item->i < list->getSize()) {
+ ItemStack stack = list->getItem(m_selected_item->i);
if (!m_selected_swap.empty()) {
if (m_selected_swap.name == stack.name &&
- m_selected_swap.count ==
- stack.count)
+ m_selected_swap.count == stack.count)
m_selected_swap.clear();
} else {
- m_selected_amount = std::min(
- m_selected_amount,
- stack.count);
+ m_selected_amount = std::min(m_selected_amount, stack.count);
}
if (!stack.empty())
@@ -3709,9 +3701,10 @@ ItemStack GUIFormSpecMenu::verifySelectedItem()
return ItemStack();
}
-void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode = quit_mode_no)
+void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
{
- if (m_text_dst) {
+ if(m_text_dst)
+ {
StringMap fields;
if (quitmode == quit_mode_accept) {
@@ -3760,74 +3753,50 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode = quit_mode_no)
fields[name] = table->checkEvent();
}
} else if (s.ftype == f_DropDown) {
- // No dynamic cast possible due to some
- // distributions shipped without rtti support in
- // Irrlicht
- IGUIElement *element =
- getElementFromId(s.fid, true);
+ // No dynamic cast possible due to some distributions shipped
+ // without rtti support in Irrlicht
+ IGUIElement *element = getElementFromId(s.fid, true);
gui::IGUIComboBox *e = NULL;
- if ((element) &&
- (element->getType() ==
- gui::EGUIET_COMBO_BOX)) {
- e = static_cast<gui::IGUIComboBox *>(
- element);
+ if ((element) && (element->getType() == gui::EGUIET_COMBO_BOX)) {
+ e = static_cast<gui::IGUIComboBox *>(element);
} else {
- warningstream << "GUIFormSpecMenu::"
- "acceptInput: dropdown "
- << "field without dropdown "
- "element"
- << std::endl;
+ warningstream << "GUIFormSpecMenu::acceptInput: dropdown "
+ << "field without dropdown element" << std::endl;
continue;
}
s32 selected = e->getSelected();
if (selected >= 0) {
- if (m_dropdown_index_event.find(
- s.fname) !=
- m_dropdown_index_event
- .end()) {
- fields[name] = std::to_string(
- selected + 1);
+ if (m_dropdown_index_event.find(s.fname) !=
+ m_dropdown_index_event.end()) {
+ fields[name] = std::to_string(selected + 1);
} else {
std::vector<std::string> *dropdown_values =
- getDropDownValues(
- s.fname);
- if (dropdown_values &&
- selected < (s32)dropdown_values->size())
- fields[name] = (*dropdown_values)
- [selected];
+ getDropDownValues(s.fname);
+ if (dropdown_values && selected < (s32)dropdown_values->size())
+ fields[name] = (*dropdown_values)[selected];
}
}
} else if (s.ftype == f_TabHeader) {
- // No dynamic cast possible due to some
- // distributions shipped without rtti support in
- // Irrlicht
- IGUIElement *element =
- getElementFromId(s.fid, true);
+ // No dynamic cast possible due to some distributions shipped
+ // without rtti support in Irrlicht
+ IGUIElement *element = getElementFromId(s.fid, true);
gui::IGUITabControl *e = nullptr;
- if ((element) &&
- (element->getType() ==
- gui::EGUIET_TAB_CONTROL)) {
- e = static_cast<gui::IGUITabControl *>(
- element);
+ if ((element) && (element->getType() == gui::EGUIET_TAB_CONTROL)) {
+ e = static_cast<gui::IGUITabControl *>(element);
}
if (e != 0) {
std::stringstream ss;
- ss << (e->getActiveTab() + 1);
+ ss << (e->getActiveTab() +1);
fields[name] = ss.str();
}
} else if (s.ftype == f_CheckBox) {
- // No dynamic cast possible due to some
- // distributions shipped without rtti support in
- // Irrlicht
- IGUIElement *element =
- getElementFromId(s.fid, true);
+ // No dynamic cast possible due to some distributions shipped
+ // without rtti support in Irrlicht
+ IGUIElement *element = getElementFromId(s.fid, true);
gui::IGUICheckBox *e = nullptr;
- if ((element) &&
- (element->getType() ==
- gui::EGUIET_CHECK_BOX)) {
- e = static_cast<gui::IGUICheckBox *>(
- element);
+ if ((element) && (element->getType() == gui::EGUIET_CHECK_BOX)) {
+ e = static_cast<gui::IGUICheckBox*>(element);
}
if (e != 0) {
@@ -3837,14 +3806,11 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode = quit_mode_no)
fields[name] = "false";
}
} else if (s.ftype == f_ScrollBar) {
- // No dynamic cast possible due to some
- // distributions shipped without rtti support in
- // Irrlicht
- IGUIElement *element =
- getElementFromId(s.fid, true);
+ // No dynamic cast possible due to some distributions shipped
+ // without rtti support in Irrlicht
+ IGUIElement *element = getElementFromId(s.fid, true);
GUIScrollBar *e = nullptr;
- if (element && element->getType() ==
- gui::EGUIET_ELEMENT)
+ if (element && element->getType() == gui::EGUIET_ELEMENT)
e = static_cast<GUIScrollBar *>(element);
if (e) {
@@ -3854,22 +3820,17 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode = quit_mode_no)
fields[name] = "CHG:" + os.str();
else
fields[name] = "VAL:" + os.str();
- }
+ }
} else if (s.ftype == f_AnimatedImage) {
- // No dynamic cast possible due to some
- // distributions shipped without rtti support in
- // Irrlicht
- IGUIElement *element =
- getElementFromId(s.fid, true);
+ // No dynamic cast possible due to some distributions shipped
+ // without rtti support in Irrlicht
+ IGUIElement *element = getElementFromId(s.fid, true);
GUIAnimatedImage *e = nullptr;
- if (element && element->getType() ==
- gui::EGUIET_ELEMENT)
- e = static_cast<GUIAnimatedImage *>(
- element);
+ if (element && element->getType() == gui::EGUIET_ELEMENT)
+ e = static_cast<GUIAnimatedImage *>(element);
if (e)
- fields[name] = std::to_string(
- e->getFrameIndex() + 1);
+ fields[name] = std::to_string(e->getFrameIndex() + 1);
} else {
IGUIElement *e = getElementFromId(s.fid, true);
if (e)
@@ -3882,7 +3843,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode = quit_mode_no)
}
}
-bool GUIFormSpecMenu::preprocessEvent(const SEvent &event)
+bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
{
// The IGUITabControl renders visually using the skin's selected
// font, which we override for the duration of form drawing,
@@ -3895,11 +3856,11 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent &event)
s32 x = event.MouseInput.X;
s32 y = event.MouseInput.Y;
gui::IGUIElement *hovered =
- Environment->getRootGUIElement()->getElementFromPoint(
- core::position2d<s32>(x, y));
+ Environment->getRootGUIElement()->getElementFromPoint(
+ core::position2d<s32>(x, y));
if (hovered && isMyChild(hovered) &&
hovered->getType() == gui::EGUIET_TAB_CONTROL) {
- gui::IGUISkin *skin = Environment->getSkin();
+ gui::IGUISkin* skin = Environment->getSkin();
sanity_check(skin != NULL);
gui::IGUIFont *old_font = skin->getFont();
skin->setFont(m_font);
@@ -3911,19 +3872,16 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent &event)
// Fix Esc/Return key being eaten by checkboxen and tables
if (event.EventType == EET_KEY_INPUT_EVENT) {
- KeyPress kp(event.KeyInput);
- if (kp == EscapeKey || kp == CancelKey ||
- kp == getKeySetting("keymap_inventory") ||
- event.KeyInput.Key == KEY_RETURN) {
+ KeyPress kp(event.KeyInput);
+ if (kp == EscapeKey || kp == CancelKey
+ || kp == getKeySetting("keymap_inventory")
+ || event.KeyInput.Key==KEY_RETURN) {
gui::IGUIElement *focused = Environment->getFocus();
if (focused && isMyChild(focused) &&
(focused->getType() == gui::EGUIET_LIST_BOX ||
- focused->getType() ==
- gui::EGUIET_CHECK_BOX) &&
- (focused->getParent()->getType() !=
- gui::EGUIET_COMBO_BOX ||
- event.KeyInput.Key !=
- KEY_RETURN)) {
+ focused->getType() == gui::EGUIET_CHECK_BOX) &&
+ (focused->getParent()->getType() != gui::EGUIET_COMBO_BOX ||
+ event.KeyInput.Key != KEY_RETURN)) {
OnEvent(event);
return true;
}
@@ -3932,14 +3890,13 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent &event)
// Mouse wheel and move events: send to hovered element instead of focused
if (event.EventType == EET_MOUSE_INPUT_EVENT &&
(event.MouseInput.Event == EMIE_MOUSE_WHEEL ||
- (event.MouseInput.Event == EMIE_MOUSE_MOVED &&
- event.MouseInput.ButtonStates ==
- 0))) {
+ (event.MouseInput.Event == EMIE_MOUSE_MOVED &&
+ event.MouseInput.ButtonStates == 0))) {
s32 x = event.MouseInput.X;
s32 y = event.MouseInput.Y;
gui::IGUIElement *hovered =
- Environment->getRootGUIElement()->getElementFromPoint(
- core::position2d<s32>(x, y));
+ Environment->getRootGUIElement()->getElementFromPoint(
+ core::position2d<s32>(x, y));
if (hovered && isMyChild(hovered)) {
hovered->OnEvent(event);
return event.MouseInput.Event == EMIE_MOUSE_WHEEL;
@@ -3992,19 +3949,13 @@ enum ButtonEventType : u8
BET_OTHER
};
-bool GUIFormSpecMenu::OnEvent(const SEvent &event)
+bool GUIFormSpecMenu::OnEvent(const SEvent& event)
{
- if (event.EventType == EET_KEY_INPUT_EVENT) {
+ if (event.EventType==EET_KEY_INPUT_EVENT) {
KeyPress kp(event.KeyInput);
- if (event.KeyInput.PressedDown &&
- ((kp == EscapeKey) || (kp == CancelKey) ||
- ((m_client != NULL) &&
- (kp == getKeySetting("key"
- "map"
- "_in"
- "ven"
- "tor"
- "y"))))) {
+ if (event.KeyInput.PressedDown && (
+ (kp == EscapeKey) || (kp == CancelKey) ||
+ ((m_client != NULL) && (kp == getKeySetting("keymap_inventory"))))) {
tryClose();
return true;
}
@@ -4014,30 +3965,29 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
m_client->makeScreenshot();
}
- if (event.KeyInput.PressedDown &&
- kp == getKeySetting("keymap_toggle_debug"))
+ if (event.KeyInput.PressedDown && kp == getKeySetting("keymap_toggle_debug"))
m_show_debug = !m_show_debug;
if (event.KeyInput.PressedDown &&
- (event.KeyInput.Key == KEY_RETURN ||
- event.KeyInput.Key == KEY_UP ||
- event.KeyInput.Key == KEY_DOWN)) {
+ (event.KeyInput.Key==KEY_RETURN ||
+ event.KeyInput.Key==KEY_UP ||
+ event.KeyInput.Key==KEY_DOWN)
+ ) {
switch (event.KeyInput.Key) {
- case KEY_RETURN:
- current_keys_pending.key_enter = true;
- break;
- case KEY_UP:
- current_keys_pending.key_up = true;
- break;
- case KEY_DOWN:
- current_keys_pending.key_down = true;
- break;
- break;
- default:
- // can't happen at all!
- FATAL_ERROR("Reached a source line that can't ever been "
- "reached");
+ case KEY_RETURN:
+ current_keys_pending.key_enter = true;
+ break;
+ case KEY_UP:
+ current_keys_pending.key_up = true;
+ break;
+ case KEY_DOWN:
+ current_keys_pending.key_down = true;
+ break;
break;
+ default:
+ //can't happen at all!
+ FATAL_ERROR("Reached a source line that can't ever been reached");
+ break;
}
if (current_keys_pending.key_enter && m_allowclose) {
acceptInput(quit_mode_accept);
@@ -4047,6 +3997,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
}
return true;
}
+
}
/* Mouse event other than movement, or crossing the border of inventory
@@ -4054,11 +4005,9 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
*/
if (event.EventType == EET_MOUSE_INPUT_EVENT &&
(event.MouseInput.Event != EMIE_MOUSE_MOVED ||
- (event.MouseInput.Event == EMIE_MOUSE_MOVED &&
- event.MouseInput.isRightPressed() &&
- getItemAtPos(m_pointer).i !=
- getItemAtPos(m_old_pointer)
- .i))) {
+ (event.MouseInput.Event == EMIE_MOUSE_MOVED &&
+ event.MouseInput.isRightPressed() &&
+ getItemAtPos(m_pointer).i != getItemAtPos(m_old_pointer).i))) {
// Get selected item and hovered/clicked item (s)
@@ -4071,88 +4020,74 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
InventoryList *list_s = NULL;
if (m_selected_item) {
- inv_selected = m_invmgr->getInventory(
- m_selected_item->inventoryloc);
+ inv_selected = m_invmgr->getInventory(m_selected_item->inventoryloc);
sanity_check(inv_selected);
- sanity_check(inv_selected->getList(m_selected_item->listname) !=
- NULL);
+ sanity_check(inv_selected->getList(m_selected_item->listname) != NULL);
}
u32 s_count = 0;
if (s.isValid())
- do { // breakable
- inv_s = m_invmgr->getInventory(s.inventoryloc);
-
- if (!inv_s) {
- errorstream << "InventoryMenu: The selected "
- "inventory location "
- << "\"" << s.inventoryloc.dump()
- << "\" doesn't exist" << std::endl;
- s.i = -1; // make it invalid again
- break;
- }
+ do { // breakable
+ inv_s = m_invmgr->getInventory(s.inventoryloc);
+
+ if (!inv_s) {
+ errorstream << "InventoryMenu: The selected inventory location "
+ << "\"" << s.inventoryloc.dump() << "\" doesn't exist"
+ << std::endl;
+ s.i = -1; // make it invalid again
+ break;
+ }
- list_s = inv_s->getList(s.listname);
- if (list_s == NULL) {
- verbosestream << "InventoryMenu: The selected "
- "inventory list \""
- << s.listname << "\" does not exist"
- << std::endl;
- s.i = -1; // make it invalid again
- break;
- }
+ list_s = inv_s->getList(s.listname);
+ if (list_s == NULL) {
+ verbosestream << "InventoryMenu: The selected inventory list \""
+ << s.listname << "\" does not exist" << std::endl;
+ s.i = -1; // make it invalid again
+ break;
+ }
- if ((u32)s.i >= list_s->getSize()) {
- infostream << "InventoryMenu: The selected "
- "inventory list \""
- << s.listname
- << "\" is too small (i=" << s.i
- << ", size=" << list_s->getSize()
- << ")" << std::endl;
- s.i = -1; // make it invalid again
- break;
- }
+ if ((u32)s.i >= list_s->getSize()) {
+ infostream << "InventoryMenu: The selected inventory list \""
+ << s.listname << "\" is too small (i=" << s.i << ", size="
+ << list_s->getSize() << ")" << std::endl;
+ s.i = -1; // make it invalid again
+ break;
+ }
- s_count = list_s->getItem(s.i).count;
- } while (0);
+ s_count = list_s->getItem(s.i).count;
+ } while(0);
bool identical = m_selected_item && s.isValid() &&
- (inv_selected == inv_s) &&
- (m_selected_item->listname == s.listname) &&
- (m_selected_item->i == s.i);
+ (inv_selected == inv_s) &&
+ (m_selected_item->listname == s.listname) &&
+ (m_selected_item->i == s.i);
ButtonEventType button = BET_LEFT;
ButtonEventType updown = BET_OTHER;
switch (event.MouseInput.Event) {
case EMIE_LMOUSE_PRESSED_DOWN:
- button = BET_LEFT;
- updown = BET_DOWN;
+ button = BET_LEFT; updown = BET_DOWN;
break;
case EMIE_RMOUSE_PRESSED_DOWN:
- button = BET_RIGHT;
- updown = BET_DOWN;
+ button = BET_RIGHT; updown = BET_DOWN;
break;
case EMIE_MMOUSE_PRESSED_DOWN:
- button = BET_MIDDLE;
- updown = BET_DOWN;
+ button = BET_MIDDLE; updown = BET_DOWN;
break;
case EMIE_MOUSE_WHEEL:
- button = (event.MouseInput.Wheel > 0) ? BET_WHEEL_UP
- : BET_WHEEL_DOWN;
+ button = (event.MouseInput.Wheel > 0) ?
+ BET_WHEEL_UP : BET_WHEEL_DOWN;
updown = BET_DOWN;
break;
case EMIE_LMOUSE_LEFT_UP:
- button = BET_LEFT;
- updown = BET_UP;
+ button = BET_LEFT; updown = BET_UP;
break;
case EMIE_RMOUSE_LEFT_UP:
- button = BET_RIGHT;
- updown = BET_UP;
+ button = BET_RIGHT; updown = BET_UP;
break;
case EMIE_MMOUSE_LEFT_UP:
- button = BET_MIDDLE;
- updown = BET_UP;
+ button = BET_MIDDLE; updown = BET_UP;
break;
case EMIE_MOUSE_MOVED:
updown = BET_MOVE;
@@ -4180,7 +4115,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
case BET_DOWN:
// Some mouse button has been pressed
- // infostream << "Mouse button " << button << " pressed at p=("
+ //infostream << "Mouse button " << button << " pressed at p=("
// << event.MouseInput.X << "," << event.MouseInput.Y << ")"
// << std::endl;
@@ -4191,10 +4126,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
craft_amount = (button == BET_MIDDLE ? 10 : 1);
} else if (!m_selected_item) {
if (s_count && button != BET_WHEEL_UP) {
- // Non-empty stack has been clicked: select or
- // shift-move it
- m_selected_item =
- new GUIInventoryList::ItemSpec(s);
+ // Non-empty stack has been clicked: select or shift-move it
+ m_selected_item = new GUIInventoryList::ItemSpec(s);
u32 count;
if (button == BET_RIGHT)
@@ -4203,22 +4136,17 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
count = MYMIN(s_count, 10);
else if (button == BET_WHEEL_DOWN)
count = 1;
- else // left
+ else // left
count = s_count;
if (!event.MouseInput.Shift) {
// no shift: select item
m_selected_amount = count;
- m_selected_dragging =
- button != BET_WHEEL_DOWN;
+ m_selected_dragging = button != BET_WHEEL_DOWN;
m_auto_place = false;
} else {
- // shift pressed: move item, right click
- // moves 1
- shift_move_amount =
- button == BET_RIGHT
- ? 1
- : count;
+ // shift pressed: move item, right click moves 1
+ shift_move_amount = button == BET_RIGHT ? 1 : count;
}
}
} else { // m_selected_item != NULL
@@ -4229,8 +4157,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
if (button == BET_RIGHT || button == BET_WHEEL_UP)
move_amount = 1;
else if (button == BET_MIDDLE)
- move_amount = MYMIN(
- m_selected_amount, 10);
+ move_amount = MYMIN(m_selected_amount, 10);
else if (button == BET_LEFT)
move_amount = m_selected_amount;
// else wheeldown
@@ -4240,44 +4167,38 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
if (m_selected_amount < s_count)
++m_selected_amount;
} else {
- if (move_amount >=
- m_selected_amount)
+ if (move_amount >= m_selected_amount)
m_selected_amount = 0;
else
- m_selected_amount -=
- move_amount;
+ m_selected_amount -= move_amount;
move_amount = 0;
}
}
- } else if (!getAbsoluteClippingRect().isPointInside(
- m_pointer) &&
- button != BET_WHEEL_DOWN) {
+ } else if (!getAbsoluteClippingRect().isPointInside(m_pointer)
+ && button != BET_WHEEL_DOWN) {
// Clicked outside of the window: drop
if (button == BET_RIGHT || button == BET_WHEEL_UP)
drop_amount = 1;
else if (button == BET_MIDDLE)
- drop_amount = MYMIN(
- m_selected_amount, 10);
- else // left
+ drop_amount = MYMIN(m_selected_amount, 10);
+ else // left
drop_amount = m_selected_amount;
}
}
- break;
+ break;
case BET_UP:
// Some mouse button has been released
- // infostream<<"Mouse button "<<button<<" released at p=("
+ //infostream<<"Mouse button "<<button<<" released at p=("
// <<p.X<<","<<p.Y<<")"<<std::endl;
if (m_selected_dragging && m_selected_item) {
if (s.isValid()) {
if (!identical) {
- // Dragged to different slot: move all
- // selected
+ // Dragged to different slot: move all selected
move_amount = m_selected_amount;
}
- } else if (!getAbsoluteClippingRect().isPointInside(
- m_pointer)) {
+ } else if (!getAbsoluteClippingRect().isPointInside(m_pointer)) {
// Dragged outside of window: drop all selected
drop_amount = m_selected_amount;
}
@@ -4289,32 +4210,28 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
// + click changes to drop item when moved mode
if (m_selected_item)
m_auto_place = true;
- break;
+ break;
case BET_MOVE:
// Mouse has been moved and rmb is down and mouse pointer just
// entered a new inventory field (checked in the entry-if, this
// is the only action here that is generated by mouse movement)
- if (m_selected_item && s.isValid() &&
- s.listname != "craftpreview") {
+ if (m_selected_item && s.isValid() && s.listname != "craftpreview") {
// Move 1 item
// TODO: middle mouse to move 10 items might be handy
if (m_auto_place) {
- // Only move an item if the destination slot is
- // empty or contains the same item type as what is
- // going to be moved
- InventoryList *list_from = inv_selected->getList(
- m_selected_item->listname);
+ // Only move an item if the destination slot is empty
+ // or contains the same item type as what is going to be
+ // moved
+ InventoryList *list_from = inv_selected->getList(m_selected_item->listname);
InventoryList *list_to = list_s;
assert(list_from && list_to);
- ItemStack stack_from = list_from->getItem(
- m_selected_item->i);
+ ItemStack stack_from = list_from->getItem(m_selected_item->i);
ItemStack stack_to = list_to->getItem(s.i);
- if (stack_to.empty() ||
- stack_to.name == stack_from.name)
+ if (stack_to.empty() || stack_to.name == stack_from.name)
move_amount = 1;
}
}
- break;
+ break;
default:
break;
}
@@ -4327,18 +4244,15 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
assert(s.isValid());
assert(inv_selected && inv_s);
- InventoryList *list_from =
- inv_selected->getList(m_selected_item->listname);
+ InventoryList *list_from = inv_selected->getList(m_selected_item->listname);
InventoryList *list_to = list_s;
assert(list_from && list_to);
ItemStack stack_from = list_from->getItem(m_selected_item->i);
ItemStack stack_to = list_to->getItem(s.i);
// Check how many items can be moved
- move_amount = stack_from.count =
- MYMIN(move_amount, stack_from.count);
- ItemStack leftover =
- stack_to.addItem(stack_from, m_client->idef());
+ move_amount = stack_from.count = MYMIN(move_amount, stack_from.count);
+ ItemStack leftover = stack_to.addItem(stack_from, m_client->idef());
bool move = true;
// If source stack cannot be added to destination stack at all,
// they are swapped
@@ -4350,8 +4264,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
m_selected_dragging = false;
// WARNING: BLACK MAGIC, BUT IN A REDUCED SET
- // Skip next validation checks due async inventory
- // calls
+ // Skip next validation checks due async inventory calls
m_selected_swap = stack_to;
} else {
move = false;
@@ -4368,8 +4281,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
}
if (move) {
- infostream << "Handing IAction::Move to manager"
- << std::endl;
+ infostream << "Handing IAction::Move to manager" << std::endl;
IMoveAction *a = new IMoveAction();
a->count = move_amount;
a->from_inv = m_selected_item->inventoryloc;
@@ -4385,32 +4297,28 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
u32 i = 0;
for (; i < mis; i++) {
const ListRingSpec &sp = m_inventory_rings[i];
- if (sp.inventoryloc == s.inventoryloc &&
- sp.listname == s.listname)
+ if (sp.inventoryloc == s.inventoryloc
+ && sp.listname == s.listname)
break;
}
do {
if (i >= mis) // if not found
break;
u32 to_inv_ind = (i + 1) % mis;
- const ListRingSpec &to_inv_sp =
- m_inventory_rings[to_inv_ind];
+ const ListRingSpec &to_inv_sp = m_inventory_rings[to_inv_ind];
InventoryList *list_from = list_s;
if (!s.isValid())
break;
- Inventory *inv_to = m_invmgr->getInventory(
- to_inv_sp.inventoryloc);
+ Inventory *inv_to = m_invmgr->getInventory(to_inv_sp.inventoryloc);
if (!inv_to)
break;
- InventoryList *list_to =
- inv_to->getList(to_inv_sp.listname);
+ InventoryList *list_to = inv_to->getList(to_inv_sp.listname);
if (!list_to)
break;
ItemStack stack_from = list_from->getItem(s.i);
assert(shift_move_amount <= stack_from.count);
- infostream << "Handing IAction::Move to manager"
- << std::endl;
+ infostream << "Handing IAction::Move to manager" << std::endl;
IMoveAction *a = new IMoveAction();
a->count = shift_move_amount;
a->from_inv = s.inventoryloc;
@@ -4426,14 +4334,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
assert(m_selected_item && m_selected_item->isValid());
assert(inv_selected);
- InventoryList *list_from =
- inv_selected->getList(m_selected_item->listname);
+ InventoryList *list_from = inv_selected->getList(m_selected_item->listname);
assert(list_from);
ItemStack stack_from = list_from->getItem(m_selected_item->i);
// Check how many items can be dropped
- drop_amount = stack_from.count =
- MYMIN(drop_amount, stack_from.count);
+ drop_amount = stack_from.count = MYMIN(drop_amount, stack_from.count);
assert(drop_amount > 0 && drop_amount <= m_selected_amount);
m_selected_amount -= drop_amount;
@@ -4449,14 +4355,13 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
// if there are no items selected or the selected item
// belongs to craftresult list, proceed with crafting
- if (!m_selected_item || !m_selected_item->isValid() ||
- m_selected_item->listname == "craftresult") {
+ if (!m_selected_item ||
+ !m_selected_item->isValid() || m_selected_item->listname == "craftresult") {
assert(inv_s);
// Send IACTION_CRAFT
- infostream << "Handing IACTION_CRAFT to manager"
- << std::endl;
+ infostream << "Handing IACTION_CRAFT to manager" << std::endl;
ICraftAction *a = new ICraftAction();
a->count = craft_amount;
a->craft_inv = s.inventoryloc;
@@ -4476,7 +4381,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
}
if (event.EventType == EET_GUI_EVENT) {
- if (event.GUIEvent.EventType == gui::EGET_TAB_CHANGED && isVisible()) {
+ if (event.GUIEvent.EventType == gui::EGET_TAB_CHANGED
+ && isVisible()) {
// find the element that was clicked
for (GUIFormSpecMenu::FieldSpec &s : m_fields) {
if ((s.ftype == f_TabHeader) &&
@@ -4488,23 +4394,19 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
}
}
}
- if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
- isVisible()) {
+ if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
+ && isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- infostream << "GUIFormSpecMenu: Not allowing focus "
- "change."
- << std::endl;
+ infostream<<"GUIFormSpecMenu: Not allowing focus change."
+ <<std::endl;
// Returning true disables focus change
return true;
}
}
if ((event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) ||
- (event.GUIEvent.EventType ==
- gui::EGET_CHECKBOX_CHANGED) ||
- (event.GUIEvent.EventType ==
- gui::EGET_COMBO_BOX_CHANGED) ||
- (event.GUIEvent.EventType ==
- gui::EGET_SCROLL_BAR_CHANGED)) {
+ (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) ||
+ (event.GUIEvent.EventType == gui::EGET_COMBO_BOX_CHANGED) ||
+ (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED)) {
s32 caller_id = event.GUIEvent.Caller->getID();
if (caller_id == 257) {
@@ -4534,8 +4436,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
acceptInput(quit_mode_accept);
quitMenu();
} else {
- m_text_dst->gotText(
- L"ExitButton");
+ m_text_dst->gotText(L"ExitButton");
}
return true;
}
@@ -4554,8 +4455,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
s.send = true;
acceptInput(quit_mode_no);
- // revert configuration to make sure dropdowns are
- // sent on regular button click
+ // revert configuration to make sure dropdowns are sent on
+ // regular button click
for (GUIFormSpecMenu::FieldSpec &s2 : m_fields) {
if (s2.ftype == f_DropDown) {
s2.send = true;
@@ -4566,8 +4467,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
s.fdefault = L"Changed";
acceptInput(quit_mode_no);
s.fdefault = L"";
- } else if (s.ftype == f_Unknown ||
- s.ftype == f_HyperText) {
+ } else if (s.ftype == f_Unknown || s.ftype == f_HyperText) {
s.send = true;
acceptInput();
s.send = false;
@@ -4577,8 +4477,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
// move scroll_containers
- for (const std::pair<std::string, GUIScrollContainer *> &c :
- m_scroll_containers)
+ for (const std::pair<std::string, GUIScrollContainer *> &c : m_scroll_containers)
c.second->onScrollEvent(event.GUIEvent.Caller);
}
@@ -4589,10 +4488,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
if (s.ftype == f_Unknown &&
s.fid == event.GUIEvent.Caller->getID()) {
current_field_enter_pending = s.fname;
- std::unordered_map<std::string,
- bool>::const_iterator it =
- field_close_on_enter.find(
- s.fname);
+ std::unordered_map<std::string, bool>::const_iterator it =
+ field_close_on_enter.find(s.fname);
if (it != field_close_on_enter.end())
close_on_enter = (*it).second;
@@ -4620,11 +4517,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent &event)
for (GUIFormSpecMenu::FieldSpec &s : m_fields) {
// if it's a table, set the send field
// so lua knows which table was changed
- if ((s.ftype == f_Table) &&
- (s.fid == current_id)) {
+ if ((s.ftype == f_Table) && (s.fid == current_id)) {
s.send = true;
acceptInput();
- s.send = false;
+ s.send=false;
}
}
return true;
@@ -4649,6 +4545,7 @@ std::string GUIFormSpecMenu::getNameByID(s32 id)
return "";
}
+
const GUIFormSpecMenu::FieldSpec *GUIFormSpecMenu::getSpecByID(s32 id)
{
for (FieldSpec &spec : m_fields) {
@@ -4673,14 +4570,12 @@ std::wstring GUIFormSpecMenu::getLabelByID(s32 id)
}
StyleSpec GUIFormSpecMenu::getDefaultStyleForElement(const std::string &type,
- const std::string &name, const std::string &parent_type)
-{
+ const std::string &name, const std::string &parent_type) {
return getStyleForElement(type, name, parent_type)[StyleSpec::STATE_DEFAULT];
}
std::array<StyleSpec, StyleSpec::NUM_STATES> GUIFormSpecMenu::getStyleForElement(
- const std::string &type, const std::string &name,
- const std::string &parent_type)
+ const std::string &type, const std::string &name, const std::string &parent_type)
{
std::array<StyleSpec, StyleSpec::NUM_STATES> ret;
diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h
index ea9731258..613acaa04 100644
--- a/src/gui/guiFormSpecMenu.h
+++ b/src/gui/guiFormSpecMenu.h
@@ -41,8 +41,7 @@ class Client;
class TexturePool;
class GUIScrollContainer;
-typedef enum
-{
+typedef enum {
f_Button,
f_Table,
f_TabHeader,
@@ -56,8 +55,7 @@ typedef enum
f_Unknown
} FormspecFieldType;
-typedef enum
-{
+typedef enum {
quit_mode_no,
quit_mode_accept,
quit_mode_cancel
@@ -90,9 +88,9 @@ class GUIFormSpecMenu : public GUIModalMenu
ListRingSpec() = default;
ListRingSpec(const InventoryLocation &a_inventoryloc,
- const std::string &a_listname) :
- inventoryloc(a_inventoryloc),
- listname(a_listname)
+ const std::string &a_listname):
+ inventoryloc(a_inventoryloc),
+ listname(a_listname)
{
}
@@ -105,15 +103,17 @@ class GUIFormSpecMenu : public GUIModalMenu
FieldSpec() = default;
FieldSpec(const std::string &name, const std::wstring &label,
- const std::wstring &default_text, s32 id,
- int priority = 0,
+ const std::wstring &default_text, s32 id, int priority = 0,
gui::ECURSOR_ICON cursor_icon = ECI_NORMAL) :
- fname(name),
- flabel(label),
- fdefault(unescape_enriched(
- translate_string(default_text))),
- fid(id), send(false), ftype(f_Unknown), is_exit(false),
- priority(priority), fcursor_icon(cursor_icon)
+ fname(name),
+ flabel(label),
+ fdefault(unescape_enriched(translate_string(default_text))),
+ fid(id),
+ send(false),
+ ftype(f_Unknown),
+ is_exit(false),
+ priority(priority),
+ fcursor_icon(cursor_icon)
{
}
@@ -134,9 +134,10 @@ class GUIFormSpecMenu : public GUIModalMenu
{
TooltipSpec() = default;
TooltipSpec(const std::wstring &a_tooltip, irr::video::SColor a_bgcolor,
- irr::video::SColor a_color) :
- tooltip(translate_string(a_tooltip)),
- bgcolor(a_bgcolor), color(a_color)
+ irr::video::SColor a_color):
+ tooltip(translate_string(a_tooltip)),
+ bgcolor(a_bgcolor),
+ color(a_color)
{
}
@@ -146,16 +147,21 @@ class GUIFormSpecMenu : public GUIModalMenu
};
public:
- GUIFormSpecMenu(JoystickController *joystick, gui::IGUIElement *parent, s32 id,
- IMenuManager *menumgr, Client *client, ISimpleTextureSource *tsrc,
- IFormSource *fs_src, TextDest *txt_dst,
- const std::string &formspecPrepend, bool remap_dbl_click = true);
+ GUIFormSpecMenu(JoystickController *joystick,
+ gui::IGUIElement* parent, s32 id,
+ IMenuManager *menumgr,
+ Client *client,
+ ISimpleTextureSource *tsrc,
+ IFormSource* fs_src,
+ TextDest* txt_dst,
+ const std::string &formspecPrepend,
+ bool remap_dbl_click = true);
~GUIFormSpecMenu();
static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
- JoystickController *joystick, IFormSource *fs_src,
- TextDest *txt_dest, const std::string &formspecPrepend);
+ JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
+ const std::string &formspecPrepend);
void setFormSpec(const std::string &formspec_string,
const InventoryLocation &current_inventory_location)
@@ -190,9 +196,12 @@ public:
m_text_dst = text_dst;
}
- void allowClose(bool value) { m_allowclose = value; }
+ void allowClose(bool value)
+ {
+ m_allowclose = value;
+ }
- void lockSize(bool lock, v2u32 basescreensize = v2u32(0, 0))
+ void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0))
{
m_lock = lock;
m_lockscreensize = basescreensize;
@@ -201,18 +210,30 @@ public:
void removeChildren();
void setInitialFocus();
- void setFocus(const std::string &elementname) { m_focused_element = elementname; }
+ void setFocus(const std::string &elementname)
+ {
+ m_focused_element = elementname;
+ }
- Client *getClient() const { return m_client; }
+ Client *getClient() const
+ {
+ return m_client;
+ }
const GUIInventoryList::ItemSpec *getSelectedItem() const
{
return m_selected_item;
}
- const u16 getSelectedAmount() const { return m_selected_amount; }
+ const u16 getSelectedAmount() const
+ {
+ return m_selected_amount;
+ }
- bool doTooltipAppendItemname() const { return m_tooltip_append_itemname; }
+ bool doTooltipAppendItemname() const
+ {
+ return m_tooltip_append_itemname;
+ }
void addHoveredItemTooltip(const std::string &name)
{
@@ -231,13 +252,13 @@ public:
ItemStack verifySelectedItem();
void acceptInput(FormspecQuitMode quitmode);
- bool preprocessEvent(const SEvent &event);
- bool OnEvent(const SEvent &event);
+ bool preprocessEvent(const SEvent& event);
+ bool OnEvent(const SEvent& event);
bool doPause;
bool pausesGame() { return doPause; }
- GUITable *getTable(const std::string &tablename);
- std::vector<std::string> *getDropDownValues(const std::string &name);
+ GUITable* getTable(const std::string &tablename);
+ std::vector<std::string>* getDropDownValues(const std::string &name);
#ifdef __ANDROID__
bool getAndroidUIInput();
@@ -246,7 +267,7 @@ public:
protected:
v2s32 getBasePos() const
{
- return padding + offset + AbsoluteRect.UpperLeftCorner;
+ return padding + offset + AbsoluteRect.UpperLeftCorner;
}
std::wstring getLabelByID(s32 id);
std::string getNameByID(s32 id);
@@ -260,11 +281,9 @@ protected:
std::unordered_set<std::string> property_warned;
StyleSpec getDefaultStyleForElement(const std::string &type,
- const std::string &name = "",
- const std::string &parent_type = "");
- std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(
- const std::string &type, const std::string &name = "",
- const std::string &parent_type = "");
+ const std::string &name="", const std::string &parent_type="");
+ std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
+ const std::string &name="", const std::string &parent_type="");
v2s32 padding;
v2f32 spacing;
@@ -326,16 +345,15 @@ protected:
video::SColor m_default_tooltip_color;
private:
- IFormSource *m_form_src;
- TextDest *m_text_dst;
- std::string m_last_formname;
- u16 m_formspec_version = 1;
- std::string m_focused_element = "";
+ IFormSource *m_form_src;
+ TextDest *m_text_dst;
+ std::string m_last_formname;
+ u16 m_formspec_version = 1;
+ std::string m_focused_element = "";
JoystickController *m_joystick;
bool m_show_debug = false;
- typedef struct
- {
+ typedef struct {
bool explicit_size;
bool real_coordinates;
u8 simple_field_count;
@@ -352,23 +370,20 @@ private:
GUIInventoryList::Options inventorylist_options;
- struct
- {
+ struct {
s32 max = 1000;
s32 min = 0;
s32 small_step = 10;
s32 large_step = 100;
s32 thumb_size = 1;
- GUIScrollBar::ArrowVisibility arrow_visiblity =
- GUIScrollBar::DEFAULT;
+ GUIScrollBar::ArrowVisibility arrow_visiblity = GUIScrollBar::DEFAULT;
} scrollbar_options;
// used to restore table selection/scroll/treeview state
std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
} parserData;
- typedef struct
- {
+ typedef struct {
bool key_up;
bool key_down;
bool key_enter;
@@ -379,50 +394,49 @@ private:
std::string current_field_enter_pending = "";
std::vector<std::string> m_hovered_item_tooltips;
- void parseElement(parserData *data, const std::string &element);
+ void parseElement(parserData* data, const std::string &element);
- void parseSize(parserData *data, const std::string &element);
- void parseContainer(parserData *data, const std::string &element);
- void parseContainerEnd(parserData *data);
+ void parseSize(parserData* data, const std::string &element);
+ void parseContainer(parserData* data, const std::string &element);
+ void parseContainerEnd(parserData* data);
void parseScrollContainer(parserData *data, const std::string &element);
void parseScrollContainerEnd(parserData *data);
- void parseList(parserData *data, const std::string &element);
- void parseListRing(parserData *data, const std::string &element);
- void parseCheckbox(parserData *data, const std::string &element);
- void parseImage(parserData *data, const std::string &element);
+ void parseList(parserData* data, const std::string &element);
+ void parseListRing(parserData* data, const std::string &element);
+ void parseCheckbox(parserData* data, const std::string &element);
+ void parseImage(parserData* data, const std::string &element);
void parseAnimatedImage(parserData *data, const std::string &element);
- void parseItemImage(parserData *data, const std::string &element);
- void parseButton(parserData *data, const std::string &element,
+ void parseItemImage(parserData* data, const std::string &element);
+ void parseButton(parserData* data, const std::string &element,
const std::string &typ);
- void parseBackground(parserData *data, const std::string &element);
- void parseTableOptions(parserData *data, const std::string &element);
- void parseTableColumns(parserData *data, const std::string &element);
- void parseTable(parserData *data, const std::string &element);
- void parseTextList(parserData *data, const std::string &element);
- void parseDropDown(parserData *data, const std::string &element);
+ void parseBackground(parserData* data, const std::string &element);
+ void parseTableOptions(parserData* data, const std::string &element);
+ void parseTableColumns(parserData* data, const std::string &element);
+ void parseTable(parserData* data, const std::string &element);
+ void parseTextList(parserData* data, const std::string &element);
+ void parseDropDown(parserData* data, const std::string &element);
void parseFieldCloseOnEnter(parserData *data, const std::string &element);
- void parsePwdField(parserData *data, const std::string &element);
- void parseField(parserData *data, const std::string &element,
- const std::string &type);
- void createTextField(parserData *data, FieldSpec &spec, core::rect<s32> &rect,
- bool is_multiline);
- void parseSimpleField(parserData *data, std::vector<std::string> &parts);
- void parseTextArea(parserData *data, std::vector<std::string> &parts,
+ void parsePwdField(parserData* data, const std::string &element);
+ void parseField(parserData* data, const std::string &element, const std::string &type);
+ void createTextField(parserData *data, FieldSpec &spec,
+ core::rect<s32> &rect, bool is_multiline);
+ void parseSimpleField(parserData* data,std::vector<std::string> &parts);
+ void parseTextArea(parserData* data,std::vector<std::string>& parts,
const std::string &type);
void parseHyperText(parserData *data, const std::string &element);
- void parseLabel(parserData *data, const std::string &element);
- void parseVertLabel(parserData *data, const std::string &element);
- void parseImageButton(parserData *data, const std::string &element,
+ void parseLabel(parserData* data, const std::string &element);
+ void parseVertLabel(parserData* data, const std::string &element);
+ void parseImageButton(parserData* data, const std::string &element,
const std::string &type);
- void parseItemImageButton(parserData *data, const std::string &element);
- void parseTabHeader(parserData *data, const std::string &element);
- void parseBox(parserData *data, const std::string &element);
- void parseBackgroundColor(parserData *data, const std::string &element);
- void parseListColors(parserData *data, const std::string &element);
- void parseTooltip(parserData *data, const std::string &element);
+ void parseItemImageButton(parserData* data, const std::string &element);
+ void parseTabHeader(parserData* data, const std::string &element);
+ void parseBox(parserData* data, const std::string &element);
+ void parseBackgroundColor(parserData* data, const std::string &element);
+ void parseListColors(parserData* data, const std::string &element);
+ void parseTooltip(parserData* data, const std::string &element);
bool parseVersionDirect(const std::string &data);
- bool parseSizeDirect(parserData *data, const std::string &element);
- void parseScrollBar(parserData *data, const std::string &element);
+ bool parseSizeDirect(parserData* data, const std::string &element);
+ void parseScrollBar(parserData* data, const std::string &element);
void parseScrollBarOptions(parserData *data, const std::string &element);
bool parsePositionDirect(parserData *data, const std::string &element);
void parsePosition(parserData *data, const std::string &element);
@@ -434,7 +448,7 @@ private:
void tryClose();
void showTooltip(const std::wstring &text, const irr::video::SColor &color,
- const irr::video::SColor &bgcolor);
+ const irr::video::SColor &bgcolor);
/**
* In formspec version < 2 the elements were not ordered properly. Some element
@@ -447,16 +461,25 @@ private:
gui::IGUIFont *m_font = nullptr;
};
-class FormspecFormSource : public IFormSource
+class FormspecFormSource: public IFormSource
{
public:
- FormspecFormSource(const std::string &formspec) : m_formspec(formspec) {}
+ FormspecFormSource(const std::string &formspec):
+ m_formspec(formspec)
+ {
+ }
~FormspecFormSource() = default;
- void setForm(const std::string &formspec) { m_formspec = formspec; }
+ void setForm(const std::string &formspec)
+ {
+ m_formspec = formspec;
+ }
- const std::string &getForm() const { return m_formspec; }
+ const std::string &getForm() const
+ {
+ return m_formspec;
+ }
std::string m_formspec;
};
diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp
index 70c5d3f66..88931cdf9 100644
--- a/src/gui/guiHyperText.cpp
+++ b/src/gui/guiHyperText.cpp
@@ -71,8 +71,8 @@ void ParsedText::Element::setStyle(StyleList &style)
if (style["fontstyle"] == "mono")
font_mode = FM_Mono;
- FontSpec spec(font_size, font_mode, is_yes(style["bold"]),
- is_yes(style["italic"]));
+ FontSpec spec(font_size, font_mode,
+ is_yes(style["bold"]), is_yes(style["italic"]));
// TODO: find a way to check font validity
// Build a new fontengine ?
@@ -247,9 +247,8 @@ void ParsedText::endParagraph(EndReason reason)
EndReason previous = m_end_paragraph_reason;
m_end_paragraph_reason = reason;
- if (m_empty_paragraph &&
- (reason == ER_TAG ||
- (reason == ER_NEWLINE && previous == ER_TAG))) {
+ if (m_empty_paragraph && (reason == ER_TAG ||
+ (reason == ER_NEWLINE && previous == ER_TAG))) {
// Ignore last empty paragraph
m_paragraph = nullptr;
m_paragraphs.pop_back();
@@ -540,13 +539,10 @@ u32 ParsedText::parseTag(const wchar_t *text, u32 cursor)
std::string str = attrs["rotate"];
std::vector<std::string> parts = split(str, ',');
if (parts.size() == 3) {
- m_element->rotation = v3s16(
- rangelim(stoi(parts[0]), -1000,
- 1000),
- rangelim(stoi(parts[1]), -1000,
- 1000),
- rangelim(stoi(parts[2]), -1000,
- 1000));
+ m_element->rotation = v3s16 (
+ rangelim(stoi(parts[0]), -1000, 1000),
+ rangelim(stoi(parts[1]), -1000, 1000),
+ rangelim(stoi(parts[2]), -1000, 1000));
}
}
}
@@ -618,14 +614,12 @@ TextDrawer::TextDrawer(const wchar_t *text, Client *client,
case ParsedText::ELEMENT_SEPARATOR:
case ParsedText::ELEMENT_TEXT:
if (e.font) {
- e.dim.Width = e.font->getDimension(e.text.c_str())
- .Width;
+ e.dim.Width = e.font->getDimension(e.text.c_str()).Width;
e.dim.Height = e.font->getDimension(L"Yy").Height;
#if USE_FREETYPE
if (e.font->getType() == irr::gui::EGFT_CUSTOM) {
e.baseline = e.dim.Height - 1 -
- ((irr::gui::CGUITTFont *)e.font)->getAscender() /
- 64;
+ ((irr::gui::CGUITTFont *)e.font)->getAscender() / 64;
}
#endif
} else {
@@ -644,8 +638,8 @@ TextDrawer::TextDrawer(const wchar_t *text, Client *client,
if (e.type == ParsedText::ELEMENT_IMAGE) {
video::ITexture *texture =
- m_client->getTextureSource()->getTexture(
- stringw_to_utf8(e.text));
+ m_client->getTextureSource()->
+ getTexture(stringw_to_utf8(e.text));
if (texture)
dim = texture->getOriginalSize();
}
@@ -655,10 +649,10 @@ TextDrawer::TextDrawer(const wchar_t *text, Client *client,
e.dim = dim;
else
e.dim.Height = dim.Height * e.dim.Width /
- dim.Width;
+ dim.Width;
else
e.dim.Width = dim.Width * e.dim.Height /
- dim.Height;
+ dim.Height;
break;
}
}
@@ -712,7 +706,7 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
e->pos.X = m_text.margin;
if (e->floating == ParsedText::FLOAT_RIGHT)
e->pos.X = dest_rect.getWidth() - e->dim.Width -
- m_text.margin;
+ m_text.margin;
RectWithMargin floating;
floating.rect = core::rect<s32>(e->pos, e->dim);
@@ -745,54 +739,38 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
for (const auto &f : m_floating) {
// Does floating rect intersect paragraph y line?
if (f.rect.UpperLeftCorner.Y - f.margin <= y &&
- f.rect.LowerRightCorner.Y + f.margin >=
- y) {
+ f.rect.LowerRightCorner.Y + f.margin >= y) {
// Next Y to try if no room left
- if (!nexty || f.rect.LowerRightCorner.Y + std::max(f.margin,
- p.margin) <
- nexty) {
- nexty = f.rect.LowerRightCorner
- .Y +
- std::max(f.margin,
- p.margin) +
- 1;
+ if (!nexty || f.rect.LowerRightCorner.Y +
+ std::max(f.margin, p.margin) < nexty) {
+ nexty = f.rect.LowerRightCorner.Y +
+ std::max(f.margin, p.margin) + 1;
}
- if (f.rect.UpperLeftCorner.X - f.margin <=
- left &&
- f.rect.LowerRightCorner.X + f.margin <
- right) {
+ if (f.rect.UpperLeftCorner.X - f.margin <= left &&
+ f.rect.LowerRightCorner.X + f.margin < right) {
// float on left
- if (f.rect.LowerRightCorner.X + std::max(f.margin,
- p.margin) >
- left) {
- left = f.rect.LowerRightCorner
- .X +
- std::max(f.margin,
- p.margin);
+ if (f.rect.LowerRightCorner.X +
+ std::max(f.margin, p.margin) > left) {
+ left = f.rect.LowerRightCorner.X +
+ std::max(f.margin, p.margin);
}
- } else if (f.rect.LowerRightCorner.X + f.margin >=
- right &&
- f.rect.UpperLeftCorner.X - f.margin >
- left) {
+ } else if (f.rect.LowerRightCorner.X + f.margin >= right &&
+ f.rect.UpperLeftCorner.X - f.margin > left) {
// float on right
- if (f.rect.UpperLeftCorner.X - std::max(f.margin,
- p.margin) <
- right)
- right = f.rect.UpperLeftCorner
- .X -
- std::max(f.margin,
- p.margin);
-
- } else if (f.rect.UpperLeftCorner.X - f.margin <=
- left &&
- f.rect.LowerRightCorner.X + f.margin >=
- right) {
+ if (f.rect.UpperLeftCorner.X -
+ std::max(f.margin, p.margin) < right)
+ right = f.rect.UpperLeftCorner.X -
+ std::max(f.margin, p.margin);
+
+ } else if (f.rect.UpperLeftCorner.X - f.margin <= left &&
+ f.rect.LowerRightCorner.X + f.margin >= right) {
// float taking all space
left = right;
- } else { // float in the middle -- should
- // not occure yet, see that later
+ }
+ else
+ { // float in the middle -- should not occure yet, see that later
}
}
}
@@ -818,14 +796,12 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
}
std::vector<ParsedText::Element>::iterator linestart = el;
- std::vector<ParsedText::Element>::iterator lineend =
- p.elements.end();
+ std::vector<ParsedText::Element>::iterator lineend = p.elements.end();
// First pass, find elements fitting into line
// (or at least one element)
- while (el != p.elements.end() &&
- (charswidth == 0 || charswidth + el->dim.Width <=
- linewidth)) {
+ while (el != p.elements.end() && (charswidth == 0 ||
+ charswidth + el->dim.Width <= linewidth)) {
if (el->floating == ParsedText::FLOAT_NONE) {
if (el->type != ParsedText::ELEMENT_SEPARATOR) {
lineend = el;
@@ -868,14 +844,9 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
x += (linewidth - charswidth) / 2.f;
break;
case ParsedText::HALIGN_JUSTIFY:
- if (wordcount > 1 && // Justification only if at least two
- // words
- !(lineend == p.elements.end())) // Don't
- // justify
- // last
- // line
- extraspace = ((float)(linewidth - charswidth)) /
- (wordcount - 1);
+ if (wordcount > 1 && // Justification only if at least two words
+ !(lineend == p.elements.end())) // Don't justify last line
+ extraspace = ((float)(linewidth - charswidth)) / (wordcount - 1);
break;
case ParsedText::HALIGN_RIGHT:
x += linewidth - charswidth;
@@ -918,7 +889,7 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
}
y += charsheight;
} // Elements (actually lines)
- } // Paragraph
+ } // Paragraph
// Check if float goes under paragraph
for (const auto &f : m_floating) {
@@ -978,18 +949,16 @@ void TextDrawer::draw(const core::rect<s32> &clip_rect,
el.font->draw(el.text, rect, color, false, true,
&clip_rect);
- if (el.underline && el.drawwidth) {
+ if (el.underline && el.drawwidth) {
s32 linepos = el.pos.Y + offset.Y +
- el.dim.Height - (el.baseline >> 1);
+ el.dim.Height - (el.baseline >> 1);
core::rect<s32> linerect(el.pos.X + offset.X,
linepos - (el.baseline >> 3) - 1,
- el.pos.X + offset.X +
- el.drawwidth,
+ el.pos.X + offset.X + el.drawwidth,
linepos + (el.baseline >> 3));
- driver->draw2DRectangle(
- color, linerect, &clip_rect);
+ driver->draw2DRectangle(color, linerect, &clip_rect);
}
} break;
@@ -1001,10 +970,7 @@ void TextDrawer::draw(const core::rect<s32> &clip_rect,
m_environment->getVideoDriver()->draw2DImage(
texture, rect,
irr::core::rect<s32>(
- core::position2d<
- s32>(
- 0,
- 0),
+ core::position2d<s32>(0, 0),
texture->getOriginalSize()),
&clip_rect, 0, true);
} break;
@@ -1014,10 +980,11 @@ void TextDrawer::draw(const core::rect<s32> &clip_rect,
ItemStack item;
item.deSerialize(stringw_to_utf8(el.text), idef);
- drawItemStack(m_environment->getVideoDriver(),
- g_fontengine->getFont(), item, rect,
- &clip_rect, m_client, IT_ROT_OTHER,
- el.angle, el.rotation);
+ drawItemStack(
+ m_environment->getVideoDriver(),
+ g_fontengine->getFont(), item, rect, &clip_rect,
+ m_client, IT_ROT_OTHER, el.angle, el.rotation
+ );
} break;
}
}
@@ -1122,10 +1089,8 @@ bool GUIHyperText::OnEvent(const SEvent &event)
checkHover(event.MouseInput.X, event.MouseInput.Y);
if (event.MouseInput.Event == EMIE_MOUSE_WHEEL) {
- m_vscrollbar->setPos(
- m_vscrollbar->getPos() -
- event.MouseInput.Wheel *
- m_vscrollbar->getSmallStep());
+ m_vscrollbar->setPos(m_vscrollbar->getPos() -
+ event.MouseInput.Wheel * m_vscrollbar->getSmallStep());
m_text_scrollpos.Y = -m_vscrollbar->getPos();
m_drawer.draw(m_display_text_rect, m_text_scrollpos);
checkHover(event.MouseInput.X, event.MouseInput.Y);
@@ -1139,16 +1104,13 @@ bool GUIHyperText::OnEvent(const SEvent &event)
for (auto &tag : element->tags) {
if (tag->name == "action") {
Text = core::stringw(L"action:") +
- utf8_to_stringw(tag->attrs["nam"
- "e"]);
+ utf8_to_stringw(tag->attrs["name"]);
if (Parent) {
SEvent newEvent;
- newEvent.EventType =
- EET_GUI_EVENT;
+ newEvent.EventType = EET_GUI_EVENT;
newEvent.GUIEvent.Caller = this;
newEvent.GUIEvent.Element = 0;
- newEvent.GUIEvent.EventType =
- EGET_BUTTON_CLICKED;
+ newEvent.GUIEvent.EventType = EGET_BUTTON_CLICKED;
Parent->OnEvent(newEvent);
}
break;
@@ -1175,8 +1137,7 @@ void GUIHyperText::draw()
if (m_drawer.getHeight() > m_display_text_rect.getHeight()) {
m_vscrollbar->setSmallStep(m_display_text_rect.getHeight() * 0.1f);
m_vscrollbar->setLargeStep(m_display_text_rect.getHeight() * 0.5f);
- m_vscrollbar->setMax(
- m_drawer.getHeight() - m_display_text_rect.getHeight());
+ m_vscrollbar->setMax(m_drawer.getHeight() - m_display_text_rect.getHeight());
m_vscrollbar->setVisible(true);
diff --git a/src/gui/guiHyperText.h b/src/gui/guiHyperText.h
index 8371157e2..5b936262e 100644
--- a/src/gui/guiHyperText.h
+++ b/src/gui/guiHyperText.h
@@ -134,12 +134,7 @@ public:
Tag m_root_tag;
protected:
- typedef enum
- {
- ER_NONE,
- ER_TAG,
- ER_NEWLINE
- } EndReason;
+ typedef enum { ER_NONE, ER_TAG, ER_NEWLINE } EndReason;
// Parser functions
void enterElement(ElementType type);
diff --git a/src/gui/guiInventoryList.cpp b/src/gui/guiInventoryList.cpp
index a0fef4073..58d7ae771 100644
--- a/src/gui/guiInventoryList.cpp
+++ b/src/gui/guiInventoryList.cpp
@@ -19,17 +19,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/hud.h"
#include "client/client.h"
-GUIInventoryList::GUIInventoryList(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, const core::rect<s32> &rectangle, InventoryManager *invmgr,
- const InventoryLocation &inventoryloc, const std::string &listname,
- const v2s32 &geom, const s32 start_item_i, const v2s32 &slot_size,
- const v2f32 &slot_spacing, GUIFormSpecMenu *fs_menu,
- const Options &options, gui::IGUIFont *font) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_invmgr(invmgr), m_inventoryloc(inventoryloc), m_listname(listname),
- m_geom(geom), m_start_item_i(start_item_i), m_slot_size(slot_size),
- m_slot_spacing(slot_spacing), m_fs_menu(fs_menu), m_options(options),
- m_font(font), m_hovered_i(-1), m_already_warned(false)
+GUIInventoryList::GUIInventoryList(gui::IGUIEnvironment *env,
+ gui::IGUIElement *parent,
+ s32 id,
+ const core::rect<s32> &rectangle,
+ InventoryManager *invmgr,
+ const InventoryLocation &inventoryloc,
+ const std::string &listname,
+ const v2s32 &geom,
+ const s32 start_item_i,
+ const v2s32 &slot_size,
+ const v2f32 &slot_spacing,
+ GUIFormSpecMenu *fs_menu,
+ const Options &options,
+ gui::IGUIFont *font) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_invmgr(invmgr),
+ m_inventoryloc(inventoryloc),
+ m_listname(listname),
+ m_geom(geom),
+ m_start_item_i(start_item_i),
+ m_slot_size(slot_size),
+ m_slot_spacing(slot_spacing),
+ m_fs_menu(fs_menu),
+ m_options(options),
+ m_font(font),
+ m_hovered_i(-1),
+ m_already_warned(false)
{
}
@@ -42,9 +58,9 @@ void GUIInventoryList::draw()
if (!inv) {
if (!m_already_warned) {
warningstream << "GUIInventoryList::draw(): "
- << "The inventory location "
- << "\"" << m_inventoryloc.dump()
- << "\" doesn't exist" << std::endl;
+ << "The inventory location "
+ << "\"" << m_inventoryloc.dump() << "\" doesn't exist"
+ << std::endl;
m_already_warned = true;
}
return;
@@ -53,9 +69,9 @@ void GUIInventoryList::draw()
if (!ilist) {
if (!m_already_warned) {
warningstream << "GUIInventoryList::draw(): "
- << "The inventory list \"" << m_listname
- << "\" @ \"" << m_inventoryloc.dump()
- << "\" doesn't exist" << std::endl;
+ << "The inventory list \"" << m_listname << "\" @ \""
+ << m_inventoryloc.dump() << "\" doesn't exist"
+ << std::endl;
m_already_warned = true;
}
return;
@@ -81,25 +97,21 @@ void GUIInventoryList::draw()
core::rect<s32> rect = imgrect + base_pos + p;
ItemStack item = ilist->getItem(item_i);
- bool selected = selected_item &&
- m_invmgr->getInventory(selected_item->inventoryloc) ==
- inv &&
- selected_item->listname == m_listname &&
- selected_item->i == item_i;
+ bool selected = selected_item
+ && m_invmgr->getInventory(selected_item->inventoryloc) == inv
+ && selected_item->listname == m_listname
+ && selected_item->i == item_i;
core::rect<s32> clipped_rect(rect);
clipped_rect.clipAgainst(AbsoluteClippingRect);
bool hovering = m_hovered_i == item_i;
- ItemRotationKind rotation_kind =
- selected ? IT_ROT_SELECTED
- : (hovering ? IT_ROT_HOVERED : IT_ROT_NONE);
+ ItemRotationKind rotation_kind = selected ? IT_ROT_SELECTED :
+ (hovering ? IT_ROT_HOVERED : IT_ROT_NONE);
// layer 0
if (hovering) {
- driver->draw2DRectangle(
- m_options.slotbg_h, rect, &AbsoluteClippingRect);
+ driver->draw2DRectangle(m_options.slotbg_h, rect, &AbsoluteClippingRect);
} else {
- driver->draw2DRectangle(
- m_options.slotbg_n, rect, &AbsoluteClippingRect);
+ driver->draw2DRectangle(m_options.slotbg_n, rect, &AbsoluteClippingRect);
}
// Draw inv slot borders
@@ -109,27 +121,21 @@ void GUIInventoryList::draw()
s32 x2 = rect.LowerRightCorner.X;
s32 y2 = rect.LowerRightCorner.Y;
s32 border = 1;
- core::rect<s32> clipping_rect =
- Parent ? Parent->getAbsoluteClippingRect()
- : core::rect<s32>();
- core::rect<s32> *clipping_rect_ptr =
- Parent ? &clipping_rect : nullptr;
+ core::rect<s32> clipping_rect = Parent ? Parent->getAbsoluteClippingRect()
+ : core::rect<s32>();
+ core::rect<s32> *clipping_rect_ptr = Parent ? &clipping_rect : nullptr;
driver->draw2DRectangle(m_options.slotbordercolor,
- core::rect<s32>(v2s32(x1 - border, y1 - border),
- v2s32(x2 + border, y1)),
- clipping_rect_ptr);
+ core::rect<s32>(v2s32(x1 - border, y1 - border),
+ v2s32(x2 + border, y1)), clipping_rect_ptr);
driver->draw2DRectangle(m_options.slotbordercolor,
- core::rect<s32>(v2s32(x1 - border, y2),
- v2s32(x2 + border, y2 + border)),
- clipping_rect_ptr);
+ core::rect<s32>(v2s32(x1 - border, y2),
+ v2s32(x2 + border, y2 + border)), clipping_rect_ptr);
driver->draw2DRectangle(m_options.slotbordercolor,
- core::rect<s32>(v2s32(x1 - border, y1),
- v2s32(x1, y2)),
- clipping_rect_ptr);
+ core::rect<s32>(v2s32(x1 - border, y1),
+ v2s32(x1, y2)), clipping_rect_ptr);
driver->draw2DRectangle(m_options.slotbordercolor,
- core::rect<s32>(v2s32(x2, y1),
- v2s32(x2 + border, y2)),
- clipping_rect_ptr);
+ core::rect<s32>(v2s32(x2, y1),
+ v2s32(x2 + border, y2)), clipping_rect_ptr);
}
// layer 1
@@ -173,7 +179,8 @@ bool GUIInventoryList::OnEvent(const SEvent &event)
// find the element that would be hovered if this inventorylist was invisible
bool was_visible = IsVisible;
IsVisible = false;
- IGUIElement *hovered = Environment->getRootGUIElement()->getElementFromPoint(
+ IGUIElement *hovered =
+ Environment->getRootGUIElement()->getElementFromPoint(
core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
// if the player clicks outside of the formspec window, hovered is not
@@ -209,10 +216,11 @@ s32 GUIInventoryList::getItemIndexAtPos(v2s32 p) const
v2s32 base_pos = AbsoluteRect.UpperLeftCorner;
// instead of looping through each slot, we look where p would be in the grid
- s32 i = (p.X - base_pos.X) / (s32)m_slot_spacing.X +
- m_geom.X * ((p.Y - base_pos.Y) / (s32)m_slot_spacing.Y);
+ s32 i = (p.X - base_pos.X) / (s32)m_slot_spacing.X
+ + m_geom.X * ((p.Y - base_pos.Y) / (s32)m_slot_spacing.Y);
- v2s32 p0((i % m_geom.X) * m_slot_spacing.X, (i / m_geom.X) * m_slot_spacing.Y);
+ v2s32 p0((i % m_geom.X) * m_slot_spacing.X,
+ (i / m_geom.X) * m_slot_spacing.Y);
core::rect<s32> rect = imgrect + base_pos + p0;
diff --git a/src/gui/guiInventoryList.h b/src/gui/guiInventoryList.h
index 58d71cabf..934d9ea3a 100644
--- a/src/gui/guiInventoryList.h
+++ b/src/gui/guiInventoryList.h
@@ -30,9 +30,11 @@ public:
ItemSpec() = default;
ItemSpec(const InventoryLocation &a_inventoryloc,
- const std::string &a_listname, s32 a_i) :
- inventoryloc(a_inventoryloc),
- listname(a_listname), i(a_i)
+ const std::string &a_listname,
+ s32 a_i) :
+ inventoryloc(a_inventoryloc),
+ listname(a_listname),
+ i(a_i)
{
}
@@ -44,8 +46,7 @@ public:
};
// options for inventorylists that are setable with the lua api
- struct Options
- {
+ struct Options {
// whether a one-pixel border for the slots should be drawn and its color
bool slotborder = false;
video::SColor slotbordercolor = video::SColor(200, 0, 0, 0);
@@ -54,21 +55,34 @@ public:
video::SColor slotbg_h = video::SColor(255, 192, 192, 192);
};
- GUIInventoryList(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, InventoryManager *invmgr,
- const InventoryLocation &inventoryloc,
- const std::string &listname, const v2s32 &geom,
- const s32 start_item_i, const v2s32 &slot_size,
- const v2f32 &slot_spacing, GUIFormSpecMenu *fs_menu,
- const Options &options, gui::IGUIFont *font);
+ GUIInventoryList(gui::IGUIEnvironment *env,
+ gui::IGUIElement *parent,
+ s32 id,
+ const core::rect<s32> &rectangle,
+ InventoryManager *invmgr,
+ const InventoryLocation &inventoryloc,
+ const std::string &listname,
+ const v2s32 &geom,
+ const s32 start_item_i,
+ const v2s32 &slot_size,
+ const v2f32 &slot_spacing,
+ GUIFormSpecMenu *fs_menu,
+ const Options &options,
+ gui::IGUIFont *font);
virtual void draw() override;
virtual bool OnEvent(const SEvent &event) override;
- const InventoryLocation &getInventoryloc() const { return m_inventoryloc; }
+ const InventoryLocation &getInventoryloc() const
+ {
+ return m_inventoryloc;
+ }
- const std::string &getListname() const { return m_listname; }
+ const std::string &getListname() const
+ {
+ return m_listname;
+ }
void setSlotBGColors(const video::SColor &slotbg_n, const video::SColor &slotbg_h)
{
diff --git a/src/gui/guiItemImage.cpp b/src/gui/guiItemImage.cpp
index 95775dbba..f93d5476c 100644
--- a/src/gui/guiItemImage.cpp
+++ b/src/gui/guiItemImage.cpp
@@ -20,12 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiItemImage.h"
#include "client/client.h"
-GUIItemImage::GUIItemImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const std::string &item_name,
- gui::IGUIFont *font, Client *client) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_item_name(item_name), m_font(font), m_client(client),
- m_label(core::stringw())
+GUIItemImage::GUIItemImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
+ s32 id, const core::rect<s32> &rectangle, const std::string &item_name,
+ gui::IGUIFont *font, Client *client) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_item_name(item_name), m_font(font), m_client(client), m_label(core::stringw())
{
}
diff --git a/src/gui/guiItemImage.h b/src/gui/guiItemImage.h
index ced693ee2..6fede6564 100644
--- a/src/gui/guiItemImage.h
+++ b/src/gui/guiItemImage.h
@@ -28,12 +28,15 @@ class GUIItemImage : public gui::IGUIElement
{
public:
GUIItemImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, const std::string &item_name,
- gui::IGUIFont *font, Client *client);
+ const core::rect<s32> &rectangle, const std::string &item_name,
+ gui::IGUIFont *font, Client *client);
virtual void draw() override;
- virtual void setText(const wchar_t *text) override { m_label = text; }
+ virtual void setText(const wchar_t *text) override
+ {
+ m_label = text;
+ }
private:
std::string m_item_name;
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index e65a8311c..94fe0074a 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -32,7 +32,7 @@
#include "settings.h"
#include <algorithm>
-#include "mainmenumanager.h" // for g_gamecallback
+#include "mainmenumanager.h" // for g_gamecallback
#define KMaxButtonPerColumns 12
@@ -40,9 +40,7 @@ extern MainGameCallback *g_gamecallback;
enum
{
- GUI_ID_BACK_BUTTON = 101,
- GUI_ID_ABORT_BUTTON,
- GUI_ID_SCROLL_BAR,
+ GUI_ID_BACK_BUTTON = 101, GUI_ID_ABORT_BUTTON, GUI_ID_SCROLL_BAR,
// buttons
GUI_ID_KEY_FORWARD_BUTTON,
GUI_ID_KEY_BACKWARD_BUTTON,
@@ -94,8 +92,9 @@ enum
GUI_ID_CB_AUTOJUMP,
};
-GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, ISimpleTextureSource *tsrc) :
+GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id, IMenuManager *menumgr,
+ ISimpleTextureSource *tsrc) :
GUIModalMenu(env, parent, id, menumgr),
m_tsrc(tsrc)
{
@@ -115,9 +114,9 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu()
void GUIKeyChangeMenu::removeChildren()
{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children) {
+ const core::list<gui::IGUIElement*> &children = getChildren();
+ core::list<gui::IGUIElement*> children_copy;
+ for (gui::IGUIElement*i : children) {
children_copy.push_back(i);
}
@@ -132,9 +131,12 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
removeChildren();
const float s = m_gui_scale;
- DesiredRect = core::rect<s32>(screensize.X / 2 - 1113 * s / 2,
- screensize.Y / 2 - 430 * s / 2, screensize.X / 2 + 1113 * s / 2,
- screensize.Y / 2 + 430 * s / 2);
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 1113 * s / 2,
+ screensize.Y / 2 - 430 * s / 2,
+ screensize.X / 2 + 1113 * s / 2,
+ screensize.Y / 2 + 430 * s / 2
+ );
recalculateAbsolutePosition(false);
v2s32 size = DesiredRect.getSize();
@@ -143,33 +145,32 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, 600 * s, 40 * s);
rect += topleft + v2s32(25 * s, 3 * s);
- // gui::IGUIStaticText *t =
- const wchar_t *text = wgettext("Keybindings. (If this menu screws up, "
- "remove stuff from minetest.conf)");
- Environment->addStaticText(text, rect, false, true, this, -1);
+ //gui::IGUIStaticText *t =
+ const wchar_t *text = wgettext("Keybindings. (If this menu screws up, remove stuff from minetest.conf)");
+ Environment->addStaticText(text,
+ rect, false, true, this, -1);
delete[] text;
- // t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT);
+ //t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT);
}
// Build buttons
v2s32 offset(25 * s, 60 * s);
- for (size_t i = 0; i < key_settings.size(); i++) {
+ for(size_t i = 0; i < key_settings.size(); i++)
+ {
key_setting *k = key_settings.at(i);
{
core::rect<s32> rect(0, 0, 150 * s, 20 * s);
rect += topleft + v2s32(offset.X, offset.Y);
- Environment->addStaticText(
- k->button_name, rect, false, true, this, -1);
+ Environment->addStaticText(k->button_name, rect, false, true, this, -1);
}
{
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(offset.X + 150 * s, offset.Y - 5 * s);
const wchar_t *text = wgettext(k->key.name());
- k->button = GUIButton::addButton(
- Environment, rect, m_tsrc, this, k->id, text);
+ k->button = GUIButton::addButton(Environment, rect, m_tsrc, this, k->id, text);
delete[] text;
}
if ((i + 1) % KMaxButtonPerColumns == 0) {
@@ -188,8 +189,8 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, option_w, 30 * s);
rect += topleft + v2s32(option_x, option_y);
const wchar_t *text = wgettext("\"Special\" = climb down");
- Environment->addCheckBox(g_settings->getBool("aux1_descends"),
- rect, this, GUI_ID_CB_AUX1_DESCENDS, text);
+ Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this,
+ GUI_ID_CB_AUX1_DESCENDS, text);
delete[] text;
}
offset += v2s32(0, 25 * s);
@@ -202,10 +203,9 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, option_w, 30 * s);
rect += topleft + v2s32(option_x, option_y);
- const wchar_t *text =
- wgettext("Double tap \"jump\" to toggle fly");
- Environment->addCheckBox(g_settings->getBool("doubletap_jump"),
- rect, this, GUI_ID_CB_DOUBLETAP_JUMP, text);
+ const wchar_t *text = wgettext("Double tap \"jump\" to toggle fly");
+ Environment->addCheckBox(g_settings->getBool("doubletap_jump"), rect, this,
+ GUI_ID_CB_DOUBLETAP_JUMP, text);
delete[] text;
}
offset += v2s32(0, 25 * s);
@@ -219,8 +219,8 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, option_w, 30 * s);
rect += topleft + v2s32(option_x, option_y);
const wchar_t *text = wgettext("Automatic jumping");
- Environment->addCheckBox(g_settings->getBool("autojump"), rect,
- this, GUI_ID_CB_AUTOJUMP, text);
+ Environment->addCheckBox(g_settings->getBool("autojump"), rect, this,
+ GUI_ID_CB_AUTOJUMP, text);
delete[] text;
}
offset += v2s32(0, 25);
@@ -229,27 +229,25 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(size.X / 2 - 105 * s, size.Y - 40 * s);
- const wchar_t *text = wgettext("Save");
- GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_BACK_BUTTON,
- text);
+ const wchar_t *text = wgettext("Save");
+ GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_BACK_BUTTON, text);
delete[] text;
}
{
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(size.X / 2 + 5 * s, size.Y - 40 * s);
const wchar_t *text = wgettext("Cancel");
- GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_ABORT_BUTTON,
- text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_ABORT_BUTTON, text);
delete[] text;
}
}
void GUIKeyChangeMenu::drawMenu()
{
- gui::IGUISkin *skin = Environment->getSkin();
+ gui::IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
video::SColor bgcolor(140, 0, 0, 0);
driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
@@ -271,21 +269,18 @@ bool GUIKeyChangeMenu::acceptInput()
{
gui::IGUIElement *e = getElementFromId(GUI_ID_CB_AUX1_DESCENDS);
- if (e && e->getType() == gui::EGUIET_CHECK_BOX)
- g_settings->setBool("aux1_descends",
- ((gui::IGUICheckBox *)e)->isChecked());
+ if(e && e->getType() == gui::EGUIET_CHECK_BOX)
+ g_settings->setBool("aux1_descends", ((gui::IGUICheckBox*)e)->isChecked());
}
{
gui::IGUIElement *e = getElementFromId(GUI_ID_CB_DOUBLETAP_JUMP);
- if (e && e->getType() == gui::EGUIET_CHECK_BOX)
- g_settings->setBool("doubletap_jump",
- ((gui::IGUICheckBox *)e)->isChecked());
+ if(e && e->getType() == gui::EGUIET_CHECK_BOX)
+ g_settings->setBool("doubletap_jump", ((gui::IGUICheckBox*)e)->isChecked());
}
{
gui::IGUIElement *e = getElementFromId(GUI_ID_CB_AUTOJUMP);
- if (e && e->getType() == gui::EGUIET_CHECK_BOX)
- g_settings->setBool("autojump",
- ((gui::IGUICheckBox *)e)->isChecked());
+ if(e && e->getType() == gui::EGUIET_CHECK_BOX)
+ g_settings->setBool("autojump", ((gui::IGUICheckBox*)e)->isChecked());
}
clearKeyCache();
@@ -306,10 +301,10 @@ bool GUIKeyChangeMenu::resetMenu()
}
return true;
}
-bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
+bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
{
- if (event.EventType == EET_KEY_INPUT_EVENT && active_key &&
- event.KeyInput.PressedDown) {
+ if (event.EventType == EET_KEY_INPUT_EVENT && active_key
+ && event.KeyInput.PressedDown) {
bool prefer_character = shift_down;
KeyPress kp(event.KeyInput, prefer_character);
@@ -320,10 +315,10 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
kp = active_key->key; // Cancel
bool shift_went_down = false;
- if (!shift_down &&
+ if(!shift_down &&
(event.KeyInput.Key == irr::KEY_SHIFT ||
- event.KeyInput.Key == irr::KEY_LSHIFT ||
- event.KeyInput.Key == irr::KEY_RSHIFT))
+ event.KeyInput.Key == irr::KEY_LSHIFT ||
+ event.KeyInput.Key == irr::KEY_RSHIFT))
shift_went_down = true;
// Display Key already in use message
@@ -341,8 +336,8 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
core::rect<s32> rect(0, 0, 600, 40);
rect += v2s32(0, 0) + v2s32(25, 30);
const wchar_t *text = wgettext("Key already in use");
- this->key_used_text = Environment->addStaticText(
- text, rect, false, true, this, -1);
+ this->key_used_text = Environment->addStaticText(text,
+ rect, false, true, this, -1);
delete[] text;
} else if (!key_in_use && this->key_used_text) {
this->key_used_text->remove();
@@ -357,7 +352,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
delete[] text;
// Allow characters made with shift
- if (shift_went_down) {
+ if (shift_went_down){
shift_down = true;
return false;
}
@@ -365,46 +360,49 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
active_key = nullptr;
return true;
}
- } else if (event.EventType == EET_KEY_INPUT_EVENT && !active_key &&
- event.KeyInput.PressedDown &&
- event.KeyInput.Key == irr::KEY_ESCAPE) {
+ } else if (event.EventType == EET_KEY_INPUT_EVENT && !active_key
+ && event.KeyInput.PressedDown
+ && event.KeyInput.Key == irr::KEY_ESCAPE) {
quitMenu();
return true;
} else if (event.EventType == EET_GUI_EVENT) {
- if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
- isVisible()) {
- if (!canTakeFocus(event.GUIEvent.Element)) {
- infostream << "GUIKeyChangeMenu: Not allowing focus "
- "change."
- << std::endl;
+ if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
+ && isVisible())
+ {
+ if (!canTakeFocus(event.GUIEvent.Element))
+ {
+ infostream << "GUIKeyChangeMenu: Not allowing focus change."
+ << std::endl;
// Returning true disables focus change
return true;
}
}
- if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
- switch (event.GUIEvent.Caller->getID()) {
- case GUI_ID_BACK_BUTTON: // back
- acceptInput();
- quitMenu();
- return true;
- case GUI_ID_ABORT_BUTTON: // abort
- quitMenu();
- return true;
- default:
- resetMenu();
- for (key_setting *ks : key_settings) {
- if (ks->id == event.GUIEvent.Caller->getID()) {
- active_key = ks;
- break;
+ if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED)
+ {
+ switch (event.GUIEvent.Caller->getID())
+ {
+ case GUI_ID_BACK_BUTTON: //back
+ acceptInput();
+ quitMenu();
+ return true;
+ case GUI_ID_ABORT_BUTTON: //abort
+ quitMenu();
+ return true;
+ default:
+ resetMenu();
+ for (key_setting *ks : key_settings) {
+ if (ks->id == event.GUIEvent.Caller->getID()) {
+ active_key = ks;
+ break;
+ }
}
- }
- FATAL_ERROR_IF(!active_key, "Key setting not found");
+ FATAL_ERROR_IF(!active_key, "Key setting not found");
- shift_down = false;
- const wchar_t *text = wgettext("press key");
- active_key->button->setText(text);
- delete[] text;
- break;
+ shift_down = false;
+ const wchar_t *text = wgettext("press key");
+ active_key->button->setText(text);
+ delete[] text;
+ break;
}
Environment->setFocus(this);
}
@@ -412,8 +410,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent &event)
return Parent ? Parent->OnEvent(event) : false;
}
-void GUIKeyChangeMenu::add_key(
- int id, const wchar_t *button_name, const std::string &setting_name)
+void GUIKeyChangeMenu::add_key(int id, const wchar_t *button_name, const std::string &setting_name)
{
key_setting *k = new key_setting;
k->id = id;
@@ -426,76 +423,48 @@ void GUIKeyChangeMenu::add_key(
void GUIKeyChangeMenu::init_keys()
{
- this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wgettext("Forward"), "keymap_forward");
- this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"),
- "keymap_backward");
- this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left");
- this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right");
- this->add_key(GUI_ID_KEY_USE_BUTTON, wgettext("Special"), "keymap_special1");
- this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump");
- this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak");
- this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop");
- this->add_key(GUI_ID_KEY_INVENTORY_BUTTON, wgettext("Inventory"),
- "keymap_inventory");
- this->add_key(GUI_ID_KEY_ENDERCHEST_BUTTON, wgettext("Enderchest"),
- "keymap_enderchest");
- this->add_key(GUI_ID_KEY_HOTBAR_PREV_BUTTON, wgettext("Prev. item"),
- "keymap_hotbar_previous");
- this->add_key(GUI_ID_KEY_HOTBAR_NEXT_BUTTON, wgettext("Next item"),
- "keymap_hotbar_next");
- this->add_key(GUI_ID_KEY_ZOOM_BUTTON, wgettext("Zoom"), "keymap_zoom");
- this->add_key(GUI_ID_KEY_CAMERA_BUTTON, wgettext("Change camera"),
- "keymap_camera_mode");
- this->add_key(GUI_ID_KEY_MINIMAP_BUTTON, wgettext("Toggle minimap"),
- "keymap_minimap");
- this->add_key(GUI_ID_KEY_FLY_BUTTON, wgettext("Toggle fly"), "keymap_freemove");
- this->add_key(GUI_ID_KEY_PITCH_MOVE, wgettext("Toggle pitchmove"),
- "keymap_pitchmove");
- this->add_key(GUI_ID_KEY_FAST_BUTTON, wgettext("Toggle fast"), "keymap_fastmove");
- this->add_key(GUI_ID_KEY_NOCLIP_BUTTON, wgettext("Toggle noclip"),
- "keymap_noclip");
- this->add_key(GUI_ID_KEY_MUTE_BUTTON, wgettext("Mute"), "keymap_mute");
- this->add_key(GUI_ID_KEY_DEC_VOLUME_BUTTON, wgettext("Dec. volume"),
- "keymap_decrease_volume");
- this->add_key(GUI_ID_KEY_INC_VOLUME_BUTTON, wgettext("Inc. volume"),
- "keymap_increase_volume");
- this->add_key(GUI_ID_KEY_AUTOFWD_BUTTON, wgettext("Autoforward"),
- "keymap_autoforward");
- this->add_key(GUI_ID_KEY_CHAT_BUTTON, wgettext("Chat"), "keymap_chat");
- this->add_key(GUI_ID_KEY_SCREENSHOT_BUTTON, wgettext("Screenshot"),
- "keymap_screenshot");
- this->add_key(GUI_ID_KEY_RANGE_BUTTON, wgettext("Range select"),
- "keymap_rangeselect");
- this->add_key(GUI_ID_KEY_DEC_RANGE_BUTTON, wgettext("Dec. range"),
- "keymap_decrease_viewing_range_min");
- this->add_key(GUI_ID_KEY_INC_RANGE_BUTTON, wgettext("Inc. range"),
- "keymap_increase_viewing_range_min");
- this->add_key(GUI_ID_KEY_CONSOLE_BUTTON, wgettext("Console"), "keymap_console");
- this->add_key(GUI_ID_KEY_CMD_BUTTON, wgettext("Command"), "keymap_cmd");
- this->add_key(GUI_ID_KEY_CMD_LOCAL_BUTTON, wgettext("Local command"),
- "keymap_cmd_local");
- this->add_key(GUI_ID_KEY_HUD_BUTTON, wgettext("Toggle HUD"), "keymap_toggle_hud");
- this->add_key(GUI_ID_KEY_CHATLOG_BUTTON, wgettext("Toggle chat log"),
- "keymap_toggle_chat");
- this->add_key(GUI_ID_KEY_FOG_BUTTON, wgettext("Toggle fog"), "keymap_toggle_fog");
- this->add_key(GUI_ID_KEY_CHEAT_MENU_BUTTON, wgettext("Toggle C. Menu"),
- "keymap_toggle_cheat_menu");
- this->add_key(GUI_ID_KEY_KILLAURA_BUTTON, wgettext("Killaura"),
- "keymap_toggle_killaura");
- this->add_key(GUI_ID_KEY_FREECAM_BUTTON, wgettext("Freecam"),
- "keymap_toggle_freecam");
- this->add_key(GUI_ID_KEY_SCAFFOLD_BUTTON, wgettext("Scaffold"),
- "keymap_toggle_scaffold");
- this->add_key(GUI_ID_KEY_NEXT_ITEM_BUTTON, wgettext("NextItem"),
- "keymap_toggle_next_item");
- this->add_key(GUI_ID_KEY_SELECT_UP_BUTTON, wgettext("C. Menu Up"),
- "keymap_select_up");
- this->add_key(GUI_ID_KEY_SELECT_DOWN_BUTTON, wgettext("C. Menu Down"),
- "keymap_select_down");
- this->add_key(GUI_ID_KEY_SELECT_LEFT_BUTTON, wgettext("C. Menu Left"),
- "keymap_select_left");
- this->add_key(GUI_ID_KEY_SELECT_RIGHT_BUTTON, wgettext("C. Menu Right"),
- "keymap_select_right");
- this->add_key(GUI_ID_KEY_SELECT_CONFIRM_BUTTON, wgettext("C. Menu Enter"),
- "keymap_select_confirm");
+ this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wgettext("Forward"), "keymap_forward");
+ this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"), "keymap_backward");
+ this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left");
+ this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right");
+ this->add_key(GUI_ID_KEY_USE_BUTTON, wgettext("Special"), "keymap_special1");
+ this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump");
+ this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak");
+ this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop");
+ this->add_key(GUI_ID_KEY_INVENTORY_BUTTON, wgettext("Inventory"), "keymap_inventory");
+ this->add_key(GUI_ID_KEY_ENDERCHEST_BUTTON,wgettext("Enderchest"), "keymap_enderchest");
+ this->add_key(GUI_ID_KEY_HOTBAR_PREV_BUTTON,wgettext("Prev. item"), "keymap_hotbar_previous");
+ this->add_key(GUI_ID_KEY_HOTBAR_NEXT_BUTTON,wgettext("Next item"), "keymap_hotbar_next");
+ this->add_key(GUI_ID_KEY_ZOOM_BUTTON, wgettext("Zoom"), "keymap_zoom");
+ this->add_key(GUI_ID_KEY_CAMERA_BUTTON, wgettext("Change camera"), "keymap_camera_mode");
+ this->add_key(GUI_ID_KEY_MINIMAP_BUTTON, wgettext("Toggle minimap"), "keymap_minimap");
+ this->add_key(GUI_ID_KEY_FLY_BUTTON, wgettext("Toggle fly"), "keymap_freemove");
+ this->add_key(GUI_ID_KEY_PITCH_MOVE, wgettext("Toggle pitchmove"), "keymap_pitchmove");
+ this->add_key(GUI_ID_KEY_FAST_BUTTON, wgettext("Toggle fast"), "keymap_fastmove");
+ this->add_key(GUI_ID_KEY_NOCLIP_BUTTON, wgettext("Toggle noclip"), "keymap_noclip");
+ this->add_key(GUI_ID_KEY_MUTE_BUTTON, wgettext("Mute"), "keymap_mute");
+ this->add_key(GUI_ID_KEY_DEC_VOLUME_BUTTON,wgettext("Dec. volume"), "keymap_decrease_volume");
+ this->add_key(GUI_ID_KEY_INC_VOLUME_BUTTON,wgettext("Inc. volume"), "keymap_increase_volume");
+ this->add_key(GUI_ID_KEY_AUTOFWD_BUTTON, wgettext("Autoforward"), "keymap_autoforward");
+ this->add_key(GUI_ID_KEY_CHAT_BUTTON, wgettext("Chat"), "keymap_chat");
+ this->add_key(GUI_ID_KEY_SCREENSHOT_BUTTON,wgettext("Screenshot"), "keymap_screenshot");
+ this->add_key(GUI_ID_KEY_RANGE_BUTTON, wgettext("Range select"), "keymap_rangeselect");
+ this->add_key(GUI_ID_KEY_DEC_RANGE_BUTTON, wgettext("Dec. range"), "keymap_decrease_viewing_range_min");
+ this->add_key(GUI_ID_KEY_INC_RANGE_BUTTON, wgettext("Inc. range"), "keymap_increase_viewing_range_min");
+ this->add_key(GUI_ID_KEY_CONSOLE_BUTTON, wgettext("Console"), "keymap_console");
+ this->add_key(GUI_ID_KEY_CMD_BUTTON, wgettext("Command"), "keymap_cmd");
+ this->add_key(GUI_ID_KEY_CMD_LOCAL_BUTTON, wgettext("Local command"), "keymap_cmd_local");
+ this->add_key(GUI_ID_KEY_HUD_BUTTON, wgettext("Toggle HUD"), "keymap_toggle_hud");
+ this->add_key(GUI_ID_KEY_CHATLOG_BUTTON, wgettext("Toggle chat log"), "keymap_toggle_chat");
+ this->add_key(GUI_ID_KEY_FOG_BUTTON, wgettext("Toggle fog"), "keymap_toggle_fog");
+ this->add_key(GUI_ID_KEY_CHEAT_MENU_BUTTON,wgettext("Toggle C. Menu"),"keymap_toggle_cheat_menu");
+ this->add_key(GUI_ID_KEY_KILLAURA_BUTTON, wgettext("Killaura"), "keymap_toggle_killaura");
+ this->add_key(GUI_ID_KEY_FREECAM_BUTTON, wgettext("Freecam"), "keymap_toggle_freecam");
+ this->add_key(GUI_ID_KEY_SCAFFOLD_BUTTON, wgettext("Scaffold"), "keymap_toggle_scaffold");
+ this->add_key(GUI_ID_KEY_NEXT_ITEM_BUTTON, wgettext("NextItem"), "keymap_toggle_next_item");
+ this->add_key(GUI_ID_KEY_SELECT_UP_BUTTON, wgettext("C. Menu Up"), "keymap_select_up");
+ this->add_key(GUI_ID_KEY_SELECT_DOWN_BUTTON,wgettext("C. Menu Down"), "keymap_select_down");
+ this->add_key(GUI_ID_KEY_SELECT_LEFT_BUTTON,wgettext("C. Menu Left"), "keymap_select_left");
+ this->add_key(GUI_ID_KEY_SELECT_RIGHT_BUTTON,wgettext("C. Menu Right"),"keymap_select_right");
+ this->add_key(GUI_ID_KEY_SELECT_CONFIRM_BUTTON,wgettext("C. Menu Enter"),"keymap_select_confirm");
}
diff --git a/src/gui/guiMainMenu.h b/src/gui/guiMainMenu.h
index 957ffbc41..1dca8bf2d 100644
--- a/src/gui/guiMainMenu.h
+++ b/src/gui/guiMainMenu.h
@@ -23,8 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include <list>
-struct MainMenuDataForScript
-{
+struct MainMenuDataForScript {
MainMenuDataForScript() = default;
@@ -33,8 +32,7 @@ struct MainMenuDataForScript
std::string errormessage = "";
};
-struct MainMenuData
-{
+struct MainMenuData {
// Client options
std::string servername;
std::string serverdescription;
diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp
index 5eb777173..5311c6fef 100644
--- a/src/gui/guiPasswordChange.cpp
+++ b/src/gui/guiPasswordChange.cpp
@@ -35,11 +35,15 @@ const int ID_change = 259;
const int ID_message = 260;
const int ID_cancel = 261;
-GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, Client *client,
- ISimpleTextureSource *tsrc) :
- GUIModalMenu(env, parent, id, menumgr),
- m_client(client), m_tsrc(tsrc)
+GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id,
+ IMenuManager *menumgr,
+ Client* client,
+ ISimpleTextureSource *tsrc
+):
+ GUIModalMenu(env, parent, id, menumgr),
+ m_client(client),
+ m_tsrc(tsrc)
{
}
@@ -76,9 +80,12 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
Calculate new sizes and positions
*/
const float s = m_gui_scale;
- DesiredRect = core::rect<s32>(screensize.X / 2 - 580 * s / 2,
- screensize.Y / 2 - 300 * s / 2, screensize.X / 2 + 580 * s / 2,
- screensize.Y / 2 + 300 * s / 2);
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 580 * s / 2,
+ screensize.Y / 2 - 300 * s / 2,
+ screensize.X / 2 + 580 * s / 2,
+ screensize.Y / 2 + 300 * s / 2
+ );
recalculateAbsolutePosition(false);
v2s32 size = DesiredRect.getSize();
@@ -131,8 +138,8 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, 230 * s, 30 * s);
rect += topleft_client + v2s32(160 * s, ypos);
- gui::IGUIEditBox *e = Environment->addEditBox(m_newpass_confirm.c_str(),
- rect, true, this, ID_newPassword2);
+ gui::IGUIEditBox *e = Environment->addEditBox(
+ m_newpass_confirm.c_str(), rect, true, this, ID_newPassword2);
e->setPasswordBox(true);
}
@@ -157,8 +164,9 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 300 * s, 20 * s);
rect += topleft_client + v2s32(35 * s, ypos);
text = wgettext("Passwords do not match!");
- IGUIElement *e = Environment->addStaticText(
- text, rect, false, true, this, ID_message);
+ IGUIElement *e =
+ Environment->addStaticText(
+ text, rect, false, true, this, ID_message);
e->setVisible(false);
delete[] text;
}
@@ -228,9 +236,8 @@ bool GUIPasswordChange::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- infostream << "GUIPasswordChange: Not allowing focus "
- "change."
- << std::endl;
+ infostream << "GUIPasswordChange: Not allowing focus change."
+ << std::endl;
// Returning true disables focus change
return true;
}
diff --git a/src/gui/guiPathSelectMenu.cpp b/src/gui/guiPathSelectMenu.cpp
index 562778894..489927a11 100644
--- a/src/gui/guiPathSelectMenu.cpp
+++ b/src/gui/guiPathSelectMenu.cpp
@@ -19,12 +19,14 @@
#include "guiPathSelectMenu.h"
-GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, const std::string &title,
- const std::string &formname, bool is_file_select) :
- GUIModalMenu(env, parent, id, menumgr),
- m_title(utf8_to_wide(title)), m_formname(formname),
- m_file_select_dialog(is_file_select)
+GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id, IMenuManager *menumgr,
+ const std::string &title, const std::string &formname,
+ bool is_file_select) :
+ GUIModalMenu(env, parent, id, menumgr),
+ m_title(utf8_to_wide(title)),
+ m_formname(formname),
+ m_file_select_dialog(is_file_select)
{
}
diff --git a/src/gui/guiScrollBar.cpp b/src/gui/guiScrollBar.cpp
index 4f4b555ab..b04ccb9d5 100644
--- a/src/gui/guiScrollBar.cpp
+++ b/src/gui/guiScrollBar.cpp
@@ -21,8 +21,7 @@ GUIScrollBar::GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s3
is_horizontal(horizontal), is_auto_scaling(auto_scale),
dragged_by_slider(false), tray_clicked(false), scroll_pos(0),
draw_center(0), thumb_size(0), min_pos(0), max_pos(100), small_step(10),
- large_step(50), last_change(0), drag_offset(0), page_size(100),
- border_size(0)
+ large_step(50), last_change(0), drag_offset(0), page_size(100), border_size(0)
{
refreshControls();
setNotClipped(false);
@@ -116,10 +115,8 @@ bool GUIScrollBar::OnEvent(const SEvent &event)
if (is_inside) {
is_dragging = true;
dragged_by_slider = slider_rect.isPointInside(p);
- core::vector2di corner =
- slider_rect.UpperLeftCorner;
- drag_offset = is_horizontal ? p.X - corner.X
- : p.Y - corner.Y;
+ core::vector2di corner = slider_rect.UpperLeftCorner;
+ drag_offset = is_horizontal ? p.X - corner.X : p.Y - corner.Y;
tray_clicked = !dragged_by_slider;
if (tray_clicked) {
const s32 new_pos = getPosFromMousePos(p);
@@ -133,8 +130,7 @@ bool GUIScrollBar::OnEvent(const SEvent &event)
e.EventType = EET_GUI_EVENT;
e.GUIEvent.Caller = this;
e.GUIEvent.Element = nullptr;
- e.GUIEvent.EventType =
- EGET_SCROLL_BAR_CHANGED;
+ e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
Parent->OnEvent(e);
}
}
@@ -251,8 +247,7 @@ s32 GUIScrollBar::getPosFromMousePos(const core::position2di &pos) const
w = RelativeRect.getHeight() - border_size * 2 - thumb_size;
p = pos.Y - AbsoluteRect.UpperLeftCorner.Y - border_size - offset;
}
- return core::isnotzero(range()) ? s32(f32(p) / f32(w) * range() + 0.5f) + min_pos
- : 0;
+ return core::isnotzero(range()) ? s32(f32(p) / f32(w) * range() + 0.5f) + min_pos : 0;
}
void GUIScrollBar::setPos(const s32 &pos)
@@ -278,7 +273,7 @@ void GUIScrollBar::setPos(const s32 &pos)
f32 f = core::isnotzero(range()) ? (f32(thumb_area) - f32(thumb_size)) / range()
: 1.0f;
draw_center = s32((f32(scroll_pos - min_pos) * f) + (f32(thumb_size) * 0.5f)) +
- border_size;
+ border_size;
}
void GUIScrollBar::setSmallStep(const s32 &step)
diff --git a/src/gui/guiSkin.cpp b/src/gui/guiSkin.cpp
index e2a6af5fd..8892a00b4 100644
--- a/src/gui/guiSkin.cpp
+++ b/src/gui/guiSkin.cpp
@@ -18,39 +18,41 @@ namespace irr
namespace gui
{
-GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) :
- SpriteBank(0), Driver(driver), Type(type)
+GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver)
+: SpriteBank(0), Driver(driver), Type(type)
{
-#ifdef _DEBUG
+ #ifdef _DEBUG
setDebugName("GUISkin");
-#endif
-
- if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC)) {
- Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101, 50, 50, 50);
- Colors[EGDC_3D_SHADOW] = video::SColor(101, 130, 130, 130);
- Colors[EGDC_3D_FACE] = video::SColor(101, 210, 210, 210);
- Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101, 255, 255, 255);
- Colors[EGDC_3D_LIGHT] = video::SColor(101, 210, 210, 210);
- Colors[EGDC_ACTIVE_BORDER] = video::SColor(101, 16, 14, 115);
- Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255, 255, 255, 255);
- Colors[EGDC_APP_WORKSPACE] = video::SColor(101, 100, 100, 100);
- Colors[EGDC_BUTTON_TEXT] = video::SColor(240, 10, 10, 10);
- Colors[EGDC_GRAY_TEXT] = video::SColor(240, 130, 130, 130);
- Colors[EGDC_HIGH_LIGHT] = video::SColor(101, 8, 36, 107);
- Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240, 255, 255, 255);
- Colors[EGDC_INACTIVE_BORDER] = video::SColor(101, 165, 165, 165);
- Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255, 30, 30, 30);
- Colors[EGDC_TOOLTIP] = video::SColor(200, 0, 0, 0);
- Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200, 255, 255, 225);
- Colors[EGDC_SCROLLBAR] = video::SColor(101, 230, 230, 230);
- Colors[EGDC_WINDOW] = video::SColor(101, 255, 255, 255);
- Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200, 10, 10, 10);
- Colors[EGDC_ICON] = video::SColor(200, 255, 255, 255);
- Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200, 8, 36, 107);
- Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240, 100, 100, 100);
- Colors[EGDC_EDITABLE] = video::SColor(255, 255, 255, 255);
- Colors[EGDC_GRAY_EDITABLE] = video::SColor(255, 120, 120, 120);
- Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255, 240, 240, 255);
+ #endif
+
+ if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC))
+ {
+ Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101,50,50,50);
+ Colors[EGDC_3D_SHADOW] = video::SColor(101,130,130,130);
+ Colors[EGDC_3D_FACE] = video::SColor(101,210,210,210);
+ Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101,255,255,255);
+ Colors[EGDC_3D_LIGHT] = video::SColor(101,210,210,210);
+ Colors[EGDC_ACTIVE_BORDER] = video::SColor(101,16,14,115);
+ Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255,255,255,255);
+ Colors[EGDC_APP_WORKSPACE] = video::SColor(101,100,100,100);
+ Colors[EGDC_BUTTON_TEXT] = video::SColor(240,10,10,10);
+ Colors[EGDC_GRAY_TEXT] = video::SColor(240,130,130,130);
+ Colors[EGDC_HIGH_LIGHT] = video::SColor(101,8,36,107);
+ Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240,255,255,255);
+ Colors[EGDC_INACTIVE_BORDER] = video::SColor(101,165,165,165);
+ Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255,30,30,30);
+ Colors[EGDC_TOOLTIP] = video::SColor(200,0,0,0);
+ Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200,255,255,225);
+ Colors[EGDC_SCROLLBAR] = video::SColor(101,230,230,230);
+ Colors[EGDC_WINDOW] = video::SColor(101,255,255,255);
+ Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200,10,10,10);
+ Colors[EGDC_ICON] = video::SColor(200,255,255,255);
+ Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200,8,36,107);
+ Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240,100,100,100);
+ Colors[EGDC_EDITABLE] = video::SColor(255,255,255,255);
+ Colors[EGDC_GRAY_EDITABLE] = video::SColor(255,120,120,120);
+ Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255,240,240,255);
+
Sizes[EGDS_SCROLLBAR_SIZE] = 14;
Sizes[EGDS_MENU_HEIGHT] = 30;
@@ -66,36 +68,36 @@ GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) :
Sizes[EGDS_TITLEBARTEXT_DISTANCE_X] = 2;
Sizes[EGDS_TITLEBARTEXT_DISTANCE_Y] = 0;
- } else {
- // 0x80a6a8af
- Colors[EGDC_3D_DARK_SHADOW] = 0x60767982;
- // Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab
- // background
- Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background
- Colors[EGDC_3D_SHADOW] =
- 0x50e4e8f1; // tab background, and left-top highlight
- Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc;
- Colors[EGDC_3D_LIGHT] = 0x802e313a;
- Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title
- Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0;
- Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused
- Colors[EGDC_BUTTON_TEXT] = 0xd0161616;
- Colors[EGDC_GRAY_TEXT] = 0x3c141414;
- Colors[EGDC_HIGH_LIGHT] = 0x6c606060;
- Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0;
- Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5;
- Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2;
- Colors[EGDC_TOOLTIP] = 0xf00f2033;
- Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9;
- Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0;
- Colors[EGDC_WINDOW] = 0xf0f0f0f0;
- Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616;
- Colors[EGDC_ICON] = 0xd0161616;
- Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060;
- Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010;
- Colors[EGDC_EDITABLE] = 0xf0ffffff;
- Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc;
- Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0;
+ }
+ else
+ {
+ //0x80a6a8af
+ Colors[EGDC_3D_DARK_SHADOW] = 0x60767982;
+ //Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab background
+ Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background
+ Colors[EGDC_3D_SHADOW] = 0x50e4e8f1; // tab background, and left-top highlight
+ Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc;
+ Colors[EGDC_3D_LIGHT] = 0x802e313a;
+ Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title
+ Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0;
+ Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused
+ Colors[EGDC_BUTTON_TEXT] = 0xd0161616;
+ Colors[EGDC_GRAY_TEXT] = 0x3c141414;
+ Colors[EGDC_HIGH_LIGHT] = 0x6c606060;
+ Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0;
+ Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5;
+ Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2;
+ Colors[EGDC_TOOLTIP] = 0xf00f2033;
+ Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9;
+ Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0;
+ Colors[EGDC_WINDOW] = 0xf0f0f0f0;
+ Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616;
+ Colors[EGDC_ICON] = 0xd0161616;
+ Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060;
+ Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010;
+ Colors[EGDC_EDITABLE] = 0xf0ffffff;
+ Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc;
+ Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0;
Sizes[EGDS_SCROLLBAR_SIZE] = 14;
Sizes[EGDS_MENU_HEIGHT] = 48;
@@ -158,16 +160,18 @@ GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) :
Icons[EGDI_FILE] = 245;
Icons[EGDI_DIRECTORY] = 246;
- for (u32 i = 0; i < EGDF_COUNT; ++i)
+ for (u32 i=0; i<EGDF_COUNT; ++i)
Fonts[i] = 0;
- UseGradient = (Type == EGST_WINDOWS_METALLIC) || (Type == EGST_BURNING_SKIN);
+ UseGradient = (Type == EGST_WINDOWS_METALLIC) || (Type == EGST_BURNING_SKIN) ;
}
+
//! destructor
GUISkin::~GUISkin()
{
- for (u32 i = 0; i < EGDF_COUNT; ++i) {
+ for (u32 i=0; i<EGDF_COUNT; ++i)
+ {
if (Fonts[i])
Fonts[i]->drop();
}
@@ -176,6 +180,7 @@ GUISkin::~GUISkin()
SpriteBank->drop();
}
+
//! returns default color
video::SColor GUISkin::getColor(EGUI_DEFAULT_COLOR color) const
{
@@ -185,6 +190,7 @@ video::SColor GUISkin::getColor(EGUI_DEFAULT_COLOR color) const
return video::SColor();
}
+
//! sets a default color
void GUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor)
{
@@ -192,6 +198,7 @@ void GUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor)
Colors[which] = newColor;
}
+
//! returns size for the given size type
s32 GUISkin::getSize(EGUI_DEFAULT_SIZE size) const
{
@@ -201,6 +208,7 @@ s32 GUISkin::getSize(EGUI_DEFAULT_SIZE size) const
return 0;
}
+
//! sets a default size
void GUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size)
{
@@ -208,8 +216,9 @@ void GUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size)
Sizes[which] = size;
}
+
//! returns the default font
-IGUIFont *GUISkin::getFont(EGUI_DEFAULT_FONT which) const
+IGUIFont* GUISkin::getFont(EGUI_DEFAULT_FONT which) const
{
if (((u32)which < EGDF_COUNT) && Fonts[which])
return Fonts[which];
@@ -217,13 +226,15 @@ IGUIFont *GUISkin::getFont(EGUI_DEFAULT_FONT which) const
return Fonts[EGDF_DEFAULT];
}
+
//! sets a default font
-void GUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which)
+void GUISkin::setFont(IGUIFont* font, EGUI_DEFAULT_FONT which)
{
if ((u32)which >= EGDF_COUNT)
return;
- if (font) {
+ if (font)
+ {
font->grab();
if (Fonts[which])
Fonts[which]->drop();
@@ -232,14 +243,16 @@ void GUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which)
}
}
+
//! gets the sprite bank stored
-IGUISpriteBank *GUISkin::getSpriteBank() const
+IGUISpriteBank* GUISkin::getSpriteBank() const
{
return SpriteBank;
}
+
//! set a new sprite bank or remove one by passing 0
-void GUISkin::setSpriteBank(IGUISpriteBank *bank)
+void GUISkin::setSpriteBank(IGUISpriteBank* bank)
{
if (bank)
bank->grab();
@@ -250,6 +263,7 @@ void GUISkin::setSpriteBank(IGUISpriteBank *bank)
SpriteBank = bank;
}
+
//! Returns a default icon
u32 GUISkin::getIcon(EGUI_DEFAULT_ICON icon) const
{
@@ -259,6 +273,7 @@ u32 GUISkin::getIcon(EGUI_DEFAULT_ICON icon) const
return 0;
}
+
//! Sets a default icon
void GUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index)
{
@@ -266,9 +281,10 @@ void GUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index)
Icons[icon] = index;
}
+
//! Returns a default text. For example for Message box button captions:
//! "OK", "Cancel", "Yes", "No" and so on.
-const wchar_t *GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const
+const wchar_t* GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const
{
if ((u32)text < EGDT_COUNT)
return Texts[text].c_str();
@@ -276,14 +292,16 @@ const wchar_t *GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const
return Texts[0].c_str();
}
+
//! Sets a default text. For example for Message box button captions:
//! "OK", "Cancel", "Yes", "No" and so on.
-void GUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText)
+void GUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText)
{
if ((u32)which < EGDT_COUNT)
Texts[which] = newText;
}
+
//! draws a standard 3d button pane
/** Used for drawing for example buttons in normal state.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -294,9 +312,10 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
is usually not used by ISkin, but can be used for example by more complex
implementations to find out how to draw the part exactly. */
// PATCH
-void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element,
- const core::rect<s32> &r, const core::rect<s32> *clip,
- const video::SColor *colors)
+void GUISkin::drawColored3DButtonPaneStandard(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -306,14 +325,15 @@ void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element,
core::rect<s32> rect = r;
- if (Type == EGST_BURNING_SKIN) {
+ if ( Type == EGST_BURNING_SKIN )
+ {
rect.UpperLeftCorner.X -= 1;
rect.UpperLeftCorner.Y -= 1;
rect.LowerRightCorner.X += 1;
rect.LowerRightCorner.Y += 1;
draw3DSunkenPane(element,
- colors[EGDC_WINDOW].getInterpolated(0xFFFFFFFF, 0.9f),
- false, true, rect, clip);
+ colors[ EGDC_WINDOW ].getInterpolated( 0xFFFFFFFF, 0.9f )
+ ,false, true, rect, clip);
return;
}
@@ -330,17 +350,20 @@ void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element,
rect.LowerRightCorner.X -= 1;
rect.LowerRightCorner.Y -= 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
- const video::SColor c2 =
- c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
+ const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
}
}
// END PATCH
+
//! draws a pressed 3d button pane
/** Used for drawing for example buttons in pressed state.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -351,9 +374,10 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
is usually not used by ISkin, but can be used for example by more complex
implementations to find out how to draw the part exactly. */
// PATCH
-void GUISkin::drawColored3DButtonPanePressed(IGUIElement *element,
- const core::rect<s32> &r, const core::rect<s32> *clip,
- const video::SColor *colors)
+void GUISkin::drawColored3DButtonPanePressed(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -375,17 +399,20 @@ void GUISkin::drawColored3DButtonPanePressed(IGUIElement *element,
rect.UpperLeftCorner.X += 1;
rect.UpperLeftCorner.Y += 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
- const video::SColor c2 =
- c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
+ const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
}
}
// END PATCH
+
//! draws a sunken 3d pane
/** Used for drawing the background of edit, combo or check boxes.
\param element: Pointer to the element which wishes to draw this. This parameter
@@ -397,9 +424,11 @@ deep into the ground.
\param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolor,
- bool flat, bool fillBackGround, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DSunkenPane(IGUIElement* element, video::SColor bgcolor,
+ bool flat, bool fillBackGround,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -412,31 +441,34 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo
if (fillBackGround)
Driver->draw2DRectangle(bgcolor, rect, clip);
- if (flat) {
+ if (flat)
+ {
// draw flat sunken pane
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
++rect.UpperLeftCorner.Y;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
rect = r;
++rect.UpperLeftCorner.Y;
rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
rect = r;
++rect.UpperLeftCorner.X;
rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
--rect.LowerRightCorner.X;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
- } else {
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
+ }
+ else
+ {
// draw deep sunken pane
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
++rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -444,10 +476,10 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
rect.UpperLeftCorner.X = r.UpperLeftCorner.X;
- rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y + 1;
+ rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y+1;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
++rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
++rect.LowerRightCorner.X;
@@ -457,7 +489,7 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo
rect = r;
rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1;
++rect.UpperLeftCorner.Y;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
--rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -468,7 +500,7 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo
++rect.UpperLeftCorner.X;
rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
--rect.LowerRightCorner.X;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
++rect.UpperLeftCorner.X;
--rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -481,13 +513,17 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo
//! draws a window background
// return where to draw title bar text.
// PATCH
-core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
- bool drawTitleBar, video::SColor titleBarColor, const core::rect<s32> &r,
- const core::rect<s32> *clip, core::rect<s32> *checkClientArea,
- const video::SColor *colors)
+core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement* element,
+ bool drawTitleBar, video::SColor titleBarColor,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ core::rect<s32>* checkClientArea,
+ const video::SColor* colors)
{
- if (!Driver) {
- if (checkClientArea) {
+ if (!Driver)
+ {
+ if ( checkClientArea )
+ {
*checkClientArea = r;
}
return r;
@@ -500,14 +536,16 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
// top border
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip);
}
// left border
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip);
}
@@ -516,7 +554,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
rect.LowerRightCorner.X = r.LowerRightCorner.X;
rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
}
@@ -525,7 +564,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
rect.LowerRightCorner.X -= 1;
rect.UpperLeftCorner.Y += 1;
rect.LowerRightCorner.Y -= 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
}
@@ -534,7 +574,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = r.LowerRightCorner.X;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
}
@@ -543,31 +584,37 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
rect.LowerRightCorner.X -= 1;
rect.UpperLeftCorner.Y -= 1;
rect.LowerRightCorner.Y -= 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
}
// client area for background
rect = r;
- rect.UpperLeftCorner.X += 1;
- rect.UpperLeftCorner.Y += 1;
+ rect.UpperLeftCorner.X +=1;
+ rect.UpperLeftCorner.Y +=1;
rect.LowerRightCorner.X -= 2;
rect.LowerRightCorner.Y -= 2;
- if (checkClientArea) {
+ if (checkClientArea)
+ {
*checkClientArea = rect;
}
- if (!checkClientArea) {
- if (!UseGradient) {
+ if ( !checkClientArea )
+ {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else if (Type == EGST_BURNING_SKIN) {
- const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated(
- 0xFFFFFFFF, 0.9f);
- const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated(
- 0xFFFFFFFF, 0.8f);
+ }
+ else if ( Type == EGST_BURNING_SKIN )
+ {
+ const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.9f );
+ const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.8f );
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
- } else {
+ }
+ else
+ {
const video::SColor c2 = colors[EGDC_3D_SHADOW];
const video::SColor c1 = colors[EGDC_3D_FACE];
Driver->draw2DRectangle(rect, c1, c1, c1, c2, clip);
@@ -579,31 +626,29 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
rect.UpperLeftCorner.X += 2;
rect.UpperLeftCorner.Y += 2;
rect.LowerRightCorner.X -= 2;
- rect.LowerRightCorner.Y =
- rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2;
+ rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2;
- if (drawTitleBar) {
- if (checkClientArea) {
+ if (drawTitleBar )
+ {
+ if (checkClientArea)
+ {
(*checkClientArea).UpperLeftCorner.Y = rect.LowerRightCorner.Y;
- } else {
+ }
+ else
+ {
// draw title bar
- // if (!UseGradient)
+ //if (!UseGradient)
// Driver->draw2DRectangle(titleBarColor, rect, clip);
- // else
- if (Type == EGST_BURNING_SKIN) {
- const video::SColor c = titleBarColor.getInterpolated(
- video::SColor(titleBarColor.getAlpha(),
- 255, 255, 255),
- 0.8f);
- Driver->draw2DRectangle(rect, titleBarColor,
- titleBarColor, c, c, clip);
- } else {
- const video::SColor c = titleBarColor.getInterpolated(
- video::SColor(titleBarColor.getAlpha(), 0,
- 0, 0),
- 0.2f);
- Driver->draw2DRectangle(rect, titleBarColor, c,
- titleBarColor, c, clip);
+ //else
+ if ( Type == EGST_BURNING_SKIN )
+ {
+ const video::SColor c = titleBarColor.getInterpolated( video::SColor(titleBarColor.getAlpha(),255,255,255), 0.8f);
+ Driver->draw2DRectangle(rect, titleBarColor, titleBarColor, c, c, clip);
+ }
+ else
+ {
+ const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(),0,0,0), 0.2f);
+ Driver->draw2DRectangle(rect, titleBarColor, c, titleBarColor, c, clip);
}
}
}
@@ -612,6 +657,7 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
}
// END PATCH
+
//! draws a standard 3d menu pane
/** Used for drawing for menus and context menus.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -622,8 +668,9 @@ implementations to find out how to draw the part exactly.
\param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DMenuPane(IGUIElement* element,
+ const core::rect<s32>& r, const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -633,7 +680,8 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32>
core::rect<s32> rect = r;
- if (Type == EGST_BURNING_SKIN) {
+ if ( Type == EGST_BURNING_SKIN )
+ {
rect.UpperLeftCorner.Y -= 3;
draw3DButtonPaneStandard(element, rect, clip);
return;
@@ -679,14 +727,15 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32>
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
rect = r;
- rect.UpperLeftCorner.X += 1;
- rect.UpperLeftCorner.Y += 1;
+ rect.UpperLeftCorner.X +=1;
+ rect.UpperLeftCorner.Y +=1;
rect.LowerRightCorner.X -= 2;
rect.LowerRightCorner.Y -= 2;
if (!UseGradient)
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- else {
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
const video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
@@ -694,6 +743,7 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32>
}
// END PATCH
+
//! draws a standard 3d tool bar
/** Used for drawing for toolbars and menus.
\param element: Pointer to the element which wishes to draw this. This parameter
@@ -702,8 +752,10 @@ implementations to find out how to draw the part exactly.
\param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DToolBar(IGUIElement *element, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DToolBar(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -722,15 +774,21 @@ void GUISkin::drawColored3DToolBar(IGUIElement *element, const core::rect<s32> &
rect = r;
rect.LowerRightCorner.Y -= 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else if (Type == EGST_BURNING_SKIN) {
+ }
+ else
+ if ( Type == EGST_BURNING_SKIN )
+ {
const video::SColor c1 = 0xF0000000 | colors[EGDC_3D_FACE].color;
const video::SColor c2 = 0xF0000000 | colors[EGDC_3D_SHADOW].color;
rect.LowerRightCorner.Y += 1;
Driver->draw2DRectangle(rect, c1, c2, c1, c2, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
const video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
@@ -747,9 +805,9 @@ implementations to find out how to draw the part exactly.
\param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
- const core::rect<s32> &frameRect, const core::rect<s32> *clip,
- EGUI_ALIGNMENT alignment, const video::SColor *colors)
+void GUISkin::drawColored3DTabButton(IGUIElement* element, bool active,
+ const core::rect<s32>& frameRect, const core::rect<s32>* clip, EGUI_ALIGNMENT alignment,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -759,7 +817,8 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
core::rect<s32> tr = frameRect;
- if (alignment == EGUIA_UPPERLEFT) {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
tr.LowerRightCorner.X -= 2;
tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1;
tr.UpperLeftCorner.X += 1;
@@ -787,7 +846,9 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
tr.UpperLeftCorner.X += 1;
tr.UpperLeftCorner.Y += 1;
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip);
- } else {
+ }
+ else
+ {
tr.LowerRightCorner.X -= 2;
tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1;
tr.UpperLeftCorner.X += 1;
@@ -810,7 +871,7 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
// draw right middle gray shadow
tr.LowerRightCorner.X += 1;
tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1;
- // tr.LowerRightCorner.Y -= 1;
+ //tr.LowerRightCorner.Y -= 1;
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip);
tr.LowerRightCorner.X += 1;
@@ -821,6 +882,7 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
}
// END PATCH
+
//! draws a tab control body
/** \param element: Pointer to the element which wishes to draw this. This parameter
is usually not used by ISkin, but can be used for example by more complex
@@ -830,9 +892,9 @@ implementations to find out how to draw the part exactly.
\param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool background,
- const core::rect<s32> &rect, const core::rect<s32> *clip, s32 tabHeight,
- EGUI_ALIGNMENT alignment, const video::SColor *colors)
+void GUISkin::drawColored3DTabBody(IGUIElement* element, bool border, bool background,
+ const core::rect<s32>& rect, const core::rect<s32>* clip, s32 tabHeight, EGUI_ALIGNMENT alignment,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -842,12 +904,14 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg
core::rect<s32> tr = rect;
- if (tabHeight == -1)
+ if ( tabHeight == -1 )
tabHeight = getSize(gui::EGDS_BUTTON_HEIGHT);
// draw border.
- if (border) {
- if (alignment == EGUIA_UPPERLEFT) {
+ if (border)
+ {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
// draw left hightlight
tr.UpperLeftCorner.Y += tabHeight + 2;
tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1;
@@ -862,7 +926,9 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg
tr = rect;
tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1;
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip);
- } else {
+ }
+ else
+ {
// draw left hightlight
tr.LowerRightCorner.Y -= tabHeight + 2;
tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1;
@@ -880,25 +946,30 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg
}
}
- if (background) {
- if (alignment == EGUIA_UPPERLEFT) {
+ if (background)
+ {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
tr = rect;
tr.UpperLeftCorner.Y += tabHeight + 2;
tr.LowerRightCorner.X -= 1;
tr.UpperLeftCorner.X += 1;
tr.LowerRightCorner.Y -= 1;
- } else {
+ }
+ else
+ {
tr = rect;
tr.UpperLeftCorner.X += 1;
tr.UpperLeftCorner.Y -= 1;
tr.LowerRightCorner.X -= 1;
tr.LowerRightCorner.Y -= tabHeight + 2;
- // tr.UpperLeftCorner.X += 1;
+ //tr.UpperLeftCorner.X += 1;
}
if (!UseGradient)
Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip);
- else {
+ else
+ {
video::SColor c1 = colors[EGDC_3D_FACE];
video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(tr, c1, c1, c2, c2, clip);
@@ -907,6 +978,7 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg
}
// END PATCH
+
//! draws an icon, usually from the skin's sprite bank
/** \param parent: Pointer to the element which wishes to draw this icon.
This parameter is usually not used by IGUISkin, but can be used for example
@@ -918,9 +990,11 @@ by more complex implementations to find out how to draw the part exactly.
\param loop: Whether the animation should loop or not
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColoredIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
- const core::position2di position, u32 starttime, u32 currenttime,
- bool loop, const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
+ const core::position2di position,
+ u32 starttime, u32 currenttime,
+ bool loop, const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!SpriteBank)
return;
@@ -930,71 +1004,74 @@ void GUISkin::drawColoredIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
bool gray = element && !element->isEnabled();
SpriteBank->draw2DSprite(Icons[icon], position, clip,
- colors[gray ? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL],
- starttime, currenttime, loop, true);
+ colors[gray? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL], starttime, currenttime, loop, true);
}
// END PATCH
+
EGUI_SKIN_TYPE GUISkin::getType() const
{
return Type;
}
+
//! draws a 2d rectangle.
-void GUISkin::draw2DRectangle(IGUIElement *element, const video::SColor &color,
- const core::rect<s32> &pos, const core::rect<s32> *clip)
+void GUISkin::draw2DRectangle(IGUIElement* element,
+ const video::SColor &color, const core::rect<s32>& pos,
+ const core::rect<s32>* clip)
{
Driver->draw2DRectangle(color, pos, clip);
}
+
//! Writes attributes of the object.
//! Implement this to expose the attributes of your scene node animator for
//! scripting languages, editors, debuggers or xml serialization purposes.
-void GUISkin::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options) const
+void GUISkin::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
{
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
out->addColor(GUISkinColorNames[i], Colors[i]);
- for (i = 0; i < EGDS_COUNT; ++i)
+ for (i=0; i<EGDS_COUNT; ++i)
out->addInt(GUISkinSizeNames[i], Sizes[i]);
- for (i = 0; i < EGDT_COUNT; ++i)
+ for (i=0; i<EGDT_COUNT; ++i)
out->addString(GUISkinTextNames[i], Texts[i].c_str());
- for (i = 0; i < EGDI_COUNT; ++i)
+ for (i=0; i<EGDI_COUNT; ++i)
out->addInt(GUISkinIconNames[i], Icons[i]);
}
+
//! Reads attributes of the object.
//! Implement this to set the attributes of your scene node animator for
//! scripting languages, editors, debuggers or xml deserialization purposes.
-void GUISkin::deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options)
+void GUISkin::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
- // TODO: This is not nice code for downward compatibility, whenever new values are
- // added and users load an old skin the corresponding values will be set to 0.
+ // TODO: This is not nice code for downward compatibility, whenever new values are added and users
+ // load an old skin the corresponding values will be set to 0.
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
Colors[i] = in->getAttributeAsColor(GUISkinColorNames[i]);
- for (i = 0; i < EGDS_COUNT; ++i)
+ for (i=0; i<EGDS_COUNT; ++i)
Sizes[i] = in->getAttributeAsInt(GUISkinSizeNames[i]);
- for (i = 0; i < EGDT_COUNT; ++i)
+ for (i=0; i<EGDT_COUNT; ++i)
Texts[i] = in->getAttributeAsStringW(GUISkinTextNames[i]);
- for (i = 0; i < EGDI_COUNT; ++i)
+ for (i=0; i<EGDI_COUNT; ++i)
Icons[i] = in->getAttributeAsInt(GUISkinIconNames[i]);
}
+
//! gets the colors
// PATCH
-void GUISkin::getColors(video::SColor *colors)
+void GUISkin::getColors(video::SColor* colors)
{
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
colors[i] = Colors[i];
}
// END PATCH
@@ -1002,4 +1079,6 @@ void GUISkin::getColors(video::SColor *colors)
} // end namespace gui
} // end namespace irr
+
#endif // _IRR_COMPILE_WITH_GUI_
+
diff --git a/src/gui/guiSkin.h b/src/gui/guiSkin.h
index 4937b1f9a..bbb900f9f 100644
--- a/src/gui/guiSkin.h
+++ b/src/gui/guiSkin.h
@@ -17,335 +17,350 @@ namespace irr
{
namespace video
{
-class IVideoDriver;
+ class IVideoDriver;
}
namespace gui
{
-class GUISkin : public IGUISkin
-{
-public:
- GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver);
-
- //! destructor
- virtual ~GUISkin();
-
- //! returns default color
- virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const;
-
- //! sets a default color
- virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor);
-
- //! returns size for the given size type
- virtual s32 getSize(EGUI_DEFAULT_SIZE size) const;
-
- //! sets a default size
- virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size);
-
- //! returns the default font
- virtual IGUIFont *getFont(EGUI_DEFAULT_FONT which = EGDF_DEFAULT) const;
-
- //! sets a default font
- virtual void setFont(IGUIFont *font, EGUI_DEFAULT_FONT which = EGDF_DEFAULT);
-
- //! sets the sprite bank used for drawing icons
- virtual void setSpriteBank(IGUISpriteBank *bank);
-
- //! gets the sprite bank used for drawing icons
- virtual IGUISpriteBank *getSpriteBank() const;
-
- //! Returns a default icon
- /** Returns the sprite index within the sprite bank */
- virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const;
-
- //! Sets a default icon
- /** Sets the sprite index used for drawing icons like arrows,
- close buttons and ticks in checkboxes
- \param icon: Enum specifying which icon to change
- \param index: The sprite index used to draw this icon */
- virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index);
-
- //! Returns a default text.
- /** For example for Message box button captions:
- "OK", "Cancel", "Yes", "No" and so on. */
- virtual const wchar_t *getDefaultText(EGUI_DEFAULT_TEXT text) const;
-
- //! Sets a default text.
- /** For example for Message box button captions:
- "OK", "Cancel", "Yes", "No" and so on. */
- virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText);
-
- //! draws a standard 3d button pane
- /** Used for drawing for example buttons in normal state.
- It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
- EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
- \param rect: Defining area where to draw.
- \param clip: Clip area.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly. */
- virtual void draw3DButtonPaneStandard(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0)
- {
- drawColored3DButtonPaneStandard(element, rect, clip);
- }
-
- virtual void drawColored3DButtonPaneStandard(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- const video::SColor *colors = 0);
-
- //! draws a pressed 3d button pane
- /** Used for drawing for example buttons in pressed state.
- It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
- EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
- \param rect: Defining area where to draw.
- \param clip: Clip area.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly. */
- virtual void draw3DButtonPanePressed(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0)
- {
- drawColored3DButtonPanePressed(element, rect, clip);
- }
-
- virtual void drawColored3DButtonPanePressed(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- const video::SColor *colors = 0);
-
- //! draws a sunken 3d pane
- /** Used for drawing the background of edit, combo or check boxes.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly.
- \param bgcolor: Background color.
- \param flat: Specifies if the sunken pane should be flat or displayed as sunken
- deep into the ground.
- \param rect: Defining area where to draw.
- \param clip: Clip area. */
- virtual void draw3DSunkenPane(IGUIElement *element, video::SColor bgcolor,
- bool flat, bool fillBackGround, const core::rect<s32> &rect,
- const core::rect<s32> *clip = 0)
- {
- drawColored3DSunkenPane(
- element, bgcolor, flat, fillBackGround, rect, clip);
- }
-
- virtual void drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolor,
- bool flat, bool fillBackGround, const core::rect<s32> &rect,
- const core::rect<s32> *clip = 0, const video::SColor *colors = 0);
-
- //! draws a window background
- /** Used for drawing the background of dialogs and windows.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly.
- \param titleBarColor: Title color.
- \param drawTitleBar: True to enable title drawing.
- \param rect: Defining area where to draw.
- \param clip: Clip area.
- \param checkClientArea: When set to non-null the function will not draw anything,
- but will instead return the clientArea which can be used for drawing by the
- calling window. That is the area without borders and without titlebar. \return
- Returns rect where it would be good to draw title bar text. This will work even
- when checkClientArea is set to a non-null value.*/
- virtual core::rect<s32> draw3DWindowBackground(IGUIElement *element,
- bool drawTitleBar, video::SColor titleBarColor,
- const core::rect<s32> &rect, const core::rect<s32> *clip,
- core::rect<s32> *checkClientArea)
+ class GUISkin : public IGUISkin
{
- return drawColored3DWindowBackground(element, drawTitleBar, titleBarColor,
+ public:
+
+ GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver);
+
+ //! destructor
+ virtual ~GUISkin();
+
+ //! returns default color
+ virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const;
+
+ //! sets a default color
+ virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor);
+
+ //! returns size for the given size type
+ virtual s32 getSize(EGUI_DEFAULT_SIZE size) const;
+
+ //! sets a default size
+ virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size);
+
+ //! returns the default font
+ virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const;
+
+ //! sets a default font
+ virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT);
+
+ //! sets the sprite bank used for drawing icons
+ virtual void setSpriteBank(IGUISpriteBank* bank);
+
+ //! gets the sprite bank used for drawing icons
+ virtual IGUISpriteBank* getSpriteBank() const;
+
+ //! Returns a default icon
+ /** Returns the sprite index within the sprite bank */
+ virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const;
+
+ //! Sets a default icon
+ /** Sets the sprite index used for drawing icons like arrows,
+ close buttons and ticks in checkboxes
+ \param icon: Enum specifying which icon to change
+ \param index: The sprite index used to draw this icon */
+ virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index);
+
+ //! Returns a default text.
+ /** For example for Message box button captions:
+ "OK", "Cancel", "Yes", "No" and so on. */
+ virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const;
+
+ //! Sets a default text.
+ /** For example for Message box button captions:
+ "OK", "Cancel", "Yes", "No" and so on. */
+ virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText);
+
+ //! draws a standard 3d button pane
+ /** Used for drawing for example buttons in normal state.
+ It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
+ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly. */
+ virtual void draw3DButtonPaneStandard(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0)
+ {
+ drawColored3DButtonPaneStandard(element, rect,clip);
+ }
+
+ virtual void drawColored3DButtonPaneStandard(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a pressed 3d button pane
+ /** Used for drawing for example buttons in pressed state.
+ It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
+ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly. */
+ virtual void draw3DButtonPanePressed(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0)
+ {
+ drawColored3DButtonPanePressed(element, rect, clip);
+ }
+
+ virtual void drawColored3DButtonPanePressed(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a sunken 3d pane
+ /** Used for drawing the background of edit, combo or check boxes.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param bgcolor: Background color.
+ \param flat: Specifies if the sunken pane should be flat or displayed as sunken
+ deep into the ground.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area. */
+ virtual void draw3DSunkenPane(IGUIElement* element,
+ video::SColor bgcolor, bool flat,
+ bool fillBackGround,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0)
+ {
+ drawColored3DSunkenPane(element, bgcolor, flat, fillBackGround, rect, clip);
+ }
+
+ virtual void drawColored3DSunkenPane(IGUIElement* element,
+ video::SColor bgcolor, bool flat,
+ bool fillBackGround,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a window background
+ /** Used for drawing the background of dialogs and windows.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param titleBarColor: Title color.
+ \param drawTitleBar: True to enable title drawing.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area.
+ \param checkClientArea: When set to non-null the function will not draw anything,
+ but will instead return the clientArea which can be used for drawing by the calling window.
+ That is the area without borders and without titlebar.
+ \return Returns rect where it would be good to draw title bar text. This will
+ work even when checkClientArea is set to a non-null value.*/
+ virtual core::rect<s32> draw3DWindowBackground(IGUIElement* element,
+ bool drawTitleBar, video::SColor titleBarColor,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip,
+ core::rect<s32>* checkClientArea)
+ {
+ return drawColored3DWindowBackground(element, drawTitleBar, titleBarColor,
rect, clip, checkClientArea);
- }
-
- virtual core::rect<s32> drawColored3DWindowBackground(IGUIElement *element,
- bool drawTitleBar, video::SColor titleBarColor,
- const core::rect<s32> &rect, const core::rect<s32> *clip,
- core::rect<s32> *checkClientArea,
- const video::SColor *colors = 0);
-
- //! draws a standard 3d menu pane
- /** Used for drawing for menus and context menus.
- It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
- EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly.
- \param rect: Defining area where to draw.
- \param clip: Clip area. */
- virtual void draw3DMenuPane(IGUIElement *element, const core::rect<s32> &rect,
- const core::rect<s32> *clip = 0)
- {
- drawColored3DMenuPane(element, rect, clip);
- }
-
- virtual void drawColored3DMenuPane(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- const video::SColor *colors = 0);
-
- //! draws a standard 3d tool bar
- /** Used for drawing for toolbars and menus.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly.
- \param rect: Defining area where to draw.
- \param clip: Clip area. */
- virtual void draw3DToolBar(IGUIElement *element, const core::rect<s32> &rect,
- const core::rect<s32> *clip = 0)
- {
- drawColored3DToolBar(element, rect, clip);
- }
-
- virtual void drawColored3DToolBar(IGUIElement *element,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- const video::SColor *colors = 0);
-
- //! draws a tab button
- /** Used for drawing for tab buttons on top of tabs.
- \param element: Pointer to the element which wishes to draw this. This parameter
- is usually not used by ISkin, but can be used for example by more complex
- implementations to find out how to draw the part exactly.
- \param active: Specifies if the tab is currently active.
- \param rect: Defining area where to draw.
- \param clip: Clip area. */
- virtual void draw3DTabButton(IGUIElement *element, bool active,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT)
- {
- drawColored3DTabButton(element, active, rect, clip, alignment);
- }
-
- virtual void drawColored3DTabButton(IGUIElement *element, bool active,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT,
- const video::SColor *colors = 0);
-
- //! draws a tab control body
- /** \param element: Pointer to the element which wishes to draw this. This
- parameter is usually not used by ISkin, but can be used for example by more
- complex implementations to find out how to draw the part exactly. \param border:
- Specifies if the border should be drawn. \param background: Specifies if the
- background should be drawn. \param rect: Defining area where to draw.
- \param clip: Clip area. */
- virtual void draw3DTabBody(IGUIElement *element, bool border, bool background,
- const core::rect<s32> &rect, const core::rect<s32> *clip = 0,
- s32 tabHeight = -1, EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT)
- {
- drawColored3DTabBody(element, border, background, rect, clip, tabHeight,
- alignment);
- }
-
- virtual void drawColored3DTabBody(IGUIElement *element, bool border,
- bool background, const core::rect<s32> &rect,
- const core::rect<s32> *clip = 0, s32 tabHeight = -1,
- EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT,
- const video::SColor *colors = 0);
-
- //! draws an icon, usually from the skin's sprite bank
- /** \param element: Pointer to the element which wishes to draw this icon.
- This parameter is usually not used by IGUISkin, but can be used for example
- by more complex implementations to find out how to draw the part exactly.
- \param icon: Specifies the icon to be drawn.
- \param position: The position to draw the icon
- \param starttime: The time at the start of the animation
- \param currenttime: The present time, used to calculate the frame number
- \param loop: Whether the animation should loop or not
- \param clip: Clip area. */
- virtual void drawIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
- const core::position2di position, u32 starttime = 0,
- u32 currenttime = 0, bool loop = false,
- const core::rect<s32> *clip = 0)
- {
- drawColoredIcon(element, icon, position, starttime, currenttime, loop,
- clip);
- }
-
- virtual void drawColoredIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
- const core::position2di position, u32 starttime = 0,
- u32 currenttime = 0, bool loop = false,
- const core::rect<s32> *clip = 0, const video::SColor *colors = 0);
-
- //! draws a 2d rectangle.
- /** \param element: Pointer to the element which wishes to draw this icon.
- This parameter is usually not used by IGUISkin, but can be used for example
- by more complex implementations to find out how to draw the part exactly.
- \param color: Color of the rectangle to draw. The alpha component specifies how
- transparent the rectangle will be.
- \param pos: Position of the rectangle.
- \param clip: Pointer to rectangle against which the rectangle will be clipped.
- If the pointer is null, no clipping will be performed. */
- virtual void draw2DRectangle(IGUIElement *element, const video::SColor &color,
- const core::rect<s32> &pos, const core::rect<s32> *clip = 0);
-
- //! get the type of this skin
- virtual EGUI_SKIN_TYPE getType() const;
-
- //! Writes attributes of the object.
- //! Implement this to expose the attributes of your scene node animator for
- //! scripting languages, editors, debuggers or xml serialization purposes.
- virtual void serializeAttributes(io::IAttributes *out,
- io::SAttributeReadWriteOptions *options = 0) const;
-
- //! Reads attributes of the object.
- //! Implement this to set the attributes of your scene node animator for
- //! scripting languages, editors, debuggers or xml deserialization purposes.
- virtual void deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options = 0);
-
- //! gets the colors
- virtual void getColors(video::SColor *colors); // ::PATCH:
-
-private:
- video::SColor Colors[EGDC_COUNT];
- s32 Sizes[EGDS_COUNT];
- u32 Icons[EGDI_COUNT];
- IGUIFont *Fonts[EGDF_COUNT];
- IGUISpriteBank *SpriteBank;
- core::stringw Texts[EGDT_COUNT];
- video::IVideoDriver *Driver;
- bool UseGradient;
-
- EGUI_SKIN_TYPE Type;
-};
-
-#define set3DSkinColors(skin, button_color) \
- { \
- skin->setColor(EGDC_3D_FACE, button_color); \
- skin->setColor(EGDC_3D_DARK_SHADOW, button_color, 0.25f); \
- skin->setColor(EGDC_3D_SHADOW, button_color, 0.5f); \
- skin->setColor(EGDC_3D_LIGHT, button_color); \
- skin->setColor(EGDC_3D_HIGH_LIGHT, button_color, 1.5f); \
- }
-
-#define getElementSkinColor(color) \
- { \
- if (!Colors) { \
- IGUISkin *skin = Environment->getSkin(); \
- if (skin) \
- return skin->getColor(color); \
- } \
- return Colors[color]; \
- }
-
-#define setElementSkinColor(which, newColor, shading) \
- { \
- if (!Colors) { \
- Colors = new video::SColor[EGDC_COUNT]; \
- GUISkin *skin = (GUISkin *)Environment->getSkin(); \
- if (skin) \
- skin->getColors(Colors); \
- } \
- Colors[which] = newColor; \
- setShading(Colors[which], shading); \
- }
+ }
+
+ virtual core::rect<s32> drawColored3DWindowBackground(IGUIElement* element,
+ bool drawTitleBar, video::SColor titleBarColor,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip,
+ core::rect<s32>* checkClientArea,
+ const video::SColor* colors=0);
+
+ //! draws a standard 3d menu pane
+ /** Used for drawing for menus and context menus.
+ It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
+ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area. */
+ virtual void draw3DMenuPane(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0)
+ {
+ drawColored3DMenuPane(element, rect, clip);
+ }
+
+ virtual void drawColored3DMenuPane(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a standard 3d tool bar
+ /** Used for drawing for toolbars and menus.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area. */
+ virtual void draw3DToolBar(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0)
+ {
+ drawColored3DToolBar(element, rect, clip);
+ }
+
+ virtual void drawColored3DToolBar(IGUIElement* element,
+ const core::rect<s32>& rect,
+ const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a tab button
+ /** Used for drawing for tab buttons on top of tabs.
+ \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param active: Specifies if the tab is currently active.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area. */
+ virtual void draw3DTabButton(IGUIElement* element, bool active,
+ const core::rect<s32>& rect, const core::rect<s32>* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT)
+ {
+ drawColored3DTabButton(element, active, rect, clip, alignment);
+ }
+
+ virtual void drawColored3DTabButton(IGUIElement* element, bool active,
+ const core::rect<s32>& rect, const core::rect<s32>* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT,
+ const video::SColor* colors=0);
+
+ //! draws a tab control body
+ /** \param element: Pointer to the element which wishes to draw this. This parameter
+ is usually not used by ISkin, but can be used for example by more complex
+ implementations to find out how to draw the part exactly.
+ \param border: Specifies if the border should be drawn.
+ \param background: Specifies if the background should be drawn.
+ \param rect: Defining area where to draw.
+ \param clip: Clip area. */
+ virtual void draw3DTabBody(IGUIElement* element, bool border, bool background,
+ const core::rect<s32>& rect, const core::rect<s32>* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT)
+ {
+ drawColored3DTabBody(element, border, background, rect, clip, tabHeight, alignment);
+ }
+
+ virtual void drawColored3DTabBody(IGUIElement* element, bool border, bool background,
+ const core::rect<s32>& rect, const core::rect<s32>* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT,
+ const video::SColor* colors=0);
+
+ //! draws an icon, usually from the skin's sprite bank
+ /** \param element: Pointer to the element which wishes to draw this icon.
+ This parameter is usually not used by IGUISkin, but can be used for example
+ by more complex implementations to find out how to draw the part exactly.
+ \param icon: Specifies the icon to be drawn.
+ \param position: The position to draw the icon
+ \param starttime: The time at the start of the animation
+ \param currenttime: The present time, used to calculate the frame number
+ \param loop: Whether the animation should loop or not
+ \param clip: Clip area. */
+ virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
+ const core::position2di position,
+ u32 starttime=0, u32 currenttime=0,
+ bool loop=false, const core::rect<s32>* clip=0)
+ {
+ drawColoredIcon(element, icon, position, starttime, currenttime, loop, clip);
+ }
+
+ virtual void drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
+ const core::position2di position,
+ u32 starttime=0, u32 currenttime=0,
+ bool loop=false, const core::rect<s32>* clip=0,
+ const video::SColor* colors=0);
+
+ //! draws a 2d rectangle.
+ /** \param element: Pointer to the element which wishes to draw this icon.
+ This parameter is usually not used by IGUISkin, but can be used for example
+ by more complex implementations to find out how to draw the part exactly.
+ \param color: Color of the rectangle to draw. The alpha component specifies how
+ transparent the rectangle will be.
+ \param pos: Position of the rectangle.
+ \param clip: Pointer to rectangle against which the rectangle will be clipped.
+ If the pointer is null, no clipping will be performed. */
+ virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color,
+ const core::rect<s32>& pos, const core::rect<s32>* clip = 0);
+
+
+ //! get the type of this skin
+ virtual EGUI_SKIN_TYPE getType() const;
+
+ //! Writes attributes of the object.
+ //! Implement this to expose the attributes of your scene node animator for
+ //! scripting languages, editors, debuggers or xml serialization purposes.
+ virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;
+
+ //! Reads attributes of the object.
+ //! Implement this to set the attributes of your scene node animator for
+ //! scripting languages, editors, debuggers or xml deserialization purposes.
+ virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
+
+ //! gets the colors
+ virtual void getColors(video::SColor* colors); // ::PATCH:
+
+ private:
+
+ video::SColor Colors[EGDC_COUNT];
+ s32 Sizes[EGDS_COUNT];
+ u32 Icons[EGDI_COUNT];
+ IGUIFont* Fonts[EGDF_COUNT];
+ IGUISpriteBank* SpriteBank;
+ core::stringw Texts[EGDT_COUNT];
+ video::IVideoDriver* Driver;
+ bool UseGradient;
+
+ EGUI_SKIN_TYPE Type;
+ };
+
+ #define set3DSkinColors(skin, button_color) \
+ { \
+ skin->setColor(EGDC_3D_FACE, button_color); \
+ skin->setColor(EGDC_3D_DARK_SHADOW, button_color, 0.25f); \
+ skin->setColor(EGDC_3D_SHADOW, button_color, 0.5f); \
+ skin->setColor(EGDC_3D_LIGHT, button_color); \
+ skin->setColor(EGDC_3D_HIGH_LIGHT, button_color, 1.5f); \
+ }
+
+ #define getElementSkinColor(color) \
+ { \
+ if (!Colors) \
+ { \
+ IGUISkin* skin = Environment->getSkin(); \
+ if (skin) \
+ return skin->getColor(color); \
+ } \
+ return Colors[color]; \
+ }
+
+ #define setElementSkinColor(which, newColor, shading) \
+ { \
+ if (!Colors) \
+ { \
+ Colors = new video::SColor[EGDC_COUNT]; \
+ GUISkin* skin = (GUISkin *)Environment->getSkin(); \
+ if (skin) \
+ skin->getColors(Colors); \
+ } \
+ Colors[which] = newColor; \
+ setShading(Colors[which],shading); \
+ }
} // end namespace gui
//! Sets the shading
-inline void setShading(video::SColor &color, f32 s) // :PATCH:
+inline void setShading(video::SColor &color,f32 s) // :PATCH:
{
- if (s < 1.0f) {
+ if (s < 1.0f)
+ {
color.setRed(color.getRed() * s);
color.setGreen(color.getGreen() * s);
color.setBlue(color.getBlue() * s);
- } else if (s > 1.0f) {
+ }
+ else if (s > 1.0f)
+ {
s -= 1.0f;
color.setRed(color.getRed() + (255 - color.getRed()) * s);
@@ -355,6 +370,7 @@ inline void setShading(video::SColor &color, f32 s) // :PATCH:
}
} // end namespace irr
+
#endif // _IRR_COMPILE_WITH_GUI_
#endif
diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp
index 2f761cc77..c705e17fb 100644
--- a/src/gui/guiTable.cpp
+++ b/src/gui/guiTable.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+
#include "guiTable.h"
#include <queue>
#include <sstream>
@@ -32,22 +33,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/string.h"
#include "util/numeric.h"
#include "util/string.h" // for parseColorString()
-#include "settings.h" // for settings
-#include "porting.h" // for dpi
+#include "settings.h" // for settings
+#include "porting.h" // for dpi
#include "client/guiscalingfilter.h"
/*
GUITable
*/
-GUITable::GUITable(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- core::rect<s32> rectangle, ISimpleTextureSource *tsrc) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
- m_tsrc(tsrc)
+GUITable::GUITable(gui::IGUIEnvironment *env,
+ gui::IGUIElement* parent, s32 id,
+ core::rect<s32> rectangle,
+ ISimpleTextureSource *tsrc
+):
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_tsrc(tsrc)
{
assert(tsrc != NULL);
- gui::IGUISkin *skin = Environment->getSkin();
+ gui::IGUISkin* skin = Environment->getSkin();
m_font = skin->getFont();
if (m_font) {
@@ -58,7 +62,8 @@ GUITable::GUITable(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
const s32 s = skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
m_scrollbar = new GUIScrollBar(Environment, this, -1,
- core::rect<s32>(RelativeRect.getWidth() - s, 0,
+ core::rect<s32>(RelativeRect.getWidth() - s,
+ 0,
RelativeRect.getWidth(),
RelativeRect.getHeight()),
false, true);
@@ -78,11 +83,11 @@ GUITable::GUITable(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
#endif
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density *
- g_settings->getFloat("gui_scaling");
+ g_settings->getFloat("gui_scaling");
m_scrollbar->setRelativePosition(core::rect<s32>(
- relative_rect.LowerRightCorner.X - width,
- relative_rect.UpperLeftCorner.Y, relative_rect.LowerRightCorner.X,
- relative_rect.LowerRightCorner.Y));
+ relative_rect.LowerRightCorner.X-width,relative_rect.UpperLeftCorner.Y,
+ relative_rect.LowerRightCorner.X,relative_rect.LowerRightCorner.Y
+ ));
}
GUITable::~GUITable()
@@ -103,10 +108,12 @@ GUITable::Option GUITable::splitOption(const std::string &str)
if (equal_pos == std::string::npos)
return GUITable::Option(str, "");
- return GUITable::Option(str.substr(0, equal_pos), str.substr(equal_pos + 1));
+ return GUITable::Option(str.substr(0, equal_pos),
+ str.substr(equal_pos + 1));
}
-void GUITable::setTextList(const std::vector<std::string> &content, bool transparent)
+void GUITable::setTextList(const std::vector<std::string> &content,
+ bool transparent)
{
clear();
@@ -120,7 +127,7 @@ void GUITable::setTextList(const std::vector<std::string> &content, bool transpa
s32 empty_string_index = allocString("");
m_rows.resize(content.size());
- for (s32 i = 0; i < (s32)content.size(); ++i) {
+ for (s32 i = 0; i < (s32) content.size(); ++i) {
Row *row = &m_rows[i];
row->cells = new Cell[1];
row->cellcount = 1;
@@ -130,7 +137,7 @@ void GUITable::setTextList(const std::vector<std::string> &content, bool transpa
Cell *cell = row->cells;
cell->xmin = 0;
- cell->xmax = 0x7fff; // something large enough
+ cell->xmax = 0x7fff; // something large enough
cell->xpos = 6;
cell->content_type = COLUMN_TYPE_TEXT;
cell->content_index = empty_string_index;
@@ -144,15 +151,19 @@ void GUITable::setTextList(const std::vector<std::string> &content, bool transpa
if (s[0] == '#' && s[1] == '#') {
// double # to escape
cell->content_index = allocString(s.substr(2));
- } else if (s[0] == '#' && s.size() >= 7 &&
- parseColorString(s.substr(0, 7), cell->color, false)) {
+ }
+ else if (s[0] == '#' && s.size() >= 7 &&
+ parseColorString(
+ s.substr(0,7), cell->color, false)) {
// single # for color
cell->color_defined = true;
cell->content_index = allocString(s.substr(7));
- } else {
+ }
+ else {
// no #, just text
cell->content_index = allocString(s);
}
+
}
allocationComplete();
@@ -161,7 +172,8 @@ void GUITable::setTextList(const std::vector<std::string> &content, bool transpa
updateScrollBar();
}
-void GUITable::setTable(const TableOptions &options, const TableColumns &columns,
+void GUITable::setTable(const TableOptions &options,
+ const TableColumns &columns,
std::vector<std::string> &content)
{
clear();
@@ -200,8 +212,8 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
else if (name == "opendepth")
opendepth = stoi(value);
else
- errorstream << "Invalid table option: \"" << name << "\""
- << " (value=\"" << value << "\")" << std::endl;
+ errorstream<<"Invalid table option: \""<<name<<"\""
+ <<" (value=\""<<value<<"\")"<<std::endl;
}
// Get number of columns and rows
@@ -213,12 +225,11 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
assert(rowcount >= 0);
// Append empty strings to content if there is an incomplete row
s32 cellcount = rowcount * colcount;
- while (content.size() < (u32)cellcount)
+ while (content.size() < (u32) cellcount)
content.emplace_back("");
// Create temporary rows (for processing columns)
- struct TempRow
- {
+ struct TempRow {
// Current horizontal position (may different between rows due
// to indent/tree columns, or text/image columns with width<0)
s32 x;
@@ -231,9 +242,9 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
// Vector of completed cells in this row
std::vector<Cell> cells;
// Stores colors and how long they last (maximum column index)
- std::vector<std::pair<video::SColor, s32>> colors;
+ std::vector<std::pair<video::SColor, s32> > colors;
- TempRow() : x(0), indent(0), content_index(0), content_width(0) {}
+ TempRow(): x(0), indent(0), content_index(0), content_width(0) {}
};
TempRow *rows = new TempRow[rowcount];
@@ -262,8 +273,8 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
else if (columns[j].type == "tree")
columntype = COLUMN_TYPE_TREE;
else
- errorstream << "Invalid table column type: \"" << columns[j].type
- << "\"" << std::endl;
+ errorstream<<"Invalid table column type: \""
+ <<columns[j].type<<"\""<<std::endl;
// Process column options
s32 padding = myround(0.5 * em);
@@ -275,7 +286,8 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
if (columntype == COLUMN_TYPE_INDENT) {
padding = 0; // default indent padding
}
- if (columntype == COLUMN_TYPE_INDENT || columntype == COLUMN_TYPE_TREE) {
+ if (columntype == COLUMN_TYPE_INDENT ||
+ columntype == COLUMN_TYPE_TREE) {
width = myround(em * 1.5); // default indent width
}
@@ -298,16 +310,17 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
width = myround(stof(value) * em);
else if (name == "span" && columntype == COLUMN_TYPE_COLOR)
span = stoi(value);
- else if (columntype == COLUMN_TYPE_IMAGE && !name.empty() &&
+ else if (columntype == COLUMN_TYPE_IMAGE &&
+ !name.empty() &&
string_allowed(name, "0123456789")) {
s32 content_index = allocImage(value);
active_image_indices.insert(std::make_pair(
- stoi(name), content_index));
- } else {
- errorstream << "Invalid table column option: \"" << name
- << "\""
- << " (value=\"" << value << "\")"
- << std::endl;
+ stoi(name),
+ content_index));
+ }
+ else {
+ errorstream<<"Invalid table column option: \""<<name<<"\""
+ <<" (value=\""<<value<<"\")"<<std::endl;
}
}
@@ -316,8 +329,7 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
if (columntype == COLUMN_TYPE_TEXT) {
for (s32 i = 0; i < rowcount; ++i) {
TempRow *row = &rows[i];
- while (!row->colors.empty() &&
- row->colors.back().second < j)
+ while (!row->colors.empty() && row->colors.back().second < j)
row->colors.pop_back();
}
}
@@ -326,20 +338,17 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
Cell newcell;
newcell.content_type = columntype;
newcell.tooltip_index = tooltip_index;
- newcell.reported_column = j + 1;
+ newcell.reported_column = j+1;
if (columntype == COLUMN_TYPE_TEXT) {
// Find right edge of column
s32 xmax = 0;
for (s32 i = 0; i < rowcount; ++i) {
TempRow *row = &rows[i];
- row->content_index =
- allocString(content[i * colcount + j]);
+ row->content_index = allocString(content[i * colcount + j]);
const core::stringw &text = m_strings[row->content_index];
- row->content_width =
- m_font ? m_font->getDimension(text.c_str())
- .Width
- : 0;
+ row->content_width = m_font ?
+ m_font->getDimension(text.c_str()).Width : 0;
row->content_width = MYMAX(row->content_width, width);
s32 row_xmax = row->x + padding + row->content_width;
xmax = MYMAX(xmax, row_xmax);
@@ -347,8 +356,7 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
// Add a new cell (of text type) to each row
for (s32 i = 0; i < rowcount; ++i) {
newcell.xmin = rows[i].x + padding;
- alignContent(&newcell, xmax, rows[i].content_width,
- align);
+ alignContent(&newcell, xmax, rows[i].content_width, align);
newcell.content_index = rows[i].content_index;
newcell.color_defined = !rows[i].colors.empty();
if (newcell.color_defined)
@@ -356,7 +364,8 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
rows[i].cells.push_back(newcell);
rows[i].x = newcell.xmax;
}
- } else if (columntype == COLUMN_TYPE_IMAGE) {
+ }
+ else if (columntype == COLUMN_TYPE_IMAGE) {
// Find right edge of column
s32 xmax = 0;
for (s32 i = 0; i < rowcount; ++i) {
@@ -367,7 +376,7 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
// column options so check active_image_indices.
s32 image_index = stoi(content[i * colcount + j]);
std::map<s32, s32>::iterator image_iter =
- active_image_indices.find(image_index);
+ active_image_indices.find(image_index);
if (image_iter != active_image_indices.end())
row->content_index = image_iter->second;
@@ -377,9 +386,7 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
image = m_images[row->content_index];
// Get content width and update xmax
- row->content_width =
- image ? image->getOriginalSize().Width
- : 0;
+ row->content_width = image ? image->getOriginalSize().Width : 0;
row->content_width = MYMAX(row->content_width, width);
s32 row_xmax = row->x + padding + row->content_width;
xmax = MYMAX(xmax, row_xmax);
@@ -387,28 +394,27 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
// Add a new cell (of image type) to each row
for (s32 i = 0; i < rowcount; ++i) {
newcell.xmin = rows[i].x + padding;
- alignContent(&newcell, xmax, rows[i].content_width,
- align);
+ alignContent(&newcell, xmax, rows[i].content_width, align);
newcell.content_index = rows[i].content_index;
rows[i].cells.push_back(newcell);
rows[i].x = newcell.xmax;
}
active_image_indices.clear();
- } else if (columntype == COLUMN_TYPE_COLOR) {
+ }
+ else if (columntype == COLUMN_TYPE_COLOR) {
for (s32 i = 0; i < rowcount; ++i) {
video::SColor cellcolor(255, 255, 255, 255);
- if (parseColorString(content[i * colcount + j], cellcolor,
- true))
- rows[i].colors.emplace_back(cellcolor, j + span);
+ if (parseColorString(content[i * colcount + j], cellcolor, true))
+ rows[i].colors.emplace_back(cellcolor, j+span);
}
- } else if (columntype == COLUMN_TYPE_INDENT ||
+ }
+ else if (columntype == COLUMN_TYPE_INDENT ||
columntype == COLUMN_TYPE_TREE) {
// For column type "tree", reserve additional space for +/-
// Also enable special processing for treeview-type tables
s32 content_width = 0;
if (columntype == COLUMN_TYPE_TREE) {
- content_width = m_font ? m_font->getDimension(L"+").Width
- : 0;
+ content_width = m_font ? m_font->getDimension(L"+").Width : 0;
m_has_tree_column = true;
}
// Add a new cell (of indent or tree type) to each row
@@ -440,7 +446,7 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
Row *row = &m_rows[i];
row->cellcount = rows[i].cells.size();
row->cells = new Cell[row->cellcount];
- memcpy((void *)row->cells, (void *)&rows[i].cells[0],
+ memcpy((void*) row->cells, (void*) &rows[i].cells[0],
row->cellcount * sizeof(Cell));
row->indent = rows[i].indent;
row->visible_index = i;
@@ -451,12 +457,10 @@ void GUITable::setTable(const TableOptions &options, const TableColumns &columns
if (m_has_tree_column) {
// Treeview: convert tree to indent cells on leaf rows
for (s32 i = 0; i < rowcount; ++i) {
- if (i == rowcount - 1 || m_rows[i].indent >= m_rows[i + 1].indent)
+ if (i == rowcount-1 || m_rows[i].indent >= m_rows[i+1].indent)
for (s32 j = 0; j < m_rows[i].cellcount; ++j)
- if (m_rows[i].cells[j].content_type ==
- COLUMN_TYPE_TREE)
- m_rows[i].cells[j].content_type =
- COLUMN_TYPE_INDENT;
+ if (m_rows[i].cells[j].content_type == COLUMN_TYPE_TREE)
+ m_rows[i].cells[j].content_type = COLUMN_TYPE_INDENT;
}
// Treeview: close rows according to opendepth option
@@ -485,9 +489,9 @@ void GUITable::clear()
// Get colors from skin
gui::IGUISkin *skin = Environment->getSkin();
- m_color = skin->getColor(gui::EGDC_BUTTON_TEXT);
- m_background = skin->getColor(gui::EGDC_3D_HIGH_LIGHT);
- m_highlight = skin->getColor(gui::EGDC_HIGH_LIGHT);
+ m_color = skin->getColor(gui::EGDC_BUTTON_TEXT);
+ m_background = skin->getColor(gui::EGDC_3D_HIGH_LIGHT);
+ m_highlight = skin->getColor(gui::EGDC_HIGH_LIGHT);
m_highlight_text = skin->getColor(gui::EGDC_HIGH_LIGHT_TEXT);
// Reset members
@@ -516,14 +520,15 @@ std::string GUITable::checkEvent()
std::ostringstream os(std::ios::binary);
if (m_sel_doubleclick) {
- os << "DCL:";
+ os<<"DCL:";
m_sel_doubleclick = false;
- } else {
- os << "CHG:";
}
- os << sel;
+ else {
+ os<<"CHG:";
+ }
+ os<<sel;
if (!m_is_textlist) {
- os << ":" << m_sel_column;
+ os<<":"<<m_sel_column;
}
return os.str();
}
@@ -533,7 +538,7 @@ s32 GUITable::getSelected() const
if (m_selected < 0)
return 0;
- assert(m_selected >= 0 && m_selected < (s32)m_visible_rows.size());
+ assert(m_selected >= 0 && m_selected < (s32) m_visible_rows.size());
return m_visible_rows[m_selected] + 1;
}
@@ -573,7 +578,7 @@ void GUITable::setSelected(s32 index)
if (index >= 0) {
m_selected = m_rows[index].visible_index;
- assert(m_selected >= 0 && m_selected < (s32)m_visible_rows.size());
+ assert(m_selected >= 0 && m_selected < (s32) m_visible_rows.size());
}
if (m_selected != old_selected || selection_invisible) {
@@ -608,7 +613,7 @@ void GUITable::setDynamicData(const DynamicData &dyndata)
m_scrollbar->setPos(dyndata.scrollpos);
}
-const c8 *GUITable::getTypeName() const
+const c8* GUITable::getTypeName() const
{
return "GUITable";
}
@@ -630,11 +635,12 @@ void GUITable::draw()
bool draw_background = m_background.getAlpha() > 0;
if (m_border)
- skin->draw3DSunkenPane(this, m_background, true, draw_background,
+ skin->draw3DSunkenPane(this, m_background,
+ true, draw_background,
AbsoluteRect, &AbsoluteClippingRect);
else if (draw_background)
- skin->draw2DRectangle(
- this, m_background, AbsoluteRect, &AbsoluteClippingRect);
+ skin->draw2DRectangle(this, m_background,
+ AbsoluteRect, &AbsoluteClippingRect);
// get clipping rect
@@ -653,12 +659,14 @@ void GUITable::draw()
s32 scrollpos = m_scrollbar->getPos();
s32 row_min = scrollpos / m_rowheight;
- s32 row_max = (scrollpos + AbsoluteRect.getHeight() - 1) / m_rowheight + 1;
- row_max = MYMIN(row_max, (s32)m_visible_rows.size());
+ s32 row_max = (scrollpos + AbsoluteRect.getHeight() - 1)
+ / m_rowheight + 1;
+ row_max = MYMIN(row_max, (s32) m_visible_rows.size());
core::rect<s32> row_rect(AbsoluteRect);
if (m_scrollbar->isVisible())
- row_rect.LowerRightCorner.X -= skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
+ row_rect.LowerRightCorner.X -=
+ skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
row_rect.UpperLeftCorner.Y += row_min * m_rowheight - scrollpos;
row_rect.LowerRightCorner.Y = row_rect.UpperLeftCorner.Y + m_rowheight;
@@ -684,27 +692,33 @@ void GUITable::draw()
}
void GUITable::drawCell(const Cell *cell, video::SColor color,
- const core::rect<s32> &row_rect, const core::rect<s32> &client_clip)
+ const core::rect<s32> &row_rect,
+ const core::rect<s32> &client_clip)
{
- if ((cell->content_type == COLUMN_TYPE_TEXT) ||
- (cell->content_type == COLUMN_TYPE_TREE)) {
+ if ((cell->content_type == COLUMN_TYPE_TEXT)
+ || (cell->content_type == COLUMN_TYPE_TREE)) {
core::rect<s32> text_rect = row_rect;
- text_rect.UpperLeftCorner.X = row_rect.UpperLeftCorner.X + cell->xpos;
- text_rect.LowerRightCorner.X = row_rect.UpperLeftCorner.X + cell->xmax;
+ text_rect.UpperLeftCorner.X = row_rect.UpperLeftCorner.X
+ + cell->xpos;
+ text_rect.LowerRightCorner.X = row_rect.UpperLeftCorner.X
+ + cell->xmax;
if (cell->color_defined)
color = cell->color;
if (m_font) {
if (cell->content_type == COLUMN_TYPE_TEXT)
- m_font->draw(m_strings[cell->content_index], text_rect,
- color, false, true, &client_clip);
+ m_font->draw(m_strings[cell->content_index],
+ text_rect, color,
+ false, true, &client_clip);
else // tree
- m_font->draw(cell->content_index ? L"+" : L"-", text_rect,
- color, false, true, &client_clip);
+ m_font->draw(cell->content_index ? L"+" : L"-",
+ text_rect, color,
+ false, true, &client_clip);
}
- } else if (cell->content_type == COLUMN_TYPE_IMAGE) {
+ }
+ else if (cell->content_type == COLUMN_TYPE_IMAGE) {
if (cell->content_index < 0)
return;
@@ -713,9 +727,11 @@ void GUITable::drawCell(const Cell *cell, video::SColor color,
video::ITexture *image = m_images[cell->content_index];
if (image) {
- core::position2d<s32> dest_pos = row_rect.UpperLeftCorner;
+ core::position2d<s32> dest_pos =
+ row_rect.UpperLeftCorner;
dest_pos.X += cell->xpos;
- core::rect<s32> source_rect(core::position2d<s32>(0, 0),
+ core::rect<s32> source_rect(
+ core::position2d<s32>(0, 0),
image->getOriginalSize());
s32 imgh = source_rect.LowerRightCorner.Y;
s32 rowh = row_rect.getHeight();
@@ -726,8 +742,8 @@ void GUITable::drawCell(const Cell *cell, video::SColor color,
video::SColor color(255, 255, 255, 255);
- driver->draw2DImage(image, dest_pos, source_rect, &client_clip,
- color, true);
+ driver->draw2DImage(image, dest_pos, source_rect,
+ &client_clip, color, true);
}
}
}
@@ -738,41 +754,40 @@ bool GUITable::OnEvent(const SEvent &event)
return IGUIElement::OnEvent(event);
if (event.EventType == EET_KEY_INPUT_EVENT) {
- if (event.KeyInput.PressedDown &&
- (event.KeyInput.Key == KEY_DOWN ||
- event.KeyInput.Key == KEY_UP ||
- event.KeyInput.Key == KEY_HOME ||
- event.KeyInput.Key == KEY_END ||
- event.KeyInput.Key == KEY_NEXT ||
- event.KeyInput.Key == KEY_PRIOR)) {
+ if (event.KeyInput.PressedDown && (
+ event.KeyInput.Key == KEY_DOWN ||
+ event.KeyInput.Key == KEY_UP ||
+ event.KeyInput.Key == KEY_HOME ||
+ event.KeyInput.Key == KEY_END ||
+ event.KeyInput.Key == KEY_NEXT ||
+ event.KeyInput.Key == KEY_PRIOR)) {
s32 offset = 0;
switch (event.KeyInput.Key) {
- case KEY_DOWN:
- offset = 1;
- break;
- case KEY_UP:
- offset = -1;
- break;
- case KEY_HOME:
- offset = -(s32)m_visible_rows.size();
- break;
- case KEY_END:
- offset = m_visible_rows.size();
- break;
- case KEY_NEXT:
- offset = AbsoluteRect.getHeight() / m_rowheight;
- break;
- case KEY_PRIOR:
- offset = -(s32)(AbsoluteRect.getHeight() / m_rowheight);
- break;
- default:
- break;
+ case KEY_DOWN:
+ offset = 1;
+ break;
+ case KEY_UP:
+ offset = -1;
+ break;
+ case KEY_HOME:
+ offset = - (s32) m_visible_rows.size();
+ break;
+ case KEY_END:
+ offset = m_visible_rows.size();
+ break;
+ case KEY_NEXT:
+ offset = AbsoluteRect.getHeight() / m_rowheight;
+ break;
+ case KEY_PRIOR:
+ offset = - (s32) (AbsoluteRect.getHeight() / m_rowheight);
+ break;
+ default:
+ break;
}
s32 old_selected = m_selected;
s32 rowcount = m_visible_rows.size();
if (rowcount != 0) {
- m_selected = rangelim(
- m_selected + offset, 0, rowcount - 1);
+ m_selected = rangelim(m_selected + offset, 0, rowcount-1);
autoScroll();
}
@@ -782,24 +797,27 @@ bool GUITable::OnEvent(const SEvent &event)
return true;
}
- if (event.KeyInput.PressedDown &&
- (event.KeyInput.Key == KEY_LEFT ||
- event.KeyInput.Key == KEY_RIGHT)) {
+ if (event.KeyInput.PressedDown && (
+ event.KeyInput.Key == KEY_LEFT ||
+ event.KeyInput.Key == KEY_RIGHT)) {
// Open/close subtree via keyboard
if (m_selected >= 0) {
int dir = event.KeyInput.Key == KEY_LEFT ? -1 : 1;
toggleVisibleTree(m_selected, dir, true);
}
return true;
- } else if (!event.KeyInput.PressedDown &&
- (event.KeyInput.Key == KEY_RETURN ||
- event.KeyInput.Key == KEY_SPACE)) {
+ }
+ else if (!event.KeyInput.PressedDown && (
+ event.KeyInput.Key == KEY_RETURN ||
+ event.KeyInput.Key == KEY_SPACE)) {
sendTableEvent(0, true);
return true;
- } else if (event.KeyInput.Key == KEY_ESCAPE ||
+ }
+ else if (event.KeyInput.Key == KEY_ESCAPE ||
event.KeyInput.Key == KEY_SPACE) {
// pass to parent
- } else if (event.KeyInput.PressedDown && event.KeyInput.Char) {
+ }
+ else if (event.KeyInput.PressedDown && event.KeyInput.Char) {
// change selection based on text as it is typed
u64 now = porting::getTimeMs();
if (now - m_keynav_time >= 500)
@@ -808,13 +826,12 @@ bool GUITable::OnEvent(const SEvent &event)
// add to key buffer if not a key repeat
if (!(m_keynav_buffer.size() == 1 &&
- m_keynav_buffer[0] == event.KeyInput.Char)) {
+ m_keynav_buffer[0] == event.KeyInput.Char)) {
m_keynav_buffer.append(event.KeyInput.Char);
}
// find the selected item, starting at the current selection
- // don't change selection if the key buffer matches the current
- // item
+ // don't change selection if the key buffer matches the current item
s32 old_selected = m_selected;
s32 start = MYMAX(m_selected, 0);
s32 rowcount = m_visible_rows.size();
@@ -839,8 +856,8 @@ bool GUITable::OnEvent(const SEvent &event)
if (event.MouseInput.Event == EMIE_MOUSE_WHEEL) {
m_scrollbar->setPos(m_scrollbar->getPos() +
- (event.MouseInput.Wheel < 0 ? -3 : 3) *
- -(s32)m_rowheight / 2);
+ (event.MouseInput.Wheel < 0 ? -3 : 3) *
+ - (s32) m_rowheight / 2);
return true;
}
@@ -861,24 +878,24 @@ bool GUITable::OnEvent(const SEvent &event)
// IGUIScrollBar passes double click events to its parent,
// which we don't want. Detect this case and discard the event
if (event.MouseInput.Event != EMIE_MOUSE_MOVED &&
- m_scrollbar->isVisible() && m_scrollbar->isPointInside(p))
+ m_scrollbar->isVisible() &&
+ m_scrollbar->isPointInside(p))
return true;
if (event.MouseInput.isLeftPressed() &&
- (isPointInside(p) || event.MouseInput.Event ==
- EMIE_MOUSE_MOVED)) {
+ (isPointInside(p) ||
+ event.MouseInput.Event == EMIE_MOUSE_MOVED)) {
s32 sel_column = 0;
- bool sel_doubleclick = (event.MouseInput.Event ==
- EMIE_LMOUSE_DOUBLE_CLICK);
+ bool sel_doubleclick = (event.MouseInput.Event
+ == EMIE_LMOUSE_DOUBLE_CLICK);
bool plusminus_clicked = false;
// For certain events (left click), report column
// Also open/close subtrees when the +/- is clicked
- if (cell && (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN ||
- event.MouseInput.Event ==
- EMIE_LMOUSE_DOUBLE_CLICK ||
- event.MouseInput.Event ==
- EMIE_LMOUSE_TRIPLE_CLICK)) {
+ if (cell && (
+ event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN ||
+ event.MouseInput.Event == EMIE_LMOUSE_DOUBLE_CLICK ||
+ event.MouseInput.Event == EMIE_LMOUSE_TRIPLE_CLICK)) {
sel_column = cell->reported_column;
if (cell->content_type == COLUMN_TYPE_TREE)
plusminus_clicked = true;
@@ -888,13 +905,15 @@ bool GUITable::OnEvent(const SEvent &event)
if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
toggleVisibleTree(row_i, 0, false);
}
- } else {
+ }
+ else {
// Normal selection
s32 old_selected = m_selected;
m_selected = row_i;
autoScroll();
- if (m_selected != old_selected || sel_column >= 1 ||
+ if (m_selected != old_selected ||
+ sel_column >= 1 ||
sel_doubleclick) {
sendTableEvent(sel_column, sel_doubleclick);
}
@@ -956,9 +975,9 @@ void GUITable::allocationComplete()
m_alloc_images.clear();
}
-const GUITable::Row *GUITable::getRow(s32 i) const
+const GUITable::Row* GUITable::getRow(s32 i) const
{
- if (i >= 0 && i < (s32)m_visible_rows.size())
+ if (i >= 0 && i < (s32) m_visible_rows.size())
return &m_rows[m_visible_rows[i]];
return NULL;
@@ -974,8 +993,7 @@ bool GUITable::doesRowStartWith(const Row *row, const core::stringw &str) const
if (cell->content_type == COLUMN_TYPE_TEXT) {
const core::stringw &cellstr = m_strings[cell->content_index];
if (cellstr.size() >= str.size() &&
- str.equals_ignore_case(
- cellstr.subString(0, str.size())))
+ str.equals_ignore_case(cellstr.subString(0, str.size())))
return true;
}
}
@@ -1028,7 +1046,8 @@ s32 GUITable::getCellAt(s32 x, s32 row_i) const
jmin = pivot + 1;
}
- if (jmin >= 0 && jmin < row->cellcount && rel_x >= row->cells[jmin].xmin &&
+ if (jmin >= 0 && jmin < row->cellcount &&
+ rel_x >= row->cells[jmin].xmin &&
rel_x <= row->cells[jmin].xmax)
return jmin;
@@ -1079,8 +1098,8 @@ void GUITable::getOpenedTrees(std::set<s32> &opened_trees) const
opened_trees.clear();
s32 rowcount = m_rows.size();
for (s32 i = 0; i < rowcount - 1; ++i) {
- if (m_rows[i].indent < m_rows[i + 1].indent &&
- m_rows[i + 1].visible_index != -2)
+ if (m_rows[i].indent < m_rows[i+1].indent &&
+ m_rows[i+1].visible_index != -2)
opened_trees.insert(i);
}
}
@@ -1112,16 +1131,18 @@ void GUITable::setOpenedTrees(const std::set<s32> &opened_trees)
// Visible row
row->visible_index = m_visible_rows.size();
m_visible_rows.push_back(i);
- } else if (parents.back() == closed_parents.back()) {
+ }
+ else if (parents.back() == closed_parents.back()) {
// Invisible row, direct parent is closed
row->visible_index = -2;
- } else {
+ }
+ else {
// Invisible row, direct parent is open, some ancestor is closed
row->visible_index = -1;
}
// If not a leaf, add to parents list
- if (i < m_rows.size() - 1 && row->indent < m_rows[i + 1].indent) {
+ if (i < m_rows.size()-1 && row->indent < m_rows[i+1].indent) {
parents.push_back(i);
s32 content_index = 0; // "-", open
@@ -1199,13 +1220,14 @@ void GUITable::toggleVisibleTree(s32 row_i, int dir, bool move_selection)
const Row *maybe_child = getRow(sel + 1);
if (maybe_child && maybe_child->indent > row->indent)
sel++;
- } else if (!was_open && !do_open) {
+ }
+ else if (!was_open && !do_open) {
// Move selection to parent
assert(getRow(sel) != NULL);
while (sel > 0 && getRow(sel - 1)->indent >= row->indent)
sel--;
sel--;
- if (sel < 0) // was root already selected?
+ if (sel < 0) // was root already selected?
sel = row_i;
}
if (sel != m_selected) {
@@ -1223,13 +1245,16 @@ void GUITable::alignContent(Cell *cell, s32 xmax, s32 content_width, s32 align)
if (align == 0) {
cell->xpos = cell->xmin;
cell->xmax = xmax;
- } else if (align == 1) {
+ }
+ else if (align == 1) {
cell->xpos = (cell->xmin + xmax - content_width) / 2;
cell->xmax = xmax;
- } else if (align == 2) {
+ }
+ else if (align == 2) {
cell->xpos = xmax - content_width;
cell->xmax = xmax;
- } else {
+ }
+ else {
// inline alignment: the cells of the column don't have an aligned
// right border, the right border of each cell depends on the content
cell->xpos = cell->xmin;
diff --git a/src/gui/guiTable.h b/src/gui/guiTable.h
index 95cf05922..11093ea72 100644
--- a/src/gui/guiTable.h
+++ b/src/gui/guiTable.h
@@ -67,9 +67,9 @@ public:
std::string value;
Option(const std::string &name_, const std::string &value_) :
- name(name_), value(value_)
- {
- }
+ name(name_),
+ value(value_)
+ {}
};
/*
@@ -87,8 +87,11 @@ public:
};
typedef std::vector<TableColumn> TableColumns;
- GUITable(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- core::rect<s32> rectangle, ISimpleTextureSource *tsrc);
+
+ GUITable(gui::IGUIEnvironment *env,
+ gui::IGUIElement *parent, s32 id,
+ core::rect<s32> rectangle,
+ ISimpleTextureSource *tsrc);
virtual ~GUITable();
@@ -96,11 +99,13 @@ public:
static Option splitOption(const std::string &str);
/* Set textlist-like options, columns and data */
- void setTextList(const std::vector<std::string> &content, bool transparent);
+ void setTextList(const std::vector<std::string> &content,
+ bool transparent);
/* Set generic table options, columns and content */
// Adds empty strings to end of content if there is an incomplete row
- void setTable(const TableOptions &options, const TableColumns &columns,
+ void setTable(const TableOptions &options,
+ const TableColumns &columns,
std::vector<std::string> &content);
/* Clear the table */
@@ -125,7 +130,7 @@ public:
void setDynamicData(const DynamicData &dyndata);
/* Returns "GUITable" */
- virtual const c8 *getTypeName() const;
+ virtual const c8* getTypeName() const;
/* Must be called when position or size changes */
virtual void updateAbsolutePosition();
@@ -137,8 +142,7 @@ public:
virtual bool OnEvent(const SEvent &event);
protected:
- enum ColumnType
- {
+ enum ColumnType {
COLUMN_TYPE_TEXT,
COLUMN_TYPE_IMAGE,
COLUMN_TYPE_COLOR,
@@ -146,8 +150,7 @@ protected:
COLUMN_TYPE_TREE,
};
- struct Cell
- {
+ struct Cell {
s32 xmin;
s32 xmax;
s32 xpos;
@@ -159,8 +162,7 @@ protected:
s32 reported_column;
};
- struct Row
- {
+ struct Row {
Cell *cells;
s32 cellcount;
s32 indent;
@@ -201,7 +203,7 @@ protected:
// Allocated strings and images
std::vector<core::stringw> m_strings;
- std::vector<video::ITexture *> m_images;
+ std::vector<video::ITexture*> m_images;
std::map<std::string, s32> m_alloc_strings;
std::map<std::string, s32> m_alloc_images;
@@ -250,5 +252,6 @@ protected:
// Aligns cell content in column according to alignment specification
// align = 0: left aligned, 1: centered, 2: right aligned, 3: inline
- static void alignContent(Cell *cell, s32 xmax, s32 content_width, s32 align);
+ static void alignContent(Cell *cell, s32 xmax, s32 content_width,
+ s32 align);
};
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
index 12874594e..f17cfa986 100644
--- a/src/gui/guiVolumeChange.cpp
+++ b/src/gui/guiVolumeChange.cpp
@@ -36,10 +36,12 @@ const int ID_soundExitButton = 264;
const int ID_soundSlider = 265;
const int ID_soundMuteButton = 266;
-GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, ISimpleTextureSource *tsrc) :
- GUIModalMenu(env, parent, id, menumgr),
- m_tsrc(tsrc)
+GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id,
+ IMenuManager *menumgr, ISimpleTextureSource *tsrc
+):
+ GUIModalMenu(env, parent, id, menumgr),
+ m_tsrc(tsrc)
{
}
@@ -73,9 +75,12 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
Calculate new sizes and positions
*/
const float s = m_gui_scale;
- DesiredRect = core::rect<s32>(screensize.X / 2 - 380 * s / 2,
- screensize.Y / 2 - 200 * s / 2, screensize.X / 2 + 380 * s / 2,
- screensize.Y / 2 + 200 * s / 2);
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 380 * s / 2,
+ screensize.Y / 2 - 200 * s / 2,
+ screensize.X / 2 + 380 * s / 2,
+ screensize.Y / 2 + 200 * s / 2
+ );
recalculateAbsolutePosition(false);
v2s32 size = DesiredRect.getSize();
@@ -90,25 +95,24 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
const wchar_t *text = wgettext("Sound Volume: ");
core::stringw volume_text = text;
- delete[] text;
+ delete [] text;
volume_text += core::stringw(volume) + core::stringw("%");
- Environment->addStaticText(volume_text.c_str(), rect, false, true, this,
- ID_soundText);
+ Environment->addStaticText(volume_text.c_str(), rect, false,
+ true, this, ID_soundText);
}
{
core::rect<s32> rect(0, 0, 80 * s, 30 * s);
rect = rect + v2s32(size.X / 2 - 80 * s / 2, size.Y / 2 + 55 * s);
const wchar_t *text = wgettext("Exit");
- GUIButton::addButton(Environment, rect, m_tsrc, this, ID_soundExitButton,
- text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, ID_soundExitButton, text);
delete[] text;
}
{
core::rect<s32> rect(0, 0, 300 * s, 20 * s);
rect = rect + v2s32(size.X / 2 - 150 * s, size.Y / 2);
- gui::IGUIScrollBar *e = Environment->addScrollBar(
- true, rect, this, ID_soundSlider);
+ gui::IGUIScrollBar *e = Environment->addScrollBar(true,
+ rect, this, ID_soundSlider);
e->setMax(100);
e->setPos(volume);
}
@@ -124,16 +128,16 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
void GUIVolumeChange::drawMenu()
{
- gui::IGUISkin *skin = Environment->getSkin();
+ gui::IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ video::IVideoDriver* driver = Environment->getVideoDriver();
video::SColor bgcolor(140, 0, 0, 0);
driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
gui::IGUIElement::draw();
}
-bool GUIVolumeChange::OnEvent(const SEvent &event)
+bool GUIVolumeChange::OnEvent(const SEvent& event)
{
if (event.EventType == EET_KEY_INPUT_EVENT) {
if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) {
@@ -149,8 +153,7 @@ bool GUIVolumeChange::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) {
gui::IGUIElement *e = getElementFromId(ID_soundMuteButton);
if (e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) {
- g_settings->setBool("mute_sound",
- ((gui::IGUICheckBox *)e)->isChecked());
+ g_settings->setBool("mute_sound", ((gui::IGUICheckBox*)e)->isChecked());
}
Environment->setFocus(this);
@@ -165,32 +168,31 @@ bool GUIVolumeChange::OnEvent(const SEvent &event)
Environment->setFocus(this);
}
- if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
- isVisible()) {
+ if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
+ && isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- infostream << "GUIVolumeChange: Not allowing focus "
- "change."
- << std::endl;
+ infostream << "GUIVolumeChange: Not allowing focus change."
+ << std::endl;
// Returning true disables focus change
return true;
}
}
if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
if (event.GUIEvent.Caller->getID() == ID_soundSlider) {
- s32 pos = ((gui::IGUIScrollBar *)event.GUIEvent.Caller)
- ->getPos();
- g_settings->setFloat("sound_volume", (float)pos / 100);
+ s32 pos = ((gui::IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
+ g_settings->setFloat("sound_volume", (float) pos / 100);
gui::IGUIElement *e = getElementFromId(ID_soundText);
const wchar_t *text = wgettext("Sound Volume: ");
core::stringw volume_text = text;
- delete[] text;
+ delete [] text;
volume_text += core::stringw(pos) + core::stringw("%");
e->setText(volume_text.c_str());
return true;
}
}
+
}
return Parent ? Parent->OnEvent(event) : false;
diff --git a/src/gui/guiVolumeChange.h b/src/gui/guiVolumeChange.h
index f1347a491..466e17f9d 100644
--- a/src/gui/guiVolumeChange.h
+++ b/src/gui/guiVolumeChange.h
@@ -28,7 +28,8 @@ class ISimpleTextureSource;
class GUIVolumeChange : public GUIModalMenu
{
public:
- GUIVolumeChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
+ GUIVolumeChange(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr, ISimpleTextureSource *tsrc);
~GUIVolumeChange();
@@ -40,7 +41,7 @@ public:
void drawMenu();
- bool OnEvent(const SEvent &event);
+ bool OnEvent(const SEvent& event);
bool pausesGame() { return true; }
diff --git a/src/gui/intlGUIEditBox.cpp b/src/gui/intlGUIEditBox.cpp
index 1c8bb64de..10395423c 100644
--- a/src/gui/intlGUIEditBox.cpp
+++ b/src/gui/intlGUIEditBox.cpp
@@ -45,8 +45,9 @@
todo:
optional scrollbars
ctrl+left/right to select word
- double click/ctrl click: word select + drag to select whole words, triple click to
- select line optional? dragging selected text numerical
+ double click/ctrl click: word select + drag to select whole words, triple click to select line
+ optional? dragging selected text
+ numerical
*/
namespace irr
@@ -55,16 +56,16 @@ namespace gui
{
//! constructor
-intlGUIEditBox::intlGUIEditBox(const wchar_t *text, bool border,
- IGUIEnvironment *environment, IGUIElement *parent, s32 id,
- const core::rect<s32> &rectangle, bool writable, bool has_vscrollbar) :
- IGUIEditBox(environment, parent, id, rectangle),
- Border(border), FrameRect(rectangle), m_scrollbar_width(0),
- m_vscrollbar(NULL), m_writable(writable)
+intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border,
+ IGUIEnvironment* environment, IGUIElement* parent, s32 id,
+ const core::rect<s32>& rectangle, bool writable, bool has_vscrollbar)
+ : IGUIEditBox(environment, parent, id, rectangle),
+ Border(border), FrameRect(rectangle),
+ m_scrollbar_width(0), m_vscrollbar(NULL), m_writable(writable)
{
-#ifdef _DEBUG
+ #ifdef _DEBUG
setDebugName("intlintlGUIEditBox");
-#endif
+ #endif
Text = text;
@@ -81,11 +82,12 @@ intlGUIEditBox::intlGUIEditBox(const wchar_t *text, bool border,
IGUISkin *skin = 0;
if (Environment)
skin = Environment->getSkin();
- if (Border && skin) {
- FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
- FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
- FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
- FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
+ if (Border && skin)
+ {
+ FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
+ FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
+ FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
+ FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
}
if (skin && has_vscrollbar) {
@@ -102,6 +104,7 @@ intlGUIEditBox::intlGUIEditBox(const wchar_t *text, bool border,
setWritable(writable);
}
+
//! destructor
intlGUIEditBox::~intlGUIEditBox()
{
@@ -115,8 +118,9 @@ intlGUIEditBox::~intlGUIEditBox()
m_vscrollbar->drop();
}
+
//! Sets another skin independent font.
-void intlGUIEditBox::setOverrideFont(IGUIFont *font)
+void intlGUIEditBox::setOverrideFont(IGUIFont* font)
{
if (OverrideFont == font)
return;
@@ -132,17 +136,17 @@ void intlGUIEditBox::setOverrideFont(IGUIFont *font)
breakText();
}
-IGUIFont *intlGUIEditBox::getOverrideFont() const
+IGUIFont * intlGUIEditBox::getOverrideFont() const
{
return OverrideFont;
}
//! Get the font which is used right now for drawing
-IGUIFont *intlGUIEditBox::getActiveFont() const
+IGUIFont* intlGUIEditBox::getActiveFont() const
{
- if (OverrideFont)
+ if ( OverrideFont )
return OverrideFont;
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (skin)
return skin->getFont();
return 0;
@@ -189,37 +193,44 @@ void intlGUIEditBox::setWordWrap(bool enable)
breakText();
}
+
void intlGUIEditBox::updateAbsolutePosition()
{
- core::rect<s32> oldAbsoluteRect(AbsoluteRect);
+ core::rect<s32> oldAbsoluteRect(AbsoluteRect);
IGUIElement::updateAbsolutePosition();
- if (oldAbsoluteRect != AbsoluteRect) {
- breakText();
+ if ( oldAbsoluteRect != AbsoluteRect )
+ {
+ breakText();
}
}
+
//! Checks if word wrap is enabled
bool intlGUIEditBox::isWordWrapEnabled() const
{
return WordWrap;
}
+
//! Enables or disables newlines.
void intlGUIEditBox::setMultiLine(bool enable)
{
MultiLine = enable;
}
+
//! Checks if multi line editing is enabled
bool intlGUIEditBox::isMultiLineEnabled() const
{
return MultiLine;
}
+
void intlGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar)
{
PasswordBox = passwordBox;
- if (PasswordBox) {
+ if (PasswordBox)
+ {
PasswordChar = passwordChar;
setMultiLine(false);
setWordWrap(false);
@@ -227,11 +238,13 @@ void intlGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar)
}
}
+
bool intlGUIEditBox::isPasswordBox() const
{
return PasswordBox;
}
+
//! Sets text justification
void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical)
{
@@ -239,35 +252,40 @@ void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT
VAlign = vertical;
}
+
//! called if an event happened.
-bool intlGUIEditBox::OnEvent(const SEvent &event)
+bool intlGUIEditBox::OnEvent(const SEvent& event)
{
- if (IsEnabled) {
+ if (IsEnabled)
+ {
- switch (event.EventType) {
+ switch(event.EventType)
+ {
case EET_GUI_EVENT:
- if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) {
- if (event.GUIEvent.Caller == this) {
+ if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
+ {
+ if (event.GUIEvent.Caller == this)
+ {
MouseMarking = false;
- setTextMarkers(0, 0);
+ setTextMarkers(0,0);
}
}
break;
- case EET_KEY_INPUT_EVENT: {
+ case EET_KEY_INPUT_EVENT:
+ {
#if (defined(__linux__) || defined(__FreeBSD__)) || defined(__DragonFly__)
- // ################################################################
+ // ################################################################
// ValkaTR:
- // This part is the difference from the original intlGUIEditBox
- // It converts UTF-8 character into a UCS-2 (wchar_t)
- wchar_t wc = L'_';
- mbtowc(&wc, (char *)&event.KeyInput.Char,
- sizeof(event.KeyInput.Char));
+ // This part is the difference from the original intlGUIEditBox
+ // It converts UTF-8 character into a UCS-2 (wchar_t)
+ wchar_t wc = L'_';
+ mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
- // printf( "char: %lc (%u) \r\n", wc, wc );
+ //printf( "char: %lc (%u) \r\n", wc, wc );
- SEvent irrevent(event);
- irrevent.KeyInput.Char = wc;
- // ################################################################
+ SEvent irrevent(event);
+ irrevent.KeyInput.Char = wc;
+ // ################################################################
if (processKey(irrevent))
return true;
@@ -277,7 +295,7 @@ bool intlGUIEditBox::OnEvent(const SEvent &event)
#endif // defined(linux)
break;
- }
+ }
case EET_MOUSE_INPUT_EVENT:
if (processMouse(event))
return true;
@@ -290,7 +308,8 @@ bool intlGUIEditBox::OnEvent(const SEvent &event)
return IGUIElement::OnEvent(event);
}
-bool intlGUIEditBox::processKey(const SEvent &event)
+
+bool intlGUIEditBox::processKey(const SEvent& event)
{
if (!event.KeyInput.PressedDown)
return false;
@@ -301,14 +320,17 @@ bool intlGUIEditBox::processKey(const SEvent &event)
// control shortcut handling
- if (event.KeyInput.Control) {
+ if (event.KeyInput.Control)
+ {
// german backlash '\' entered with control + '?'
- if (event.KeyInput.Char == '\\') {
+ if ( event.KeyInput.Char == '\\' )
+ {
inputChar(event.KeyInput.Char);
return true;
}
- switch (event.KeyInput.Key) {
+ switch(event.KeyInput.Key)
+ {
case KEY_KEY_A:
// select all
newMarkBegin = 0;
@@ -316,11 +338,10 @@ bool intlGUIEditBox::processKey(const SEvent &event)
break;
case KEY_KEY_C:
// copy to clipboard
- if (!PasswordBox && Operator && MarkBegin != MarkEnd) {
- const s32 realmbgn =
- MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
- const s32 realmend =
- MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
+ if (!PasswordBox && Operator && MarkBegin != MarkEnd)
+ {
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
core::stringc s;
s = Text.subString(realmbgn, realmend - realmbgn).c_str();
@@ -330,23 +351,19 @@ bool intlGUIEditBox::processKey(const SEvent &event)
case KEY_KEY_X:
// cut to the clipboard
if (!PasswordBox && Operator && MarkBegin != MarkEnd) {
- const s32 realmbgn =
- MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
- const s32 realmend =
- MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// copy
core::stringc sc;
- sc = Text.subString(realmbgn, realmend - realmbgn)
- .c_str();
+ sc = Text.subString(realmbgn, realmend - realmbgn).c_str();
Operator->copyToClipboard(sc.c_str());
if (IsEnabled && m_writable) {
// delete
core::stringw s;
s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append( Text.subString(realmend, Text.size()-realmend) );
Text = s;
CursorPos = realmbgn;
@@ -361,43 +378,38 @@ bool intlGUIEditBox::processKey(const SEvent &event)
break;
// paste from the clipboard
- if (Operator) {
- const s32 realmbgn =
- MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
- const s32 realmend =
- MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
+ if (Operator)
+ {
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// add new character
- const c8 *p = Operator->getTextFromClipboard();
- if (p) {
- if (MarkBegin == MarkEnd) {
+ const c8* p = Operator->getTextFromClipboard();
+ if (p)
+ {
+ if (MarkBegin == MarkEnd)
+ {
// insert text
- core::stringw s = Text.subString(
- 0, CursorPos);
+ core::stringw s = Text.subString(0, CursorPos);
s.append(p);
- s.append(Text.subString(CursorPos,
- Text.size() - CursorPos));
+ s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
- if (!Max || s.size() <= Max) // thx to
- // Fish FH
- // for fix
+ if (!Max || s.size()<=Max) // thx to Fish FH for fix
{
Text = s;
s = p;
CursorPos += s.size();
}
- } else {
+ }
+ else
+ {
// replace text
- core::stringw s = Text.subString(
- 0, realmbgn);
+ core::stringw s = Text.subString(0, realmbgn);
s.append(p);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
+ s.append( Text.subString(realmend, Text.size()-realmend) );
- if (!Max || s.size() <= Max) // thx to
- // Fish FH
- // for fix
+ if (!Max || s.size()<=Max) // thx to Fish FH for fix
{
Text = s;
s = p;
@@ -413,11 +425,14 @@ bool intlGUIEditBox::processKey(const SEvent &event)
break;
case KEY_HOME:
// move/highlight to start of text
- if (event.KeyInput.Shift) {
+ if (event.KeyInput.Shift)
+ {
newMarkEnd = CursorPos;
newMarkBegin = 0;
CursorPos = 0;
- } else {
+ }
+ else
+ {
CursorPos = 0;
newMarkBegin = 0;
newMarkEnd = 0;
@@ -425,11 +440,14 @@ bool intlGUIEditBox::processKey(const SEvent &event)
break;
case KEY_END:
// move/highlight to end of text
- if (event.KeyInput.Shift) {
+ if (event.KeyInput.Shift)
+ {
newMarkBegin = CursorPos;
newMarkEnd = Text.size();
CursorPos = 0;
- } else {
+ }
+ else
+ {
CursorPos = Text.size();
newMarkBegin = 0;
newMarkEnd = 0;
@@ -441,281 +459,293 @@ bool intlGUIEditBox::processKey(const SEvent &event)
}
// default keyboard handling
else
- switch (event.KeyInput.Key) {
- case KEY_END: {
+ switch(event.KeyInput.Key)
+ {
+ case KEY_END:
+ {
s32 p = Text.size();
- if (WordWrap || MultiLine) {
+ if (WordWrap || MultiLine)
+ {
p = getLineFromPos(CursorPos);
p = BrokenTextPositions[p] + (s32)BrokenText[p].size();
- if (p > 0 && (Text[p - 1] == L'\r' ||
- Text[p - 1] == L'\n'))
- p -= 1;
+ if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' ))
+ p-=1;
}
- if (event.KeyInput.Shift) {
+ if (event.KeyInput.Shift)
+ {
if (MarkBegin == MarkEnd)
newMarkBegin = CursorPos;
newMarkEnd = p;
- } else {
+ }
+ else
+ {
newMarkBegin = 0;
newMarkEnd = 0;
}
CursorPos = p;
BlinkStartTime = porting::getTimeMs();
- } break;
- case KEY_HOME: {
+ }
+ break;
+ case KEY_HOME:
+ {
s32 p = 0;
- if (WordWrap || MultiLine) {
+ if (WordWrap || MultiLine)
+ {
p = getLineFromPos(CursorPos);
p = BrokenTextPositions[p];
}
- if (event.KeyInput.Shift) {
+ if (event.KeyInput.Shift)
+ {
if (MarkBegin == MarkEnd)
newMarkBegin = CursorPos;
newMarkEnd = p;
- } else {
+ }
+ else
+ {
newMarkBegin = 0;
newMarkEnd = 0;
}
CursorPos = p;
BlinkStartTime = porting::getTimeMs();
- } break;
- case KEY_RETURN:
- if (MultiLine) {
- inputChar(L'\n');
- return true;
- } else {
- sendGuiEvent(EGET_EDITBOX_ENTER);
- }
- break;
- case KEY_LEFT:
+ }
+ break;
+ case KEY_RETURN:
+ if (MultiLine)
+ {
+ inputChar(L'\n');
+ return true;
+ }
+ else
+ {
+ sendGuiEvent( EGET_EDITBOX_ENTER );
+ }
+ break;
+ case KEY_LEFT:
- if (event.KeyInput.Shift) {
- if (CursorPos > 0) {
- if (MarkBegin == MarkEnd)
- newMarkBegin = CursorPos;
+ if (event.KeyInput.Shift)
+ {
+ if (CursorPos > 0)
+ {
+ if (MarkBegin == MarkEnd)
+ newMarkBegin = CursorPos;
- newMarkEnd = CursorPos - 1;
- }
- } else {
- newMarkBegin = 0;
- newMarkEnd = 0;
+ newMarkEnd = CursorPos-1;
}
+ }
+ else
+ {
+ newMarkBegin = 0;
+ newMarkEnd = 0;
+ }
- if (CursorPos > 0)
- CursorPos--;
- BlinkStartTime = porting::getTimeMs();
- break;
+ if (CursorPos > 0) CursorPos--;
+ BlinkStartTime = porting::getTimeMs();
+ break;
- case KEY_RIGHT:
- if (event.KeyInput.Shift) {
- if (Text.size() > (u32)CursorPos) {
- if (MarkBegin == MarkEnd)
- newMarkBegin = CursorPos;
+ case KEY_RIGHT:
+ if (event.KeyInput.Shift)
+ {
+ if (Text.size() > (u32)CursorPos)
+ {
+ if (MarkBegin == MarkEnd)
+ newMarkBegin = CursorPos;
- newMarkEnd = CursorPos + 1;
- }
- } else {
- newMarkBegin = 0;
- newMarkEnd = 0;
+ newMarkEnd = CursorPos+1;
}
+ }
+ else
+ {
+ newMarkBegin = 0;
+ newMarkEnd = 0;
+ }
- if (Text.size() > (u32)CursorPos)
- CursorPos++;
- BlinkStartTime = porting::getTimeMs();
- break;
- case KEY_UP:
- if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
- s32 lineNo = getLineFromPos(CursorPos);
- s32 mb = (MarkBegin == MarkEnd)
- ? CursorPos
- : (MarkBegin > MarkEnd ? MarkBegin
- : MarkEnd);
- if (lineNo > 0) {
- s32 cp = CursorPos - BrokenTextPositions[lineNo];
- if ((s32)BrokenText[lineNo - 1].size() < cp)
- CursorPos = BrokenTextPositions[lineNo -
- 1] +
- (s32)BrokenText[lineNo - 1]
- .size() -
- 1;
- else
- CursorPos = BrokenTextPositions[lineNo -
- 1] +
- cp;
- }
-
- if (event.KeyInput.Shift) {
- newMarkBegin = mb;
- newMarkEnd = CursorPos;
- } else {
- newMarkBegin = 0;
- newMarkEnd = 0;
- }
+ if (Text.size() > (u32)CursorPos) CursorPos++;
+ BlinkStartTime = porting::getTimeMs();
+ break;
+ case KEY_UP:
+ if (MultiLine || (WordWrap && BrokenText.size() > 1) )
+ {
+ s32 lineNo = getLineFromPos(CursorPos);
+ s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd);
+ if (lineNo > 0)
+ {
+ s32 cp = CursorPos - BrokenTextPositions[lineNo];
+ if ((s32)BrokenText[lineNo-1].size() < cp)
+ CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1;
+ else
+ CursorPos = BrokenTextPositions[lineNo-1] + cp;
+ }
- } else {
- return false;
+ if (event.KeyInput.Shift)
+ {
+ newMarkBegin = mb;
+ newMarkEnd = CursorPos;
+ }
+ else
+ {
+ newMarkBegin = 0;
+ newMarkEnd = 0;
}
- break;
- case KEY_DOWN:
- if (MultiLine || (WordWrap && BrokenText.size() > 1)) {
- s32 lineNo = getLineFromPos(CursorPos);
- s32 mb = (MarkBegin == MarkEnd)
- ? CursorPos
- : (MarkBegin < MarkEnd ? MarkBegin
- : MarkEnd);
- if (lineNo < (s32)BrokenText.size() - 1) {
- s32 cp = CursorPos - BrokenTextPositions[lineNo];
- if ((s32)BrokenText[lineNo + 1].size() < cp)
- CursorPos = BrokenTextPositions[lineNo +
- 1] +
- BrokenText[lineNo + 1]
- .size() -
- 1;
- else
- CursorPos = BrokenTextPositions[lineNo +
- 1] +
- cp;
- }
- if (event.KeyInput.Shift) {
- newMarkBegin = mb;
- newMarkEnd = CursorPos;
- } else {
- newMarkBegin = 0;
- newMarkEnd = 0;
- }
+ }
+ else
+ {
+ return false;
+ }
+ break;
+ case KEY_DOWN:
+ if (MultiLine || (WordWrap && BrokenText.size() > 1) )
+ {
+ s32 lineNo = getLineFromPos(CursorPos);
+ s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd);
+ if (lineNo < (s32)BrokenText.size()-1)
+ {
+ s32 cp = CursorPos - BrokenTextPositions[lineNo];
+ if ((s32)BrokenText[lineNo+1].size() < cp)
+ CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1;
+ else
+ CursorPos = BrokenTextPositions[lineNo+1] + cp;
+ }
- } else {
- return false;
+ if (event.KeyInput.Shift)
+ {
+ newMarkBegin = mb;
+ newMarkEnd = CursorPos;
+ }
+ else
+ {
+ newMarkBegin = 0;
+ newMarkEnd = 0;
}
- break;
- case KEY_BACK:
- if (!this->IsEnabled || !m_writable)
- break;
+ }
+ else
+ {
+ return false;
+ }
+ break;
- if (!Text.empty()) {
- core::stringw s;
+ case KEY_BACK:
+ if (!this->IsEnabled || !m_writable)
+ break;
- if (MarkBegin != MarkEnd) {
- // delete marked text
- const s32 realmbgn = MarkBegin < MarkEnd
- ? MarkBegin
- : MarkEnd;
- const s32 realmend = MarkBegin < MarkEnd
- ? MarkEnd
- : MarkBegin;
+ if (!Text.empty()) {
+ core::stringw s;
- s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
- Text = s;
+ if (MarkBegin != MarkEnd)
+ {
+ // delete marked text
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
- CursorPos = realmbgn;
- } else {
- // delete text behind cursor
- if (CursorPos > 0)
- s = Text.subString(0, CursorPos - 1);
- else
- s = L"";
- s.append(Text.subString(CursorPos,
- Text.size() - CursorPos));
- Text = s;
- --CursorPos;
- }
+ s = Text.subString(0, realmbgn);
+ s.append( Text.subString(realmend, Text.size()-realmend) );
+ Text = s;
- if (CursorPos < 0)
- CursorPos = 0;
- BlinkStartTime = porting::getTimeMs();
- newMarkBegin = 0;
- newMarkEnd = 0;
- textChanged = true;
+ CursorPos = realmbgn;
+ }
+ else
+ {
+ // delete text behind cursor
+ if (CursorPos>0)
+ s = Text.subString(0, CursorPos-1);
+ else
+ s = L"";
+ s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
+ Text = s;
+ --CursorPos;
}
- break;
- case KEY_DELETE:
- if (!this->IsEnabled || !m_writable)
- break;
-
- if (!Text.empty()) {
- core::stringw s;
- if (MarkBegin != MarkEnd) {
- // delete marked text
- const s32 realmbgn = MarkBegin < MarkEnd
- ? MarkBegin
- : MarkEnd;
- const s32 realmend = MarkBegin < MarkEnd
- ? MarkEnd
- : MarkBegin;
+ if (CursorPos < 0)
+ CursorPos = 0;
+ BlinkStartTime = porting::getTimeMs();
+ newMarkBegin = 0;
+ newMarkEnd = 0;
+ textChanged = true;
+ }
+ break;
+ case KEY_DELETE:
+ if (!this->IsEnabled || !m_writable)
+ break;
- s = Text.subString(0, realmbgn);
- s.append(Text.subString(realmend,
- Text.size() - realmend));
- Text = s;
+ if (!Text.empty()) {
+ core::stringw s;
- CursorPos = realmbgn;
- } else {
- // delete text before cursor
- s = Text.subString(0, CursorPos);
- s.append(Text.subString(CursorPos + 1,
- Text.size() - CursorPos - 1));
- Text = s;
- }
+ if (MarkBegin != MarkEnd)
+ {
+ // delete marked text
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
- if (CursorPos > (s32)Text.size())
- CursorPos = (s32)Text.size();
+ s = Text.subString(0, realmbgn);
+ s.append( Text.subString(realmend, Text.size()-realmend) );
+ Text = s;
- BlinkStartTime = porting::getTimeMs();
- newMarkBegin = 0;
- newMarkEnd = 0;
- textChanged = true;
+ CursorPos = realmbgn;
+ }
+ else
+ {
+ // delete text before cursor
+ s = Text.subString(0, CursorPos);
+ s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) );
+ Text = s;
}
- break;
- case KEY_ESCAPE:
- case KEY_TAB:
- case KEY_SHIFT:
- case KEY_F1:
- case KEY_F2:
- case KEY_F3:
- case KEY_F4:
- case KEY_F5:
- case KEY_F6:
- case KEY_F7:
- case KEY_F8:
- case KEY_F9:
- case KEY_F10:
- case KEY_F11:
- case KEY_F12:
- case KEY_F13:
- case KEY_F14:
- case KEY_F15:
- case KEY_F16:
- case KEY_F17:
- case KEY_F18:
- case KEY_F19:
- case KEY_F20:
- case KEY_F21:
- case KEY_F22:
- case KEY_F23:
- case KEY_F24:
- // ignore these keys
- return false;
+ if (CursorPos > (s32)Text.size())
+ CursorPos = (s32)Text.size();
- default:
- inputChar(event.KeyInput.Char);
- return true;
+ BlinkStartTime = porting::getTimeMs();
+ newMarkBegin = 0;
+ newMarkEnd = 0;
+ textChanged = true;
}
+ break;
- // Set new text markers
- setTextMarkers(newMarkBegin, newMarkEnd);
+ case KEY_ESCAPE:
+ case KEY_TAB:
+ case KEY_SHIFT:
+ case KEY_F1:
+ case KEY_F2:
+ case KEY_F3:
+ case KEY_F4:
+ case KEY_F5:
+ case KEY_F6:
+ case KEY_F7:
+ case KEY_F8:
+ case KEY_F9:
+ case KEY_F10:
+ case KEY_F11:
+ case KEY_F12:
+ case KEY_F13:
+ case KEY_F14:
+ case KEY_F15:
+ case KEY_F16:
+ case KEY_F17:
+ case KEY_F18:
+ case KEY_F19:
+ case KEY_F20:
+ case KEY_F21:
+ case KEY_F22:
+ case KEY_F23:
+ case KEY_F24:
+ // ignore these keys
+ return false;
+
+ default:
+ inputChar(event.KeyInput.Char);
+ return true;
+ }
+
+ // Set new text markers
+ setTextMarkers( newMarkBegin, newMarkEnd );
// break the text if it has changed
- if (textChanged) {
+ if (textChanged)
+ {
breakText();
sendGuiEvent(EGET_EDITBOX_CHANGED);
}
@@ -725,6 +755,7 @@ bool intlGUIEditBox::processKey(const SEvent &event)
return true;
}
+
//! draws the element and its children
void intlGUIEditBox::draw()
{
@@ -733,7 +764,7 @@ void intlGUIEditBox::draw()
const bool focus = Environment->hasFocus(this);
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
@@ -741,16 +772,17 @@ void intlGUIEditBox::draw()
// draw the border
- if (Border) {
+ if (Border)
+ {
if (m_writable) {
- skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW), false,
- true, FrameRect, &AbsoluteClippingRect);
+ skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW),
+ false, true, FrameRect, &AbsoluteClippingRect);
}
- FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
- FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
- FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X) + 1;
- FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y) + 1;
+ FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
+ FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
+ FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
+ FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
}
updateVScrollBar();
@@ -759,15 +791,17 @@ void intlGUIEditBox::draw()
// draw the text
- IGUIFont *font = OverrideFont;
+ IGUIFont* font = OverrideFont;
if (!OverrideFont)
font = skin->getFont();
s32 cursorLine = 0;
s32 charcursorpos = 0;
- if (font) {
- if (LastBreakFont != font) {
+ if (font)
+ {
+ if (LastBreakFont != font)
+ {
breakText();
}
@@ -792,107 +826,97 @@ void intlGUIEditBox::draw()
const video::SColor prevColor = OverrideColor;
if (!Text.empty()) {
- if (!IsEnabled && !OverrideColorEnabled) {
+ if (!IsEnabled && !OverrideColorEnabled)
+ {
OverrideColorEnabled = true;
OverrideColor = skin->getColor(EGDC_GRAY_TEXT);
}
- for (s32 i = 0; i < lineCount; ++i) {
+ for (s32 i=0; i < lineCount; ++i)
+ {
setTextRect(i);
- // clipping test - don't draw anything outside the visible
- // area
+ // clipping test - don't draw anything outside the visible area
core::rect<s32> c = localClipRect;
c.clipAgainst(CurrentTextRect);
if (!c.isValid())
continue;
// get current line
- if (PasswordBox) {
- if (BrokenText.size() != 1) {
+ if (PasswordBox)
+ {
+ if (BrokenText.size() != 1)
+ {
BrokenText.clear();
BrokenText.push_back(core::stringw());
}
- if (BrokenText[0].size() != Text.size()) {
+ if (BrokenText[0].size() != Text.size())
+ {
BrokenText[0] = Text;
- for (u32 q = 0; q < Text.size(); ++q) {
- BrokenText[0][q] = PasswordChar;
+ for (u32 q = 0; q < Text.size(); ++q)
+ {
+ BrokenText[0] [q] = PasswordChar;
}
}
txtLine = &BrokenText[0];
startPos = 0;
- } else {
+ }
+ else
+ {
txtLine = ml ? &BrokenText[i] : &Text;
startPos = ml ? BrokenTextPositions[i] : 0;
}
+
// draw normal text
font->draw(txtLine->c_str(), CurrentTextRect,
- OverrideColorEnabled
- ? OverrideColor
- : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
+ OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT),
+ false, true, &localClipRect);
// draw mark and marked text
- if (focus && MarkBegin != MarkEnd && i >= hlineStart &&
- i < hlineStart + hlineCount) {
+ if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount)
+ {
s32 mbegin = 0, mend = 0;
- s32 lineStartPos = 0,
- lineEndPos = txtLine->size();
+ s32 lineStartPos = 0, lineEndPos = txtLine->size();
- if (i == hlineStart) {
+ if (i == hlineStart)
+ {
// highlight start is on this line
- s = txtLine->subString(
- 0, realmbgn - startPos);
- mbegin = font->getDimension(s.c_str())
- .Width;
+ s = txtLine->subString(0, realmbgn - startPos);
+ mbegin = font->getDimension(s.c_str()).Width;
// deal with kerning
mbegin += font->getKerningWidth(
- &((*txtLine)[realmbgn -
- startPos]),
- realmbgn - startPos > 0
- ? &((*txtLine)[realmbgn -
- startPos -
- 1])
- : 0);
+ &((*txtLine)[realmbgn - startPos]),
+ realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0);
lineStartPos = realmbgn - startPos;
}
- if (i == hlineStart + hlineCount - 1) {
+ if (i == hlineStart + hlineCount - 1)
+ {
// highlight end is on this line
- s2 = txtLine->subString(
- 0, realmend - startPos);
- mend = font->getDimension(s2.c_str())
- .Width;
+ s2 = txtLine->subString(0, realmend - startPos);
+ mend = font->getDimension(s2.c_str()).Width;
lineEndPos = (s32)s2.size();
- } else
- mend = font->getDimension(txtLine->c_str())
- .Width;
+ }
+ else
+ mend = font->getDimension(txtLine->c_str()).Width;
CurrentTextRect.UpperLeftCorner.X += mbegin;
- CurrentTextRect.LowerRightCorner.X =
- CurrentTextRect.UpperLeftCorner
- .X +
- mend - mbegin;
+ CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin;
// draw mark
- skin->draw2DRectangle(this,
- skin->getColor(EGDC_HIGH_LIGHT),
- CurrentTextRect, &localClipRect);
+ skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect);
// draw marked text
- s = txtLine->subString(lineStartPos,
- lineEndPos - lineStartPos);
+ s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos);
if (!s.empty())
font->draw(s.c_str(), CurrentTextRect,
- OverrideColorEnabled
- ? OverrideColor
- : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
- false, true,
- &localClipRect);
+ OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
+ false, true, &localClipRect);
+
}
}
@@ -903,31 +927,24 @@ void intlGUIEditBox::draw()
// draw cursor
- if (WordWrap || MultiLine) {
+ if (WordWrap || MultiLine)
+ {
cursorLine = getLineFromPos(CursorPos);
txtLine = &BrokenText[cursorLine];
startPos = BrokenTextPositions[cursorLine];
}
- s = txtLine->subString(0, CursorPos - startPos);
+ s = txtLine->subString(0,CursorPos-startPos);
charcursorpos = font->getDimension(s.c_str()).Width +
- font->getKerningWidth(L"_",
- CursorPos - startPos > 0
- ? &((*txtLine)[CursorPos -
- startPos -
- 1])
- : 0);
+ font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0);
- if (m_writable) {
- if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 <
- 350) {
+ if (m_writable) {
+ if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350) {
setTextRect(cursorLine);
CurrentTextRect.UpperLeftCorner.X += charcursorpos;
font->draw(L"_", CurrentTextRect,
- OverrideColorEnabled
- ? OverrideColor
- : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
+ OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT),
+ false, true, &localClipRect);
}
}
}
@@ -936,8 +953,9 @@ void intlGUIEditBox::draw()
IGUIElement::draw();
}
+
//! Sets the new caption of this element.
-void intlGUIEditBox::setText(const wchar_t *text)
+void intlGUIEditBox::setText(const wchar_t* text)
{
Text = text;
if (u32(CursorPos) > Text.size())
@@ -946,6 +964,7 @@ void intlGUIEditBox::setText(const wchar_t *text)
breakText();
}
+
//! Enables or disables automatic scrolling with cursor position
//! \param enable: If set to true, the text will move around with the cursor position
void intlGUIEditBox::setAutoScroll(bool enable)
@@ -953,6 +972,7 @@ void intlGUIEditBox::setAutoScroll(bool enable)
AutoScroll = enable;
}
+
//! Checks to see if automatic scrolling is enabled
//! \return true if automatic scrolling is enabled, false if not
bool intlGUIEditBox::isAutoScrollEnabled() const
@@ -960,6 +980,7 @@ bool intlGUIEditBox::isAutoScrollEnabled() const
return AutoScroll;
}
+
//! Gets the area of the text in the edit box
//! \return Returns the size in pixels of the text
core::dimension2du intlGUIEditBox::getTextDimension()
@@ -969,7 +990,8 @@ core::dimension2du intlGUIEditBox::getTextDimension()
setTextRect(0);
ret = CurrentTextRect;
- for (u32 i = 1; i < BrokenText.size(); ++i) {
+ for (u32 i=1; i < BrokenText.size(); ++i)
+ {
setTextRect(i);
ret.addInternalPoint(CurrentTextRect.UpperLeftCorner);
ret.addInternalPoint(CurrentTextRect.LowerRightCorner);
@@ -978,6 +1000,7 @@ core::dimension2du intlGUIEditBox::getTextDimension()
return core::dimension2du(ret.getSize());
}
+
//! Sets the maximum amount of characters which may be entered in the box.
//! \param max: Maximum amount of characters. If 0, the character amount is
//! infinity.
@@ -989,48 +1012,60 @@ void intlGUIEditBox::setMax(u32 max)
Text = Text.subString(0, Max);
}
+
//! Returns maximum amount of characters, previously set by setMax();
u32 intlGUIEditBox::getMax() const
{
return Max;
}
-bool intlGUIEditBox::processMouse(const SEvent &event)
+
+bool intlGUIEditBox::processMouse(const SEvent& event)
{
- switch (event.MouseInput.Event) {
+ switch(event.MouseInput.Event)
+ {
case irr::EMIE_LMOUSE_LEFT_UP:
- if (Environment->hasFocus(this)) {
+ if (Environment->hasFocus(this))
+ {
CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
- if (MouseMarking) {
- setTextMarkers(MarkBegin, CursorPos);
+ if (MouseMarking)
+ {
+ setTextMarkers( MarkBegin, CursorPos );
}
MouseMarking = false;
calculateScrollPos();
return true;
}
break;
- case irr::EMIE_MOUSE_MOVED: {
- if (MouseMarking) {
- CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
- setTextMarkers(MarkBegin, CursorPos);
- calculateScrollPos();
- return true;
+ case irr::EMIE_MOUSE_MOVED:
+ {
+ if (MouseMarking)
+ {
+ CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
+ setTextMarkers( MarkBegin, CursorPos );
+ calculateScrollPos();
+ return true;
+ }
}
- } break;
+ break;
case EMIE_LMOUSE_PRESSED_DOWN:
- if (!Environment->hasFocus(this)) {
+ if (!Environment->hasFocus(this))
+ {
BlinkStartTime = porting::getTimeMs();
MouseMarking = true;
CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
- setTextMarkers(CursorPos, CursorPos);
+ setTextMarkers(CursorPos, CursorPos );
calculateScrollPos();
return true;
- } else {
- if (!AbsoluteClippingRect.isPointInside(core::position2d<s32>(
- event.MouseInput.X, event.MouseInput.Y))) {
+ }
+ else
+ {
+ if (!AbsoluteClippingRect.isPointInside(
+ core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y))) {
return false;
}
+
// move cursor
CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
@@ -1039,7 +1074,7 @@ bool intlGUIEditBox::processMouse(const SEvent &event)
newMarkBegin = CursorPos;
MouseMarking = true;
- setTextMarkers(newMarkBegin, CursorPos);
+ setTextMarkers( newMarkBegin, CursorPos);
calculateScrollPos();
return true;
}
@@ -1058,10 +1093,11 @@ bool intlGUIEditBox::processMouse(const SEvent &event)
return false;
}
+
s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
{
- IGUIFont *font = OverrideFont;
- IGUISkin *skin = Environment->getSkin();
+ IGUIFont* font = OverrideFont;
+ IGUISkin* skin = Environment->getSkin();
if (!OverrideFont)
font = skin->getFont();
@@ -1076,19 +1112,14 @@ s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
setTextRect(curr_line_idx);
if (curr_line_idx == 0 && y < CurrentTextRect.UpperLeftCorner.Y)
y = CurrentTextRect.UpperLeftCorner.Y;
- if (curr_line_idx == lineCount - 1 &&
- y > CurrentTextRect.LowerRightCorner.Y)
+ if (curr_line_idx == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y)
y = CurrentTextRect.LowerRightCorner.Y;
// is it inside this region?
- if (y >= CurrentTextRect.UpperLeftCorner.Y &&
- y <= CurrentTextRect.LowerRightCorner.Y) {
+ if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y) {
// we've found the clicked line
- txtLine = (WordWrap || MultiLine) ? &BrokenText[curr_line_idx]
- : &Text;
- startPos = (WordWrap || MultiLine)
- ? BrokenTextPositions[curr_line_idx]
- : 0;
+ txtLine = (WordWrap || MultiLine) ? &BrokenText[curr_line_idx] : &Text;
+ startPos = (WordWrap || MultiLine) ? BrokenTextPositions[curr_line_idx] : 0;
break;
}
}
@@ -1098,20 +1129,20 @@ s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
else if (x > CurrentTextRect.LowerRightCorner.X)
x = CurrentTextRect.LowerRightCorner.X;
- s32 idx = font->getCharacterFromPos(
- txtLine->c_str(), x - CurrentTextRect.UpperLeftCorner.X);
- // Special handling for last line, if we are on limits, add 1 extra shift because
- // idx will be the last char, not null char of the wstring
+ s32 idx = font->getCharacterFromPos(txtLine->c_str(), x - CurrentTextRect.UpperLeftCorner.X);
+ // Special handling for last line, if we are on limits, add 1 extra shift because idx
+ // will be the last char, not null char of the wstring
if (curr_line_idx == lineCount - 1 && x == CurrentTextRect.LowerRightCorner.X)
idx++;
return rangelim(idx + startPos, 0, S32_MAX);
}
+
//! Breaks the single text line.
void intlGUIEditBox::breakText()
{
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if ((!WordWrap && !MultiLine) || !skin)
return;
@@ -1119,7 +1150,7 @@ void intlGUIEditBox::breakText()
BrokenText.clear(); // need to reallocate :/
BrokenTextPositions.set_used(0);
- IGUIFont *font = OverrideFont;
+ IGUIFont* font = OverrideFont;
if (!OverrideFont)
font = skin->getFont();
@@ -1137,7 +1168,8 @@ void intlGUIEditBox::breakText()
s32 elWidth = RelativeRect.getWidth() - 6;
wchar_t c;
- for (s32 i = 0; i < size; ++i) {
+ for (s32 i=0; i<size; ++i)
+ {
c = Text[i];
bool lineBreak = false;
@@ -1145,12 +1177,13 @@ void intlGUIEditBox::breakText()
{
lineBreak = true;
c = ' ';
- if (Text[i + 1] == L'\n') // Windows breaks
+ if (Text[i+1] == L'\n') // Windows breaks
{
- Text.erase(i + 1);
+ Text.erase(i+1);
--size;
}
- } else if (c == L'\n') // Unix breaks
+ }
+ else if (c == L'\n') // Unix breaks
{
lineBreak = true;
c = ' ';
@@ -1160,23 +1193,25 @@ void intlGUIEditBox::breakText()
if (!MultiLine)
lineBreak = false;
- if (c == L' ' || c == 0 || i == (size - 1)) {
+ if (c == L' ' || c == 0 || i == (size-1))
+ {
if (!word.empty()) {
// here comes the next whitespace, look if
// we can break the last word to the next line.
- s32 whitelgth = font->getDimension(whitespace.c_str())
- .Width;
+ s32 whitelgth = font->getDimension(whitespace.c_str()).Width;
s32 worldlgth = font->getDimension(word.c_str()).Width;
- if (WordWrap && length + worldlgth + whitelgth >
- elWidth) {
+ if (WordWrap && length + worldlgth + whitelgth > elWidth)
+ {
// break to next line
length = worldlgth;
BrokenText.push_back(line);
BrokenTextPositions.push_back(lastLineStart);
lastLineStart = i - (s32)word.size();
line = word;
- } else {
+ }
+ else
+ {
// add word to line
line += whitespace;
line += word;
@@ -1190,18 +1225,21 @@ void intlGUIEditBox::breakText()
whitespace += c;
// compute line break
- if (lineBreak) {
+ if (lineBreak)
+ {
line += whitespace;
line += word;
BrokenText.push_back(line);
BrokenTextPositions.push_back(lastLineStart);
- lastLineStart = i + 1;
+ lastLineStart = i+1;
line = L"";
word = L"";
whitespace = L"";
length = 0;
}
- } else {
+ }
+ else
+ {
// yippee this is a word..
word += c;
}
@@ -1213,37 +1251,40 @@ void intlGUIEditBox::breakText()
BrokenTextPositions.push_back(lastLineStart);
}
+
void intlGUIEditBox::setTextRect(s32 line)
{
core::dimension2du d;
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
- IGUIFont *font = OverrideFont ? OverrideFont : skin->getFont();
+ IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont();
if (!font)
return;
// get text dimension
const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1;
- if (WordWrap || MultiLine) {
+ if (WordWrap || MultiLine)
+ {
d = font->getDimension(BrokenText[line].c_str());
- } else {
+ }
+ else
+ {
d = font->getDimension(Text.c_str());
d.Height = AbsoluteRect.getHeight();
}
d.Height += font->getKerningHeight();
// justification
- switch (HAlign) {
+ switch (HAlign)
+ {
case EGUIA_CENTER:
// align to h centre
- CurrentTextRect.UpperLeftCorner.X =
- (FrameRect.getWidth() / 2) - (d.Width / 2);
- CurrentTextRect.LowerRightCorner.X =
- (FrameRect.getWidth() / 2) + (d.Width / 2);
+ CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2);
+ CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2);
break;
case EGUIA_LOWERRIGHT:
// align to right edge
@@ -1254,77 +1295,82 @@ void intlGUIEditBox::setTextRect(s32 line)
// align to left edge
CurrentTextRect.UpperLeftCorner.X = 0;
CurrentTextRect.LowerRightCorner.X = d.Width;
+
}
- switch (VAlign) {
+ switch (VAlign)
+ {
case EGUIA_CENTER:
// align to v centre
- CurrentTextRect.UpperLeftCorner.Y = (FrameRect.getHeight() / 2) -
- (lineCount * d.Height) / 2 +
- d.Height * line;
+ CurrentTextRect.UpperLeftCorner.Y =
+ (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line;
break;
case EGUIA_LOWERRIGHT:
// align to bottom edge
- CurrentTextRect.UpperLeftCorner.Y = FrameRect.getHeight() -
- lineCount * d.Height +
- d.Height * line;
+ CurrentTextRect.UpperLeftCorner.Y =
+ FrameRect.getHeight() - lineCount*d.Height + d.Height*line;
break;
default:
// align to top edge
- CurrentTextRect.UpperLeftCorner.Y = d.Height * line;
+ CurrentTextRect.UpperLeftCorner.Y = d.Height*line;
break;
}
- CurrentTextRect.UpperLeftCorner.X -= HScrollPos;
+ CurrentTextRect.UpperLeftCorner.X -= HScrollPos;
CurrentTextRect.LowerRightCorner.X -= HScrollPos;
- CurrentTextRect.UpperLeftCorner.Y -= VScrollPos;
+ CurrentTextRect.UpperLeftCorner.Y -= VScrollPos;
CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height;
CurrentTextRect += FrameRect.UpperLeftCorner;
+
}
+
s32 intlGUIEditBox::getLineFromPos(s32 pos)
{
if (!WordWrap && !MultiLine)
return 0;
- s32 i = 0;
- while (i < (s32)BrokenTextPositions.size()) {
+ s32 i=0;
+ while (i < (s32)BrokenTextPositions.size())
+ {
if (BrokenTextPositions[i] > pos)
- return i - 1;
+ return i-1;
++i;
}
return (s32)BrokenTextPositions.size() - 1;
}
+
void intlGUIEditBox::inputChar(wchar_t c)
{
if (!IsEnabled || !m_writable)
return;
- if (c != 0) {
- if (Text.size() < Max || Max == 0) {
+ if (c != 0)
+ {
+ if (Text.size() < Max || Max == 0)
+ {
core::stringw s;
- if (MarkBegin != MarkEnd) {
+ if (MarkBegin != MarkEnd)
+ {
// replace marked text
- const s32 realmbgn =
- MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
- const s32 realmend =
- MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
+ const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
+ const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
s = Text.subString(0, realmbgn);
s.append(c);
- s.append(Text.subString(
- realmend, Text.size() - realmend));
+ s.append( Text.subString(realmend, Text.size()-realmend) );
Text = s;
- CursorPos = realmbgn + 1;
- } else {
+ CursorPos = realmbgn+1;
+ }
+ else
+ {
// add new character
s = Text.subString(0, CursorPos);
s.append(c);
- s.append(Text.subString(
- CursorPos, Text.size() - CursorPos));
+ s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
Text = s;
++CursorPos;
}
@@ -1338,6 +1384,7 @@ void intlGUIEditBox::inputChar(wchar_t c)
calculateScrollPos();
}
+
void intlGUIEditBox::calculateScrollPos()
{
if (!AutoScroll)
@@ -1348,22 +1395,21 @@ void intlGUIEditBox::calculateScrollPos()
setTextRect(cursLine);
// don't do horizontal scrolling when wordwrap is enabled.
- if (!WordWrap) {
+ if (!WordWrap)
+ {
// get cursor position
- IGUISkin *skin = Environment->getSkin();
+ IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
- IGUIFont *font = OverrideFont ? OverrideFont : skin->getFont();
+ IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont();
if (!font)
return;
core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text;
- s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine]
- : CursorPos;
+ s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos;
s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos +
- font->getDimension(txtLine->subString(0, cPos).c_str())
- .Width;
+ font->getDimension(txtLine->subString(0, cPos).c_str()).Width;
s32 cEnd = cStart + font->getDimension(L"_ ").Width;
@@ -1382,11 +1428,9 @@ void intlGUIEditBox::calculateScrollPos()
// vertical scroll position
if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y)
- VScrollPos += CurrentTextRect.LowerRightCorner.Y -
- FrameRect.LowerRightCorner.Y; // scrolling downwards
+ VScrollPos += CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y; // scrolling downwards
else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y)
- VScrollPos += CurrentTextRect.UpperLeftCorner.Y -
- FrameRect.UpperLeftCorner.Y; // scrolling upwards
+ VScrollPos += CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y; // scrolling upwards
// todo: adjust scrollbar
if (m_vscrollbar)
@@ -1396,24 +1440,26 @@ void intlGUIEditBox::calculateScrollPos()
//! set text markers
void intlGUIEditBox::setTextMarkers(s32 begin, s32 end)
{
- if (begin != MarkBegin || end != MarkEnd) {
- MarkBegin = begin;
- MarkEnd = end;
- sendGuiEvent(EGET_EDITBOX_MARKING_CHANGED);
- }
+ if ( begin != MarkBegin || end != MarkEnd )
+ {
+ MarkBegin = begin;
+ MarkEnd = end;
+ sendGuiEvent(EGET_EDITBOX_MARKING_CHANGED);
+ }
}
//! send some gui event to parent
void intlGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type)
{
- if (Parent) {
- SEvent e;
- e.EventType = EET_GUI_EVENT;
- e.GUIEvent.Caller = this;
- e.GUIEvent.Element = 0;
- e.GUIEvent.EventType = type;
-
- Parent->OnEvent(e);
+ if ( Parent )
+ {
+ SEvent e;
+ e.EventType = EET_GUI_EVENT;
+ e.GUIEvent.Caller = this;
+ e.GUIEvent.Element = 0;
+ e.GUIEvent.EventType = type;
+
+ Parent->OnEvent(e);
}
}
@@ -1425,8 +1471,8 @@ void intlGUIEditBox::createVScrollBar()
if (OverrideFont) {
fontHeight = OverrideFont->getDimension(L"").Height;
} else {
- if (IGUISkin *skin = Environment->getSkin()) {
- if (IGUIFont *font = skin->getFont()) {
+ if (IGUISkin* skin = Environment->getSkin()) {
+ if (IGUIFont* font = skin->getFont()) {
fontHeight = font->getDimension(L"").Height;
}
}
@@ -1436,8 +1482,8 @@ void intlGUIEditBox::createVScrollBar()
irr::core::rect<s32> scrollbarrect = FrameRect;
scrollbarrect.UpperLeftCorner.X += FrameRect.getWidth() - m_scrollbar_width;
- m_vscrollbar = new GUIScrollBar(
- Environment, getParent(), -1, scrollbarrect, false, true);
+ m_vscrollbar = new GUIScrollBar(Environment, getParent(), -1,
+ scrollbarrect, false, true);
m_vscrollbar->setVisible(false);
m_vscrollbar->setSmallStep(3 * fontHeight);
@@ -1469,7 +1515,7 @@ void intlGUIEditBox::updateVScrollBar()
}
// check if a vertical scrollbar is needed ?
- if (getTextDimension().Height > (u32)FrameRect.getHeight()) {
+ if (getTextDimension().Height > (u32) FrameRect.getHeight()) {
s32 scrollymax = getTextDimension().Height - FrameRect.getHeight();
if (scrollymax != m_vscrollbar->getMax()) {
m_vscrollbar->setMax(scrollymax);
@@ -1500,34 +1546,33 @@ void intlGUIEditBox::setWritable(bool can_write_text)
}
//! Writes attributes of the element.
-void intlGUIEditBox::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options = 0) const
+void intlGUIEditBox::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
{
// IGUIEditBox::serializeAttributes(out,options);
- out->addBool("OverrideColorEnabled", OverrideColorEnabled);
- out->addColor("OverrideColor", OverrideColor);
+ out->addBool ("OverrideColorEnabled",OverrideColorEnabled );
+ out->addColor ("OverrideColor", OverrideColor);
// out->addFont("OverrideFont",OverrideFont);
- out->addInt("MaxChars", Max);
- out->addBool("WordWrap", WordWrap);
- out->addBool("MultiLine", MultiLine);
- out->addBool("AutoScroll", AutoScroll);
- out->addBool("PasswordBox", PasswordBox);
+ out->addInt ("MaxChars", Max);
+ out->addBool ("WordWrap", WordWrap);
+ out->addBool ("MultiLine", MultiLine);
+ out->addBool ("AutoScroll", AutoScroll);
+ out->addBool ("PasswordBox", PasswordBox);
core::stringw ch = L" ";
ch[0] = PasswordChar;
- out->addString("PasswordChar", ch.c_str());
- out->addEnum("HTextAlign", HAlign, GUIAlignmentNames);
- out->addEnum("VTextAlign", VAlign, GUIAlignmentNames);
- out->addBool("Writable", m_writable);
+ out->addString("PasswordChar", ch.c_str());
+ out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames);
+ out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames);
+ out->addBool ("Writable", m_writable);
- IGUIEditBox::serializeAttributes(out, options);
+ IGUIEditBox::serializeAttributes(out,options);
}
+
//! Reads attributes of the element
-void intlGUIEditBox::deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options = 0)
+void intlGUIEditBox::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
{
- IGUIEditBox::deserializeAttributes(in, options);
+ IGUIEditBox::deserializeAttributes(in,options);
setOverrideColor(in->getAttributeAsColor("OverrideColor"));
enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled"));
@@ -1542,14 +1587,13 @@ void intlGUIEditBox::deserializeAttributes(
else
setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]);
- setTextAlignment((EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "HTextAlign", GUIAlignmentNames),
- (EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "VTextAlign", GUIAlignmentNames));
+ setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames),
+ (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames));
setWritable(in->getAttributeAsBool("Writable"));
// setOverrideFont(in->getAttributeAsFont("OverrideFont"));
}
+
} // end namespace gui
} // end namespace irr
diff --git a/src/gui/intlGUIEditBox.h b/src/gui/intlGUIEditBox.h
index 7b5f015fd..9d643495e 100644
--- a/src/gui/intlGUIEditBox.h
+++ b/src/gui/intlGUIEditBox.h
@@ -16,193 +16,193 @@ namespace irr
{
namespace gui
{
-class intlGUIEditBox : public IGUIEditBox
-{
-public:
- //! constructor
- intlGUIEditBox(const wchar_t *text, bool border, IGUIEnvironment *environment,
- IGUIElement *parent, s32 id, const core::rect<s32> &rectangle,
+ class intlGUIEditBox : public IGUIEditBox
+ {
+ public:
+
+ //! constructor
+ intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment,
+ IGUIElement* parent, s32 id, const core::rect<s32>& rectangle,
bool writable = true, bool has_vscrollbar = false);
- //! destructor
- virtual ~intlGUIEditBox();
+ //! destructor
+ virtual ~intlGUIEditBox();
+
+ //! Sets another skin independent font.
+ virtual void setOverrideFont(IGUIFont* font=0);
+
+ //! Gets the override font (if any)
+ /** \return The override font (may be 0) */
+ virtual IGUIFont* getOverrideFont() const;
+
+ //! Get the font which is used right now for drawing
+ /** Currently this is the override font when one is set and the
+ font of the active skin otherwise */
+ virtual IGUIFont* getActiveFont() const;
+
+ //! Sets another color for the text.
+ virtual void setOverrideColor(video::SColor color);
+
+ //! Gets the override color
+ virtual video::SColor getOverrideColor() const;
+
+ //! Sets if the text should use the overide color or the
+ //! color in the gui skin.
+ virtual void enableOverrideColor(bool enable);
+
+ //! Checks if an override color is enabled
+ /** \return true if the override color is enabled, false otherwise */
+ virtual bool isOverrideColorEnabled(void) const;
+
+ //! Sets whether to draw the background
+ virtual void setDrawBackground(bool draw);
+
+ virtual bool isDrawBackgroundEnabled() const { return true; }
+
+ //! Turns the border on or off
+ virtual void setDrawBorder(bool border);
+
+ virtual bool isDrawBorderEnabled() const { return Border; }
+
+ //! Enables or disables word wrap for using the edit box as multiline text editor.
+ virtual void setWordWrap(bool enable);
+
+ //! Checks if word wrap is enabled
+ //! \return true if word wrap is enabled, false otherwise
+ virtual bool isWordWrapEnabled() const;
+
+ //! Enables or disables newlines.
+ /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
+ instead a newline character will be inserted. */
+ virtual void setMultiLine(bool enable);
- //! Sets another skin independent font.
- virtual void setOverrideFont(IGUIFont *font = 0);
+ //! Checks if multi line editing is enabled
+ //! \return true if mult-line is enabled, false otherwise
+ virtual bool isMultiLineEnabled() const;
- //! Gets the override font (if any)
- /** \return The override font (may be 0) */
- virtual IGUIFont *getOverrideFont() const;
+ //! Enables or disables automatic scrolling with cursor position
+ //! \param enable: If set to true, the text will move around with the cursor position
+ virtual void setAutoScroll(bool enable);
- //! Get the font which is used right now for drawing
- /** Currently this is the override font when one is set and the
- font of the active skin otherwise */
- virtual IGUIFont *getActiveFont() const;
+ //! Checks to see if automatic scrolling is enabled
+ //! \return true if automatic scrolling is enabled, false if not
+ virtual bool isAutoScrollEnabled() const;
- //! Sets another color for the text.
- virtual void setOverrideColor(video::SColor color);
+ //! Gets the size area of the text in the edit box
+ //! \return Returns the size in pixels of the text
+ virtual core::dimension2du getTextDimension();
- //! Gets the override color
- virtual video::SColor getOverrideColor() const;
+ //! Sets text justification
+ virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical);
- //! Sets if the text should use the overide color or the
- //! color in the gui skin.
- virtual void enableOverrideColor(bool enable);
+ //! called if an event happened.
+ virtual bool OnEvent(const SEvent& event);
- //! Checks if an override color is enabled
- /** \return true if the override color is enabled, false otherwise */
- virtual bool isOverrideColorEnabled(void) const;
+ //! draws the element and its children
+ virtual void draw();
- //! Sets whether to draw the background
- virtual void setDrawBackground(bool draw);
+ //! Sets the new caption of this element.
+ virtual void setText(const wchar_t* text);
- virtual bool isDrawBackgroundEnabled() const { return true; }
+ //! Sets the maximum amount of characters which may be entered in the box.
+ //! \param max: Maximum amount of characters. If 0, the character amount is
+ //! infinity.
+ virtual void setMax(u32 max);
- //! Turns the border on or off
- virtual void setDrawBorder(bool border);
+ //! Returns maximum amount of characters, previously set by setMax();
+ virtual u32 getMax() const;
- virtual bool isDrawBorderEnabled() const { return Border; }
+ //! Sets whether the edit box is a password box. Setting this to true will
+ /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
+ \param passwordBox: true to enable password, false to disable
+ \param passwordChar: the character that is displayed instead of letters */
+ virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*');
- //! Enables or disables word wrap for using the edit box as multiline text editor.
- virtual void setWordWrap(bool enable);
+ //! Returns true if the edit box is currently a password box.
+ virtual bool isPasswordBox() const;
- //! Checks if word wrap is enabled
- //! \return true if word wrap is enabled, false otherwise
- virtual bool isWordWrapEnabled() const;
+ //! Updates the absolute position, splits text if required
+ virtual void updateAbsolutePosition();
- //! Enables or disables newlines.
- /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
- instead a newline character will be inserted. */
- virtual void setMultiLine(bool enable);
+ //! set true if this EditBox is writable
+ virtual void setWritable(bool can_write_text);
- //! Checks if multi line editing is enabled
- //! \return true if mult-line is enabled, false otherwise
- virtual bool isMultiLineEnabled() const;
+ //! Writes attributes of the element.
+ virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const;
- //! Enables or disables automatic scrolling with cursor position
- //! \param enable: If set to true, the text will move around with the cursor
- //! position
- virtual void setAutoScroll(bool enable);
+ //! Reads attributes of the element
+ virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options);
- //! Checks to see if automatic scrolling is enabled
- //! \return true if automatic scrolling is enabled, false if not
- virtual bool isAutoScrollEnabled() const;
+ virtual void setCursorChar(const wchar_t cursorChar) {}
- //! Gets the size area of the text in the edit box
- //! \return Returns the size in pixels of the text
- virtual core::dimension2du getTextDimension();
+ virtual wchar_t getCursorChar() const { return L'|'; }
- //! Sets text justification
- virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical);
+ virtual void setCursorBlinkTime(u32 timeMs) {}
- //! called if an event happened.
- virtual bool OnEvent(const SEvent &event);
+ virtual u32 getCursorBlinkTime() const { return 500; }
- //! draws the element and its children
- virtual void draw();
+ protected:
+ //! Breaks the single text line.
+ void breakText();
+ //! sets the area of the given line
+ void setTextRect(s32 line);
+ //! returns the line number that the cursor is on
+ s32 getLineFromPos(s32 pos);
+ //! adds a letter to the edit box
+ void inputChar(wchar_t c);
+ //! calculates the current scroll position
+ void calculateScrollPos();
+ //! send some gui event to parent
+ void sendGuiEvent(EGUI_EVENT_TYPE type);
+ //! set text markers
+ void setTextMarkers(s32 begin, s32 end);
- //! Sets the new caption of this element.
- virtual void setText(const wchar_t *text);
+ bool processKey(const SEvent& event);
+ bool processMouse(const SEvent& event);
+ s32 getCursorPos(s32 x, s32 y);
- //! Sets the maximum amount of characters which may be entered in the box.
- //! \param max: Maximum amount of characters. If 0, the character amount is
- //! infinity.
- virtual void setMax(u32 max);
+ //! Create a vertical scrollbar
+ void createVScrollBar();
- //! Returns maximum amount of characters, previously set by setMax();
- virtual u32 getMax() const;
+ //! Update the vertical scrollbar (visibilty & scroll position)
+ void updateVScrollBar();
- //! Sets whether the edit box is a password box. Setting this to true will
- /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
- \param passwordBox: true to enable password, false to disable
- \param passwordChar: the character that is displayed instead of letters */
- virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*');
+ bool MouseMarking = false;
+ bool Border;
+ bool OverrideColorEnabled = false;
+ s32 MarkBegin = 0;
+ s32 MarkEnd = 0;
- //! Returns true if the edit box is currently a password box.
- virtual bool isPasswordBox() const;
+ video::SColor OverrideColor = video::SColor(101,255,255,255);
+ gui::IGUIFont *OverrideFont = nullptr;
+ gui::IGUIFont *LastBreakFont = nullptr;
+ IOSOperator *Operator = nullptr;
- //! Updates the absolute position, splits text if required
- virtual void updateAbsolutePosition();
+ u64 BlinkStartTime = 0;
+ s32 CursorPos = 0;
+ s32 HScrollPos = 0;
+ s32 VScrollPos = 0; // scroll position in characters
+ u32 Max = 0;
- //! set true if this EditBox is writable
- virtual void setWritable(bool can_write_text);
+ bool WordWrap = false;
+ bool MultiLine = false;
+ bool AutoScroll = true;
+ bool PasswordBox = false;
+ wchar_t PasswordChar = L'*';
+ EGUI_ALIGNMENT HAlign = EGUIA_UPPERLEFT;
+ EGUI_ALIGNMENT VAlign = EGUIA_CENTER;
- //! Writes attributes of the element.
- virtual void serializeAttributes(io::IAttributes *out,
- io::SAttributeReadWriteOptions *options) const;
-
- //! Reads attributes of the element
- virtual void deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options);
-
- virtual void setCursorChar(const wchar_t cursorChar) {}
+ core::array<core::stringw> BrokenText;
+ core::array<s32> BrokenTextPositions;
- virtual wchar_t getCursorChar() const { return L'|'; }
+ core::rect<s32> CurrentTextRect = core::rect<s32>(0,0,1,1);
+ core::rect<s32> FrameRect; // temporary values
+ u32 m_scrollbar_width;
+ GUIScrollBar *m_vscrollbar;
+ bool m_writable;
- virtual void setCursorBlinkTime(u32 timeMs) {}
+ };
- virtual u32 getCursorBlinkTime() const { return 500; }
-
-protected:
- //! Breaks the single text line.
- void breakText();
- //! sets the area of the given line
- void setTextRect(s32 line);
- //! returns the line number that the cursor is on
- s32 getLineFromPos(s32 pos);
- //! adds a letter to the edit box
- void inputChar(wchar_t c);
- //! calculates the current scroll position
- void calculateScrollPos();
- //! send some gui event to parent
- void sendGuiEvent(EGUI_EVENT_TYPE type);
- //! set text markers
- void setTextMarkers(s32 begin, s32 end);
-
- bool processKey(const SEvent &event);
- bool processMouse(const SEvent &event);
- s32 getCursorPos(s32 x, s32 y);
-
- //! Create a vertical scrollbar
- void createVScrollBar();
-
- //! Update the vertical scrollbar (visibilty & scroll position)
- void updateVScrollBar();
-
- bool MouseMarking = false;
- bool Border;
- bool OverrideColorEnabled = false;
- s32 MarkBegin = 0;
- s32 MarkEnd = 0;
-
- video::SColor OverrideColor = video::SColor(101, 255, 255, 255);
- gui::IGUIFont *OverrideFont = nullptr;
- gui::IGUIFont *LastBreakFont = nullptr;
- IOSOperator *Operator = nullptr;
-
- u64 BlinkStartTime = 0;
- s32 CursorPos = 0;
- s32 HScrollPos = 0;
- s32 VScrollPos = 0; // scroll position in characters
- u32 Max = 0;
-
- bool WordWrap = false;
- bool MultiLine = false;
- bool AutoScroll = true;
- bool PasswordBox = false;
- wchar_t PasswordChar = L'*';
- EGUI_ALIGNMENT HAlign = EGUIA_UPPERLEFT;
- EGUI_ALIGNMENT VAlign = EGUIA_CENTER;
-
- core::array<core::stringw> BrokenText;
- core::array<s32> BrokenTextPositions;
-
- core::rect<s32> CurrentTextRect = core::rect<s32>(0, 0, 1, 1);
- core::rect<s32> FrameRect; // temporary values
- u32 m_scrollbar_width;
- GUIScrollBar *m_vscrollbar;
- bool m_writable;
-};
} // end namespace gui
} // end namespace irr
diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h
index e2107ab64..102492255 100644
--- a/src/gui/mainmenumanager.h
+++ b/src/gui/mainmenumanager.h
@@ -54,7 +54,7 @@ public:
}
#endif
- if (!m_stack.empty())
+ if(!m_stack.empty())
m_stack.back()->setVisible(false);
m_stack.push_back(menu);
}
@@ -68,32 +68,35 @@ public:
assert(*i == menu);
m_stack.erase(i);*/
- if (!m_stack.empty())
+ if(!m_stack.empty())
m_stack.back()->setVisible(true);
}
// Returns true to prevent further processing
- virtual bool preprocessEvent(const SEvent &event)
+ virtual bool preprocessEvent(const SEvent& event)
{
if (m_stack.empty())
return false;
- GUIModalMenu *mm = dynamic_cast<GUIModalMenu *>(m_stack.back());
+ GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(m_stack.back());
return mm && mm->preprocessEvent(event);
}
- u32 menuCount() { return m_stack.size(); }
+ u32 menuCount()
+ {
+ return m_stack.size();
+ }
bool pausesGame()
{
for (gui::IGUIElement *i : m_stack) {
- GUIModalMenu *mm = dynamic_cast<GUIModalMenu *>(i);
+ GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(i);
if (mm && mm->pausesGame())
return true;
}
return false;
}
- std::list<gui::IGUIElement *> m_stack;
+ std::list<gui::IGUIElement*> m_stack;
};
extern MainMenuManager g_menumgr;
@@ -106,17 +109,36 @@ public:
MainGameCallback() = default;
virtual ~MainGameCallback() = default;
- virtual void exitToOS() { shutdown_requested = true; }
+ virtual void exitToOS()
+ {
+ shutdown_requested = true;
+ }
- virtual void disconnect() { disconnect_requested = true; }
+ virtual void disconnect()
+ {
+ disconnect_requested = true;
+ }
- virtual void changePassword() { changepassword_requested = true; }
+ virtual void changePassword()
+ {
+ changepassword_requested = true;
+ }
- virtual void changeVolume() { changevolume_requested = true; }
+ virtual void changeVolume()
+ {
+ changevolume_requested = true;
+ }
- virtual void keyConfig() { keyconfig_requested = true; }
+ virtual void keyConfig()
+ {
+ keyconfig_requested = true;
+ }
+
+ virtual void signalKeyConfigChange()
+ {
+ keyconfig_changed = true;
+ }
- virtual void signalKeyConfigChange() { keyconfig_changed = true; }
bool disconnect_requested = false;
bool changepassword_requested = false;
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index 3fc9124ea..1cb687f82 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -38,8 +38,8 @@ public:
class GUIModalMenu : public gui::IGUIElement
{
public:
- GUIModalMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- IMenuManager *menumgr, bool remap_dbl_click = true);
+ GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id,
+ IMenuManager *menumgr, bool remap_dbl_click = true);
virtual ~GUIModalMenu();
void allowFocusRemoval(bool allow);
@@ -70,7 +70,7 @@ protected:
bool DoubleClickDetection(const SEvent &event);
v2s32 m_pointer;
- v2s32 m_old_pointer; // Mouse position after previous mouse event
+ v2s32 m_old_pointer; // Mouse position after previous mouse event
v2u32 m_screensize_old;
float m_gui_scale;
#ifdef __ANDROID__
@@ -92,7 +92,7 @@ private:
IMenuManager *m_menumgr;
/* If true, remap a double-click (or double-tap) action to ESC. This is so
* that, for example, Android users can double-tap to close a formspec.
- *
+ *
* This value can (currently) only be set by the class constructor
* and the default value for the setting is true.
*/
diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp
index 1f9da71c9..0d64aa618 100644
--- a/src/gui/touchscreengui.cpp
+++ b/src/gui/touchscreengui.cpp
@@ -36,75 +36,82 @@ with this program; if not, write to the Free Software Foundation, Inc.,
using namespace irr::core;
-const char **button_imagenames =
- (const char *[]){"jump_btn.png", "down.png", "zoom.png", "aux_btn.png"};
-
-const char **joystick_imagenames = (const char *[]){
- "joystick_off.png", "joystick_bg.png", "joystick_center.png"};
+const char **button_imagenames = (const char *[]) {
+ "jump_btn.png",
+ "down.png",
+ "zoom.png",
+ "aux_btn.png"
+};
+
+const char **joystick_imagenames = (const char *[]) {
+ "joystick_off.png",
+ "joystick_bg.png",
+ "joystick_center.png"
+};
static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
{
std::string key = "";
switch (id) {
- case forward_id:
- key = "forward";
- break;
- case left_id:
- key = "left";
- break;
- case right_id:
- key = "right";
- break;
- case backward_id:
- key = "backward";
- break;
- case inventory_id:
- key = "inventory";
- break;
- case drop_id:
- key = "drop";
- break;
- case jump_id:
- key = "jump";
- break;
- case crunch_id:
- key = "sneak";
- break;
- case zoom_id:
- key = "zoom";
- break;
- case special1_id:
- key = "special1";
- break;
- case fly_id:
- key = "freemove";
- break;
- case noclip_id:
- key = "noclip";
- break;
- case fast_id:
- key = "fastmove";
- break;
- case debug_id:
- key = "toggle_debug";
- break;
- case toggle_chat_id:
- key = "toggle_chat";
- break;
- case minimap_id:
- key = "minimap";
- break;
- case chat_id:
- key = "chat";
- break;
- case camera_id:
- key = "camera_mode";
- break;
- case range_id:
- key = "rangeselect";
- break;
- default:
- break;
+ case forward_id:
+ key = "forward";
+ break;
+ case left_id:
+ key = "left";
+ break;
+ case right_id:
+ key = "right";
+ break;
+ case backward_id:
+ key = "backward";
+ break;
+ case inventory_id:
+ key = "inventory";
+ break;
+ case drop_id:
+ key = "drop";
+ break;
+ case jump_id:
+ key = "jump";
+ break;
+ case crunch_id:
+ key = "sneak";
+ break;
+ case zoom_id:
+ key = "zoom";
+ break;
+ case special1_id:
+ key = "special1";
+ break;
+ case fly_id:
+ key = "freemove";
+ break;
+ case noclip_id:
+ key = "noclip";
+ break;
+ case fast_id:
+ key = "fastmove";
+ break;
+ case debug_id:
+ key = "toggle_debug";
+ break;
+ case toggle_chat_id:
+ key = "toggle_chat";
+ break;
+ case minimap_id:
+ key = "minimap";
+ break;
+ case chat_id:
+ key = "chat";
+ break;
+ case camera_id:
+ key = "camera_mode";
+ break;
+ case range_id:
+ key = "rangeselect";
+ break;
+ default:
+ break;
}
assert(!key.empty());
return keyname_to_keycode(g_settings->get("keymap_" + key).c_str());
@@ -113,18 +120,16 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
TouchScreenGUI *g_touchscreengui;
static void load_button_texture(button_info *btn, const char *path,
- const rect<s32> &button_rect, ISimpleTextureSource *tsrc,
- video::IVideoDriver *driver)
+ const rect<s32> &button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver)
{
unsigned int tid;
- video::ITexture *texture =
- guiScalingImageButton(driver, tsrc->getTexture(path, &tid),
- button_rect.getWidth(), button_rect.getHeight());
+ video::ITexture *texture = guiScalingImageButton(driver,
+ tsrc->getTexture(path, &tid), button_rect.getWidth(),
+ button_rect.getHeight());
if (texture) {
btn->guibutton->setUseAlphaChannel(true);
if (g_settings->getBool("gui_scaling_filter")) {
- rect<s32> txr_rect = rect<s32>(0, 0, button_rect.getWidth(),
- button_rect.getHeight());
+ rect<s32> txr_rect = rect<s32>(0, 0, button_rect.getWidth(), button_rect.getHeight());
btn->guibutton->setImage(texture, txr_rect);
btn->guibutton->setPressedImage(texture, txr_rect);
btn->guibutton->setScaleImage(false);
@@ -138,15 +143,17 @@ static void load_button_texture(button_info *btn, const char *path,
}
}
-AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device, IEventReceiver *receiver) :
- m_driver(device->getVideoDriver()), m_guienv(device->getGUIEnvironment()),
- m_receiver(receiver)
+AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device,
+ IEventReceiver *receiver) :
+ m_driver(device->getVideoDriver()),
+ m_guienv(device->getGUIEnvironment()),
+ m_receiver(receiver)
{
}
-void AutoHideButtonBar::init(ISimpleTextureSource *tsrc, const char *starter_img,
- int button_id, const v2s32 &UpperLeft, const v2s32 &LowerRight,
- autohide_button_bar_dir dir, float timeout)
+void AutoHideButtonBar::init(ISimpleTextureSource *tsrc,
+ const char *starter_img, int button_id, const v2s32 &UpperLeft,
+ const v2s32 &LowerRight, autohide_button_bar_dir dir, float timeout)
{
m_texturesource = tsrc;
@@ -155,19 +162,18 @@ void AutoHideButtonBar::init(ISimpleTextureSource *tsrc, const char *starter_img
// init settings bar
- irr::core::rect<int> current_button =
- rect<s32>(UpperLeft.X, UpperLeft.Y, LowerRight.X, LowerRight.Y);
+ irr::core::rect<int> current_button = rect<s32>(UpperLeft.X, UpperLeft.Y,
+ LowerRight.X, LowerRight.Y);
- m_starter.guibutton = m_guienv->addButton(
- current_button, nullptr, button_id, L"", nullptr);
+ m_starter.guibutton = m_guienv->addButton(current_button, nullptr, button_id, L"", nullptr);
m_starter.guibutton->grab();
- m_starter.repeatcounter = -1;
- m_starter.keycode = KEY_OEM_8; // use invalid keycode as it's not relevant
+ m_starter.repeatcounter = -1;
+ m_starter.keycode = KEY_OEM_8; // use invalid keycode as it's not relevant
m_starter.immediate_release = true;
m_starter.ids.clear();
- load_button_texture(&m_starter, starter_img, current_button, m_texturesource,
- m_driver);
+ load_button_texture(&m_starter, starter_img, current_button,
+ m_texturesource, m_driver);
m_dir = dir;
m_timeout_value = timeout;
@@ -183,13 +189,13 @@ AutoHideButtonBar::~AutoHideButtonBar()
}
}
-void AutoHideButtonBar::addButton(touch_gui_button_id button_id, const wchar_t *caption,
- const char *btn_image)
+void AutoHideButtonBar::addButton(touch_gui_button_id button_id,
+ const wchar_t *caption, const char *btn_image)
{
if (!m_initialized) {
errorstream << "AutoHideButtonBar::addButton not yet initialized!"
- << std::endl;
+ << std::endl;
return;
}
int button_size = 0;
@@ -206,55 +212,55 @@ void AutoHideButtonBar::addButton(touch_gui_button_id button_id, const wchar_t *
int x_end = 0;
if (m_dir == AHBB_Dir_Left_Right) {
- x_start = m_lower_right.X +
- (button_size * 1.25 * m_buttons.size()) +
- (button_size * 0.25);
+ x_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size())
+ + (button_size * 0.25);
x_end = x_start + button_size;
} else {
- x_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size()) -
- (button_size * 0.25);
+ x_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size())
+ - (button_size * 0.25);
x_start = x_end - button_size;
}
- current_button = rect<s32>(
- x_start, m_upper_left.Y, x_end, m_lower_right.Y);
+ current_button = rect<s32>(x_start, m_upper_left.Y, x_end,
+ m_lower_right.Y);
} else {
double y_start = 0;
double y_end = 0;
if (m_dir == AHBB_Dir_Top_Bottom) {
- y_start = m_lower_right.X +
- (button_size * 1.25 * m_buttons.size()) +
- (button_size * 0.25);
+ y_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size())
+ + (button_size * 0.25);
y_end = y_start + button_size;
} else {
- y_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size()) -
- (button_size * 0.25);
+ y_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size())
+ - (button_size * 0.25);
y_start = y_end - button_size;
}
- current_button = rect<s32>(
- m_upper_left.X, y_start, m_lower_right.Y, y_end);
+ current_button = rect<s32>(m_upper_left.X, y_start,
+ m_lower_right.Y, y_end);
}
- auto *btn = new button_info();
- btn->guibutton = m_guienv->addButton(
- current_button, nullptr, button_id, caption, nullptr);
+ auto *btn = new button_info();
+ btn->guibutton = m_guienv->addButton(current_button,
+ nullptr, button_id, caption, nullptr);
btn->guibutton->grab();
btn->guibutton->setVisible(false);
btn->guibutton->setEnabled(false);
- btn->repeatcounter = -1;
- btn->keycode = id2keycode(button_id);
+ btn->repeatcounter = -1;
+ btn->keycode = id2keycode(button_id);
btn->immediate_release = true;
btn->ids.clear();
- load_button_texture(btn, btn_image, current_button, m_texturesource, m_driver);
+ load_button_texture(btn, btn_image, current_button, m_texturesource,
+ m_driver);
m_buttons.push_back(btn);
}
void AutoHideButtonBar::addToggleButton(touch_gui_button_id button_id,
- const wchar_t *caption, const char *btn_image_1, const char *btn_image_2)
+ const wchar_t *caption, const char *btn_image_1,
+ const char *btn_image_2)
{
addButton(button_id, caption, btn_image_1);
button_info *btn = m_buttons.back();
@@ -285,11 +291,11 @@ bool AutoHideButtonBar::isButton(const SEvent &event)
auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
- translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key = (*iter)->keycode;
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
- translated->KeyInput.Char = 0;
+ translated->EventType = irr::EET_KEY_INPUT_EVENT;
+ translated->KeyInput.Key = (*iter)->keycode;
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
+ translated->KeyInput.Char = 0;
// add this event
translated->KeyInput.PressedDown = true;
@@ -308,14 +314,12 @@ bool AutoHideButtonBar::isButton(const SEvent &event)
if ((*iter)->togglable == 1) {
(*iter)->togglable = 2;
load_button_texture(*iter, (*iter)->textures[1],
- (*iter)->guibutton
- ->getRelativePosition(),
+ (*iter)->guibutton->getRelativePosition(),
m_texturesource, m_driver);
} else if ((*iter)->togglable == 2) {
(*iter)->togglable = 1;
load_button_texture(*iter, (*iter)->textures[0],
- (*iter)->guibutton
- ->getRelativePosition(),
+ (*iter)->guibutton->getRelativePosition(),
m_texturesource, m_driver);
}
@@ -406,41 +410,42 @@ void AutoHideButtonBar::show()
}
}
-TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver) :
- m_device(device), m_guienv(device->getGUIEnvironment()),
- m_receiver(receiver), m_settingsbar(device, receiver),
- m_rarecontrolsbar(device, receiver)
+TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver):
+ m_device(device),
+ m_guienv(device->getGUIEnvironment()),
+ m_receiver(receiver),
+ m_settingsbar(device, receiver),
+ m_rarecontrolsbar(device, receiver)
{
for (auto &button : m_buttons) {
- button.guibutton = nullptr;
+ button.guibutton = nullptr;
button.repeatcounter = -1;
- button.repeatdelay = BUTTON_REPEAT_DELAY;
+ button.repeatdelay = BUTTON_REPEAT_DELAY;
}
m_touchscreen_threshold = g_settings->getU16("touchscreen_threshold");
m_fixed_joystick = g_settings->getBool("fixed_virtual_joystick");
- m_joystick_triggers_special1 =
- g_settings->getBool("virtual_joystick_triggers_aux");
+ m_joystick_triggers_special1 = g_settings->getBool("virtual_joystick_triggers_aux");
m_screensize = m_device->getVideoDriver()->getScreenSize();
button_size = MYMIN(m_screensize.Y / 4.5f,
porting::getDisplayDensity() *
- g_settings->getFloat("hud_scaling") * 65.0f);
+ g_settings->getFloat("hud_scaling") * 65.0f);
}
void TouchScreenGUI::initButton(touch_gui_button_id id, const rect<s32> &button_rect,
const std::wstring &caption, bool immediate_release, float repeat_delay)
{
- button_info *btn = &m_buttons[id];
- btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, caption.c_str());
+ button_info *btn = &m_buttons[id];
+ btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, caption.c_str());
btn->guibutton->grab();
- btn->repeatcounter = -1;
- btn->repeatdelay = repeat_delay;
- btn->keycode = id2keycode(id);
+ btn->repeatcounter = -1;
+ btn->repeatdelay = repeat_delay;
+ btn->keycode = id2keycode(id);
btn->immediate_release = immediate_release;
btn->ids.clear();
- load_button_texture(btn, button_imagenames[id], button_rect, m_texturesource,
- m_device->getVideoDriver());
+ load_button_texture(btn, button_imagenames[id], button_rect,
+ m_texturesource, m_device->getVideoDriver());
}
button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id,
@@ -452,8 +457,8 @@ button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id,
btn->guibutton->grab();
btn->ids.clear();
- load_button_texture(btn, joystick_imagenames[texture_id], button_rect,
- m_texturesource, m_device->getVideoDriver());
+ load_button_texture(btn, joystick_imagenames[texture_id],
+ button_rect, m_texturesource, m_device->getVideoDriver());
return btn;
}
@@ -462,7 +467,7 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
{
assert(tsrc);
- m_visible = true;
+ m_visible = true;
m_texturesource = tsrc;
/* Init joystick display "button"
@@ -470,21 +475,23 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
*/
if (m_fixed_joystick) {
m_joystick_btn_off = initJoystickButton(joystick_off_id,
- rect<s32>(button_size, m_screensize.Y - button_size * 4,
+ rect<s32>(button_size,
+ m_screensize.Y - button_size * 4,
button_size * 4,
- m_screensize.Y - button_size),
- 0);
+ m_screensize.Y - button_size), 0);
} else {
m_joystick_btn_off = initJoystickButton(joystick_off_id,
- rect<s32>(button_size, m_screensize.Y - button_size * 3,
+ rect<s32>(button_size,
+ m_screensize.Y - button_size * 3,
button_size * 3,
- m_screensize.Y - button_size),
- 0);
+ m_screensize.Y - button_size), 0);
}
m_joystick_btn_bg = initJoystickButton(joystick_bg_id,
- rect<s32>(button_size, m_screensize.Y - button_size * 4,
- button_size * 4, m_screensize.Y - button_size),
+ rect<s32>(button_size,
+ m_screensize.Y - button_size * 4,
+ button_size * 4,
+ m_screensize.Y - button_size),
1, false);
m_joystick_btn_center = initJoystickButton(joystick_center_id,
@@ -524,48 +531,39 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
L"spc1", false);
m_settingsbar.init(m_texturesource, "gear_icon.png", settings_starter_id,
- v2s32(m_screensize.X - (1.25 * button_size),
- m_screensize.Y -
- ((SETTINGS_BAR_Y_OFFSET + 1.0) *
- button_size) +
- (0.5 * button_size)),
- v2s32(m_screensize.X - (0.25 * button_size),
- m_screensize.Y -
- (SETTINGS_BAR_Y_OFFSET *
- button_size) +
- (0.5 * button_size)),
- AHBB_Dir_Right_Left, 3.0);
-
- m_settingsbar.addButton(fly_id, L"fly", "fly_btn.png");
- m_settingsbar.addButton(noclip_id, L"noclip", "noclip_btn.png");
- m_settingsbar.addButton(fast_id, L"fast", "fast_btn.png");
- m_settingsbar.addButton(debug_id, L"debug", "debug_btn.png");
- m_settingsbar.addButton(camera_id, L"camera", "camera_btn.png");
- m_settingsbar.addButton(range_id, L"rangeview", "rangeview_btn.png");
- m_settingsbar.addButton(minimap_id, L"minimap", "minimap_btn.png");
+ v2s32(m_screensize.X - (1.25 * button_size),
+ m_screensize.Y - ((SETTINGS_BAR_Y_OFFSET + 1.0) * button_size)
+ + (0.5 * button_size)),
+ v2s32(m_screensize.X - (0.25 * button_size),
+ m_screensize.Y - (SETTINGS_BAR_Y_OFFSET * button_size)
+ + (0.5 * button_size)),
+ AHBB_Dir_Right_Left, 3.0);
+
+ m_settingsbar.addButton(fly_id, L"fly", "fly_btn.png");
+ m_settingsbar.addButton(noclip_id, L"noclip", "noclip_btn.png");
+ m_settingsbar.addButton(fast_id, L"fast", "fast_btn.png");
+ m_settingsbar.addButton(debug_id, L"debug", "debug_btn.png");
+ m_settingsbar.addButton(camera_id, L"camera", "camera_btn.png");
+ m_settingsbar.addButton(range_id, L"rangeview", "rangeview_btn.png");
+ m_settingsbar.addButton(minimap_id, L"minimap", "minimap_btn.png");
// Chat is shown by default, so chat_hide_btn.png is shown first.
- m_settingsbar.addToggleButton(toggle_chat_id, L"togglechat", "chat_hide_btn.png",
- "chat_show_btn.png");
+ m_settingsbar.addToggleButton(toggle_chat_id, L"togglechat",
+ "chat_hide_btn.png", "chat_show_btn.png");
m_rarecontrolsbar.init(m_texturesource, "rare_controls.png",
- rare_controls_starter_id,
- v2s32(0.25 * button_size,
- m_screensize.Y -
- ((RARE_CONTROLS_BAR_Y_OFFSET +
- 1.0) *
- button_size) +
- (0.5 * button_size)),
- v2s32(0.75 * button_size,
- m_screensize.Y -
- (RARE_CONTROLS_BAR_Y_OFFSET *
- button_size) +
- (0.5 * button_size)),
- AHBB_Dir_Left_Right, 2.0);
-
- m_rarecontrolsbar.addButton(chat_id, L"Chat", "chat_btn.png");
- m_rarecontrolsbar.addButton(inventory_id, L"inv", "inventory_btn.png");
- m_rarecontrolsbar.addButton(drop_id, L"drop", "drop_btn.png");
+ rare_controls_starter_id,
+ v2s32(0.25 * button_size,
+ m_screensize.Y - ((RARE_CONTROLS_BAR_Y_OFFSET + 1.0) * button_size)
+ + (0.5 * button_size)),
+ v2s32(0.75 * button_size,
+ m_screensize.Y - (RARE_CONTROLS_BAR_Y_OFFSET * button_size)
+ + (0.5 * button_size)),
+ AHBB_Dir_Left_Right, 2.0);
+
+ m_rarecontrolsbar.addButton(chat_id, L"Chat", "chat_btn.png");
+ m_rarecontrolsbar.addButton(inventory_id, L"inv", "inventory_btn.png");
+ m_rarecontrolsbar.addButton(drop_id, L"drop", "drop_btn.png");
}
touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y)
@@ -573,13 +571,13 @@ touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y)
IGUIElement *rootguielement = m_guienv->getRootGUIElement();
if (rootguielement != nullptr) {
- gui::IGUIElement *element = rootguielement->getElementFromPoint(
- core::position2d<s32>(x, y));
+ gui::IGUIElement *element =
+ rootguielement->getElementFromPoint(core::position2d<s32>(x, y));
if (element)
for (unsigned int i = 0; i < after_last_element_id; i++)
if (element == m_buttons[i].guibutton)
- return (touch_gui_button_id)i;
+ return (touch_gui_button_id) i;
}
return after_last_element_id;
@@ -593,7 +591,7 @@ touch_gui_button_id TouchScreenGUI::getButtonID(size_t eventID)
auto id = std::find(btn->ids.begin(), btn->ids.end(), eventID);
if (id != btn->ids.end())
- return (touch_gui_button_id)i;
+ return (touch_gui_button_id) i;
}
return after_last_element_id;
@@ -603,18 +601,17 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event)
{
// check if hud item is pressed
for (auto &hud_rect : m_hud_rects) {
- if (hud_rect.second.isPointInside(
- v2s32(event.TouchInput.X, event.TouchInput.Y))) {
+ if (hud_rect.second.isPointInside(v2s32(event.TouchInput.X,
+ event.TouchInput.Y))) {
auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key =
- (irr::EKEY_CODE)(KEY_KEY_1 + hud_rect.first);
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
+ translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + hud_rect.first);
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
translated->KeyInput.PressedDown = true;
m_receiver->OnEvent(*translated);
- m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key;
+ m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key;
delete translated;
return true;
}
@@ -622,27 +619,25 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event)
return false;
}
-void TouchScreenGUI::handleButtonEvent(
- touch_gui_button_id button, size_t eventID, bool action)
+void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
+ size_t eventID, bool action)
{
button_info *btn = &m_buttons[button];
auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
- translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key = btn->keycode;
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
- translated->KeyInput.Char = 0;
+ translated->EventType = irr::EET_KEY_INPUT_EVENT;
+ translated->KeyInput.Key = btn->keycode;
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
+ translated->KeyInput.Char = 0;
// add this event
if (action) {
- assert(std::find(btn->ids.begin(), btn->ids.end(), eventID) ==
- btn->ids.end());
+ assert(std::find(btn->ids.begin(), btn->ids.end(), eventID) == btn->ids.end());
btn->ids.push_back(eventID);
- if (btn->ids.size() > 1)
- return;
+ if (btn->ids.size() > 1) return;
btn->repeatcounter = 0;
translated->KeyInput.PressedDown = true;
@@ -661,7 +656,7 @@ void TouchScreenGUI::handleButtonEvent(
return;
translated->KeyInput.PressedDown = false;
- btn->repeatcounter = -1;
+ btn->repeatcounter = -1;
m_receiver->OnEvent(*translated);
}
delete translated;
@@ -671,6 +666,7 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
{
touch_gui_button_id button = getButtonID(evt_id);
+
if (button != after_last_element_id) {
// handle button events
handleButtonEvent(button, evt_id, false);
@@ -682,13 +678,13 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
if (m_move_sent_as_mouse_event) {
auto *translated = new SEvent;
memset(translated, 0, sizeof(SEvent));
- translated->EventType = EET_MOUSE_INPUT_EVENT;
- translated->MouseInput.X = m_move_downlocation.X;
- translated->MouseInput.Y = m_move_downlocation.Y;
- translated->MouseInput.Shift = false;
- translated->MouseInput.Control = false;
+ translated->EventType = EET_MOUSE_INPUT_EVENT;
+ translated->MouseInput.X = m_move_downlocation.X;
+ translated->MouseInput.Y = m_move_downlocation.Y;
+ translated->MouseInput.Shift = false;
+ translated->MouseInput.Control = false;
translated->MouseInput.ButtonStates = 0;
- translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
+ translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
m_receiver->OnEvent(*translated);
delete translated;
} else {
@@ -710,11 +706,13 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
m_joystick_btn_bg->guibutton->setVisible(false);
m_joystick_btn_center->guibutton->setVisible(false);
} else {
- infostream << "TouchScreenGUI::translateEvent released unknown button: "
- << evt_id << std::endl;
+ infostream
+ << "TouchScreenGUI::translateEvent released unknown button: "
+ << evt_id << std::endl;
}
- for (auto iter = m_known_ids.begin(); iter != m_known_ids.end(); ++iter) {
+ for (auto iter = m_known_ids.begin();
+ iter != m_known_ids.end(); ++iter) {
if (iter->id == evt_id) {
m_known_ids.erase(iter);
break;
@@ -725,8 +723,9 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
void TouchScreenGUI::translateEvent(const SEvent &event)
{
if (!m_visible) {
- infostream << "TouchScreenGUI::translateEvent got event but not visible!"
- << std::endl;
+ infostream
+ << "TouchScreenGUI::translateEvent got event but not visible!"
+ << std::endl;
return;
}
@@ -741,8 +740,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
*/
id_status toadd{};
toadd.id = event.TouchInput.ID;
- toadd.X = event.TouchInput.X;
- toadd.Y = event.TouchInput.Y;
+ toadd.X = event.TouchInput.X;
+ toadd.Y = event.TouchInput.Y;
m_known_ids.push_back(toadd);
size_t eventID = event.TouchInput.ID;
@@ -771,67 +770,49 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
m_rarecontrolsbar.deactivate();
s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f;
- s32 dyj = event.TouchInput.Y - m_screensize.Y +
- button_size * 5.0f / 2.0f;
+ s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f;
/* Select joystick when left 1/3 of screen dragged or
* when joystick tapped (fixed joystick position)
*/
- if ((m_fixed_joystick &&
- dxj * dxj + dyj * dyj <=
- button_size * button_size *
- 1.5 * 1.5) ||
- (!m_fixed_joystick &&
- event.TouchInput.X <
- m_screensize.X /
- 3.0f)) {
- // If we don't already have a starting point for joystick
- // make this the one.
+ if ((m_fixed_joystick && dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5) ||
+ (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3.0f)) {
+ // If we don't already have a starting point for joystick make this the one.
if (m_joystick_id == -1) {
- m_joystick_id = event.TouchInput.ID;
+ m_joystick_id = event.TouchInput.ID;
m_joystick_has_really_moved = false;
m_joystick_btn_off->guibutton->setVisible(false);
m_joystick_btn_bg->guibutton->setVisible(true);
- m_joystick_btn_center->guibutton->setVisible(
- true);
+ m_joystick_btn_center->guibutton->setVisible(true);
- // If it's a fixed joystick, don't move the
- // joystick "button".
+ // If it's a fixed joystick, don't move the joystick "button".
if (!m_fixed_joystick)
m_joystick_btn_bg->guibutton->setRelativePosition(v2s32(
- event.TouchInput.X -
- button_size * 3.0f /
- 2.0f,
- event.TouchInput.Y -
- button_size * 3.0f /
- 2.0f));
+ event.TouchInput.X - button_size * 3.0f / 2.0f,
+ event.TouchInput.Y - button_size * 3.0f / 2.0f));
m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
- event.TouchInput.X -
- button_size / 2.0f,
- event.TouchInput.Y -
- button_size / 2.0f));
+ event.TouchInput.X - button_size / 2.0f,
+ event.TouchInput.Y - button_size / 2.0f));
}
} else {
- // If we don't already have a moving point make this the
- // moving one.
+ // If we don't already have a moving point make this the moving one.
if (m_move_id == -1) {
- m_move_id = event.TouchInput.ID;
- m_move_has_really_moved = false;
- m_move_downtime = porting::getTimeMs();
- m_move_downlocation = v2s32(event.TouchInput.X,
- event.TouchInput.Y);
+ m_move_id = event.TouchInput.ID;
+ m_move_has_really_moved = false;
+ m_move_downtime = porting::getTimeMs();
+ m_move_downlocation = v2s32(event.TouchInput.X, event.TouchInput.Y);
m_move_sent_as_mouse_event = false;
}
}
}
- m_pointerpos[event.TouchInput.ID] =
- v2s32(event.TouchInput.X, event.TouchInput.Y);
- } else if (event.TouchInput.Event == ETIE_LEFT_UP) {
- verbosestream << "Up event for pointerid: " << event.TouchInput.ID
- << std::endl;
+ m_pointerpos[event.TouchInput.ID] = v2s32(event.TouchInput.X, event.TouchInput.Y);
+ }
+ else if (event.TouchInput.Event == ETIE_LEFT_UP) {
+ verbosestream
+ << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
handleReleaseEvent(event.TouchInput.ID);
} else {
assert(event.TouchInput.Event == ETIE_MOVED);
@@ -842,19 +823,13 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
if (m_move_id != -1) {
if ((event.TouchInput.ID == m_move_id) &&
- (!m_move_sent_as_mouse_event)) {
+ (!m_move_sent_as_mouse_event)) {
double distance = sqrt(
- (m_pointerpos[event.TouchInput.ID].X -
- event.TouchInput.X) *
- (m_pointerpos[event.TouchInput.ID]
- .X -
- event.TouchInput.X) +
- (m_pointerpos[event.TouchInput.ID].Y -
- event.TouchInput.Y) *
- (m_pointerpos[event.TouchInput.ID]
- .Y -
- event.TouchInput.Y));
+ (m_pointerpos[event.TouchInput.ID].X - event.TouchInput.X) *
+ (m_pointerpos[event.TouchInput.ID].X - event.TouchInput.X) +
+ (m_pointerpos[event.TouchInput.ID].Y - event.TouchInput.Y) *
+ (m_pointerpos[event.TouchInput.ID].Y - event.TouchInput.Y));
if ((distance > m_touchscreen_threshold) ||
(m_move_has_really_moved)) {
@@ -867,31 +842,25 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
// adapt to similar behaviour as pc screen
- double d = g_settings->getFloat(
- "mouse_sensitivity") *
- 3.0f;
+ double d = g_settings->getFloat("mouse_sensitivity") * 3.0f;
m_camera_yaw_change -= dx * d;
- m_camera_pitch = MYMIN(
- MYMAX(m_camera_pitch + (dy * d),
- -180),
- 180);
+ m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
// update shootline
- m_shootline = m_device->getSceneManager()
- ->getSceneCollisionManager()
- ->getRayFromScreenCoordinates(v2s32(
- X,
- Y));
+ m_shootline = m_device
+ ->getSceneManager()
+ ->getSceneCollisionManager()
+ ->getRayFromScreenCoordinates(v2s32(X, Y));
m_pointerpos[event.TouchInput.ID] = v2s32(X, Y);
}
} else if ((event.TouchInput.ID == m_move_id) &&
(m_move_sent_as_mouse_event)) {
- m_shootline = m_device->getSceneManager()
- ->getSceneCollisionManager()
- ->getRayFromScreenCoordinates(v2s32(
- event.TouchInput.X,
- event.TouchInput.Y));
+ m_shootline = m_device
+ ->getSceneManager()
+ ->getSceneCollisionManager()
+ ->getRayFromScreenCoordinates(
+ v2s32(event.TouchInput.X, event.TouchInput.Y));
}
}
@@ -909,17 +878,13 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
double distance_sq = dx * dx + dy * dy;
s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f;
- s32 dyj = event.TouchInput.Y - m_screensize.Y +
- button_size * 5.0f / 2.0f;
- bool inside_joystick = (dxj * dxj + dyj * dyj <=
- button_size * button_size * 1.5 * 1.5);
+ s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f;
+ bool inside_joystick = (dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5);
if (m_joystick_has_really_moved ||
- (!m_joystick_has_really_moved &&
- inside_joystick) ||
+ (!m_joystick_has_really_moved && inside_joystick) ||
(!m_fixed_joystick &&
- distance_sq > m_touchscreen_threshold *
- m_touchscreen_threshold)) {
+ distance_sq > m_touchscreen_threshold * m_touchscreen_threshold)) {
m_joystick_has_really_moved = true;
double distance = sqrt(distance_sq);
@@ -931,7 +896,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
angle = fmod(angle + 180 + 22.5, 360);
// reset state before applying
- for (bool &joystick_status : m_joystick_status)
+ for (bool & joystick_status : m_joystick_status)
joystick_status = false;
if (distance <= m_touchscreen_threshold) {
@@ -961,31 +926,20 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
if (distance > button_size) {
m_joystick_status[j_special1] = true;
// move joystick "button"
- s32 ndx = button_size * dx / distance -
- button_size / 2.0f;
- s32 ndy = button_size * dy / distance -
- button_size / 2.0f;
+ s32 ndx = button_size * dx / distance - button_size / 2.0f;
+ s32 ndy = button_size * dy / distance - button_size / 2.0f;
if (m_fixed_joystick) {
m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
- button_size * 5 / 2 + ndx,
- m_screensize.Y -
- button_size * 5 /
- 2 +
- ndy));
+ button_size * 5 / 2 + ndx,
+ m_screensize.Y - button_size * 5 / 2 + ndy));
} else {
m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
- m_pointerpos[event.TouchInput.ID]
- .X +
- ndx,
- m_pointerpos[event.TouchInput.ID]
- .Y +
- ndy));
+ m_pointerpos[event.TouchInput.ID].X + ndx,
+ m_pointerpos[event.TouchInput.ID].Y + ndy));
}
} else {
- m_joystick_btn_center->guibutton
- ->setRelativePosition(v2s32(
- X - button_size / 2,
- Y - button_size / 2));
+ m_joystick_btn_center->guibutton->setRelativePosition(
+ v2s32(X - button_size / 2, Y - button_size / 2));
}
}
}
@@ -1001,23 +955,22 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event)
if (m_buttons[i].ids.empty())
continue;
- for (auto iter = m_buttons[i].ids.begin(); iter != m_buttons[i].ids.end();
- ++iter) {
+ for (auto iter = m_buttons[i].ids.begin();
+ iter != m_buttons[i].ids.end(); ++iter) {
if (event.TouchInput.ID == *iter) {
- int current_button_id = getButtonID(
- event.TouchInput.X, event.TouchInput.Y);
+ int current_button_id =
+ getButtonID(event.TouchInput.X, event.TouchInput.Y);
if (current_button_id == i)
continue;
// remove old button
- handleButtonEvent((touch_gui_button_id)i, *iter, false);
+ handleButtonEvent((touch_gui_button_id) i, *iter, false);
if (current_button_id == after_last_element_id)
return;
- handleButtonEvent((touch_gui_button_id)current_button_id,
- *iter, true);
+ handleButtonEvent((touch_gui_button_id) current_button_id, *iter, true);
return;
}
}
@@ -1029,48 +982,48 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event)
return;
button_info *btn = &m_buttons[current_button_id];
- if (std::find(btn->ids.begin(), btn->ids.end(), event.TouchInput.ID) ==
- btn->ids.end())
- handleButtonEvent((touch_gui_button_id)current_button_id,
+ if (std::find(btn->ids.begin(), btn->ids.end(), event.TouchInput.ID)
+ == btn->ids.end())
+ handleButtonEvent((touch_gui_button_id) current_button_id,
event.TouchInput.ID, true);
}
bool TouchScreenGUI::doubleTapDetection()
{
m_key_events[0].down_time = m_key_events[1].down_time;
- m_key_events[0].x = m_key_events[1].x;
- m_key_events[0].y = m_key_events[1].y;
+ m_key_events[0].x = m_key_events[1].x;
+ m_key_events[0].y = m_key_events[1].y;
m_key_events[1].down_time = m_move_downtime;
- m_key_events[1].x = m_move_downlocation.X;
- m_key_events[1].y = m_move_downlocation.Y;
+ m_key_events[1].x = m_move_downlocation.X;
+ m_key_events[1].y = m_move_downlocation.Y;
u64 delta = porting::getDeltaMs(m_key_events[0].down_time, porting::getTimeMs());
if (delta > 400)
return false;
- double distance = sqrt((m_key_events[0].x - m_key_events[1].x) *
- (m_key_events[0].x - m_key_events[1].x) +
- (m_key_events[0].y - m_key_events[1].y) *
- (m_key_events[0].y - m_key_events[1].y));
+ double distance = sqrt(
+ (m_key_events[0].x - m_key_events[1].x) *
+ (m_key_events[0].x - m_key_events[1].x) +
+ (m_key_events[0].y - m_key_events[1].y) *
+ (m_key_events[0].y - m_key_events[1].y));
if (distance > (20 + m_touchscreen_threshold))
return false;
auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
- translated->EventType = EET_MOUSE_INPUT_EVENT;
- translated->MouseInput.X = m_key_events[0].x;
- translated->MouseInput.Y = m_key_events[0].y;
- translated->MouseInput.Shift = false;
- translated->MouseInput.Control = false;
+ translated->EventType = EET_MOUSE_INPUT_EVENT;
+ translated->MouseInput.X = m_key_events[0].x;
+ translated->MouseInput.Y = m_key_events[0].y;
+ translated->MouseInput.Shift = false;
+ translated->MouseInput.Control = false;
translated->MouseInput.ButtonStates = EMBSM_RIGHT;
// update shootline
- m_shootline = m_device->getSceneManager()
- ->getSceneCollisionManager()
- ->getRayFromScreenCoordinates(
- v2s32(m_key_events[0].x,
- m_key_events[0].y));
+ m_shootline = m_device
+ ->getSceneManager()
+ ->getSceneCollisionManager()
+ ->getRayFromScreenCoordinates(v2s32(m_key_events[0].x, m_key_events[0].y));
translated->MouseInput.Event = EMIE_RMOUSE_PRESSED_DOWN;
verbosestream << "TouchScreenGUI::translateEvent right click press" << std::endl;
@@ -1078,8 +1031,7 @@ bool TouchScreenGUI::doubleTapDetection()
translated->MouseInput.ButtonStates = 0;
translated->MouseInput.Event = EMIE_RMOUSE_LEFT_UP;
- verbosestream << "TouchScreenGUI::translateEvent right click release"
- << std::endl;
+ verbosestream << "TouchScreenGUI::translateEvent right click release" << std::endl;
m_receiver->OnEvent(*translated);
delete translated;
return true;
@@ -1092,8 +1044,8 @@ void TouchScreenGUI::applyJoystickStatus()
continue;
SEvent translated{};
- translated.EventType = irr::EET_KEY_INPUT_EVENT;
- translated.KeyInput.Key = id2keycode(m_joystick_names[i]);
+ translated.EventType = irr::EET_KEY_INPUT_EVENT;
+ translated.KeyInput.Key = id2keycode(m_joystick_names[i]);
translated.KeyInput.PressedDown = false;
m_receiver->OnEvent(translated);
@@ -1143,11 +1095,11 @@ void TouchScreenGUI::step(float dtime)
if (button.repeatcounter < button.repeatdelay)
continue;
- button.repeatcounter = 0;
+ button.repeatcounter = 0;
SEvent translated;
memset(&translated, 0, sizeof(SEvent));
- translated.EventType = irr::EET_KEY_INPUT_EVENT;
- translated.KeyInput.Key = button.keycode;
+ translated.EventType = irr::EET_KEY_INPUT_EVENT;
+ translated.KeyInput.Key = button.keycode;
translated.KeyInput.PressedDown = false;
m_receiver->OnEvent(translated);
@@ -1165,33 +1117,31 @@ void TouchScreenGUI::step(float dtime)
}
// if a new placed pointer isn't moved for some time start digging
- if ((m_move_id != -1) && (!m_move_has_really_moved) &&
+ if ((m_move_id != -1) &&
+ (!m_move_has_really_moved) &&
(!m_move_sent_as_mouse_event)) {
u64 delta = porting::getDeltaMs(m_move_downtime, porting::getTimeMs());
if (delta > MIN_DIG_TIME_MS) {
- m_shootline = m_device->getSceneManager()
- ->getSceneCollisionManager()
- ->getRayFromScreenCoordinates(v2s32(
- m_move_downlocation
- .X,
- m_move_downlocation
- .Y));
+ m_shootline = m_device
+ ->getSceneManager()
+ ->getSceneCollisionManager()
+ ->getRayFromScreenCoordinates(
+ v2s32(m_move_downlocation.X,m_move_downlocation.Y));
SEvent translated;
memset(&translated, 0, sizeof(SEvent));
- translated.EventType = EET_MOUSE_INPUT_EVENT;
- translated.MouseInput.X = m_move_downlocation.X;
- translated.MouseInput.Y = m_move_downlocation.Y;
- translated.MouseInput.Shift = false;
- translated.MouseInput.Control = false;
+ translated.EventType = EET_MOUSE_INPUT_EVENT;
+ translated.MouseInput.X = m_move_downlocation.X;
+ translated.MouseInput.Y = m_move_downlocation.Y;
+ translated.MouseInput.Shift = false;
+ translated.MouseInput.Control = false;
translated.MouseInput.ButtonStates = EMBSM_LEFT;
- translated.MouseInput.Event = EMIE_LMOUSE_PRESSED_DOWN;
- verbosestream << "TouchScreenGUI::step left click press"
- << std::endl;
+ translated.MouseInput.Event = EMIE_LMOUSE_PRESSED_DOWN;
+ verbosestream << "TouchScreenGUI::step left click press" << std::endl;
m_receiver->OnEvent(translated);
- m_move_sent_as_mouse_event = true;
+ m_move_sent_as_mouse_event = true;
}
}