[Libreoffice-commits] core.git: 2 commits - filter/source include/sal include/svx svx/source
Caolán McNamara
caolanm at redhat.com
Thu Jan 26 21:05:16 UTC 2017
filter/source/graphicfilter/ieps/ieps.cxx | 15 ++++++--
include/sal/log-areas.dox | 1
include/svx/colorbox.hxx | 3 +
include/svx/tbcontrl.hxx | 3 +
svx/source/tbxctrls/tbcontrl.cxx | 51 +++++++++++++++++++++++-------
5 files changed, 56 insertions(+), 17 deletions(-)
New commits:
commit e17a34e957c21a8cd2977b1b0e1c9a427c244aed
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jan 26 21:01:06 2017 +0000
ofz: check if the stream is able to meet the eps len claim before reading
Change-Id: I65407bffb67449e203b8ead23554a4e88387d214
diff --git a/filter/source/graphicfilter/ieps/ieps.cxx b/filter/source/graphicfilter/ieps/ieps.cxx
index 912be13..090bc65 100644
--- a/filter/source/graphicfilter/ieps/ieps.cxx
+++ b/filter/source/graphicfilter/ieps/ieps.cxx
@@ -540,7 +540,7 @@ ipsGraphicImport( SvStream & rStream, Graphic & rGraphic, FilterConfigItem* )
Graphic aGraphic;
bool bRetValue = false;
bool bHasPreview = false;
- sal_uInt32 nSignature, nPSStreamPos, nPSSize;
+ sal_uInt32 nSignature = 0, nPSStreamPos, nPSSize = 0;
sal_uInt32 nSizeWMF = 0;
sal_uInt32 nPosWMF = 0;
sal_uInt32 nSizeTIFF = 0;
@@ -585,13 +585,20 @@ ipsGraphicImport( SvStream & rStream, Graphic & rGraphic, FilterConfigItem* )
nPSStreamPos = nOrigPos; // no preview available _>so we must get the size manually
nPSSize = rStream.Seek( STREAM_SEEK_TO_END ) - nOrigPos;
}
+
std::unique_ptr<sal_uInt8[]> pHeader( new sal_uInt8[ 22 ] );
rStream.Seek( nPSStreamPos );
rStream.ReadBytes(pHeader.get(), 22); // check PostScript header
- if ( ImplSearchEntry( pHeader.get(), reinterpret_cast<sal_uInt8 const *>("%!PS-Adobe"), 10, 10 ) &&
- ImplSearchEntry( &pHeader[ 15 ], reinterpret_cast<sal_uInt8 const *>("EPS"), 3, 3 ) )
+ bool bOk = ImplSearchEntry(pHeader.get(), reinterpret_cast<sal_uInt8 const *>("%!PS-Adobe"), 10, 10) &&
+ ImplSearchEntry(&pHeader[ 15 ], reinterpret_cast<sal_uInt8 const *>("EPS"), 3, 3);
+ if (bOk)
+ {
+ rStream.Seek(nPSStreamPos);
+ bOk = rStream.remainingSize() >= nPSSize;
+ SAL_WARN_IF(!bOk, "filter.eps", "eps claims to be: " << nPSSize << " in size, but only " << rStream.remainingSize() << " remains");
+ }
+ if (bOk)
{
- rStream.Seek( nPSStreamPos );
std::unique_ptr<sal_uInt8[]> pBuf( new sal_uInt8[ nPSSize ] );
sal_uInt32 nBufStartPos = rStream.Tell();
diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox
index 386c52b..0afd32e 100644
--- a/include/sal/log-areas.dox
+++ b/include/sal/log-areas.dox
@@ -201,6 +201,7 @@ certain functionality.
@section Filter
@li @c filter.config
+ at li @c filter.eps
@li @c filter.flash
@li @c filter.ms - escher import/export
@li @c filter.odfflatxml
commit 9954a91eb841225950ef28a24be5a38abdcb42a9
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jan 26 15:45:59 2017 +0000
Related: tdf#104312 create palette on demand
Change-Id: I741323c41231a08fe9561d72ca6079079e888e90
diff --git a/include/svx/colorbox.hxx b/include/svx/colorbox.hxx
index 4b7f251..aa6f971 100644
--- a/include/svx/colorbox.hxx
+++ b/include/svx/colorbox.hxx
@@ -37,7 +37,7 @@ private:
NamedColor m_aSelectedColor;
sal_uInt16 m_nSlotId;
bool m_bShowNoneButton;
- PaletteManager m_aPaletteManager;
+ std::unique_ptr<PaletteManager> m_xPaletteManager;
BorderColorStatus m_aBorderColorStatus;
DECL_LINK(MenuActivateHdl, MenuButton *, void);
@@ -68,6 +68,7 @@ public:
void SetAutoDisplayColor(const Color &rColor) { m_aAutoDisplayColor = rColor; }
void ShowPreview(const NamedColor &rColor);
+ void EnsurePaletteManager();
};
/** A wrapper for SvxColorListBox. */
diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index aae7ea71..3bfde90 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -207,7 +207,7 @@ class SVX_DLLPUBLIC SvxColorToolBoxControl : public cppu::ImplInheritanceHelper<
css::frame::XSubToolbarController >
{
std::unique_ptr<svx::ToolboxButtonColorUpdater> m_xBtnUpdater;
- PaletteManager m_aPaletteManager;
+ std::unique_ptr<PaletteManager> m_xPaletteManager;
BorderColorStatus m_aBorderColorStatus;
bool m_bSplitButton;
ColorSelectFunction m_aColorSelectFunction;
@@ -230,6 +230,7 @@ public:
virtual void SAL_CALL updateImage() override;
void setColorSelectFunction(const ColorSelectFunction& aColorSelectFunction);
+ void EnsurePaletteManager();
};
class SVX_DLLPUBLIC SvxSimpleUndoRedoController : public SfxToolBoxControl
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index e5a037c..7b4997f 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -2793,7 +2793,16 @@ SvxColorToolBoxControl::SvxColorToolBoxControl(
rTbx.SetItemBits( nId, rTbx.GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) );
m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) );
- m_aPaletteManager.SetBtnUpdater( m_xBtnUpdater.get() );
+}
+
+void SvxColorToolBoxControl::EnsurePaletteManager()
+{
+ if (!m_xPaletteManager)
+ {
+ m_xPaletteManager.reset(new PaletteManager);
+ m_xPaletteManager->SetBtnUpdater(m_xBtnUpdater.get());
+ m_xPaletteManager->SetLastColor(m_xBtnUpdater->GetCurrentColor());
+ }
}
SvxColorToolBoxControl::~SvxColorToolBoxControl()
@@ -2803,14 +2812,17 @@ SvxColorToolBoxControl::~SvxColorToolBoxControl()
void SvxColorToolBoxControl::setColorSelectFunction(const ColorSelectFunction& aColorSelectFunction)
{
m_aColorSelectFunction = aColorSelectFunction;
- m_aPaletteManager.SetColorSelectFunction(aColorSelectFunction);
+ if (m_xPaletteManager)
+ m_xPaletteManager->SetColorSelectFunction(aColorSelectFunction);
}
VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
{
+ EnsurePaletteManager();
+
VclPtrInstance<SvxColorWindow> pColorWin(
m_aCommandURL,
- m_aPaletteManager,
+ *m_xPaletteManager,
m_aBorderColorStatus,
GetSlotId(),
m_xFrame,
@@ -2828,7 +2840,8 @@ VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
IMPL_LINK(SvxColorToolBoxControl, SelectedHdl, const NamedColor&, rColor, void)
{
m_xBtnUpdater->Update(rColor.first);
- m_aPaletteManager.SetLastColor(rColor.first);
+ if (m_xPaletteManager)
+ m_xPaletteManager->SetLastColor(rColor.first);
}
void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& rEvent )
@@ -2852,7 +2865,8 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent&
aColor = nValue;
}
m_xBtnUpdater->Update( aColor );
- m_aPaletteManager.SetLastColor(aColor);
+ if (m_xPaletteManager)
+ m_xPaletteManager->SetLastColor(aColor);
}
else if ( rEvent.State >>= bValue )
GetToolBox().CheckItem( GetId(), bValue );
@@ -2882,8 +2896,10 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)
break;
}
+ EnsurePaletteManager();
+
auto aArgs( comphelper::InitPropertySequence( {
- { m_aCommandURL.copy(5), css::uno::makeAny( m_aPaletteManager.GetLastColor().GetColor() ) }
+ { m_aCommandURL.copy(5), css::uno::makeAny( m_xPaletteManager->GetLastColor().GetColor() ) }
} ) );
Dispatch( aCommand, aArgs );
}
@@ -2902,7 +2918,8 @@ void SvxColorToolBoxControl::updateImage()
if ( !!aImage )
{
GetToolBox().SetItemImage( GetId(), aImage );
- m_xBtnUpdater->Update( m_aPaletteManager.GetLastColor(), true );
+ EnsurePaletteManager();
+ m_xBtnUpdater->Update(m_xPaletteManager->GetLastColor(), true);
}
}
@@ -3191,9 +3208,18 @@ SvxColorListBox::SvxColorListBox(vcl::Window* pParent, WinBits nStyle)
, m_bShowNoneButton(false)
{
LockWidthRequest();
- m_aPaletteManager.SetColorSelectFunction(m_aColorWrapper);
SetActivateHdl(LINK(this, SvxColorListBox, MenuActivateHdl));
- SetNoSelection();
+}
+
+void SvxColorListBox::EnsurePaletteManager()
+{
+ if (!m_xPaletteManager)
+ {
+ m_xPaletteManager.reset(new PaletteManager);
+ m_xPaletteManager->SetColorSelectFunction(m_aColorWrapper);
+ m_xPaletteManager->SetLastColor(m_aSelectedColor.first);
+ SetNoSelection();
+ }
}
void SvxColorListBox::SetSlotId(sal_uInt16 nSlotId, bool bShowNoneButton)
@@ -3264,9 +3290,11 @@ void SvxColorListBox::createColorWindow()
const SfxFrame* pFrame = pViewFrame ? &pViewFrame->GetFrame() : nullptr;
css::uno::Reference<css::frame::XFrame> xFrame(pFrame ? pFrame->GetFrameInterface() : uno::Reference<css::frame::XFrame>());
+ EnsurePaletteManager();
+
m_xColorWindow = VclPtr<SvxColorWindow>::Create(
OUString() /*m_aCommandURL*/,
- m_aPaletteManager,
+ *m_xPaletteManager,
m_aBorderColorStatus,
m_nSlotId,
xFrame,
@@ -3281,7 +3309,8 @@ void SvxColorListBox::createColorWindow()
void SvxColorListBox::Selected(const NamedColor& rColor)
{
ShowPreview(rColor);
- m_aPaletteManager.SetLastColor(rColor.first);
+ if (m_xPaletteManager)
+ m_xPaletteManager->SetLastColor(rColor.first);
m_aSelectedColor = rColor;
if (m_aSelectedLink.IsSet())
m_aSelectedLink.Call(*this);
More information about the Libreoffice-commits
mailing list