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