From 7421a76f7efb805c5c44f7c3aece1222911bad9f Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke Date: Fri, 1 Aug 2014 19:32:30 +0200 Subject: [PATCH] Reverted 91c1517 and reinserted the old mouse cursor code With SDL_RenderSetLogicalSize() gone the old mouse code works again and it doesn't glitch the mouse pointer on magnification changes as the new code does. --- src/gui/menu.cpp | 99 ++++++++++++++++++------------------------------- src/gui/mousecursor.cpp | 25 +++++-------- src/gui/mousecursor.hpp | 6 --- 3 files changed, 46 insertions(+), 84 deletions(-) diff --git a/src/gui/menu.cpp b/src/gui/menu.cpp index 583cbb043..e3fce4b5d 100644 --- a/src/gui/menu.cpp +++ b/src/gui/menu.cpp @@ -768,78 +768,53 @@ Menu::event(const SDL_Event& event) return; switch(event.type) { - case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: + if(event.button.button == SDL_BUTTON_LEFT) + { + Vector mouse_pos = Renderer::instance()->to_logical(event.motion.x, event.motion.y); + int x = int(mouse_pos.x); + int y = int(mouse_pos.y); + + if(x > pos.x - get_width()/2 && + x < pos.x + get_width()/2 && + y > pos.y - get_height()/2 && + y < pos.y + get_height()/2) { - Vector mouse_pos = Renderer::instance()->to_logical(event.button.x, event.button.y); - - if(MouseCursor::current()) - { - MouseCursor::current()->set_pos(mouse_pos); - } + menuaction = MENU_ACTION_HIT; } - break; + } + break; - case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEMOTION: + { + Vector mouse_pos = Renderer::instance()->to_logical(event.motion.x, event.motion.y); + float x = mouse_pos.x; + float y = mouse_pos.y; + + if(x > pos.x - get_width()/2 && + x < pos.x + get_width()/2 && + y > pos.y - get_height()/2 && + y < pos.y + get_height()/2) { - Vector mouse_pos = Renderer::instance()->to_logical(event.button.x, event.button.y); + int new_active_item + = static_cast ((y - (pos.y - get_height()/2)) / 24); - if(MouseCursor::current()) - { - MouseCursor::current()->set_pos(mouse_pos); - } + /* only change the mouse focus to a selectable item */ + if ((items[new_active_item]->kind != MN_HL) + && (items[new_active_item]->kind != MN_LABEL) + && (items[new_active_item]->kind != MN_INACTIVE)) + active_item = new_active_item; - if(event.button.button == SDL_BUTTON_LEFT) - { - int x = int(mouse_pos.x); - int y = int(mouse_pos.y); - - if(x > pos.x - get_width()/2 && - x < pos.x + get_width()/2 && - y > pos.y - get_height()/2 && - y < pos.y + get_height()/2) - { - menuaction = MENU_ACTION_HIT; - } - } + if(MouseCursor::current()) + MouseCursor::current()->set_state(MC_LINK); } - break; - - case SDL_MOUSEMOTION: + else { - Vector mouse_pos = Renderer::instance()->to_logical(event.motion.x, event.motion.y); - if(MouseCursor::current()) - { - MouseCursor::current()->set_pos(mouse_pos); - } - - float x = mouse_pos.x; - float y = mouse_pos.y; - - if(x > pos.x - get_width()/2 && - x < pos.x + get_width()/2 && - y > pos.y - get_height()/2 && - y < pos.y + get_height()/2) - { - int new_active_item - = static_cast ((y - (pos.y - get_height()/2)) / 24); - - /* only change the mouse focus to a selectable item */ - if ((items[new_active_item]->kind != MN_HL) - && (items[new_active_item]->kind != MN_LABEL) - && (items[new_active_item]->kind != MN_INACTIVE)) - active_item = new_active_item; - - if(MouseCursor::current()) - MouseCursor::current()->set_state(MC_LINK); - } - else - { - if(MouseCursor::current()) - MouseCursor::current()->set_state(MC_NORMAL); - } + MouseCursor::current()->set_state(MC_NORMAL); } - break; + } + break; default: break; diff --git a/src/gui/mousecursor.cpp b/src/gui/mousecursor.cpp index 3e86bfc8b..101cf1f8d 100644 --- a/src/gui/mousecursor.cpp +++ b/src/gui/mousecursor.cpp @@ -26,7 +26,6 @@ MouseCursor* MouseCursor::current_ = 0; MouseCursor::MouseCursor(std::string cursor_file) : - mouse_pos(), mid_x(0), mid_y(0), state_before_click(), @@ -52,12 +51,6 @@ void MouseCursor::set_state(int nstate) cur_state = nstate; } -void -MouseCursor::set_pos(const Vector& pos) -{ - mouse_pos = pos; -} - void MouseCursor::set_mid(int x, int y) { mid_x = x; @@ -69,17 +62,17 @@ void MouseCursor::draw(DrawingContext& context) if(cur_state == MC_HIDE) return; - // Not using coordinates from mouse, as they are in the wrong - // coordinate system, see: - // https://bugzilla.libsdl.org/show_bug.cgi?id=2442 - Uint8 ispressed = SDL_GetMouseState(NULL, NULL); + int x,y,w,h; + Uint8 ispressed = SDL_GetMouseState(&x,&y); + + Vector mouse_pos = Renderer::instance()->to_logical(x, y); - int x = int(mouse_pos.x); - int y = int(mouse_pos.y); + x = int(mouse_pos.x); + y = int(mouse_pos.y); - int w = (int) cursor->get_width(); - int h = (int) (cursor->get_height() / MC_STATES_NB); - if(ispressed & SDL_BUTTON(1) || ispressed & SDL_BUTTON(2)) { + w = (int) cursor->get_width(); + h = (int) (cursor->get_height() / MC_STATES_NB); + if(ispressed &SDL_BUTTON(1) || ispressed &SDL_BUTTON(2)) { if(cur_state != MC_CLICK) { state_before_click = cur_state; cur_state = MC_CLICK; diff --git a/src/gui/mousecursor.hpp b/src/gui/mousecursor.hpp index 329f225f2..30afd5655 100644 --- a/src/gui/mousecursor.hpp +++ b/src/gui/mousecursor.hpp @@ -19,7 +19,6 @@ #include -#include "math/vector.hpp" #include "video/surface_ptr.hpp" #define MC_STATES_NB 3 @@ -32,7 +31,6 @@ enum { }; class DrawingContext; -class Vector; /// Mouse cursor. /** Used to create mouse cursors. @@ -56,9 +54,6 @@ public: /** Useful for cross mouse cursor images in example. */ void set_mid(int x, int y); - /** Set the position where the cursor should appear */ - void set_pos(const Vector& pos); - /// Draw MouseCursor on screen. void draw(DrawingContext& context); @@ -72,7 +67,6 @@ public: friend class Resources; private: - Vector mouse_pos; int mid_x; int mid_y; int state_before_click; -- 2.11.0