comparison Samples/Sdl/SdlHelpers.h @ 1382:9d138883be66

Proper command-line parameter management for SDL sample
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 22 Apr 2020 19:55:34 +0200
parents
children dfb48f0794b1
comparison
equal deleted inserted replaced
1381:f4a06ad1580b 1382:9d138883be66
1 #pragma once
2
3 #include <map>
4 #include <string>
5
6 namespace OrthancStoneHelpers
7 {
8 inline OrthancStone::KeyboardModifiers GetKeyboardModifiers(const uint8_t* keyboardState,
9 const int scancodeCount)
10 {
11 using namespace OrthancStone;
12 int result = KeyboardModifiers_None;
13
14 if (keyboardState != NULL)
15 {
16 if (SDL_SCANCODE_LSHIFT < scancodeCount &&
17 keyboardState[SDL_SCANCODE_LSHIFT])
18 {
19 result |= KeyboardModifiers_Shift;
20 }
21
22 if (SDL_SCANCODE_RSHIFT < scancodeCount &&
23 keyboardState[SDL_SCANCODE_RSHIFT])
24 {
25 result |= KeyboardModifiers_Shift;
26 }
27
28 if (SDL_SCANCODE_LCTRL < scancodeCount &&
29 keyboardState[SDL_SCANCODE_LCTRL])
30 {
31 result |= KeyboardModifiers_Control;
32 }
33
34 if (SDL_SCANCODE_RCTRL < scancodeCount &&
35 keyboardState[SDL_SCANCODE_RCTRL])
36 {
37 result |= KeyboardModifiers_Control;
38 }
39
40 if (SDL_SCANCODE_LALT < scancodeCount &&
41 keyboardState[SDL_SCANCODE_LALT])
42 {
43 result |= KeyboardModifiers_Alt;
44 }
45
46 if (SDL_SCANCODE_RALT < scancodeCount &&
47 keyboardState[SDL_SCANCODE_RALT])
48 {
49 result |= KeyboardModifiers_Alt;
50 }
51 }
52
53 return static_cast<KeyboardModifiers>(result);
54 }
55
56
57 inline void GetPointerEvent(OrthancStone::PointerEvent& p,
58 const OrthancStone::ICompositor& compositor,
59 SDL_Event event,
60 const uint8_t* keyboardState,
61 const int scancodeCount)
62 {
63 using namespace OrthancStone;
64 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount);
65
66 switch (event.button.button)
67 {
68 case SDL_BUTTON_LEFT:
69 p.SetMouseButton(OrthancStone::MouseButton_Left);
70 break;
71
72 case SDL_BUTTON_RIGHT:
73 p.SetMouseButton(OrthancStone::MouseButton_Right);
74 break;
75
76 case SDL_BUTTON_MIDDLE:
77 p.SetMouseButton(OrthancStone::MouseButton_Middle);
78 break;
79
80 default:
81 p.SetMouseButton(OrthancStone::MouseButton_None);
82 break;
83 }
84
85 p.AddPosition(compositor.GetPixelCenterCoordinates(event.button.x, event.button.y));
86 p.SetAltModifier(modifiers & KeyboardModifiers_Alt);
87 p.SetControlModifier(modifiers & KeyboardModifiers_Control);
88 p.SetShiftModifier(modifiers & KeyboardModifiers_Shift);
89 }
90
91 //inline void ParseCommonCommandLineArguments()
92 //{
93
94 // po::options_description description("Usage:");
95
96 // description.add_options()
97 // ("trace", "Enable TRACE logging mode (default: false)")
98 // ("info", "Enable INFO logging mode (default: false)")
99 // ("orthanc", po::value<string>()->default_value("http://localhost:8042"), "Base URL of the Orthanc instance")
100
101 // po::variables_map vm;
102 // po::store(po::command_line_parser(argc, argv).options(description).run(), vm);
103 // po::notify(vm);
104
105 // if (vm.count("help"))
106 // {
107
108 // }
109
110 // if (vm.count("compression"))
111 // {
112 // cout << "Compression level " << vm["compression"].as<int>() << endl;
113 // }
114
115 // return 0;
116
117 //}
118
119 //inline void DeclareOptionAndDefault(boost::program_options::options_description& options,
120 // const std::string& flag, const std::string& defaultValue,
121 // std::string help = "")
122 //{
123 // description.add_options()
124 // (flag, po::value<string>()->default_value(defaultValue), help);
125 //}
126
127 //inline void ProcessOptions
128
129 }
130