Mercurial > hg > orthanc-stone
annotate Samples/Sdl/SimpleViewer/SimpleViewer.cpp @ 1364:dd50d0852ae2 broker
SdlSimpleViewer fixes
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Sat, 18 Apr 2020 14:35:10 +0200 |
parents | 4287eaabe490 |
children |
rev | line source |
---|---|
1358
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
1 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
2 #include "SdlSimpleViewerApplication.h" |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
3 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
4 #include <Core/OrthancException.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
5 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
6 #include <Framework/Loaders/GenericLoadersContext.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
7 #include <Framework/StoneException.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
8 #include <Framework/StoneEnumerations.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
9 #include <Framework/StoneInitialization.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
10 #include <Framework/Viewport/SdlViewport.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
11 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
12 #include <SDL.h> |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
13 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
14 namespace OrthancStone |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
15 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
16 static KeyboardModifiers GetKeyboardModifiers(const uint8_t* keyboardState, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
17 const int scancodeCount) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
18 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
19 int result = KeyboardModifiers_None; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
20 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
21 if (keyboardState != NULL) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
22 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
23 if (SDL_SCANCODE_LSHIFT < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
24 keyboardState[SDL_SCANCODE_LSHIFT]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
25 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
26 result |= KeyboardModifiers_Shift; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
27 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
28 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
29 if (SDL_SCANCODE_RSHIFT < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
30 keyboardState[SDL_SCANCODE_RSHIFT]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
31 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
32 result |= KeyboardModifiers_Shift; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
33 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
34 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
35 if (SDL_SCANCODE_LCTRL < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
36 keyboardState[SDL_SCANCODE_LCTRL]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
37 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
38 result |= KeyboardModifiers_Control; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
39 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
40 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
41 if (SDL_SCANCODE_RCTRL < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
42 keyboardState[SDL_SCANCODE_RCTRL]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
43 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
44 result |= KeyboardModifiers_Control; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
45 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
46 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
47 if (SDL_SCANCODE_LALT < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
48 keyboardState[SDL_SCANCODE_LALT]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
49 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
50 result |= KeyboardModifiers_Alt; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
51 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
52 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
53 if (SDL_SCANCODE_RALT < scancodeCount && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
54 keyboardState[SDL_SCANCODE_RALT]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
55 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
56 result |= KeyboardModifiers_Alt; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
57 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
58 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
59 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
60 return static_cast<KeyboardModifiers>(result); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
61 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
62 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
63 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
64 static void GetPointerEvent(PointerEvent& p, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
65 const ICompositor& compositor, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
66 SDL_Event event, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
67 const uint8_t* keyboardState, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
68 const int scancodeCount) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
69 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
70 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
71 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
72 switch (event.button.button) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
73 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
74 case SDL_BUTTON_LEFT: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
75 p.SetMouseButton(OrthancStone::MouseButton_Left); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
76 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
77 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
78 case SDL_BUTTON_RIGHT: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
79 p.SetMouseButton(OrthancStone::MouseButton_Right); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
80 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
81 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
82 case SDL_BUTTON_MIDDLE: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
83 p.SetMouseButton(OrthancStone::MouseButton_Middle); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
84 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
85 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
86 default: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
87 p.SetMouseButton(OrthancStone::MouseButton_None); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
88 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
89 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
90 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
91 p.AddPosition(compositor.GetPixelCenterCoordinates(event.button.x, event.button.y)); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
92 p.SetAltModifier(modifiers & KeyboardModifiers_Alt); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
93 p.SetControlModifier(modifiers & KeyboardModifiers_Control); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
94 p.SetShiftModifier(modifiers & KeyboardModifiers_Shift); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
95 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
96 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
97 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
98 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
99 /** |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
100 * IMPORTANT: The full arguments to "main()" are needed for SDL on |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
101 * Windows. Otherwise, one gets the linking error "undefined reference |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
102 * to `SDL_main'". https://wiki.libsdl.org/FAQWindows |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
103 **/ |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
104 int main(int argc, char* argv[]) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
105 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
106 try |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
107 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
108 OrthancStone::StoneInitialize(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
109 Orthanc::Logging::EnableInfoLevel(true); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
110 //Orthanc::Logging::EnableTraceLevel(true); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
111 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
112 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
113 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
114 #if 1 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
115 boost::shared_ptr<OrthancStone::SdlViewport> viewport = |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
116 OrthancStone::SdlOpenGLViewport::Create("Stone of Orthanc", 800, 600); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
117 #else |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
118 boost::shared_ptr<OrthancStone::SdlViewport> viewport = |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
119 OrthancStone::SdlCairoViewport::Create("Stone of Orthanc", 800, 600); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
120 #endif |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
121 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
122 OrthancStone::GenericLoadersContext context(1, 4, 1); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
123 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
124 context.StartOracle(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
125 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
126 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
127 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
128 boost::shared_ptr<SdlSimpleViewerApplication> application( |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
129 SdlSimpleViewerApplication::Create(context, viewport)); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
130 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
131 OrthancStone::DicomSource source; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
132 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
133 // Default and command-line parameters |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
134 const char* instanceId = "285dece8-e1956b38-cdc7d084-6ce3371e-536a9ffc"; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
135 unsigned int frameIndex = 0; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
136 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
137 if (argc == 1) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
138 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
139 LOG(ERROR) << "No instanceId supplied. The default of " << instanceId << " will be used. " |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
140 << "Please supply the Orthanc instance ID of the frame you wish to display then, optionally, " |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
141 << "the zero-based index of the frame (for multi-frame instances)"; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
142 // TODO: frame number as second argument... |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
143 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
144 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
145 if (argc >= 2) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
146 instanceId = argv[1]; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
147 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
148 if (argc >= 3) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
149 frameIndex = atoi(argv[1]); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
150 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
151 if (argc > 3) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
152 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
153 LOG(ERROR) << "Extra arguments ignored!"; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
154 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
155 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
156 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
157 application->LoadOrthancFrame(source, instanceId, frameIndex); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
158 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
159 OrthancStone::DefaultViewportInteractor interactor; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
160 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
161 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
162 int scancodeCount = 0; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
163 const uint8_t* keyboardState = SDL_GetKeyboardState(&scancodeCount); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
164 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
165 bool stop = false; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
166 while (!stop) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
167 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
168 bool paint = false; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
169 SDL_Event event; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
170 while (SDL_PollEvent(&event)) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
171 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
172 if (event.type == SDL_QUIT) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
173 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
174 stop = true; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
175 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
176 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
177 else if (viewport->IsRefreshEvent(event)) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
178 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
179 paint = true; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
180 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
181 else if (event.type == SDL_WINDOWEVENT && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
182 (event.window.event == SDL_WINDOWEVENT_RESIZED || |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
183 event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
184 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
185 viewport->UpdateSize(event.window.data1, event.window.data2); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
186 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
187 else if (event.type == SDL_WINDOWEVENT && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
188 (event.window.event == SDL_WINDOWEVENT_SHOWN || |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
189 event.window.event == SDL_WINDOWEVENT_EXPOSED)) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
190 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
191 paint = true; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
192 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
193 else if (event.type == SDL_KEYDOWN && |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
194 event.key.repeat == 0 /* Ignore key bounce */) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
195 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
196 switch (event.key.keysym.sym) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
197 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
198 case SDLK_f: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
199 viewport->ToggleMaximize(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
200 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
201 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
202 case SDLK_s: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
203 application->FitContent(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
204 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
205 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
206 case SDLK_q: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
207 stop = true; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
208 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
209 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
210 default: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
211 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
212 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
213 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
214 else if (event.type == SDL_MOUSEBUTTONDOWN || |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
215 event.type == SDL_MOUSEMOTION || |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
216 event.type == SDL_MOUSEBUTTONUP) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
217 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
218 std::auto_ptr<OrthancStone::IViewport::ILock> lock(viewport->Lock()); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
219 if (lock->HasCompositor()) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
220 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
221 OrthancStone::PointerEvent p; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
222 OrthancStone::GetPointerEvent(p, lock->GetCompositor(), |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
223 event, keyboardState, scancodeCount); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
224 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
225 switch (event.type) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
226 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
227 case SDL_MOUSEBUTTONDOWN: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
228 lock->GetController().HandleMousePress(interactor, p, |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
229 lock->GetCompositor().GetCanvasWidth(), |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
230 lock->GetCompositor().GetCanvasHeight()); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
231 lock->Invalidate(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
232 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
233 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
234 case SDL_MOUSEMOTION: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
235 if (lock->GetController().HandleMouseMove(p)) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
236 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
237 lock->Invalidate(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
238 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
239 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
240 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
241 case SDL_MOUSEBUTTONUP: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
242 lock->GetController().HandleMouseRelease(p); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
243 lock->Invalidate(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
244 break; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
245 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
246 default: |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
247 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
248 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
249 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
250 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
251 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
252 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
253 if (paint) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
254 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
255 viewport->Paint(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
256 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
257 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
258 // Small delay to avoid using 100% of CPU |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
259 SDL_Delay(1); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
260 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
261 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
262 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
263 context.StopOracle(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
264 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
265 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
266 |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
267 OrthancStone::StoneFinalize(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
268 return 0; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
269 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
270 catch (Orthanc::OrthancException & e) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
271 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
272 auto test = e.What(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
273 fprintf(stdout, test); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
274 LOG(ERROR) << "OrthancException: " << e.What(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
275 return -1; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
276 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
277 catch (OrthancStone::StoneException & e) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
278 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
279 LOG(ERROR) << "StoneException: " << e.What(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
280 return -1; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
281 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
282 catch (std::runtime_error & e) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
283 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
284 LOG(ERROR) << "Runtime error: " << e.what(); |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
285 return -1; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
286 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
287 catch (...) |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
288 { |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
289 LOG(ERROR) << "Native exception"; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
290 return -1; |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
291 } |
4287eaabe490
Sdl simple viewer application
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
292 } |