X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftouchscreengui.cpp;h=f5868133f9e3faf23bec8229dd8d9ab4fbab2923;hb=18cfd89a86af550b3c4663def77a5fac46e895ae;hp=1a5d42e9dc9f3cd7db8b434ee6be7c213665b862;hpb=62feade05da387cd6b230e7a0edf558c6fd7c099;p=minetest.git diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index 1a5d42e9d..f5868133f 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -25,12 +25,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gettime.h" #include "util/numeric.h" #include "porting.h" +#include "guiscalingfilter.h" #include #include #include +// Very slow button repeat frequency (in seconds) +#define SLOW_BUTTON_REPEAT (1.0f) + using namespace irr::core; extern Settings *g_settings; @@ -121,42 +125,52 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver) for (unsigned int i=0; i < after_last_element_id; i++) { m_buttons[i].guibutton = 0; m_buttons[i].repeatcounter = -1; + m_buttons[i].repeatdelay = BUTTON_REPEAT_DELAY; } m_screensize = m_device->getVideoDriver()->getScreenSize(); } -void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path) +void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path, rect button_rect) { unsigned int tid; - video::ITexture *texture = m_texturesource->getTexture(path,&tid); + video::ITexture *texture = guiScalingImageButton(m_device->getVideoDriver(), + m_texturesource->getTexture(path, &tid), button_rect.getWidth(), button_rect.getHeight()); if (texture) { btn->guibutton->setUseAlphaChannel(true); - btn->guibutton->setImage(texture); - btn->guibutton->setPressedImage(texture); - btn->guibutton->setScaleImage(true); + if (g_settings->getBool("gui_scaling_filter")) { + rect txr_rect = rect(0, 0, button_rect.getWidth(), button_rect.getHeight()); + btn->guibutton->setImage(texture, txr_rect); + btn->guibutton->setPressedImage(texture, txr_rect); + btn->guibutton->setScaleImage(false); + } else { + btn->guibutton->setImage(texture); + btn->guibutton->setPressedImage(texture); + btn->guibutton->setScaleImage(true); + } btn->guibutton->setDrawBorder(false); btn->guibutton->setText(L""); } } void TouchScreenGUI::initButton(touch_gui_button_id id, rect button_rect, - std::wstring caption, bool immediate_release ) + std::wstring caption, bool immediate_release, float repeat_delay) { button_info* btn = &m_buttons[id]; btn->guibutton = m_guienv->addButton(button_rect, 0, id, caption.c_str()); btn->guibutton->grab(); btn->repeatcounter = -1; + btn->repeatdelay = repeat_delay; btn->keycode = id2keycode(id); btn->immediate_release = immediate_release; btn->ids.clear(); - loadButtonTexture(btn,touchgui_button_imagenames[id]); + loadButtonTexture(btn,touchgui_button_imagenames[id], button_rect); } static int getMaxControlPadSize(float density) { - return 200 * density * g_settings->getFloat("gui_scaling"); + return 200 * density * g_settings->getFloat("hud_scaling"); } void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) @@ -240,25 +254,25 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) rect(m_screensize.X - (0.75*button_size), m_screensize.Y - (2.25*button_size), m_screensize.X, m_screensize.Y - (button_size*1.5)), - L"fly", true); + L"fly", false, SLOW_BUTTON_REPEAT); /* init noclip button */ initButton(noclip_id, rect(m_screensize.X - (0.75*button_size), 2.25*button_size, m_screensize.X, 3*button_size), - L"clip", true); + L"clip", false, SLOW_BUTTON_REPEAT); /* init fast button */ initButton(fast_id, rect(m_screensize.X - (0.75*button_size), 1.5*button_size, m_screensize.X, 2.25*button_size), - L"fast", true); + L"fast", false, SLOW_BUTTON_REPEAT); /* init debug button */ initButton(debug_id, rect(m_screensize.X - (0.75*button_size), 0.75*button_size, m_screensize.X, 1.5*button_size), - L"dbg", true); + L"dbg", false, SLOW_BUTTON_REPEAT); /* init chat button */ initButton(chat_id, @@ -270,13 +284,13 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) initButton(camera_id, rect(m_screensize.X - (1.5*button_size), 0, m_screensize.X - (0.75*button_size), 0.75*button_size), - L"cam", true); + L"cam", false, SLOW_BUTTON_REPEAT); /* init rangeselect button */ initButton(range_id, rect(m_screensize.X - (2.25*button_size), 0, m_screensize.X - (1.5*button_size), 0.75*button_size), - L"far", true); + L"far", false, SLOW_BUTTON_REPEAT); } touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) @@ -683,7 +697,11 @@ void TouchScreenGUI::step(float dtime) if (btn->ids.size() > 0) { btn->repeatcounter += dtime; - if (btn->repeatcounter < 0.2) continue; + /* in case we're moving around digging does not happen */ + if (m_move_id != -1) + m_move_has_really_moved = true; + + if (btn->repeatcounter < btn->repeatdelay) continue; btn->repeatcounter = 0; SEvent translated;