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<int> ((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<int> ((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;
MouseCursor* MouseCursor::current_ = 0;
MouseCursor::MouseCursor(std::string cursor_file) :
- mouse_pos(),
mid_x(0),
mid_y(0),
state_before_click(),
cur_state = nstate;
}
-void
-MouseCursor::set_pos(const Vector& pos)
-{
- mouse_pos = pos;
-}
-
void MouseCursor::set_mid(int x, int y)
{
mid_x = x;
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;