# HG changeset patch # User Benjamin Golinvaux # Date 1563376654 -7200 # Node ID 52b1c6ff10c53356bc21a0ec326d91e7e51cc4a4 # Parent 88bf49aebc13b212974132948c596b22bece8f75 Disabled OpenGL in GuiAdapter to allow for Cairo-only workflows (THIS IS A TEMP CHANGE!!!) + disabled outlined text by default (build macro) diff -r 88bf49aebc13 -r 52b1c6ff10c5 Applications/Generic/GuiAdapter.cpp --- a/Applications/Generic/GuiAdapter.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Applications/Generic/GuiAdapter.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -725,10 +725,13 @@ // SDL ONLY void GuiAdapter::Run() { +#if 0 + // TODO: MAKE THIS DYNAMIC !!! See SdlOpenGLViewport vs Cairo in ViewportWrapper # if ORTHANC_ENABLE_OPENGL == 1 && !defined(__APPLE__) glEnable(GL_DEBUG_OUTPUT); glDebugMessageCallback(OpenGLMessageCallback, 0); # endif +#endif // Uint32 SDL_GetWindowID(SDL_Window* window) // SDL_Window* SDL_GetWindowFromID(Uint32 id) // may return NULL diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/AngleMeasureTool.cpp --- a/Framework/Scene2DViewport/AngleMeasureTool.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/AngleMeasureTool.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -43,7 +43,11 @@ AngleMeasureTool::AngleMeasureTool( MessageBroker& broker, boost::weak_ptr controllerW) : MeasureTool(broker, controllerW) +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 , layerHolder_(boost::make_shared(controllerW,1,5)) +#else + , layerHolder_(boost::make_shared(controllerW, 1, 1)) +#endif , angleHighlightArea_(AngleHighlightArea_None) { RefreshScene(); @@ -293,8 +297,13 @@ // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex sprintf(buf, "%0.02f\xc2\xb0", angleDeg); +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 SetTextLayerOutlineProperties( - GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY)); + GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY), 0); +#else + SetTextLayerProperties( + GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY) , 0); +#endif #if 0 // TODO:make it togglable diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/LayerHolder.cpp --- a/Framework/Scene2DViewport/LayerHolder.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/LayerHolder.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -30,9 +30,11 @@ LayerHolder::LayerHolder( boost::weak_ptr controllerW, int polylineLayerCount, - int textLayerCount) + int textLayerCount, + int infoTextCount) : textLayerCount_(textLayerCount) , polylineLayerCount_(polylineLayerCount) + , infoTextCount_(infoTextCount) , controllerW_(controllerW) , baseLayerIndex_(-1) { diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/LayerHolder.h --- a/Framework/Scene2DViewport/LayerHolder.h Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/LayerHolder.h Wed Jul 17 17:17:34 2019 +0200 @@ -44,7 +44,7 @@ */ LayerHolder( boost::weak_ptr controllerW, - int polylineLayerCount, int textLayerCount); + int polylineLayerCount, int textLayerCount, int infoTextCount = 0); /** This actually creates the layers @@ -86,13 +86,17 @@ */ TextSceneLayer* GetTextLayer(int index = 0); + //TextSceneLayer* GetTextLayer(int index = 0); + private: int GetPolylineLayerIndex(int index = 0); int GetTextLayerIndex(int index = 0); + int GetInfoTextLayerIndex(int index = 0); Scene2D& GetScene(); int textLayerCount_; int polylineLayerCount_; + int infoTextCount_; boost::weak_ptr controllerW_; int baseLayerIndex_; }; diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/LineMeasureTool.cpp --- a/Framework/Scene2DViewport/LineMeasureTool.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/LineMeasureTool.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -33,7 +33,11 @@ LineMeasureTool::LineMeasureTool( MessageBroker& broker, boost::weak_ptr controllerW) : MeasureTool(broker, controllerW) +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 , layerHolder_(boost::make_shared(controllerW, 1, 5)) +#else + , layerHolder_(boost::make_shared(controllerW, 1, 1)) +#endif , lineHighlightArea_(LineHighlightArea_None) { @@ -234,8 +238,13 @@ double midX = 0.5 * (end_.GetX() + start_.GetX()); double midY = 0.5 * (end_.GetY() + start_.GetY()); +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 SetTextLayerOutlineProperties( - GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY)); + GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); +#else + SetTextLayerProperties( + GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); +#endif } } else diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/MeasureToolsToolbox.cpp --- a/Framework/Scene2DViewport/MeasureToolsToolbox.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/MeasureToolsToolbox.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -282,6 +282,7 @@ } #endif +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 /** This utility function assumes that the layer holder contains 5 text layers and will use the first four ones for the text background and the fifth one @@ -307,7 +308,7 @@ ORTHANC_ASSERT(textLayer != NULL); textLayer->SetText(text); - if (i == 4) + if (i == startingLayerIndex + 4) { textLayer->SetColor(TEXT_COLOR_RED, TEXT_COLOR_GREEN, @@ -321,11 +322,35 @@ } ScenePoint2D textAnchor; + int offIndex = i - startingLayerIndex; + ORTHANC_ASSERT(offIndex >= 0 && offIndex < 5); textLayer->SetPosition( - p.GetX() + xoffsets[i] * pixelToScene, - p.GetY() + yoffsets[i] * pixelToScene); + p.GetX() + xoffsets[offIndex] * pixelToScene, + p.GetY() + yoffsets[offIndex] * pixelToScene); } } +#else + void SetTextLayerProperties( + Scene2D& scene + , boost::shared_ptr layerHolder + , const char* text + , ScenePoint2D p + , int layerIndex) + { + // get the scaling factor + const double pixelToScene = + scene.GetCanvasToSceneTransform().ComputeZoom(); + + TextSceneLayer* textLayer = layerHolder->GetTextLayer(layerIndex); + ORTHANC_ASSERT(textLayer != NULL); + textLayer->SetText(text); + + textLayer->SetColor(TEXT_COLOR_RED, TEXT_COLOR_GREEN, TEXT_COLOR_BLUE); + + ScenePoint2D textAnchor; + textLayer->SetPosition(p.GetX(), p.GetY()); + } +#endif std::ostream& operator<<(std::ostream& os, const ScenePoint2D& p) { diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/MeasureToolsToolbox.h --- a/Framework/Scene2DViewport/MeasureToolsToolbox.h Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/MeasureToolsToolbox.h Wed Jul 17 17:17:34 2019 +0200 @@ -170,6 +170,7 @@ , const double d); +#if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 /** This helper is used when drawing text with an outline. It set the properties for several text layers at once : first the @@ -177,14 +178,22 @@ layer. The five text layers are supposed to already exist in the scene, starting - from layerIndex, up to (and not including) layerIndex+5. + from startingLayerIndex, up to (and not including) startingLayerIndex+5. */ void SetTextLayerOutlineProperties( Scene2D& scene , boost::shared_ptr layerHolder , const char* text , ScenePoint2D p - , int startingLayerIndex = 0); + , int startingLayerIndex); +#else + void SetTextLayerProperties( + Scene2D& scene + , boost::shared_ptr layerHolder + , const char* text + , ScenePoint2D p + , int layerIndex); +#endif std::ostream& operator<<(std::ostream& os, const ScenePoint2D& p); } diff -r 88bf49aebc13 -r 52b1c6ff10c5 Framework/Scene2DViewport/ViewportController.cpp --- a/Framework/Scene2DViewport/ViewportController.cpp Wed Jul 17 16:56:53 2019 +0200 +++ b/Framework/Scene2DViewport/ViewportController.cpp Wed Jul 17 17:17:34 2019 +0200 @@ -51,27 +51,59 @@ void ViewportController::PushCommand(boost::shared_ptr command) { - GetUndoStack()->PushCommand(command); + boost::shared_ptr undoStack = undoStackW_.lock(); + if(undoStack.get() != NULL) + undoStack->PushCommand(command); + else + { + LOG(ERROR) << "Internal error: no undo stack in the viewport controller!"; + } } void ViewportController::Undo() { - GetUndoStack()->Undo(); + boost::shared_ptr undoStack = undoStackW_.lock(); + if (undoStack.get() != NULL) + undoStack->Undo(); + else + { + LOG(ERROR) << "Internal error: no undo stack in the viewport controller!"; + } } void ViewportController::Redo() { - GetUndoStack()->Redo(); + boost::shared_ptr undoStack = undoStackW_.lock(); + if (undoStack.get() != NULL) + undoStack->Redo(); + else + { + LOG(ERROR) << "Internal error: no undo stack in the viewport controller!"; + } } bool ViewportController::CanUndo() const { - return GetUndoStack()->CanUndo(); + boost::shared_ptr undoStack = undoStackW_.lock(); + if (undoStack.get() != NULL) + return undoStack->CanUndo(); + else + { + LOG(ERROR) << "Internal error: no undo stack in the viewport controller!"; + return false; + } } bool ViewportController::CanRedo() const { - return GetUndoStack()->CanRedo(); + boost::shared_ptr undoStack = undoStackW_.lock(); + if (undoStack.get() != NULL) + return undoStack->CanRedo(); + else + { + LOG(ERROR) << "Internal error: no undo stack in the viewport controller!"; + return false; + } } bool ViewportController::HandlePointerEvent(PointerEvent e)