diff options
author | László Németh <laszlo.nemeth@collabora.com> | 2015-07-03 18:50:05 +0200 |
---|---|---|
committer | Adolfo Jayme Barrientos <fitojb@ubuntu.com> | 2015-07-04 16:18:37 +0000 |
commit | ac7cc2b709469f1b88fe67dd8d069512ade6eb1c (patch) | |
tree | a42d4e6467507307c70fa52d13559d06ee89677a | |
parent | 3a19e79e8203de59d039da962aa07b0ac1bcab85 (diff) |
tdf#92241 fix crashes and rendering of symbol set previews
Change-Id: I43397f2b0caa31c334f87acf11fc96df2e051ad8
Reviewed-on: https://gerrit.libreoffice.org/16744
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
-rw-r--r-- | include/svx/charmap.hxx | 3 | ||||
-rw-r--r-- | include/vcl/ctrl.hxx | 2 | ||||
-rw-r--r-- | svx/source/dialog/charmap.cxx | 19 | ||||
-rw-r--r-- | vcl/source/control/ctrl.cxx | 21 |
4 files changed, 38 insertions, 7 deletions
diff --git a/include/svx/charmap.hxx b/include/svx/charmap.hxx index d50382ee8a0e..e56fe98a26d1 100644 --- a/include/svx/charmap.hxx +++ b/include/svx/charmap.hxx @@ -58,6 +58,7 @@ public: Link<> GetPreSelectHdl() const { return aHighHdl; } void SetPreSelectHdl( const Link<>& rHdl ) { aPreSelectHdl = rHdl; } static sal_uInt32& getSelectedChar(); + void SetFont( const vcl::Font& rFont ); svx::SvxShowCharSetItem* ImplGetItem( int _nPos ); int FirstInView() const; @@ -108,12 +109,14 @@ private: sal_Int32 nSelectedIndex; FontCharMapPtr mpFontCharMap; + Size maFontSize; VclPtr<ScrollBar> aVscrollSB; bool mbRecalculateFont : 1; bool mbUpdateForeground : 1; bool mbUpdateBackground : 1; + private: void DrawChars_Impl(vcl::RenderContext& rRenderContext, int n1, int n2); void InitSettings(vcl::RenderContext& rRenderContext); diff --git a/include/vcl/ctrl.hxx b/include/vcl/ctrl.hxx index 6741a229dd4d..69a3569a0b5e 100644 --- a/include/vcl/ctrl.hxx +++ b/include/vcl/ctrl.hxx @@ -41,6 +41,8 @@ protected: private: bool mbHasControlFocus; + bool mbFont; + bool mbForeground; Link<> maGetFocusHdl; Link<> maLoseFocusHdl; diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx index 9d0c9a58c960..f5e95955f84a 100644 --- a/svx/source/dialog/charmap.cxx +++ b/svx/source/dialog/charmap.cxx @@ -57,6 +57,7 @@ sal_uInt32& SvxShowCharSet::getSelectedChar() SvxShowCharSet::SvxShowCharSet(vcl::Window* pParent) : Control(pParent, WB_TABSTOP | WB_BORDER) , m_pAccessible(nullptr) + , maFontSize(0, 0) , aVscrollSB( VclPtr<ScrollBar>::Create(this, WB_VERT) ) , mbRecalculateFont(true) , mbUpdateForeground(true) @@ -114,6 +115,7 @@ void SvxShowCharSet::StateChanged(StateChangedType nType) Invalidate(); Control::StateChanged( nType ); + } @@ -331,6 +333,12 @@ void SvxShowCharSet::Paint( vcl::RenderContext& rRenderContext, const Rectangle& DrawChars_Impl(rRenderContext, FirstInView(), LastInView()); } +void SvxShowCharSet::SetFont( const vcl::Font& rFont ) +{ + Control::SetFont(rFont); + Invalidate(); +} + void SvxShowCharSet::DeSelect() { Invalidate(); @@ -506,6 +514,14 @@ void SvxShowCharSet::InitSettings(vcl::RenderContext& rRenderContext) mbUpdateBackground = false; } + + vcl::Font aFont(rRenderContext.GetFont()); + aFont.SetWeight(WEIGHT_LIGHT); + aFont.SetAlign(ALIGN_TOP); + aFont.SetSize(maFontSize); + aFont.SetTransparent(true); + rRenderContext.SetFont(aFont); + } @@ -536,7 +552,8 @@ void SvxShowCharSet::RecalculateFont(vcl::RenderContext& rRenderContext) aFont.SetWeight(WEIGHT_LIGHT); aFont.SetAlign(ALIGN_TOP); int nFontHeight = (aSize.Height() - 5) * 2 / (3 * ROW_COUNT); - aFont.SetSize(rRenderContext.PixelToLogic(Size(0, nFontHeight))); + maFontSize = rRenderContext.PixelToLogic(Size(0, nFontHeight)); + aFont.SetSize(maFontSize); aFont.SetTransparent(true); rRenderContext.SetFont(aFont); rRenderContext.GetFontCharMap(mpFontCharMap); diff --git a/vcl/source/control/ctrl.cxx b/vcl/source/control/ctrl.cxx index 0c40a341b397..21056db4c58f 100644 --- a/vcl/source/control/ctrl.cxx +++ b/vcl/source/control/ctrl.cxx @@ -36,6 +36,8 @@ using namespace vcl; void Control::ImplInitControlData() { mbHasControlFocus = false; + mbFont = false; + mbForeground = false; mpControlData = new ImplControlData; } @@ -417,16 +419,23 @@ void Control::ApplySettings(vcl::RenderContext& rRenderContext) { const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); - vcl::Font rFont(GetCanonicalFont(rStyleSettings)); - ApplyControlFont(rRenderContext, rFont); - - ApplyControlForeground(rRenderContext, GetCanonicalTextColor(rStyleSettings)); + if (mbFont) + { + vcl::Font rFont(GetCanonicalFont(rStyleSettings)); + ApplyControlFont(rRenderContext, rFont); + } - rRenderContext.SetTextFillColor(); + if (mbFont || mbForeground) + { + ApplyControlForeground(rRenderContext, GetCanonicalTextColor(rStyleSettings)); + rRenderContext.SetTextFillColor(); + } } -void Control::ImplInitSettings(const bool, const bool) +void Control::ImplInitSettings(const bool _bFont, const bool _bForeground) { + mbFont = _bFont; + mbForeground = _bForeground; ApplySettings(*this); } |