# HG changeset patch
# User am@osimis.io
# Date 1539696321 -7200
# Node ID 8716176ff7f0e50155e59b54ca9a8a68b1d087fa
# Parent 612238b3f3e89fc5a55947fbde6afbaba20a8795
added support for arrow keys
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Qt/QCairoWidget.cpp
--- a/Applications/Qt/QCairoWidget.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Qt/QCairoWidget.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -138,9 +138,27 @@
void QCairoWidget::keyPressEvent(QKeyEvent *event)
{
+ using namespace OrthancStone;
+
OrthancStone::KeyboardModifiers stoneModifiers = GetKeyboardModifiers(event);
- context_->GetCentralViewport().KeyPressed(event->text()[0].toLatin1(), stoneModifiers);
+ OrthancStone::KeyboardKeys keyType = OrthancStone::KeyboardKeys_Generic;
+ char keyChar = event->text()[0].toLatin1();
+
+#define CASE_QT_KEY_TO_ORTHANC(qt, o) case qt: keyType = o; break;
+ if (keyChar == 0)
+ {
+ switch (event->key())
+ {
+ CASE_QT_KEY_TO_ORTHANC(Qt::Key_Up, KeyboardKeys_Up);
+ CASE_QT_KEY_TO_ORTHANC(Qt::Key_Down, KeyboardKeys_Down);
+ CASE_QT_KEY_TO_ORTHANC(Qt::Key_Left, KeyboardKeys_Left);
+ CASE_QT_KEY_TO_ORTHANC(Qt::Key_Right, KeyboardKeys_Right);
+ default:
+ break;
+ }
+ }
+ context_->GetCentralViewport().KeyPressed(keyType, keyChar, stoneModifiers);
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp
--- a/Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -89,11 +89,12 @@
}
void MainWidgetInteractor::KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
- switch (key)
+ switch (keyChar)
{
case 's':
widget.SetDefaultView();
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SimpleViewer/MainWidgetInteractor.h
--- a/Applications/Samples/SimpleViewer/MainWidgetInteractor.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SimpleViewer/MainWidgetInteractor.h Tue Oct 16 15:25:21 2018 +0200
@@ -61,7 +61,8 @@
IStatusBar* statusBar);
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar);
};
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SimpleViewer/ThumbnailInteractor.h
--- a/Applications/Samples/SimpleViewer/ThumbnailInteractor.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SimpleViewer/ThumbnailInteractor.h Tue Oct 16 15:25:21 2018 +0200
@@ -62,7 +62,8 @@
{}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{}
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SimpleViewerApplicationSingleFile.h
--- a/Applications/Samples/SimpleViewerApplicationSingleFile.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SimpleViewerApplicationSingleFile.h Tue Oct 16 15:25:21 2018 +0200
@@ -88,7 +88,8 @@
{}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{}
@@ -154,11 +155,12 @@
}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
- switch (key)
+ switch (keyChar)
{
case 's':
widget.SetDefaultView();
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SingleFrameApplication.h
--- a/Applications/Samples/SingleFrameApplication.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SingleFrameApplication.h Tue Oct 16 15:25:21 2018 +0200
@@ -100,11 +100,12 @@
}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
- switch (key)
+ switch (keyChar)
{
case 's':
widget.SetDefaultView();
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Samples/SingleFrameEditorApplication.h
--- a/Applications/Samples/SingleFrameEditorApplication.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Samples/SingleFrameEditorApplication.h Tue Oct 16 15:25:21 2018 +0200
@@ -109,11 +109,12 @@
}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
- switch (key)
+ switch (keyChar)
{
case 's':
widget.SetDefaultView();
diff -r 612238b3f3e8 -r 8716176ff7f0 Applications/Sdl/SdlEngine.cpp
--- a/Applications/Sdl/SdlEngine.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Applications/Sdl/SdlEngine.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -13,7 +13,7 @@
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
**/
@@ -35,7 +35,7 @@
context_.GetCentralViewport().SetSize(width, height);
surface_.SetSize(width, height);
}
-
+
void SdlEngine::RenderFrame()
{
@@ -135,7 +135,7 @@
{
NativeStoneApplicationContext::GlobalMutexLocker locker(context_);
- if (event.type == SDL_QUIT)
+ if (event.type == SDL_QUIT)
{
stop = true;
break;
@@ -146,20 +146,20 @@
switch (event.button.button)
{
- case SDL_BUTTON_LEFT:
- context_.GetCentralViewport().MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers);
- break;
+ case SDL_BUTTON_LEFT:
+ context_.GetCentralViewport().MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers);
+ break;
- case SDL_BUTTON_RIGHT:
- context_.GetCentralViewport().MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers);
- break;
+ case SDL_BUTTON_RIGHT:
+ context_.GetCentralViewport().MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers);
+ break;
- case SDL_BUTTON_MIDDLE:
- context_.GetCentralViewport().MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers);
- break;
+ case SDL_BUTTON_MIDDLE:
+ context_.GetCentralViewport().MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers);
+ break;
- default:
- break;
+ default:
+ break;
}
}
else if (event.type == SDL_MOUSEMOTION)
@@ -174,20 +174,20 @@
{
switch (event.window.event)
{
- case SDL_WINDOWEVENT_LEAVE:
- context_.GetCentralViewport().MouseLeave();
- break;
+ case SDL_WINDOWEVENT_LEAVE:
+ context_.GetCentralViewport().MouseLeave();
+ break;
- case SDL_WINDOWEVENT_ENTER:
- context_.GetCentralViewport().MouseEnter();
- break;
+ case SDL_WINDOWEVENT_ENTER:
+ context_.GetCentralViewport().MouseEnter();
+ break;
- case SDL_WINDOWEVENT_SIZE_CHANGED:
- SetSize(event.window.data1, event.window.data2);
- break;
+ case SDL_WINDOWEVENT_SIZE_CHANGED:
+ SetSize(event.window.data1, event.window.data2);
+ break;
- default:
- break;
+ default:
+ break;
}
}
else if (event.type == SDL_MOUSEWHEEL)
@@ -213,53 +213,61 @@
switch (event.key.keysym.sym)
{
- case SDLK_a: context_.GetCentralViewport().KeyPressed('a', modifiers); break;
- case SDLK_b: context_.GetCentralViewport().KeyPressed('b', modifiers); break;
- case SDLK_c: context_.GetCentralViewport().KeyPressed('c', modifiers); break;
- case SDLK_d: context_.GetCentralViewport().KeyPressed('d', modifiers); break;
- case SDLK_e: context_.GetCentralViewport().KeyPressed('e', modifiers); break;
- case SDLK_f: window_.ToggleMaximize(); break;
- case SDLK_g: context_.GetCentralViewport().KeyPressed('g', modifiers); break;
- case SDLK_h: context_.GetCentralViewport().KeyPressed('h', modifiers); break;
- case SDLK_i: context_.GetCentralViewport().KeyPressed('i', modifiers); break;
- case SDLK_j: context_.GetCentralViewport().KeyPressed('j', modifiers); break;
- case SDLK_k: context_.GetCentralViewport().KeyPressed('k', modifiers); break;
- case SDLK_l: context_.GetCentralViewport().KeyPressed('l', modifiers); break;
- case SDLK_m: context_.GetCentralViewport().KeyPressed('m', modifiers); break;
- case SDLK_n: context_.GetCentralViewport().KeyPressed('n', modifiers); break;
- case SDLK_o: context_.GetCentralViewport().KeyPressed('o', modifiers); break;
- case SDLK_p: context_.GetCentralViewport().KeyPressed('p', modifiers); break;
- case SDLK_q: stop = true; break;
- case SDLK_r: context_.GetCentralViewport().KeyPressed('r', modifiers); break;
- case SDLK_s: context_.GetCentralViewport().KeyPressed('s', modifiers); break;
- case SDLK_t: context_.GetCentralViewport().KeyPressed('t', modifiers); break;
- case SDLK_u: context_.GetCentralViewport().KeyPressed('u', modifiers); break;
- case SDLK_v: context_.GetCentralViewport().KeyPressed('v', modifiers); break;
- case SDLK_w: context_.GetCentralViewport().KeyPressed('w', modifiers); break;
- case SDLK_x: context_.GetCentralViewport().KeyPressed('x', modifiers); break;
- case SDLK_y: context_.GetCentralViewport().KeyPressed('y', modifiers); break;
- case SDLK_z: context_.GetCentralViewport().KeyPressed('z', modifiers); break;
- case SDLK_KP_0: context_.GetCentralViewport().KeyPressed('0', modifiers); break;
- case SDLK_KP_1: context_.GetCentralViewport().KeyPressed('1', modifiers); break;
- case SDLK_KP_2: context_.GetCentralViewport().KeyPressed('2', modifiers); break;
- case SDLK_KP_3: context_.GetCentralViewport().KeyPressed('3', modifiers); break;
- case SDLK_KP_4: context_.GetCentralViewport().KeyPressed('4', modifiers); break;
- case SDLK_KP_5: context_.GetCentralViewport().KeyPressed('5', modifiers); break;
- case SDLK_KP_6: context_.GetCentralViewport().KeyPressed('6', modifiers); break;
- case SDLK_KP_7: context_.GetCentralViewport().KeyPressed('7', modifiers); break;
- case SDLK_KP_8: context_.GetCentralViewport().KeyPressed('8', modifiers); break;
- case SDLK_KP_9: context_.GetCentralViewport().KeyPressed('9', modifiers); break;
+ case SDLK_a: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'a', modifiers); break;
+ case SDLK_b: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'b', modifiers); break;
+ case SDLK_c: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'c', modifiers); break;
+ case SDLK_d: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'd', modifiers); break;
+ case SDLK_e: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'e', modifiers); break;
+ case SDLK_f: window_.ToggleMaximize(); break;
+ case SDLK_g: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'g', modifiers); break;
+ case SDLK_h: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'h', modifiers); break;
+ case SDLK_i: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'i', modifiers); break;
+ case SDLK_j: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'j', modifiers); break;
+ case SDLK_k: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'k', modifiers); break;
+ case SDLK_l: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'l', modifiers); break;
+ case SDLK_m: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'm', modifiers); break;
+ case SDLK_n: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'n', modifiers); break;
+ case SDLK_o: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'o', modifiers); break;
+ case SDLK_p: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'p', modifiers); break;
+ case SDLK_q: stop = true; break;
+ case SDLK_r: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'r', modifiers); break;
+ case SDLK_s: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 's', modifiers); break;
+ case SDLK_t: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 't', modifiers); break;
+ case SDLK_u: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'u', modifiers); break;
+ case SDLK_v: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'v', modifiers); break;
+ case SDLK_w: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'w', modifiers); break;
+ case SDLK_x: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'x', modifiers); break;
+ case SDLK_y: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'y', modifiers); break;
+ case SDLK_z: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, 'z', modifiers); break;
+ case SDLK_KP_0: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '0', modifiers); break;
+ case SDLK_KP_1: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '1', modifiers); break;
+ case SDLK_KP_2: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '2', modifiers); break;
+ case SDLK_KP_3: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '3', modifiers); break;
+ case SDLK_KP_4: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '4', modifiers); break;
+ case SDLK_KP_5: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '5', modifiers); break;
+ case SDLK_KP_6: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '6', modifiers); break;
+ case SDLK_KP_7: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '7', modifiers); break;
+ case SDLK_KP_8: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '8', modifiers); break;
+ case SDLK_KP_9: context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '9', modifiers); break;
- case SDLK_PLUS:
- case SDLK_KP_PLUS:
- context_.GetCentralViewport().KeyPressed('+', modifiers); break;
+ case SDLK_PLUS:
+ case SDLK_KP_PLUS:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '+', modifiers); break;
+
+ case SDLK_MINUS:
+ case SDLK_KP_MINUS:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Generic, '-', modifiers); break;
- case SDLK_MINUS:
- case SDLK_KP_MINUS:
- context_.GetCentralViewport().KeyPressed('-', modifiers); break;
-
- default:
- break;
+ case SDLK_RIGHT:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Right, 0, modifiers); break;
+ case SDLK_LEFT:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Left, 0, modifiers); break;
+ case SDLK_UP:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Up, 0, modifiers); break;
+ case SDLK_DOWN:
+ context_.GetCentralViewport().KeyPressed(KeyboardKeys_Down, 0, modifiers); break;
+ default:
+ break;
}
}
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/StoneEnumerations.h
--- a/Framework/StoneEnumerations.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/StoneEnumerations.h Tue Oct 16 15:25:21 2018 +0200
@@ -75,6 +75,17 @@
KeyboardModifiers_Alt = (1 << 2)
};
+ enum KeyboardKeys
+ {
+ KeyboardKeys_Generic = 0,
+
+ // let's use the same ids as in javascript to avoid some conversion in WASM: https://css-tricks.com/snippets/javascript/javascript-keycodes/
+ KeyboardKeys_Left = 37,
+ KeyboardKeys_Up = 38,
+ KeyboardKeys_Right = 39,
+ KeyboardKeys_Down = 40
+ };
+
enum SliceImageQuality
{
SliceImageQuality_FullPng, // smaller to transmit but longer to generate on Orthanc side (better choice when on low bandwidth)
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Viewport/IViewport.h
--- a/Framework/Viewport/IViewport.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Viewport/IViewport.h Tue Oct 16 15:25:21 2018 +0200
@@ -78,7 +78,8 @@
int y,
KeyboardModifiers modifiers) = 0;
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers) = 0;
virtual bool HasUpdateContent() = 0;
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Viewport/WidgetViewport.cpp
--- a/Framework/Viewport/WidgetViewport.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Viewport/WidgetViewport.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -235,13 +235,14 @@
}
- void WidgetViewport::KeyPressed(char key,
+ void WidgetViewport::KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers)
{
if (centralWidget_.get() != NULL &&
mouseTracker_.get() == NULL)
{
- centralWidget_->KeyPressed(key, modifiers);
+ centralWidget_->KeyPressed(key, keyChar, modifiers);
}
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Viewport/WidgetViewport.h
--- a/Framework/Viewport/WidgetViewport.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Viewport/WidgetViewport.h Tue Oct 16 15:25:21 2018 +0200
@@ -82,7 +82,8 @@
int y,
KeyboardModifiers modifiers);
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers);
virtual bool HasUpdateContent();
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/EmptyWidget.h
--- a/Framework/Widgets/EmptyWidget.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/EmptyWidget.h Tue Oct 16 15:25:21 2018 +0200
@@ -94,7 +94,8 @@
{
}
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers)
{
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/IWidget.h
--- a/Framework/Widgets/IWidget.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/IWidget.h Tue Oct 16 15:25:21 2018 +0200
@@ -64,7 +64,8 @@
int y,
KeyboardModifiers modifiers) = 0;
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers) = 0;
virtual bool HasUpdateContent() const = 0;
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/IWorldSceneInteractor.h
--- a/Framework/Widgets/IWorldSceneInteractor.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/IWorldSceneInteractor.h Tue Oct 16 15:25:21 2018 +0200
@@ -13,7 +13,7 @@
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
**/
@@ -29,38 +29,39 @@
namespace OrthancStone
{
- class WorldSceneWidget;
+ class WorldSceneWidget;
- class IWorldSceneInteractor : public boost::noncopyable
- {
- public:
- virtual ~IWorldSceneInteractor()
+ class IWorldSceneInteractor : public boost::noncopyable
{
- }
-
- virtual IWorldSceneMouseTracker* CreateMouseTracker(WorldSceneWidget& widget,
- const ViewportGeometry& view,
- MouseButton button,
- KeyboardModifiers modifiers,
- double x,
- double y,
- IStatusBar* statusBar) = 0;
+ public:
+ virtual ~IWorldSceneInteractor()
+ {
+ }
+
+ virtual IWorldSceneMouseTracker* CreateMouseTracker(WorldSceneWidget& widget,
+ const ViewportGeometry& view,
+ MouseButton button,
+ KeyboardModifiers modifiers,
+ double x,
+ double y,
+ IStatusBar* statusBar) = 0;
- virtual void MouseOver(CairoContext& context,
- WorldSceneWidget& widget,
- const ViewportGeometry& view,
- double x,
- double y,
- IStatusBar* statusBar) = 0;
+ virtual void MouseOver(CairoContext& context,
+ WorldSceneWidget& widget,
+ const ViewportGeometry& view,
+ double x,
+ double y,
+ IStatusBar* statusBar) = 0;
- virtual void MouseWheel(WorldSceneWidget& widget,
- MouseWheelDirection direction,
- KeyboardModifiers modifiers,
- IStatusBar* statusBar) = 0;
+ virtual void MouseWheel(WorldSceneWidget& widget,
+ MouseWheelDirection direction,
+ KeyboardModifiers modifiers,
+ IStatusBar* statusBar) = 0;
- virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
- KeyboardModifiers modifiers,
- IStatusBar* statusBar) = 0;
- };
+ virtual void KeyPressed(WorldSceneWidget& widget,
+ KeyboardKeys key,
+ char keyChar,
+ KeyboardModifiers modifiers,
+ IStatusBar* statusBar) = 0;
+ };
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/LayoutWidget.cpp
--- a/Framework/Widgets/LayoutWidget.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/LayoutWidget.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -451,12 +451,13 @@
}
- void LayoutWidget::KeyPressed(char key,
+ void LayoutWidget::KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers)
{
for (size_t i = 0; i < children_.size(); i++)
{
- children_[i]->GetWidget().KeyPressed(key, modifiers);
+ children_[i]->GetWidget().KeyPressed(key, keyChar, modifiers);
}
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/LayoutWidget.h
--- a/Framework/Widgets/LayoutWidget.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/LayoutWidget.h Tue Oct 16 15:25:21 2018 +0200
@@ -117,7 +117,8 @@
int y,
KeyboardModifiers modifiers);
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers);
virtual bool HasUpdateContent() const
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/TestCairoWidget.cpp
--- a/Framework/Widgets/TestCairoWidget.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/TestCairoWidget.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -115,10 +115,11 @@
}
- void TestCairoWidget::KeyPressed(char key,
+ void TestCairoWidget::KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers)
{
- UpdateStatusBar("Key pressed: \"" + std::string(1, key) + "\"");
+ UpdateStatusBar("Key pressed: \"" + std::string(1, keyChar) + "\"");
}
}
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/TestCairoWidget.h
--- a/Framework/Widgets/TestCairoWidget.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/TestCairoWidget.h Tue Oct 16 15:25:21 2018 +0200
@@ -58,7 +58,8 @@
int y,
KeyboardModifiers modifiers);
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers);
virtual bool HasUpdateContent() const
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/TestWorldSceneWidget.cpp
--- a/Framework/Widgets/TestWorldSceneWidget.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/TestWorldSceneWidget.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -13,7 +13,7 @@
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
**/
@@ -81,20 +81,21 @@
}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
if (statusBar)
{
- statusBar->SetMessage("Key pressed: \"" + std::string(1, key) + "\"");
+ statusBar->SetMessage("Key pressed: \"" + std::string(1, keyChar) + "\"");
}
}
};
bool TestWorldSceneWidget::RenderScene(CairoContext& context,
- const ViewportGeometry& view)
+ const ViewportGeometry& view)
{
cairo_t* cr = context.GetObject();
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/WorldSceneWidget.cpp
--- a/Framework/Widgets/WorldSceneWidget.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/WorldSceneWidget.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -330,12 +330,13 @@
}
- void WorldSceneWidget::KeyPressed(char key,
+ void WorldSceneWidget::KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers)
{
if (interactor_)
{
- interactor_->KeyPressed(*this, key, modifiers, GetStatusBar());
+ interactor_->KeyPressed(*this, key, keyChar, modifiers, GetStatusBar());
}
}
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/Widgets/WorldSceneWidget.h
--- a/Framework/Widgets/WorldSceneWidget.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/Widgets/WorldSceneWidget.h Tue Oct 16 15:25:21 2018 +0200
@@ -160,7 +160,8 @@
int y,
KeyboardModifiers modifiers);
- virtual void KeyPressed(char key,
+ virtual void KeyPressed(KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers);
};
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Framework/dev.h
--- a/Framework/dev.h Tue Oct 16 12:57:38 2018 +0200
+++ b/Framework/dev.h Tue Oct 16 15:25:21 2018 +0200
@@ -748,11 +748,12 @@
}
virtual void KeyPressed(WorldSceneWidget& widget,
- char key,
+ KeyboardKeys key,
+ char keyChar,
KeyboardModifiers modifiers,
IStatusBar* statusBar)
{
- switch (key)
+ switch (keyChar)
{
case 's':
widget.SetDefaultView();
diff -r 612238b3f3e8 -r 8716176ff7f0 Platforms/Wasm/Defaults.cpp
--- a/Platforms/Wasm/Defaults.cpp Tue Oct 16 12:57:38 2018 +0200
+++ b/Platforms/Wasm/Defaults.cpp Tue Oct 16 15:25:21 2018 +0200
@@ -219,7 +219,8 @@
}
void EMSCRIPTEN_KEEPALIVE ViewportKeyPressed(ViewportHandle viewport,
- const char* key,
+ int key,
+ const char* keyChar,
bool isShiftPressed,
bool isControlPressed,
bool isAltPressed)
@@ -235,8 +236,12 @@
if (isAltPressed) {
modifiers = static_cast(modifiers + OrthancStone::KeyboardModifiers_Alt);
}
- printf("key pressed : %c\n", key[0]);
- viewport->KeyPressed(key[0], modifiers);
+
+ char c = 0;
+ if (keyChar != NULL && key == OrthancStone::KeyboardKeys_Generic) {
+ c = keyChar[0];
+ }
+ viewport->KeyPressed(static_cast(key), c, modifiers);
}
diff -r 612238b3f3e8 -r 8716176ff7f0 Platforms/Wasm/wasm-viewport.ts
--- a/Platforms/Wasm/wasm-viewport.ts Tue Oct 16 12:57:38 2018 +0200
+++ b/Platforms/Wasm/wasm-viewport.ts Tue Oct 16 15:25:21 2018 +0200
@@ -80,7 +80,7 @@
this.ViewportMouseEnter = this.module_.cwrap('ViewportMouseEnter', null, [ 'number' ]);
this.ViewportMouseLeave = this.module_.cwrap('ViewportMouseLeave', null, [ 'number' ]);
this.ViewportMouseWheel = this.module_.cwrap('ViewportMouseWheel', null, [ 'number', 'number', 'number', 'number', 'number' ]);
- this.ViewportKeyPressed = this.module_.cwrap('ViewportKeyPressed', null, [ 'number', 'string', 'number', 'number' ]);
+ this.ViewportKeyPressed = this.module_.cwrap('ViewportKeyPressed', null, [ 'number', 'number', 'string', 'number', 'number' ]);
}
public GetCppViewport() : number {
@@ -204,7 +204,15 @@
});
window.addEventListener('keydown', function(event) {
- that.ViewportKeyPressed(that.pimpl_, event.key, event.shiftKey, event.ctrlKey, event.altKey);
+ var keyChar = event.key;
+ var keyCode = event.keyCode
+ if (keyChar.length == 1) {
+ keyCode = 0; // maps to OrthancStone::KeyboardKeys_Generic
+ } else {
+ keyChar = null;
+ }
+// console.log("key: ", keyCode, keyChar);
+ that.ViewportKeyPressed(that.pimpl_, keyCode, keyChar, event.shiftKey, event.ctrlKey, event.altKey);
});
this.htmlCanvas_.addEventListener('wheel', function(event) {
diff -r 612238b3f3e8 -r 8716176ff7f0 Resources/CMake/OrthancStoneConfiguration.cmake
--- a/Resources/CMake/OrthancStoneConfiguration.cmake Tue Oct 16 12:57:38 2018 +0200
+++ b/Resources/CMake/OrthancStoneConfiguration.cmake Tue Oct 16 15:25:21 2018 +0200
@@ -273,7 +273,9 @@
${ORTHANC_STONE_ROOT}/Framework/Volumes/VolumeReslicer.cpp
${ORTHANC_STONE_ROOT}/Framework/Widgets/CairoWidget.cpp
${ORTHANC_STONE_ROOT}/Framework/Widgets/EmptyWidget.cpp
+ ${ORTHANC_STONE_ROOT}/Framework/Widgets/IWidget.h
${ORTHANC_STONE_ROOT}/Framework/Widgets/IWorldSceneMouseTracker.h
+ ${ORTHANC_STONE_ROOT}/Framework/Widgets/IWorldSceneInteractor.h
${ORTHANC_STONE_ROOT}/Framework/Widgets/LayerWidget.cpp
${ORTHANC_STONE_ROOT}/Framework/Widgets/LayoutWidget.cpp
${ORTHANC_STONE_ROOT}/Framework/Widgets/TestCairoWidget.cpp