]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #3009: Adapt the application to HD screen
authorvsv <vsv@opencascade.com>
Thu, 5 Sep 2019 11:01:59 +0000 (14:01 +0300)
committervsv <vsv@opencascade.com>
Thu, 5 Sep 2019 11:02:09 +0000 (14:02 +0300)
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/PartSet/PartSet_SketcherMgr.cpp
src/SketcherPrs/SketcherPrs_Coincident.cpp
src/SketcherPrs/SketcherPrs_SymbolPrs.cpp
src/SketcherPrs/SketcherPrs_Tools.cpp
src/SketcherPrs/SketcherPrs_Tools.h

index ca1d2950bf06693c1e563aa5762185cc74a60e71..a3c4d0ebdbf3c7c874d2abc25315c6594763d22d 100644 (file)
@@ -82,6 +82,8 @@
 #include <QMessageBox>
 #include <QAction>
 #include <QTextCodec>
+#include <QWindow>
+#include <QScreen>
 
 #include <sstream>
 #include <string>
@@ -1319,6 +1321,14 @@ bool isSameShape(const TopoDS_Shape& theShape1, const TopoDS_Shape& theShape2)
   return true;
 }
 
+qreal currentPixelRatio()
+{
+  QWindowList aWnds = qApp->topLevelWindows();
+  if (aWnds.size() > 0)
+    return aWnds.first()->devicePixelRatio();
+  return qApp->primaryScreen()->devicePixelRatio();
+}
+
 
 } // namespace ModuleBase_Tools
 
index d6e4c4c550ce7fb74d1510a9183f3d3e39e5ac96..2d1ad9227f50d12ab0d49e4da220256b374f5a77 100644 (file)
@@ -404,6 +404,8 @@ bool MODULEBASE_EXPORT isSameShape(const TopoDS_Shape& theShape1, const TopoDS_S
 std::string MODULEBASE_EXPORT generateName(const AttributePtr& theAttribute,
   ModuleBase_IWorkshop* theWorkshop);
 
+/// Returns pixel ratio of a screen where main window is displayed
+qreal MODULEBASE_EXPORT currentPixelRatio();
 }
 
 #endif
index f76e254c6b761baa74904b6bec71dfeaa33047e4..e936d729bdd6952ba32ada7763f5cb52f6bf48df 100644 (file)
@@ -961,6 +961,8 @@ void PartSet_SketcherMgr::startSketch(ModuleBase_Operation* theOperation)
   if (!aFOperation)
     return;
 
+  SketcherPrs_Tools::setPixelRatio(ModuleBase_Tools::currentPixelRatio());
+
   myModule->onViewTransformed();
 
   // Display all sketcher sub-Objects
index 9397f212a48e51f6d80cf332eccd5b90044d2e6d..d6029af489621f5d48a1b0785dd47bce43dd7db6 100644 (file)
@@ -140,12 +140,14 @@ void SketcherPrs_Coincident::Compute(
   Quantity_Color aExternalColor = aIsEdge ? Quantity_NOC_BLACK : Quantity_NOC_YELLOW;
   Quantity_Color aInternalColor = aIsEdge ? Quantity_NOC_YELLOW : Quantity_NOC_BLACK;
 
+  int aRatio = SketcherPrs_Tools::pixelRatio();
+
   // Create the presentation as a combination of standard point markers
   bool aCustomColor = myIsCustomColor;
   // The external yellow contour
   Handle(Graphic3d_AspectMarker3d) aPtA = new Graphic3d_AspectMarker3d();
   aPtA->SetType(Aspect_TOM_RING3);
-  aPtA->SetScale(2.);
+  aPtA->SetScale(2. * aRatio);
   aPtA->SetColor(!aCustomColor ? aExternalColor : myCustomColor);
 
   Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(thePresentation);
@@ -157,7 +159,7 @@ void SketcherPrs_Coincident::Compute(
   // Make a black mid ring
   aPtA = new Graphic3d_AspectMarker3d();
   aPtA->SetType(aIsEdge ? Aspect_TOM_STAR : Aspect_TOM_RING1);
-  aPtA->SetScale(1.);
+  aPtA->SetScale(1. * aRatio);
   aPtA->SetColor(!aCustomColor ? aInternalColor : myCustomColor);
   aGroup->SetPrimitivesAspect(aPtA);
   aGroup->AddPrimitiveArray (aPntArray);
@@ -165,7 +167,7 @@ void SketcherPrs_Coincident::Compute(
   // Make an internal ring
   aPtA = new Graphic3d_AspectMarker3d();
   aPtA->SetType(Aspect_TOM_POINT);
-  aPtA->SetScale(5.);
+  aPtA->SetScale(5. * aRatio);
   aPtA->SetColor(!aCustomColor ? aInternalColor : myCustomColor);
   aGroup->SetPrimitivesAspect(aPtA);
   aGroup->AddPrimitiveArray (aPntArray);
index d23827aa7f745111e1cf1edda79b1b2e1bfad6a3..a251d2539f357b9661c0747b1463877e38f25c2d 100644 (file)
@@ -177,6 +177,19 @@ Handle(Image_AlienPixMap) SketcherPrs_SymbolPrs::icon()
   aFile += iconName();
   Handle(Image_AlienPixMap) aPixMap = new Image_AlienPixMap();
   if (aPixMap->Load(aFile.c_str())) {
+    int aRatio = SketcherPrs_Tools::pixelRatio();
+    if (aRatio > 1) {
+      Handle(Image_AlienPixMap) aSizedMap = new Image_AlienPixMap();
+      Standard_Size aWidth = aPixMap->Width() * aRatio;
+      Standard_Size aHeigh = aPixMap->Height() * aRatio;
+      aSizedMap->InitTrash(aPixMap->Format(), aWidth, aHeigh);
+      for (Standard_Size i = 0; i < aWidth; i++) {
+        for (Standard_Size j = 0; j < aHeigh; j++) {
+          aSizedMap->SetPixelColor(i, j, aPixMap->PixelColor(i / aRatio, j / aRatio));
+        }
+      }
+      aPixMap = aSizedMap;
+    }
     myIconsMap[iconName()] = aPixMap;
     return aPixMap;
   }
index 0aecb72c9614bba19f5cb07eaad943a7c03efdae..394a638ff948a89e833e6a0961d0a4f74b88acfe 100644 (file)
@@ -255,8 +255,20 @@ std::shared_ptr<GeomAPI_Pnt2d> getProjectionPoint(const FeaturePtr theLine,
   return aLin2d.project(thePoint);
 }
 
+static int MyPixelRatio = 1;
+
+void setPixelRatio(int theRatio)
+{
+  MyPixelRatio = theRatio;
+}
+
+int pixelRatio()
+{
+  return MyPixelRatio;
+}
 
 static double MyArrowSize = 20;
+
 double getArrowSize()
 {
   return MyArrowSize;
@@ -280,7 +292,7 @@ int getConfigArrowSize()
 static double MyTextHeight = 16;
 double getTextHeight()
 {
-  return MyTextHeight;
+  return MyTextHeight * MyPixelRatio;
 }
 
 void setTextHeight(double theHeight)
@@ -290,12 +302,12 @@ void setTextHeight(double theHeight)
 
 double getDefaultTextHeight()
 {
-  return 16;
+  return 16 * MyPixelRatio;
 }
 
 double getConfigTextHeight()
 {
-  return Config_PropManager::integer("Visualization", "dimension_value_size");
+  return Config_PropManager::integer("Visualization", "dimension_value_size") * MyPixelRatio;
 }
 
 double getFlyoutDistance(const ModelAPI_Feature* theConstraint)
index 75d1b351e0d1716bc7ab2cf055bcce835cbb4941..5a719646c22e8c46447befffb461f15fbf6ab329 100644 (file)
@@ -206,6 +206,10 @@ namespace SketcherPrs_Tools {
   /// \param theError a debug error information
   SKETCHERPRS_EXPORT void sendEmptyPresentationError(ModelAPI_Feature* theFeature,
                                                      const std::string theError);
+
+  SKETCHERPRS_EXPORT void setPixelRatio(int theRatio);
+
+  SKETCHERPRS_EXPORT int pixelRatio();
 };
 
 #endif