Fix Win32 build
[lsnes.git] / src / platform / wxwidgets / mouse.cpp
blobfbeb91656811f91a6f84bdc00cf96839b6a44939
1 #include <wx/wx.h>
2 #include <wx/event.h>
3 #include <wx/control.h>
4 #include <wx/combobox.h>
6 #include "platform/wxwidgets/platform.hpp"
8 #include "core/instance.hpp"
9 #include "core/instance-map.hpp"
10 #include "core/moviedata.hpp"
11 #include "core/rom.hpp"
12 #include "library/keyboard.hpp"
15 std::pair<double, double> calc_scale_factors(double factor, bool ar, double par);
17 namespace
19 class mouse_keys
21 public:
22 mouse_keys(emulator_instance& inst)
23 : mouse_cal({0}),
24 mouse_x(*inst.keyboard, "mouse_x", "mouse", mouse_cal),
25 mouse_y(*inst.keyboard, "mouse_y", "mouse", mouse_cal),
26 mouse_l(*inst.keyboard, "mouse_left", "mouse"),
27 mouse_m(*inst.keyboard, "mouse_center", "mouse"),
28 mouse_r(*inst.keyboard, "mouse_right", "mouse"),
29 mouse_i(*inst.keyboard, "mouse_inwindow", "mouse")
32 keyboard::mouse_calibration mouse_cal;
33 keyboard::key_mouse mouse_x;
34 keyboard::key_mouse mouse_y;
35 keyboard::key_key mouse_l;
36 keyboard::key_key mouse_m;
37 keyboard::key_key mouse_r;
38 keyboard::key_key mouse_i;
41 instance_map<mouse_keys> mkeys;
45 void handle_wx_mouse(emulator_instance& inst, wxMouseEvent& e)
47 CHECK_UI_THREAD;
48 auto s = mkeys.lookup(inst);
49 if(!s) return;
50 auto sfactors = calc_scale_factors(video_scale_factor, arcorrect_enabled, inst.rom->get_PAR());
51 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_x, e.GetX() /
52 sfactors.first));
53 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_y, e.GetY() /
54 sfactors.second));
55 if(e.Entering())
56 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_i, 1));
57 if(e.Leaving())
58 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_i, 0));
59 if(e.LeftDown())
60 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_l, 1));
61 if(e.LeftUp())
62 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_l, 0));
63 if(e.MiddleDown())
64 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_m, 1));
65 if(e.MiddleUp())
66 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_m, 0));
67 if(e.RightDown())
68 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_r, 1));
69 if(e.RightUp())
70 inst.iqueue->queue(keypress_info(keyboard::modifier_set(), s->mouse_r, 0));
73 void initialize_wx_mouse(emulator_instance& inst)
75 if(mkeys.exists(inst))
76 return;
77 mkeys.create(inst);
80 void deinitialize_wx_mouse(emulator_instance& inst)
82 mkeys.destroy(inst);