Skip to content

Commit

Permalink
Fix bounding rect for formspec elements label vertlabel and checkboxes
Browse files Browse the repository at this point in the history
  • Loading branch information
sapier authored and sapier committed Jun 18, 2014
1 parent 2a09b7e commit 65a4630
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
2 changes: 1 addition & 1 deletion builtin/mainmenu/tab_credits.lua
Expand Up @@ -22,7 +22,7 @@ tab_credits = {
caption = fgettext("Credits"),
cbf_formspec = function (tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
return "vertlabel[0,-0.5;CREDITS]" ..
return "vertlabel[0,-0.25;CREDITS]" ..
"label[0.5,3;Minetest " .. core.get_version() .. "]" ..
"label[0.5,3.3;http://minetest.net]" ..
"image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
Expand Down
4 changes: 2 additions & 2 deletions builtin/mainmenu/tab_settings.lua
Expand Up @@ -79,7 +79,7 @@ end

local function formspec(tabview, name, tabdata)
local tab_string =
"vertlabel[0,0;" .. fgettext("SETTINGS") .. "]" ..
"vertlabel[0,-0.25;" .. fgettext("SETTINGS") .. "]" ..
"box[0.75,0;3.25,4;#999999]" ..
"checkbox[1,0;cb_fancy_trees;".. fgettext("Fancy Trees") .. ";"
.. dump(core.setting_getbool("new_style_leaves")) .. "]"..
Expand Down Expand Up @@ -108,7 +108,7 @@ local function formspec(tabview, name, tabdata)
"checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";"
.. dump(core.setting_getbool("enable_shaders")) .. "]"..
"button[1,4.5;2.25,0.5;btn_change_keys;".. fgettext("Change keys") .. "]"

local android = false
if android then
tab_string = tab_string ..
Expand Down
26 changes: 20 additions & 6 deletions src/guiFormSpecMenu.cpp
Expand Up @@ -62,6 +62,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
return; \
}

extern gui::IGUIEnvironment* guienv;

/*
GUIFormSpecMenu
Expand All @@ -85,7 +86,8 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
m_lock(false),
m_form_src(fsrc),
m_text_dst(tdst),
m_ext_ptr(ext_ptr)
m_ext_ptr(ext_ptr),
m_font(guienv->getSkin()->getFont())
{
current_keys_pending.key_down = false;
current_keys_pending.key_up = false;
Expand Down Expand Up @@ -388,15 +390,18 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element)
pos.X += stof(v_pos[0]) * (float) spacing.X;
pos.Y += stof(v_pos[1]) * (float) spacing.Y;

core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y+((imgsize.Y/2)-15), pos.X+300, pos.Y+((imgsize.Y/2)+15));

bool fselected = false;

if (selected == "true")
fselected = true;

std::wstring wlabel = narrow_to_wide(label.c_str());

core::rect<s32> rect = core::rect<s32>(
pos.X, pos.Y + ((imgsize.Y/2) - 15),
pos.X + m_font->getDimension(wlabel.c_str()).Width + 25, // text size + size of checkbox
pos.Y + ((imgsize.Y/2) + 15));

FieldSpec spec(
narrow_to_wide(name.c_str()),
wlabel, //Needed for displaying text on MSVC
Expand Down Expand Up @@ -1083,15 +1088,18 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element)
pos.X += stof(v_pos[0]) * (float)spacing.X;
pos.Y += stof(v_pos[1]) * (float)spacing.Y;

core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y+((imgsize.Y/2)-15), pos.X+300, pos.Y+((imgsize.Y/2)+15));

if(data->bp_set != 2)
errorstream<<"WARNING: invalid use of label without a size[] element"<<std::endl;

text = unescape_string(text);

std::wstring wlabel = narrow_to_wide(text.c_str());

core::rect<s32> rect = core::rect<s32>(
pos.X, pos.Y+((imgsize.Y/2)-15),
pos.X + m_font->getDimension(wlabel.c_str()).Width,
pos.Y+((imgsize.Y/2)+15));

FieldSpec spec(
L"",
wlabel,
Expand Down Expand Up @@ -1119,7 +1127,13 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element)
pos.X += stof(v_pos[0]) * (float)spacing.X;
pos.Y += stof(v_pos[1]) * (float)spacing.Y;

core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y+((imgsize.Y/2)-15), pos.X+15, pos.Y+300);
core::rect<s32> rect = core::rect<s32>(
pos.X, pos.Y+((imgsize.Y/2)-15),
pos.X+15, pos.Y +
(m_font->getKerningHeight() +
m_font->getDimension(text.c_str()).Height)
* (text.length()+1));
//actually text.length() would be correct but adding +1 avoids to break all mods

if(data->bp_set != 2)
errorstream<<"WARNING: invalid use of label without a size[] element"<<std::endl;
Expand Down
7 changes: 4 additions & 3 deletions src/guiFormSpecMenu.h
Expand Up @@ -312,9 +312,10 @@ class GUIFormSpecMenu : public GUIModalMenu
video::SColor m_slotbg_h;
video::SColor m_slotbordercolor;
private:
IFormSource* m_form_src;
TextDest* m_text_dst;
GUIFormSpecMenu** m_ext_ptr;
IFormSource *m_form_src;
TextDest *m_text_dst;
GUIFormSpecMenu **m_ext_ptr;
gui::IGUIFont *m_font;

typedef struct {
v2s32 size;
Expand Down

0 comments on commit 65a4630

Please sign in to comment.