Kaydet (Commit) b010e407 authored tarafından László Németh's avatar László Németh

tdf#92241 fix crashes and rendering of symbol set previews

Change-Id: I43397f2b0caa31c334f87acf11fc96df2e051ad8
üst 4802bf32
......@@ -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);
......
......@@ -41,6 +41,8 @@ protected:
private:
bool mbHasControlFocus;
bool mbFont;
bool mbForeground;
Link<> maGetFocusHdl;
Link<> maLoseFocusHdl;
......
......@@ -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);
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment