Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NOSQUASH] Use our GUIElement classes everywhere #13732

Merged
merged 10 commits into from
Aug 14, 2023
12 changes: 5 additions & 7 deletions src/client/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1776,7 +1776,6 @@ float Client::mediaReceiveProgress()
}

struct TextureUpdateArgs {
gui::IGUIEnvironment *guienv;
u64 last_time_ms;
u16 last_percent;
std::wstring text_base;
Expand All @@ -1802,7 +1801,7 @@ void Client::showUpdateProgressTexture(void *args, u32 progress, u32 max_progres
targs->last_time_ms = time_ms;
std::wostringstream strm;
strm << targs->text_base << L" " << targs->last_percent << L"%...";
m_rendering_engine->draw_load_screen(strm.str(), targs->guienv, targs->tsrc, 0,
m_rendering_engine->draw_load_screen(strm.str(), targs->tsrc, 0,
72 + (u16) ((18. / 100.) * (double) targs->last_percent));
}
}
Expand All @@ -1822,19 +1821,19 @@ void Client::afterContentReceived()
// Rebuild inherited images and recreate textures
infostream<<"- Rebuilding images and textures"<<std::endl;
m_rendering_engine->draw_load_screen(wstrgettext("Loading textures..."),
guienv, m_tsrc, 0, 70);
m_tsrc, 0, 70);
m_tsrc->rebuildImagesAndTextures();

// Rebuild shaders
infostream<<"- Rebuilding shaders"<<std::endl;
m_rendering_engine->draw_load_screen(wstrgettext("Rebuilding shaders..."),
guienv, m_tsrc, 0, 71);
m_tsrc, 0, 71);
m_shsrc->rebuildShaders();

// Update node aliases
infostream<<"- Updating node aliases"<<std::endl;
m_rendering_engine->draw_load_screen(wstrgettext("Initializing nodes..."),
guienv, m_tsrc, 0, 72);
m_tsrc, 0, 72);
m_nodedef->updateAliases(m_itemdef);
for (const auto &path : getTextureDirs()) {
TextureOverrideSource override_source(path + DIR_DELIM + "override.txt");
Expand All @@ -1847,7 +1846,6 @@ void Client::afterContentReceived()
// Update node textures and assign shaders to each tile
infostream<<"- Updating node textures"<<std::endl;
TextureUpdateArgs tu_args;
tu_args.guienv = guienv;
tu_args.last_time_ms = porting::getTimeMs();
tu_args.last_percent = 0;
tu_args.text_base = wstrgettext("Initializing nodes");
Expand All @@ -1864,7 +1862,7 @@ void Client::afterContentReceived()
if (m_mods_loaded)
m_script->on_client_ready(m_env.getLocalPlayer());

m_rendering_engine->draw_load_screen(wstrgettext("Done!"), guienv, m_tsrc, 0, 100);
m_rendering_engine->draw_load_screen(wstrgettext("Done!"), m_tsrc, 0, 100);
infostream<<"Client::afterContentReceived() done"<<std::endl;
}

Expand Down
15 changes: 3 additions & 12 deletions src/client/clientlauncher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,

/* mainmenumanager.h
*/
gui::IGUIEnvironment *guienv = nullptr;
gui::IGUIStaticText *guiroot = nullptr;
MainMenuManager g_menumgr;

bool isMenuActive()
Expand Down Expand Up @@ -136,7 +134,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
m_rendering_engine->get_scene_manager()->getParameters()->
setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);

guienv = m_rendering_engine->get_gui_env();
gui::IGUIEnvironment *guienv = m_rendering_engine->get_gui_env();
skin = guienv->getSkin();
skin->setColor(gui::EGDC_BUTTON_TEXT, video::SColor(255, 255, 255, 255));
skin->setColor(gui::EGDC_3D_LIGHT, video::SColor(0, 0, 0, 0));
Expand Down Expand Up @@ -218,14 +216,6 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)

m_rendering_engine->get_gui_env()->clear();

/*
We need some kind of a root node to be able to add
custom gui elements directly on the screen.
Otherwise they won't be automatically drawn.
*/
guiroot = m_rendering_engine->get_gui_env()->addStaticText(L"",
core::rect<s32>(0, 0, 10000, 10000));

bool game_has_run = launch_game(error_message, reconnect_requested,
start_data, cmd_args);

Expand Down Expand Up @@ -556,7 +546,8 @@ void ClientLauncher::main_menu(MainMenuData *menudata)
#endif

/* show main menu */
GUIEngine mymenu(&input->joystick, guiroot, m_rendering_engine, &g_menumgr, menudata, *kill);
GUIEngine mymenu(&input->joystick, m_rendering_engine->get_gui_env()->getRootGUIElement(),
m_rendering_engine, &g_menumgr, menudata, *kill);

/* leave scene manager in a clean state */
m_rendering_engine->get_scene_manager()->clear();
Expand Down
19 changes: 13 additions & 6 deletions src/client/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1530,7 +1530,9 @@ bool Game::createClient(const GameStartData &start_data)

bool Game::initGui()
{
m_game_ui->init();
auto guienv = m_rendering_engine->get_gui_env();

m_game_ui->init(guienv);

// Remove stale "recent" chat messages from previous connections
chat_backend->clearRecentChat();
Expand Down Expand Up @@ -1725,11 +1727,11 @@ bool Game::getServerContent(bool *aborted)
if (!client->itemdefReceived()) {
progress = 25;
m_rendering_engine->draw_load_screen(wstrgettext("Item definitions..."),
guienv, texture_src, dtime, progress);
texture_src, dtime, progress);
} else if (!client->nodedefReceived()) {
progress = 30;
m_rendering_engine->draw_load_screen(wstrgettext("Node definitions..."),
guienv, texture_src, dtime, progress);
texture_src, dtime, progress);
} else {
std::ostringstream message;
std::fixed(message);
Expand All @@ -1754,7 +1756,7 @@ bool Game::getServerContent(bool *aborted)
}

progress = 30 + client->mediaReceiveProgress() * 35 + 0.5;
m_rendering_engine->draw_load_screen(utf8_to_wide(message.str()), guienv,
m_rendering_engine->draw_load_screen(utf8_to_wide(message.str()),
texture_src, dtime, progress);
}
}
Expand Down Expand Up @@ -1805,6 +1807,9 @@ inline bool Game::handleCallbacks()
return false;
}

auto guienv = m_rendering_engine->get_gui_env();
auto guiroot = guienv->getRootGUIElement();

if (g_gamecallback->changepassword_requested) {
(new GUIPasswordChange(guienv, guiroot, -1,
&g_menumgr, client, texture_src))->drop();
Expand Down Expand Up @@ -1949,6 +1954,8 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times,

void Game::processUserInput(f32 dtime)
{
auto guienv = m_rendering_engine->get_gui_env();

// Reset input if window not active or some menu is active
if (!device->isWindowActive() || isMenuActive() || guienv->hasFocus(gui_chat_console)) {
if(m_game_focused) {
Expand Down Expand Up @@ -4142,7 +4149,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
}

if (isMenuActive())
guiroot->bringToFront(formspec);
m_rendering_engine->get_gui_env()->getRootGUIElement()->bringToFront(formspec);
} while (false);

/*
Expand Down Expand Up @@ -4282,7 +4289,7 @@ void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)

void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_sky)
{
m_rendering_engine->draw_load_screen(wstrgettext(msg), guienv, texture_src,
m_rendering_engine->draw_load_screen(wstrgettext(msg), texture_src,
dtime, percent, draw_sky);
}

Expand Down
11 changes: 4 additions & 7 deletions src/client/gameui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,13 @@ inline static const char *yawToDirectionString(int yaw)
return direction[yaw];
}

GameUI::GameUI()
void GameUI::init(gui::IGUIEnvironment *guienv)
{
if (guienv && guienv->getSkin())
if (guienv->getSkin())
m_statustext_initial_color = guienv->getSkin()->getColor(gui::EGDC_BUTTON_TEXT);
else
m_statustext_initial_color = video::SColor(255, 0, 0, 0);

}
void GameUI::init()
{
gui::IGUIElement *guiroot = guienv->getRootGUIElement();

// First line of debug text
m_guitext = gui::StaticText::add(guienv, utf8_to_wide(PROJECT_NAME_C).c_str(),
core::rect<s32>(0, 0, 0, 0), false, true, guiroot);
Expand Down
7 changes: 2 additions & 5 deletions src/client/gameui.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@ class GameUI
friend class TestGameUI;

public:
GameUI();
~GameUI() = default;

// Flags that can, or may, change during main game loop
struct Flags
{
Expand All @@ -63,7 +60,7 @@ class GameUI
bool show_profiler_graph = false;
};

void init();
void init(gui::IGUIEnvironment *m_guienv);
void update(const RunStats &stats, Client *client, MapDrawControl *draw_control,
const CameraOrientation &cam, const PointedThing &pointed_old,
const GUIChatConsole *chat_console, float dtime);
Expand Down Expand Up @@ -121,7 +118,7 @@ class GameUI
gui::IGUIStaticText *m_guitext_status = nullptr;
std::wstring m_statustext;
float m_statustext_time = 0.0f;
video::SColor m_statustext_initial_color;
video::SColor m_statustext_initial_color = video::SColor(255, 0, 0, 0);

gui::IGUIStaticText *m_guitext_chat = nullptr; // Chat text
u32 m_recent_chat_count = 0;
Expand Down
7 changes: 4 additions & 3 deletions src/client/renderingengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gettext.h"
#include "filesys.h"
#include "../gui/guiSkin.h"
#include "irrlicht_changes/static_text.h"
#include "irr_ptr.h"

RenderingEngine *RenderingEngine::s_singleton = nullptr;
Expand Down Expand Up @@ -225,17 +226,17 @@ bool RenderingEngine::setWindowIcon()
Additionally, a progressbar can be drawn when percent is set between 0 and 100.
*/
void RenderingEngine::draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc, float dtime,
int percent, bool sky)
ITextureSource *tsrc, float dtime, int percent, bool sky)
{
gui::IGUIEnvironment *guienv = get_gui_env();
v2u32 screensize = getWindowSize();

v2s32 textsize(g_fontengine->getTextWidth(text), g_fontengine->getLineHeight());
v2s32 center(screensize.X / 2, screensize.Y / 2);
core::rect<s32> textrect(center - textsize / 2, center + textsize / 2);

gui::IGUIStaticText *guitext =
guienv->addStaticText(text.c_str(), textrect, false, false);
gui::StaticText::add(guienv, text, textrect, false, false);
guitext->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT);

if (sky && g_settings->getBool("menu_clouds")) {
Expand Down
3 changes: 1 addition & 2 deletions src/client/renderingengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ class RenderingEngine
return m_device->getGUIEnvironment();
}

void draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc,
void draw_load_screen(const std::wstring &text, ITextureSource *tsrc,
float dtime = 0, int percent = 0, bool sky = true);

void draw_scene(video::SColor skycolor, bool show_hud,
Expand Down
13 changes: 4 additions & 9 deletions src/gui/guiButton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,10 @@ using namespace gui;

//! 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)
s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
bool noclip) :
IGUIButton(environment, parent, id, rectangle),
TSrc(tsrc)
{
setNotClipped(noclip);

Expand Down
50 changes: 23 additions & 27 deletions src/gui/guiButton.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,11 +185,9 @@ class GUIButton : public gui::IGUIButton

struct ButtonImage
{
ButtonImage() : Texture(0), SourceRect(core::rect<s32>(0,0,0,0))
{
}
ButtonImage() = default;

ButtonImage(const ButtonImage& other) : Texture(0), SourceRect(core::rect<s32>(0,0,0,0))
ButtonImage(const ButtonImage& other)
{
*this = other;
}
Expand Down Expand Up @@ -220,8 +218,8 @@ class GUIButton : public gui::IGUIButton
}


video::ITexture* Texture;
core::rect<s32> SourceRect;
video::ITexture* Texture = nullptr;
core::rect<s32> SourceRect = core::rect<s32>(0,0,0,0);
};

gui::EGUI_BUTTON_IMAGE_STATE getImageState(bool pressed, const ButtonImage* images) const;
Expand All @@ -230,43 +228,41 @@ class GUIButton : public gui::IGUIButton

struct ButtonSprite
{
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;
}

s32 Index;
s32 Index = -1;
video::SColor Color;
bool Loop;
bool Scale;
bool Loop = false;
bool Scale = false;
};

ButtonSprite ButtonSprites[gui::EGBS_COUNT];
gui::IGUISpriteBank* SpriteBank;
gui::IGUISpriteBank* SpriteBank = nullptr;

ButtonImage ButtonImages[gui::EGBIS_COUNT];

std::array<StyleSpec, StyleSpec::NUM_STATES> Styles;

gui::IGUIFont* OverrideFont;
gui::IGUIFont* OverrideFont = nullptr;

bool OverrideColorEnabled;
video::SColor OverrideColor;
bool OverrideColorEnabled = false;
video::SColor OverrideColor = video::SColor(101,255,255,255);

u32 ClickTime, HoverTime, FocusTime;
u32 ClickTime = 0;
u32 HoverTime = 0;
u32 FocusTime = 0;

bool ClickShiftState;
bool ClickControlState;
bool ClickShiftState = false;
bool ClickControlState = false;

bool IsPushButton;
bool Pressed;
bool UseAlphaChannel;
bool DrawBorder;
bool ScaleImage;
bool IsPushButton = false;
bool Pressed = false;
bool UseAlphaChannel = false;
bool DrawBorder = true;
bool ScaleImage = false;

video::SColor Colors[4];
// PATCH
Expand All @@ -279,6 +275,6 @@ class GUIButton : public gui::IGUIButton
core::rect<s32> BgMiddle;
core::rect<s32> Padding;
core::vector2d<s32> ContentOffset;
video::SColor BgColor;
video::SColor BgColor = video::SColor(0xFF,0xFF,0xFF,0xFF);
// END PATCH
};
7 changes: 4 additions & 3 deletions src/gui/guiEditBoxWithScrollbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ 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)
const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
bool writable, bool has_vscrollbar)
: GUIEditBox(environment, parent, id, rectangle, border, writable),
m_background(true), m_bg_color_used(false)
m_background(true), m_bg_color_used(false), m_tsrc(tsrc)
{
#ifdef _DEBUG
setDebugName("GUIEditBoxWithScrollBar");
Expand Down Expand Up @@ -635,7 +636,7 @@ 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);
scrollbarrect, false, true, m_tsrc);

m_vscrollbar->setVisible(false);
m_vscrollbar->setSmallStep(3 * fontHeight);
Expand Down