diff --git a/ApplicationCode/Application/CMakeLists_files.cmake b/ApplicationCode/Application/CMakeLists_files.cmake index e22ea375b9..3a16e13215 100644 --- a/ApplicationCode/Application/CMakeLists_files.cmake +++ b/ApplicationCode/Application/CMakeLists_files.cmake @@ -11,6 +11,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaCurveSetDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RiaRftPltCurveDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RiaViewRedrawScheduler.h ${CMAKE_CURRENT_LIST_DIR}/RiaMemoryCleanup.h +${CMAKE_CURRENT_LIST_DIR}/RiaFontCache.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -26,6 +27,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaCurveSetDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaRftPltCurveDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaViewRedrawScheduler.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaMemoryCleanup.cpp +${CMAKE_CURRENT_LIST_DIR}/RiaFontCache.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Application/RiaFontCache.cpp b/ApplicationCode/Application/RiaFontCache.cpp new file mode 100644 index 0000000000..99d11f18fd --- /dev/null +++ b/ApplicationCode/Application/RiaFontCache.cpp @@ -0,0 +1,55 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiaFontCache.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::map> RiaFontCache::ms_fonts; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::ref RiaFontCache::getFont(FontSize size) +{ + if (ms_fonts.count(size) == 0) + { + auto newFont = new caf::FixedAtlasFont(mapToAtlasFontSize(size)); + ms_fonts.insert(std::make_pair(size, newFont)); + } + return ms_fonts[size]; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::FixedAtlasFont::FontSize RiaFontCache::mapToAtlasFontSize(FontSize fontSize) +{ + switch (fontSize) + { + case FONT_SIZE_8: return caf::FixedAtlasFont::POINT_SIZE_8; + case FONT_SIZE_10: return caf::FixedAtlasFont::POINT_SIZE_10; + case FONT_SIZE_12: return caf::FixedAtlasFont::POINT_SIZE_12; + case FONT_SIZE_14: return caf::FixedAtlasFont::POINT_SIZE_14; + case FONT_SIZE_16: return caf::FixedAtlasFont::POINT_SIZE_16; + case FONT_SIZE_24: return caf::FixedAtlasFont::POINT_SIZE_24; + case FONT_SIZE_32: return caf::FixedAtlasFont::POINT_SIZE_32; + default: return caf::FixedAtlasFont::POINT_SIZE_16; + } +} diff --git a/ApplicationCode/Application/RiaFontCache.h b/ApplicationCode/Application/RiaFontCache.h new file mode 100644 index 0000000000..dbb8c346b4 --- /dev/null +++ b/ApplicationCode/Application/RiaFontCache.h @@ -0,0 +1,51 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include + +#include + +class RimSummaryCaseCollection; + +//================================================================================================== +/// +//================================================================================================== +class RiaFontCache +{ +public: + enum FontSize + { + FONT_SIZE_8, + FONT_SIZE_10, + FONT_SIZE_12, + FONT_SIZE_14, + FONT_SIZE_16, + FONT_SIZE_24, + FONT_SIZE_32 + }; + + static cvf::ref getFont(FontSize size); + +private: + static caf::FixedAtlasFont::FontSize mapToAtlasFontSize(FontSize fontSize); + + static std::map> ms_fonts; +}; diff --git a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp index 6d69f552b6..8c2daa99f1 100644 --- a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp @@ -25,10 +25,12 @@ #include "RiaApplication.h" #include "RiaBoundingBoxTools.h" #include "RiaColorTools.h" +#include "RiaFontCache.h" #include "RiaPreferences.h" #include "Rim3dView.h" #include "RimAnnotationInViewCollection.h" +#include "RimAnnotationTextAppearance.h" #include "RimTextAnnotation.h" #include "RimTextAnnotationInView.h" @@ -93,6 +95,11 @@ void RivTextAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform * dis cvf::Vec3d labelPosition = displayXf->transformToDisplayCoord(labelPositionInDomain); QString text = rimAnnotation()->text(); + auto fontSize = rimAnnotation()->appearance()->fontSize(); + auto fontColor = rimAnnotation()->appearance()->fontColor(); + auto backgroundColor = rimAnnotation()->appearance()->backgroundColor(); + auto anchorLineColor = rimAnnotation()->appearance()->anchorLineColor(); + // Line part { std::vector points = { anchorPosition, labelPosition }; @@ -102,7 +109,7 @@ void RivTextAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform * dis cvf::ref part = new cvf::Part; part->setDrawable(drawableGeo.p()); - caf::MeshEffectGenerator colorEffgen(cvf::Color3f::BLACK); + caf::MeshEffectGenerator colorEffgen(anchorLineColor); cvf::ref eff = colorEffgen.generateUnCachedEffect(); part->setEffect(eff.p()); @@ -114,20 +121,17 @@ void RivTextAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform * dis // Text part { - auto app = RiaApplication::instance(); - cvf::Font* font = app->customFont(); - auto prefs = app->preferences(); - + auto font = RiaFontCache::getFont(fontSize); cvf::ref drawableText = new cvf::DrawableText; - drawableText->setFont(font); + drawableText->setFont(font.p()); drawableText->setCheckPosVisible(false); drawableText->setUseDepthBuffer(true); drawableText->setDrawBorder(true); drawableText->setDrawBackground(true); drawableText->setVerticalAlignment(cvf::TextDrawer::BASELINE); - drawableText->setBackgroundColor(prefs->defaultViewerBackgroundColor); - drawableText->setBorderColor(RiaColorTools::computeOffsetColor(prefs->defaultViewerBackgroundColor, 0.3f)); - drawableText->setTextColor(cvf::Color3f::BLACK); + drawableText->setBackgroundColor(backgroundColor); + drawableText->setBorderColor(RiaColorTools::computeOffsetColor(backgroundColor, 0.3f)); + drawableText->setTextColor(fontColor); cvf::String cvfString = cvfqt::Utils::toString(text); diff --git a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake index f246514f1c..c91eff7532 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake @@ -9,6 +9,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimReachCircleAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.h +${CMAKE_CURRENT_LIST_DIR}/RimAnnotationTextAppearance.h ${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesFromFileAnnotationInView.h ${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedPolylinesAnnotationInView.h @@ -28,6 +29,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimReachCircleAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.cpp +${CMAKE_CURRENT_LIST_DIR}/RimAnnotationTextAppearance.cpp ${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesFromFileAnnotationInView.cpp ${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedPolylinesAnnotationInView.cpp diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp index b3dc4f8a5b..c921a15610 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp @@ -17,44 +17,6 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RimAnnotationLineAppearance.h" - -#include "RiaApplication.h" -#include "RiaColorTables.h" -#include "RiaLogging.h" -#include "RiaPreferences.h" -#include "RiaWellNameComparer.h" - -#include "RigEclipseCaseData.h" -#include "RigMainGrid.h" -#include "RigWellPath.h" - -#include "RimAnnotationInViewCollection.h" -#include "RimEclipseCase.h" -#include "RimEclipseCaseCollection.h" -#include "RimGridView.h" -#include "RimOilField.h" -#include "RimProject.h" -#include "RimWellLogFile.h" -#include "RimWellPath.h" -#include "RimPerforationCollection.h" - -#include "Riu3DMainWindowTools.h" - -#include "RifWellPathFormationsImporter.h" -#include "RifWellPathImporter.h" - -#include "cafPdmUiEditorHandle.h" -#include "cafProgressInfo.h" - -#include -#include -#include -#include - -#include -#include -#include "RimFileWellPath.h" -#include "RimModeledWellPath.h" #include "RimAnnotationCollection.h" namespace caf diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h index 20be85f3ba..f6594d5f58 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h @@ -40,7 +40,7 @@ public: STYLE_SOLID, STYLE_DASH }; - typedef caf::AppEnum LineStyle; + using LineStyle = caf::AppEnum; public: RimAnnotationLineAppearance(); diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.cpp new file mode 100644 index 0000000000..d611eb53df --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.cpp @@ -0,0 +1,155 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimAnnotationTextAppearance.h" + +#include "RiaApplication.h" +#include "RiaPreferences.h" + +#include "RimAnnotationCollection.h" +#include "RimAnnotationInViewCollection.h" + + +CAF_PDM_SOURCE_INIT(RimAnnotationTextAppearance, "RimAnnotationTextAppearance"); + + +namespace caf +{ +template<> +void RimAnnotationTextAppearance::FontSize::setUp() +{ + addItem(RiaFontCache::FONT_SIZE_8, "FONT_SIZE_8", "8"); + addItem(RiaFontCache::FONT_SIZE_10, "FONT_SIZE_10", "10"); + addItem(RiaFontCache::FONT_SIZE_12, "FONT_SIZE_12", "12"); + addItem(RiaFontCache::FONT_SIZE_14, "FONT_SIZE_14", "14"); + addItem(RiaFontCache::FONT_SIZE_16, "FONT_SIZE_16", "16"); + addItem(RiaFontCache::FONT_SIZE_24, "FONT_SIZE_24", "24"); + addItem(RiaFontCache::FONT_SIZE_32, "FONT_SIZE_32", "32"); + + setDefault(RiaFontCache::FONT_SIZE_8); +} +} // namespace caf + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimAnnotationTextAppearance::RimAnnotationTextAppearance() +{ + CAF_PDM_InitObject("TextAnnotation", ":/WellCollection.png", "", ""); + + auto prefs = RiaApplication::instance()->preferences(); + auto defaultBackgroundColor = prefs->defaultViewerBackgroundColor(); + + CAF_PDM_InitField(&m_fontSize, "FontSize", FontSize(), "Font Size", "", "", ""); + CAF_PDM_InitField(&m_fontColor, "FontColor", cvf::Color3f(cvf::Color3f::BLACK), "Font Color", "", "", ""); + CAF_PDM_InitField(&m_backgroundColor, "BackgroundColor", defaultBackgroundColor , "Background Color", "", "", ""); + CAF_PDM_InitField(&m_anchorLineColor, "AnchorLineColor", cvf::Color3f(cvf::Color3f::BLACK), "Anchor Line Color", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::setFontSize(FontSize size) +{ + m_fontSize = size; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::setFontColor(const cvf::Color3f& newColor) +{ + m_fontColor = newColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::setBackgroundColor(const cvf::Color3f& newColor) +{ + m_backgroundColor = newColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::setAnchorLineColor(const cvf::Color3f& newColor) +{ + m_anchorLineColor = newColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimAnnotationTextAppearance::FontSize RimAnnotationTextAppearance::fontSize() const +{ + return m_fontSize; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimAnnotationTextAppearance::fontColor() const +{ + return m_fontColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimAnnotationTextAppearance::backgroundColor() const +{ + return m_backgroundColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimAnnotationTextAppearance::anchorLineColor() const +{ + return m_anchorLineColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + uiOrdering.add(&m_fontSize); + uiOrdering.add(&m_fontColor); + uiOrdering.add(&m_backgroundColor); + uiOrdering.add(&m_anchorLineColor); + + uiOrdering.skipRemainingFields(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationTextAppearance::fieldChangedByUi(const caf::PdmFieldHandle* changedField, + const QVariant& oldValue, + const QVariant& newValue) +{ + RimAnnotationCollectionBase* annColl = nullptr; + this->firstAncestorOrThisOfTypeAsserted(annColl); + + if (annColl) + { + annColl->scheduleRedrawOfRelevantViews(); + } +} diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.h new file mode 100644 index 0000000000..bb6720cd1f --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationTextAppearance.h @@ -0,0 +1,65 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiaFontCache.h" + +#include "cafPdmObject.h" + +#include "cafPdmField.h" +#include "cafAppEnum.h" + +#include "cafPdmFieldCvfColor.h" + + +//================================================================================================== +/// +/// +//================================================================================================== +class RimAnnotationTextAppearance : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + using FontSize = caf::AppEnum; + + RimAnnotationTextAppearance(); + + void setFontSize(FontSize size); + void setFontColor(const cvf::Color3f& newColor); + void setBackgroundColor(const cvf::Color3f& newColor); + void setAnchorLineColor(const cvf::Color3f& newColor); + + FontSize fontSize() const; + cvf::Color3f fontColor() const; + cvf::Color3f backgroundColor() const; + cvf::Color3f anchorLineColor() const; + +protected: + void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + +private: + caf::PdmField m_fontSize; + caf::PdmField m_fontColor; + caf::PdmField m_backgroundColor; + caf::PdmField m_anchorLineColor; + +}; + diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp index ad5666aa49..986838b9c0 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.cpp @@ -23,6 +23,8 @@ #include "RimProject.h" #include "RimAnnotationCollection.h" #include "RimAnnotationGroupCollection.h" +#include "RimAnnotationTextAppearance.h" + #include "AnnotationCommands/RicTextAnnotation3dEditor.h" @@ -45,6 +47,8 @@ RimTextAnnotation::RimTextAnnotation() CAF_PDM_InitField(&m_isActive, "IsActive", true, "Is Active", "", "", ""); m_isActive.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&m_textAppearance, "TextAppearance", "Text Appearance", "", "", ""); + m_textAppearance = new RimAnnotationTextAppearance(); } //-------------------------------------------------------------------------------------------------- @@ -118,6 +122,9 @@ void RimTextAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderin uiOrdering.add(&m_labelPointXyd); uiOrdering.add(&m_text); + auto appearanceGroup = uiOrdering.addNewGroup("Text Appearance"); + m_textAppearance->uiOrdering(uiConfigName, *appearanceGroup); + uiOrdering.skipRemainingFields(true); } @@ -164,6 +171,14 @@ bool RimTextAnnotation::isVisible() const return visible; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimAnnotationTextAppearance* RimTextAnnotation::appearance() const +{ + return m_textAppearance(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.h index 8b4a4ad567..463ef6b188 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimTextAnnotation.h @@ -37,7 +37,7 @@ class QString; class RimGridView; - +class RimAnnotationTextAppearance; //================================================================================================== /// @@ -64,6 +64,8 @@ public: bool isActive(); bool isVisible() const; + RimAnnotationTextAppearance* appearance() const; + protected: void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; @@ -78,5 +80,6 @@ friend class RicTextAnnotation3dEditor; caf::PdmField m_text; caf::PdmField m_isActive; + caf::PdmChildField m_textAppearance; };