FS2_Open
Open source remastering of the Freespace 2 engine
uimouse.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #include "io/timer.h"
13 #include "ui/ui.h"
14 #include "ui/uidefs.h"
15 
16 
18 
20 
22 {
23  int buttons;
24 
25  if (!ui_mouse_inited) {
26  ui_mouse_inited = 1;
27  ui_mouse.x = 0;
28  ui_mouse.y = 0;
29  ui_mouse.dx = 0;
30  ui_mouse.dy = 0;
31  ui_mouse.b1_status = 0;
32  ui_mouse.b1_last_status = 0;
33  ui_mouse.b1_time_lastpressed=0;
34  ui_mouse.b2_status = 0;
35  ui_mouse.b2_last_status = 0;
36  ui_mouse.b2_time_lastpressed = 0;
37  ui_mouse.timestamp = timer_get_milliseconds();
38  }
39 
40  buttons = mouse_get_pos_unscaled( &ui_mouse.x, &ui_mouse.y );
41 
42  // check if mouse pressed
43  if (buttons & MOUSE_LEFT_BUTTON)
44  ui_mouse.b1_status = BUTTON_PRESSED;
45  else
46  ui_mouse.b1_status = BUTTON_RELEASED;
47 
48  if (buttons & MOUSE_RIGHT_BUTTON)
49  ui_mouse.b2_status = BUTTON_PRESSED;
50  else
51  ui_mouse.b2_status = BUTTON_RELEASED;
52 
53  // now check if we missed something between checks, just in case
54  if (mouse_down_count(MOUSE_LEFT_BUTTON))
55  ui_mouse.b1_status = BUTTON_PRESSED;
56 
57  if (mouse_up_count(MOUSE_LEFT_BUTTON))
58  ui_mouse.b1_status = BUTTON_RELEASED;
59 
60  if (mouse_down_count(MOUSE_RIGHT_BUTTON))
61  ui_mouse.b2_status = BUTTON_PRESSED;
62 
63  if (mouse_up_count(MOUSE_RIGHT_BUTTON))
64  ui_mouse.b2_status = BUTTON_RELEASED;
65 
66  // check for double clicks
67  if ((ui_mouse.b1_status & BUTTON_PRESSED) && (ui_mouse.b1_last_status & BUTTON_RELEASED) ) {
68  if ( timer_get_milliseconds() <= ui_mouse.b1_time_lastpressed + 250 )
69  ui_mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
70 
72  ui_mouse.b1_status |= BUTTON_JUST_PRESSED;
73 
74  } else if ((ui_mouse.b1_status & BUTTON_RELEASED) && (ui_mouse.b1_last_status & BUTTON_PRESSED) )
75  ui_mouse.b1_status |= BUTTON_JUST_RELEASED;
76 
77  if ((ui_mouse.b2_status & BUTTON_PRESSED) && (ui_mouse.b2_last_status & BUTTON_RELEASED) ) {
78  if ( timer_get_milliseconds() <= ui_mouse.b2_time_lastpressed + 250 )
79  ui_mouse.b2_status |= BUTTON_DOUBLE_CLICKED;
80 
82  ui_mouse.b2_status |= BUTTON_JUST_PRESSED;
83 
84  } else if ((ui_mouse.b2_status & BUTTON_RELEASED) && (ui_mouse.b2_last_status & BUTTON_PRESSED) )
85  ui_mouse.b2_status |= BUTTON_JUST_RELEASED;
86 
87  ui_mouse.b1_last_status = ui_mouse.b1_status;
88  ui_mouse.b2_last_status = ui_mouse.b2_status;
89 }
int b1_status
Definition: uidefs.h:61
#define MOUSE_LEFT_BUTTON
Definition: mouse.h:43
int b1_last_status
Definition: uidefs.h:62
int ui_mouse_inited
Definition: uimouse.cpp:19
#define BUTTON_DOUBLE_CLICKED
Definition: uidefs.h:45
int dx
Definition: uidefs.h:60
int dy
Definition: uidefs.h:60
int b2_last_status
Definition: uidefs.h:65
void ui_mouse_process()
Definition: uimouse.cpp:21
int mouse_get_pos_unscaled(int *xpos, int *ypos)
Definition: mouse.cpp:580
int y
Definition: uidefs.h:59
int b2_status
Definition: uidefs.h:64
int timestamp
Definition: uidefs.h:67
int b1_time_lastpressed
Definition: uidefs.h:63
int x
Definition: uidefs.h:59
int b2_time_lastpressed
Definition: uidefs.h:66
#define MOUSE_RIGHT_BUTTON
Definition: mouse.h:44
int mouse_up_count(int n)
Definition: mouse.cpp:278
#define BUTTON_JUST_PRESSED
Definition: uidefs.h:43
UI_MOUSE ui_mouse
Definition: uimouse.cpp:17
#define BUTTON_RELEASED
Definition: uidefs.h:42
int mouse_down_count(int n, int reset_count)
Definition: mouse.cpp:236
#define BUTTON_PRESSED
Definition: uidefs.h:41
int timer_get_milliseconds()
Definition: timer.cpp:150
#define BUTTON_JUST_RELEASED
Definition: uidefs.h:44