diff Samples/Sdl/TrackerSampleApp.h @ 656:002d9562c8f5

Added support to DISABLE legacy scaling in SDL Windows (only in WIN32... this might also be needed on macos and GNU/Linux ?) + fixed text info overlay pos for angle measure (this requires the app to be aware of the compositor)
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 14 May 2019 16:54:13 +0200
parents 462a5074f914
children cb3b76d16234
line wrap: on
line diff
--- a/Samples/Sdl/TrackerSampleApp.h	Tue May 14 13:51:32 2019 +0200
+++ b/Samples/Sdl/TrackerSampleApp.h	Tue May 14 16:54:13 2019 +0200
@@ -48,7 +48,8 @@
 
   const char* MeasureToolToString(size_t i);
 
-  static const unsigned int FONT_SIZE = 32;
+  static const unsigned int FONT_SIZE_0 = 32;
+  static const unsigned int FONT_SIZE_1 = 24;
 
   class Scene2D;
 
@@ -61,22 +62,32 @@
       , currentTool_(GuiTool_Rotate)
       , scene_(broker)
     {
+      scene_.RegisterObserverCallback(
+        new Callable<TrackerSampleApp, Scene2D::SceneTransformChanged>
+        (*this, &TrackerSampleApp::OnSceneTransformChanged));
+
       TEXTURE_2x2_1_ZINDEX = 1;
       TEXTURE_1x1_ZINDEX = 2;
       TEXTURE_2x2_2_ZINDEX = 3;
       LINESET_1_ZINDEX = 4;
       LINESET_2_ZINDEX = 5;
-      INFOTEXT_LAYER_ZINDEX = 6;
+      FLOATING_INFOTEXT_LAYER_ZINDEX = 6;
+      FIXED_INFOTEXT_LAYER_ZINDEX = 7;
     }
     void PrepareScene();
+    void Run();
 
     void DisableTracker();
 
     Scene2D& GetScene();
 
-    void HandleApplicationEvent(
-      const OpenGLCompositor& compositor,
-      const SDL_Event& event);
+    void HandleApplicationEvent(const SDL_Event& event);
+
+    /**
+    This method is called when the scene transform changes. It allows to
+    recompute the visual elements whose content depend upon the scene transform
+    */
+    void OnSceneTransformChanged(const Scene2D::SceneTransformChanged& message);
 
   private:
     void SelectNextTool();
@@ -86,8 +97,7 @@
 
     FlexiblePointerTrackerPtr CreateSuitableTracker(
       const SDL_Event& event,
-      const PointerEvent& e,
-      const OpenGLCompositor& compositor);
+      const PointerEvent& e);
 
     void TakeScreenshot(
       const std::string& target,
@@ -102,10 +112,12 @@
     void Redo();
 
   private:
-    void DisplayInfoText(const PointerEvent& e);
+    void DisplayFloatingCtrlInfoText(const PointerEvent& e);
+    void DisplayInfoText();
     void HideInfoText();
 
   private:
+    std::auto_ptr<OpenGLCompositor> compositor_;
     /**
     WARNING: the measuring tools do store a reference to the scene, and it 
     paramount that the scene gets destroyed AFTER the measurement tools.
@@ -119,21 +131,16 @@
     std::vector<MeasureToolPtr> measureTools_;
 
     //static const int LAYER_POSITION = 150;
-#if 0
-    int TEXTURE_2x2_1_ZINDEX = 12;
-    int TEXTURE_1x1_ZINDEX = 13;
-    int TEXTURE_2x2_2_ZINDEX = 14;
-    int LINESET_1_ZINDEX = 50;
-    int LINESET_2_ZINDEX = 100;
-    int INFOTEXT_LAYER_ZINDEX = 150;
-#else
+
+
     int TEXTURE_2x2_1_ZINDEX;
     int TEXTURE_1x1_ZINDEX;
     int TEXTURE_2x2_2_ZINDEX;
     int LINESET_1_ZINDEX;
     int LINESET_2_ZINDEX;
-    int INFOTEXT_LAYER_ZINDEX;
-#endif
+    int FLOATING_INFOTEXT_LAYER_ZINDEX;
+    int FIXED_INFOTEXT_LAYER_ZINDEX;
+
     GuiTool currentTool_;
   };