diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index 76b3f2237..357b6cec1 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -47,6 +47,7 @@ const char *touchgui_button_imagenames[] = { "inventory_btn.png", "drop_btn.png", "jump_btn.png", + "down.png", #ifdef ENABLE_ANDROID_NOCLIP "fly_btn.png", "noclip_btn.png", @@ -54,9 +55,8 @@ const char *touchgui_button_imagenames[] = { // "minimap_btn.png", "debug_btn.png", "chat_btn.png", - "camera_btn.png", +// "camera_btn.png", "rangeview_btn.png" - "down.png", }; static irr::EKEY_CODE id2keycode(touch_gui_button_id id) @@ -107,26 +107,42 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case chat_id: key = "chat"; break; - case camera_id: +/* case camera_id: key = "camera_mode"; - break; + break;*/ case range_id: key = "rangeselect"; break; } assert(key != ""); - return keyname_to_keycode(g_settings->get("keymap_" key).c_str()); + return keyname_to_keycode(g_settings->get("keymap_" + key).c_str()); } TouchScreenGUI *g_touchscreengui; -static void load_button_texture(button_info* btn, const char* path, - rect button_rect, ISimpleTextureSource* tsrc, video::IVideoDriver *driver) +TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver): + m_device(device), + m_guienv(device->getGUIEnvironment()), + m_camera_yaw(0.0), + m_camera_pitch(0.0), + m_visible(false), + m_move_id(-1), + m_receiver(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, rect button_rect) { unsigned int tid; - video::ITexture *texture = guiScalingImageButton(driver, - tsrc->getTexture(path, &tid), button_rect.getWidth(), - button_rect.getHeight()); + video::ITexture *texture = guiScalingImageButton(m_device->getVideoDriver(), + m_texturesource->getTexture(path, &tid), button_rect.getWidth(), button_rect.getHeight()); if (texture) { btn->guibutton->setUseAlphaChannel(true); if (g_settings->getBool("gui_scaling_filter")) { @@ -144,314 +160,6 @@ static void load_button_texture(button_info* btn, const char* path, } } -AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device, - IEventReceiver* receiver) : - m_texturesource(NULL), - m_driver(device->getVideoDriver()), - m_guienv(device->getGUIEnvironment()), - m_receiver(receiver), - m_active(false), - m_visible(true), - m_timeout(0), - m_timeout_value(3), - m_initialized(false), - m_dir(AHBB_Dir_Right_Left) -{ - m_screensize = device->getVideoDriver()->getScreenSize(); - -} - -void AutoHideButtonBar::init(ISimpleTextureSource* tsrc, - const char* starter_img, int button_id, v2s32 UpperLeft, - v2s32 LowerRight, autohide_button_bar_dir dir, float timeout) -{ - m_texturesource = tsrc; - - m_upper_left = UpperLeft; - m_lower_right = LowerRight; - - /* init settings bar */ - - irr::core::rect current_button = rect(UpperLeft.X, UpperLeft.Y, - LowerRight.X, LowerRight.Y); - - m_starter.guibutton = m_guienv->addButton(current_button, 0, button_id, L"", 0); - m_starter.guibutton->grab(); - 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); - - m_dir = dir; - m_timeout_value = timeout; - - m_initialized = true; -} - -AutoHideButtonBar::~AutoHideButtonBar() -{ - m_starter.guibutton->setVisible(false); - m_starter.guibutton->drop(); -} - -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; - return; - } - int button_size = 0; - - if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top)) { - button_size = m_lower_right.X - m_upper_left.X; - } else { - button_size = m_lower_right.Y - m_upper_left.Y; - } - - irr::core::rect current_button; - - if ((m_dir == AHBB_Dir_Right_Left) || (m_dir == AHBB_Dir_Left_Right)) { - - int x_start = 0; - 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_end = x_start button_size; - } else { - 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(x_start, m_upper_left.Y, x_end, - m_lower_right.Y); - } else { - int y_start = 0; - int 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_end = y_start button_size; - } else { - 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(m_upper_left.X, y_start, m_lower_right.Y, - y_end); - } - - button_info* btn = new button_info(); - btn->guibutton = m_guienv->addButton(current_button, 0, button_id, caption, 0); - btn->guibutton->grab(); - btn->guibutton->setVisible(false); - btn->guibutton->setEnabled(false); - 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); - - m_buttons.push_back(btn); -} - -bool AutoHideButtonBar::isButton(const SEvent &event) -{ - IGUIElement* rootguielement = m_guienv->getRootGUIElement(); - - if (rootguielement == NULL) { - return false; - } - - gui::IGUIElement *element = rootguielement->getElementFromPoint( - core::position2d(event.TouchInput.X, event.TouchInput.Y)); - - if (element == NULL) { - return false; - } - - if (m_active) { - /* check for all buttons in vector */ - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - if ((*iter)->guibutton == element) { - - SEvent* 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; - - /* add this event */ - translated->KeyInput.PressedDown = true; - m_receiver->OnEvent(*translated); - - /* remove this event */ - translated->KeyInput.PressedDown = false; - m_receiver->OnEvent(*translated); - - delete translated; - - (*iter)->ids.push_back(event.TouchInput.ID); - - m_timeout = 0; - - return true; - } - ++iter; - } - } else { - /* check for starter button only */ - if (element == m_starter.guibutton) { - m_starter.ids.push_back(event.TouchInput.ID); - m_starter.guibutton->setVisible(false); - m_starter.guibutton->setEnabled(false); - m_active = true; - m_timeout = 0; - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - (*iter)->guibutton->setVisible(true); - (*iter)->guibutton->setEnabled(true); - ++iter; - } - - return true; - } - } - return false; -} - -bool AutoHideButtonBar::isReleaseButton(int eventID) -{ - std::vector::iterator id = std::find(m_starter.ids.begin(), - m_starter.ids.end(), eventID); - - if (id != m_starter.ids.end()) { - m_starter.ids.erase(id); - return true; - } - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - std::vector::iterator id = std::find((*iter)->ids.begin(), - (*iter)->ids.end(), eventID); - - if (id != (*iter)->ids.end()) { - (*iter)->ids.erase(id); - // TODO handle settings button release - return true; - } - ++iter; - } - - return false; -} - -void AutoHideButtonBar::step(float dtime) -{ - if (m_active) { - m_timeout= dtime; - - if (m_timeout > m_timeout_value) { - deactivate(); - } - } -} - -void AutoHideButtonBar::deactivate() -{ - if (m_visible == true) { - m_starter.guibutton->setVisible(true); - m_starter.guibutton->setEnabled(true); - } - m_active = false; - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - (*iter)->guibutton->setVisible(false); - (*iter)->guibutton->setEnabled(false); - ++iter; - } -} - -void AutoHideButtonBar::hide() -{ - m_visible = false; - m_starter.guibutton->setVisible(false); - m_starter.guibutton->setEnabled(false); - - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - (*iter)->guibutton->setVisible(false); - (*iter)->guibutton->setEnabled(false); - ++iter; - } -} - -void AutoHideButtonBar::show() -{ - m_visible = true; - - if (m_active) { - std::vector::iterator iter = m_buttons.begin(); - - while (iter != m_buttons.end()) { - (*iter)->guibutton->setVisible(true); - (*iter)->guibutton->setEnabled(true); - ++iter; - } - } else { - m_starter.guibutton->setVisible(true); - m_starter.guibutton->setEnabled(true); - } -} - -TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver): - m_device(device), - m_guienv(device->getGUIEnvironment()), - m_camera_yaw(0.0), - m_camera_pitch(0.0), - m_visible(false), - m_move_id(-1), - m_receiver(receiver), - m_move_has_really_moved(false), - m_move_downtime(0), - m_move_sent_as_mouse_event(false), - // use some downlocation way off screen as init value to avoid invalid behaviour - m_move_downlocation(v2s32(-10000, -10000)), - m_settingsbar(device, receiver), - m_rarecontrolsbar(device, 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::initButton(touch_gui_button_id id, rect button_rect, std::wstring caption, bool immediate_release, float repeat_delay) { @@ -465,32 +173,29 @@ void TouchScreenGUI::initButton(touch_gui_button_id id, rect button_rect, btn->immediate_release = immediate_release; btn->ids.clear(); - load_button_texture(btn,touchgui_button_imagenames[id],button_rect, - m_texturesource, m_device->getVideoDriver()); + loadButtonTexture(btn,touchgui_button_imagenames[id], button_rect); } static int getMaxControlPadSize(float density) { return 235 * density * g_settings->getFloat("hud_scaling"); } -int TouchScreenGUI::getGuiButtonSize() -{ - u32 control_pad_size = MYMIN((2 * m_screensize.Y) / 3, - getMaxControlPadSize(porting::getDisplayDensity())); - - return control_pad_size / 3; -} - -void TouchScreenGUI::init(ISimpleTextureSource* tsrc) +void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) { assert(tsrc != 0); - u32 button_size = getGuiButtonSize(); + const u32 spacing = 7; + + u32 control_pad_size = + MYMIN((2 * m_screensize.Y + spacing * 2) / 3, + getMaxControlPadSize(porting::getDisplayDensity())); + + u32 button_size = (control_pad_size - spacing * 2 ) / 3; m_visible = true; m_texturesource = tsrc; m_control_pad_rect = rect( spacing, m_screensize.Y - control_pad_size - spacing, - spacing control_pad_size, m_screensize.Y - spacing); + spacing + control_pad_size, m_screensize.Y - spacing); /* draw control pad @@ -499,13 +204,14 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) 2 5 8 */ int number = 0; - for (int y = 0; y < 3;+y) - for (int x = 0; x < 3;+x,+number) { - v2s32 tl; - tl.X = y * (button_size spacing) spacing; - tl.Y = m_screensize.Y - (button_size spacing) * (3 - x); - rect button_rect(tl.X, tl.Y, tl.X button_size, tl.Y button_size); + for (int y = 0; y < 3; ++y) + for (int x = 0; x < 3; ++x, ++number) { + v2s32 tl; + tl.X = y * (button_size + spacing) + spacing; + tl.Y = m_screensize.Y - (button_size + spacing) * (3 - x); + + rect button_rect(tl.X, tl.Y, tl.X + button_size, tl.Y + button_size); touch_gui_button_id id = after_last_element_id; std::wstring caption; switch (number) { @@ -613,11 +319,11 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) m_screensize.X, 0.75*button_size), L"Chat", true); - /* init camera button */ + /* init camera button initButton(camera_id, rect(0, 0, 0.75*button_size, 0.75*button_size), - L"cam", false, SLOW_BUTTON_REPEAT); + L"cam", false, SLOW_BUTTON_REPEAT);*/ /* init rangeselect button */ initButton(range_id, @@ -627,37 +333,6 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) rect(m_screensize.X - (1.5*button_size), 0, m_screensize.X - (0.75*button_size), 0.75*button_size), L"far", false, SLOW_BUTTON_REPEAT); -/* m_settingsbar.init(m_texturesource, "gear_icon.png", settings_starter_id, - v2s32(m_screensize.X - (button_size / 2), - m_screensize.Y - ((SETTINGS_BAR_Y_OFFSET 1) * button_size) - + (button_size * 0.5)), - v2s32(m_screensize.X, - m_screensize.Y - (SETTINGS_BAR_Y_OFFSET * button_size) - + (button_size * 0.5)), 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_rarecontrolsbar.init(m_texturesource, "rare_controls.png", - rare_controls_starter_id, - v2s32(0, - m_screensize.Y - - ((RARE_CONTROLS_BAR_Y_OFFSET 1) * button_size) - + (button_size * 0.5)), - v2s32(button_size / 2, - m_screensize.Y - (RARE_CONTROLS_BAR_Y_OFFSET * button_size) - + (button_size * 0.5)), AHBB_Dir_Left_Right, - 2); - - 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) @@ -698,7 +373,7 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) { // check if hud item is pressed for (std::map >::iterator iter = m_hud_rects.begin(); - iter != m_hud_rects.end();+iter) { + iter != m_hud_rects.end(); ++iter) { if (iter->second.isPointInside( v2s32(event.TouchInput.X, event.TouchInput.Y) @@ -707,7 +382,7 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) SEvent* translated = new SEvent(); memset(translated,0,sizeof(SEvent)); translated->EventType = irr::EET_KEY_INPUT_EVENT; - translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 iter->first); + translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + iter->first); translated->KeyInput.Control = false; translated->KeyInput.Shift = false; translated->KeyInput.PressedDown = true; @@ -741,7 +416,7 @@ bool TouchScreenGUI::isReleaseHUDButton(int eventID) return false; } -void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, +void TouchScreenGUI::ButtonEvent(touch_gui_button_id button, int eventID, bool action) { button_info* btn = &m_buttons[button]; @@ -790,15 +465,11 @@ void TouchScreenGUI::handleReleaseEvent(int evt_id) /* handle button events */ if (button != after_last_element_id) { - handleButtonEvent(button, evt_id, false); + ButtonEvent(button, evt_id, false); } /* handle hud button events */ else if (isReleaseHUDButton(evt_id)) { /* nothing to do here */ - } else if (m_settingsbar.isReleaseButton(evt_id)) { - /* nothing to do here */ - } else if (m_rarecontrolsbar.isReleaseButton(evt_id)) { - /* nothing to do here */ } /* handle the point used for moving view */ else if (evt_id == m_move_id) { @@ -846,7 +517,7 @@ void TouchScreenGUI::handleReleaseEvent(int evt_id) } for (std::vector::iterator iter = m_known_ids.begin(); - iter != m_known_ids.end();+iter) { + iter != m_known_ids.end(); ++iter) { if (iter->id == evt_id) { m_known_ids.erase(iter); break; @@ -885,26 +556,16 @@ void TouchScreenGUI::translateEvent(const SEvent &event) /* handle button events */ if (button != after_last_element_id) { - handleButtonEvent(button, eventID, true); - m_settingsbar.deactivate(); - m_rarecontrolsbar.deactivate(); - } else if (isHUDButton(event)) { - m_settingsbar.deactivate(); - m_rarecontrolsbar.deactivate(); + ButtonEvent(button,eventID,true); + } + else if (isHUDButton(event)) + { /* already handled in isHUDButton() */ - } else if (m_settingsbar.isButton(event)) { - m_rarecontrolsbar.deactivate(); - /* already handled in isSettingsBarButton() */ - } else if (m_rarecontrolsbar.isButton(event)) { - m_settingsbar.deactivate(); - /* already handled in isSettingsBarButton() */ } else if (m_control_pad_rect.isPointInside(v2s32(toadd.X, toadd.Y))) { // ignore events inside the control pad not already handled } /* handle non button events */ else { - m_settingsbar.deactivate(); - m_rarecontrolsbar.deactivate(); /* 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; @@ -936,7 +597,7 @@ void TouchScreenGUI::translateEvent(const SEvent &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].X - event.TouchInput.X) + (m_pointerpos[event.TouchInput.ID].Y - event.TouchInput.Y) * (m_pointerpos[event.TouchInput.ID].Y - event.TouchInput.Y)); @@ -956,10 +617,10 @@ void TouchScreenGUI::translateEvent(const SEvent &event) double old_pitch = m_camera_pitch; m_camera_yaw -= 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); while (m_camera_yaw < 0) - m_camera_yaw= 360; + m_camera_yaw += 360; while (m_camera_yaw > 360) m_camera_yaw -= 360; @@ -980,6 +641,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event) ->getRayFromScreenCoordinates( v2s32(event.TouchInput.X,event.TouchInput.Y)); } + } + else { handleChangedButton(event); } } @@ -992,8 +655,8 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event) if (m_buttons[i].ids.empty()) { continue; } - for (std::vector::iterator iter = m_buttons[i].ids.begin(); - iter != m_buttons[i].ids.end();+iter) { + for(std::vector::iterator iter = m_buttons[i].ids.begin(); + iter != m_buttons[i].ids.end(); ++iter) { if (event.TouchInput.ID == *iter) { @@ -1005,12 +668,12 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event) } /* remove old button */ - handleButtonEvent((touch_gui_button_id) i,*iter,false); + ButtonEvent((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); + ButtonEvent((touch_gui_button_id) current_button_id,*iter,true); return; } @@ -1024,11 +687,8 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event) } 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, - event.TouchInput.ID, true); + if (std::find(btn->ids.begin(),btn->ids.end(), event.TouchInput.ID) == btn->ids.end()) { + ButtonEvent((touch_gui_button_id) current_button_id,event.TouchInput.ID,true); } } @@ -1042,20 +702,20 @@ bool TouchScreenGUI::doubleTapDetection() m_key_events[1].x = m_move_downlocation.X; m_key_events[1].y = m_move_downlocation.Y; - u32 delta = porting::getDeltaMs(m_key_events[0].down_time, getTimeMs()); + u32 delta = porting::getDeltaMs(m_key_events[0].down_time,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].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 + g_settings->getU16("touchscreen_threshold"))) + if (distance >(20 + g_settings->getU16("touchscreen_threshold"))) return false; SEvent* translated = new SEvent(); - memset(translated, 0, sizeof(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; @@ -1084,7 +744,7 @@ bool TouchScreenGUI::doubleTapDetection() TouchScreenGUI::~TouchScreenGUI() { - for (unsigned int i = 0; i < after_last_element_id; i++) { + for (unsigned int i=0; i < after_last_element_id; i++) { button_info* btn = &m_buttons[i]; if (btn->guibutton != 0) { btn->guibutton->drop(); @@ -1096,11 +756,11 @@ TouchScreenGUI::~TouchScreenGUI() void TouchScreenGUI::step(float dtime) { /* simulate keyboard repeats */ - for (unsigned int i = 0; i < after_last_element_id; i++) { + for (unsigned int i=0; i < after_last_element_id; i++) { button_info* btn = &m_buttons[i]; if (btn->ids.size() > 0) { - btn->repeatcounter= dtime; + btn->repeatcounter += dtime; /* in case we're moving around digging does not happen */ if (m_move_id != -1) @@ -1110,7 +770,7 @@ void TouchScreenGUI::step(float dtime) btn->repeatcounter = 0; SEvent translated; - memset(&translated, 0, sizeof(SEvent)); + memset(&translated,0,sizeof(SEvent)); translated.EventType = irr::EET_KEY_INPUT_EVENT; translated.KeyInput.Key = btn->keycode; translated.KeyInput.PressedDown = false; @@ -1136,7 +796,7 @@ void TouchScreenGUI::step(float dtime) v2s32(m_move_downlocation.X,m_move_downlocation.Y)); SEvent translated; - memset(&translated, 0, sizeof(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; @@ -1149,8 +809,6 @@ void TouchScreenGUI::step(float dtime) m_move_sent_as_mouse_event = true; } } - m_settingsbar.step(dtime); - m_rarecontrolsbar.step(dtime); } void TouchScreenGUI::resetHud() @@ -1166,7 +824,7 @@ void TouchScreenGUI::registerHudItem(int index, const rect &rect) void TouchScreenGUI::Toggle(bool visible) { m_visible = visible; - for (unsigned int i = 0; i < after_last_element_id; i++) { + for (unsigned int i=0; i < after_last_element_id; i++) { button_info* btn = &m_buttons[i]; if (btn->guibutton != 0) { btn->guibutton->setVisible(visible); @@ -1178,12 +836,6 @@ void TouchScreenGUI::Toggle(bool visible) while (m_known_ids.size() > 0) { handleReleaseEvent(m_known_ids.begin()->id); } - - m_settingsbar.hide(); - m_rarecontrolsbar.hide(); - } else { - m_settingsbar.show(); - m_rarecontrolsbar.show(); } } diff --git a/src/touchscreengui.h b/src/touchscreengui.h index e7daf5362..401dd1da3 100644 --- a/src/touchscreengui.h +++ b/src/touchscreengui.h @@ -40,11 +40,10 @@ typedef enum { backward_id, left_id, right_id, + inventory_id, + drop_id, jump_id, crunch_id, - after_last_element_id, -// settings_starter_id, -// rare_controls_starter_id, #ifdef ENABLE_ANDROID_NOCLIP fly_id, noclip_id, @@ -52,97 +51,18 @@ typedef enum { #endif // minimap_id, debug_id, - camera_id, - range_id, chat_id, - inventory_id, - drop_id +// camera_id, + range_id, + after_last_element_id } touch_gui_button_id; -typedef enum { - AHBB_Dir_Top_Bottom, - AHBB_Dir_Bottom_Top, - AHBB_Dir_Left_Right, - AHBB_Dir_Right_Left -} autohide_button_bar_dir; - #define MIN_DIG_TIME_MS 500 #define MAX_TOUCH_COUNT 64 #define BUTTON_REPEAT_DELAY 0.2f -//#define SETTINGS_BAR_Y_OFFSET 6.5 -//#define RARE_CONTROLS_BAR_Y_OFFSET 4 - extern const char *touchgui_button_imagenames[]; -struct button_info { - float repeatcounter; - float repeatdelay; - irr::EKEY_CODE keycode; - std::vector ids; - IGUIButton* guibutton; - bool immediate_release; -}; - -class AutoHideButtonBar -{ -public: - - AutoHideButtonBar( IrrlichtDevice *device, IEventReceiver* receiver ); - - void init(ISimpleTextureSource* tsrc, const char* starter_img, - int button_id, v2s32 UpperLeft, v2s32 LowerRight, - autohide_button_bar_dir dir, float timeout); - - ~AutoHideButtonBar(); - - /* add button to be shown */ - void addButton(touch_gui_button_id id, const wchar_t* caption, - const char* btn_image); - - /* detect settings bar button events */ - bool isButton(const SEvent &event); - - /* handle released hud buttons */ - bool isReleaseButton(int eventID); - - /* step handler */ - void step(float dtime); - - /* deactivate button bar */ - void deactivate(); - - /* hide the whole buttonbar */ - void hide(); - - /* unhide the buttonbar */ - void show(); - -private: - ISimpleTextureSource* m_texturesource; - irr::video::IVideoDriver* m_driver; - IGUIEnvironment* m_guienv; - IEventReceiver* m_receiver; - v2u32 m_screensize; - button_info m_starter; - std::vector m_buttons; - - v2s32 m_upper_left; - v2s32 m_lower_right; - - /* show settings bar */ - bool m_active; - - bool m_visible; - - /* settings bar timeout */ - float m_timeout; - float m_timeout_value; - bool m_initialized; - autohide_button_bar_dir m_dir; -}; - - class TouchScreenGUI { public: @@ -151,7 +71,7 @@ public: void translateEvent(const SEvent &event); - void init(ISimpleTextureSource* tsrc); + void init(ISimpleTextureSource* tsrc,float density); double getYaw() { return m_camera_yaw; } double getPitch() { return m_camera_pitch; } @@ -190,6 +110,15 @@ private: bool m_move_sent_as_mouse_event; v2s32 m_move_downlocation; + struct button_info { + float repeatcounter; + float repeatdelay; + irr::EKEY_CODE keycode; + std::vector ids; + IGUIButton* guibutton; + bool immediate_release; + }; + button_info m_buttons[after_last_element_id]; /* gui button detection */ @@ -219,7 +148,7 @@ private: std::vector m_known_ids; /* handle a button event */ - void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action); + void ButtonEvent(touch_gui_button_id bID, int eventID, bool action); /* handle pressed hud buttons */ bool isHUDButton(const SEvent &event); @@ -232,9 +161,6 @@ private: /* handle release event */ void handleReleaseEvent(int evt_id); - - /* get size of regular gui control button */ - int getGuiButtonSize(); /* doubleclick detection variables */ struct key_event { @@ -248,12 +174,6 @@ private: /* array for doubletap detection */ key_event m_key_events[2]; - - /* settings bar */ - AutoHideButtonBar m_settingsbar; - - /* rare controls bar */ - AutoHideButtonBar m_rarecontrolsbar; }; extern TouchScreenGUI *g_touchscreengui; #endif \ No newline at end of file