#3789 Annotations. Text appearance settings. New FontCache class

This commit is contained in:
Bjørn Erik Jensen 2018-12-05 14:38:58 +01:00
parent 069d434584
commit 00d767f67c
11 changed files with 363 additions and 49 deletions

View File

@ -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

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RiaFontCache.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<RiaFontCache::FontSize, cvf::ref<caf::FixedAtlasFont>> RiaFontCache::ms_fonts;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::ref<caf::FixedAtlasFont> 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;
}
}

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <cvfBase.h>
#include <cafFixedAtlasFont.h>
#include <map>
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<caf::FixedAtlasFont> getFont(FontSize size);
private:
static caf::FixedAtlasFont::FontSize mapToAtlasFontSize(FontSize fontSize);
static std::map<FontSize, cvf::ref<caf::FixedAtlasFont>> ms_fonts;
};

View File

@ -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<cvf::Vec3d> points = { anchorPosition, labelPosition };
@ -102,7 +109,7 @@ void RivTextAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform * dis
cvf::ref<cvf::Part> part = new cvf::Part;
part->setDrawable(drawableGeo.p());
caf::MeshEffectGenerator colorEffgen(cvf::Color3f::BLACK);
caf::MeshEffectGenerator colorEffgen(anchorLineColor);
cvf::ref<cvf::Effect> 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<cvf::DrawableText> 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);

View File

@ -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

View File

@ -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 <QFile>
#include <QFileInfo>
#include <QMessageBox>
#include <QString>
#include <cmath>
#include <fstream>
#include "RimFileWellPath.h"
#include "RimModeledWellPath.h"
#include "RimAnnotationCollection.h"
namespace caf

View File

@ -40,7 +40,7 @@ public:
STYLE_SOLID,
STYLE_DASH
};
typedef caf::AppEnum<LineStyleEnum> LineStyle;
using LineStyle = caf::AppEnum<LineStyleEnum>;
public:
RimAnnotationLineAppearance();

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// 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();
}
}

View File

@ -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 <http://www.gnu.org/licenses/gpl.html>
// 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<RiaFontCache::FontSize>;
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<FontSize> m_fontSize;
caf::PdmField<cvf::Color3f> m_fontColor;
caf::PdmField<cvf::Color3f> m_backgroundColor;
caf::PdmField<cvf::Color3f> m_anchorLineColor;
};

View File

@ -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();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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<QString> m_text;
caf::PdmField<bool> m_isActive;
caf::PdmChildField<RimAnnotationTextAppearance*> m_textAppearance;
};