sfx2/source/sidebar/ContextList.cxx | 12 + sfx2/source/sidebar/ContextList.hxx | 5 sfx2/source/sidebar/Deck.cxx | 52 +++++++- sfx2/source/sidebar/Deck.hxx | 1 sfx2/source/sidebar/Panel.cxx | 16 ++ sfx2/source/sidebar/Panel.hxx | 7 - sfx2/source/sidebar/ResourceManager.cxx | 24 +++ sfx2/source/sidebar/ResourceManager.hxx | 8 + sfx2/source/sidebar/SidebarController.cxx | 31 +++- sfx2/source/sidebar/SidebarController.hxx | 5 sfx2/source/sidebar/TabBar.cxx | 8 + sfx2/source/sidebar/TabBar.hxx | 1 solenv/unxmacxp/inc/poll.h | 193 ------------------------------ svx/source/svdraw/svdfmtf.cxx | 98 +++++++++++---- 14 files changed, 222 insertions(+), 239 deletions(-)
New commits: commit f44ca372a2a88f996366e5cb44842ef79dd9df6e Author: Andre Fischer <a...@apache.org> Date: Wed May 8 12:35:53 2013 +0000 122082: Show correct deck title and tab bar highlight after switching sidebar decks. diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 2552c88..6d6250d 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -390,7 +390,6 @@ void SidebarController::UpdateConfigurations (void) maCurrentContext, mbIsDocumentReadOnly, mxFrame); - mpTabBar->SetDecks(aDecks); // Notify the tab bar about the updated set of decks. mpTabBar->SetDecks(aDecks); @@ -422,13 +421,12 @@ void SidebarController::UpdateConfigurations (void) // We did not find a valid deck. RequestCloseDeck(); return; - - // Tell the tab bar to highlight the button associated - // with the deck. - mpTabBar->HighlightDeck(sNewDeckId); } - msCurrentDeckId = sNewDeckId; + // Tell the tab bar to highlight the button associated + // with the deck. + mpTabBar->HighlightDeck(sNewDeckId); + SwitchToDeck( *ResourceManager::Instance().GetDeckDescriptor(sNewDeckId), maCurrentContext); commit 4a84ca3c6515bddb02a789d9386b6c6e74b037dc Author: Andre Fischer <a...@apache.org> Date: Wed May 8 12:01:43 2013 +0000 122251: Avoid compiler warning. diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx index 30f04a5..0521c7a 100644 --- a/sfx2/source/sidebar/TabBar.cxx +++ b/sfx2/source/sidebar/TabBar.cxx @@ -270,7 +270,7 @@ void TabBar::DataChanged (const DataChangedEvent& rDataChangedEvent) -long TabBar::Notify (NotifyEvent& rEvent) +long TabBar::Notify (NotifyEvent&) { return sal_False; } commit 2abab958f237c62abbd59b46b36354db60f23009 Author: Andre Fischer <a...@apache.org> Date: Wed May 8 11:57:24 2013 +0000 122251: Prevent key events from being forwarded from sidebar tab bar to Calc. diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx index 0fcbb14..30f04a5 100644 --- a/sfx2/source/sidebar/TabBar.cxx +++ b/sfx2/source/sidebar/TabBar.cxx @@ -270,6 +270,14 @@ void TabBar::DataChanged (const DataChangedEvent& rDataChangedEvent) +long TabBar::Notify (NotifyEvent& rEvent) +{ + return sal_False; +} + + + + RadioButton* TabBar::CreateTabItem (const DeckDescriptor& rDeckDescriptor) { RadioButton* pItem = ControlFactory::CreateTabItem(this); diff --git a/sfx2/source/sidebar/TabBar.hxx b/sfx2/source/sidebar/TabBar.hxx index 28684ac..6f18545 100644 --- a/sfx2/source/sidebar/TabBar.hxx +++ b/sfx2/source/sidebar/TabBar.hxx @@ -70,6 +70,7 @@ public: virtual void Paint (const Rectangle& rUpdateArea); virtual void DataChanged (const DataChangedEvent& rDataChangedEvent); + virtual long Notify (NotifyEvent& rEvent); static sal_Int32 GetDefaultWidth (void); commit 945f56f22d6b0f3a30e179b7b853a2e2de751fb1 Author: Herbert Dürr <h...@apache.org> Date: Wed May 8 11:40:40 2013 +0000 poll.h has been available in OSX SDKs>=10.3 even the macosxp target has a higher baseline than that diff --git a/solenv/unxmacxp/inc/poll.h b/solenv/unxmacxp/inc/poll.h deleted file mode 100644 index a978163..0000000 --- a/solenv/unxmacxp/inc/poll.h +++ /dev/null @@ -1,193 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ -// poll.h -// MacOS X does not implement poll(). Therefore, this replacement -// is required. It uses select(). - -#ifndef _FAKE_POLL_H -#define _FAKE_POLL_H - -#include <sys/errno.h> -#include <string.h> -#include <limits.h> -#undef FD_SETSIZE -#define FD_SETSIZE OPEN_MAX -#include <sys/types.h> -#include <sys/time.h> -#include <unistd.h> -#include <stdlib.h> - -typedef struct pollfd { - int fd; /* file desc to poll */ - short events; /* events of interest on fd */ - short revents; /* events that occurred on fd */ -} pollfd_t; - - -// poll flags -#define POLLIN 0x0001 -#define POLLOUT 0x0004 -#define POLLERR 0x0008 - -// synonyms -#define POLLNORM POLLIN -#define POLLPRI POLLIN -#define POLLRDNORM POLLIN -#define POLLRDBAND POLLIN -#define POLLWRNORM POLLOUT -#define POLLWRBAND POLLOUT - -// ignored -#define POLLHUP 0x0010 -#define POLLNVAL 0x0020 - -inline int poll(struct pollfd *pollSet, int pollCount, int pollTimeout) -{ - struct timeval tv; - struct timeval *tvp; - fd_set readFDs, writeFDs, exceptFDs; - fd_set *readp, *writep, *exceptp; - struct pollfd *pollEnd, *p; - int selected; - int result; - int maxFD; - - if ( !pollSet ) - { - pollEnd = NULL; - readp = NULL; - writep = NULL; - exceptp = NULL; - maxFD = 0; - } - else - { - pollEnd = pollSet + pollCount; - readp = &readFDs; - writep = &writeFDs; - exceptp = &exceptFDs; - - FD_ZERO(readp); - FD_ZERO(writep); - FD_ZERO(exceptp); - - // Find the biggest fd in the poll set - maxFD = 0; - for (p = pollSet; p < pollEnd; p++) - { - if (p->fd > maxFD) - maxFD = p->fd; - } - - if (maxFD >= FD_SETSIZE) - { - // At least one fd is too big - errno = EINVAL; - return -1; - } - - // Transcribe flags from the poll set to the fd sets - for (p = pollSet; p < pollEnd; p++) - { - if (p->fd < 0) - { - // Negative fd checks nothing and always reports zero - } - else - { - if (p->events & POLLIN) - FD_SET(p->fd, readp); - if (p->events & POLLOUT) - FD_SET(p->fd, writep); - if (p->events != 0) - FD_SET(p->fd, exceptp); - // POLLERR is never set coming in; poll() always reports errors - // But don't report if we're not listening to anything at all. - } - } - } - - // poll timeout is in milliseconds. Convert to struct timeval. - // poll timeout == -1 : wait forever : select timeout of NULL - // poll timeout == 0 : return immediately : select timeout of zero - if (pollTimeout >= 0) - { - tv.tv_sec = pollTimeout / 1000; - tv.tv_usec = (pollTimeout % 1000) * 1000; - tvp = &tv; - } - else - { - tvp = NULL; - } - - selected = select(maxFD+1, readp, writep, exceptp, tvp); - - if (selected < 0) - { - // Error during select - result = -1; - } - else if (selected > 0) - { - // Select found something - // Transcribe result from fd sets to poll set. - // Also count the number of selected fds. poll returns the - // number of ready fds; select returns the number of bits set. - int polled = 0; - for (p = pollSet; p < pollEnd; p++) - { - p->revents = 0; - if (p->fd < 0) { - // Negative fd always reports zero - } - else - { - if ( (p->events & POLLIN) && FD_ISSET(p->fd, readp) ) - p->revents |= POLLIN; - if ( (p->events & POLLOUT) && FD_ISSET(p->fd, writep) ) - p->revents |= POLLOUT; - if ( (p->events != 0) && FD_ISSET(p->fd, exceptp) ) - p->revents |= POLLERR; - - if (p->revents) - polled++; - } - } - result = polled; - } - else - { - // selected == 0, select timed out before anything happened - // Clear all result bits and return zero. - for (p = pollSet; p < pollEnd; p++) - p->revents = 0; - - result = 0; - } - - return result; -} - - -#undef FD_SETSIZE - -#endif commit f6f8c047b73f8fc8b4c78b321761a26ef7ed96ba Author: Andre Fischer <a...@apache.org> Date: Wed May 8 09:48:36 2013 +0000 122255: Store sidebar panel extension state (non persistent). diff --git a/sfx2/source/sidebar/ContextList.cxx b/sfx2/source/sidebar/ContextList.cxx index ee17b78..8e2d137 100644 --- a/sfx2/source/sidebar/ContextList.cxx +++ b/sfx2/source/sidebar/ContextList.cxx @@ -56,6 +56,18 @@ const ContextList::Entry* ContextList::GetMatch (const Context& rContext) const +ContextList::Entry* ContextList::GetMatch (const Context& rContext) +{ + const ::std::vector<Entry>::const_iterator iEntry = FindBestMatch(rContext); + if (iEntry != maEntries.end()) + return const_cast<Entry*>(&*iEntry); + else + return NULL; +} + + + + ::std::vector<ContextList::Entry>::const_iterator ContextList::FindBestMatch (const Context& rContext) const { sal_Int32 nBestMatch (Context::NoMatch); diff --git a/sfx2/source/sidebar/ContextList.hxx b/sfx2/source/sidebar/ContextList.hxx index 3b98731..a95432c 100644 --- a/sfx2/source/sidebar/ContextList.hxx +++ b/sfx2/source/sidebar/ContextList.hxx @@ -31,7 +31,8 @@ namespace sfx2 { namespace sidebar { - +/** Per context data for deck and panel descriptors. +*/ class ContextList { public: @@ -50,6 +51,8 @@ public: */ const Entry* GetMatch ( const Context& rContext) const; + Entry* GetMatch ( + const Context& rContext); void AddContextDescription ( const Context& rContext, diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx index ad50527..cf414a7 100644 --- a/sfx2/source/sidebar/Panel.cxx +++ b/sfx2/source/sidebar/Panel.cxx @@ -26,6 +26,7 @@ #include "PanelDescriptor.hxx" #include "sfx2/sidebar/Theme.hxx" #include "Paint.hxx" +#include "ResourceManager.hxx" #ifdef DEBUG #include "sfx2/sidebar/Tools.hxx" @@ -52,7 +53,9 @@ namespace sfx2 { namespace sidebar { Panel::Panel ( const PanelDescriptor& rPanelDescriptor, Window* pParentWindow, - const ::boost::function<void(void)>& rDeckLayoutTrigger) + const bool bIsInitiallyExpanded, + const ::boost::function<void(void)>& rDeckLayoutTrigger, + const ::boost::function<Context(void)>& rContextAccess) : Window(pParentWindow), msPanelId(rPanelDescriptor.msId), mpTitleBar(new PanelTitleBar( @@ -62,8 +65,9 @@ Panel::Panel ( mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional), mxElement(), mxPanelComponent(), - mbIsExpanded(true), - maDeckLayoutTrigger(rDeckLayoutTrigger) + mbIsExpanded(bIsInitiallyExpanded), + maDeckLayoutTrigger(rDeckLayoutTrigger), + maContextAccess(rContextAccess) { SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper()); @@ -158,6 +162,12 @@ void Panel::SetExpanded (const bool bIsExpanded) { mbIsExpanded = bIsExpanded; maDeckLayoutTrigger(); + + if (maContextAccess) + ResourceManager::Instance().StorePanelExpansionState( + msPanelId, + bIsExpanded, + maContextAccess()); } } diff --git a/sfx2/source/sidebar/Panel.hxx b/sfx2/source/sidebar/Panel.hxx index ab19940..983c160 100644 --- a/sfx2/source/sidebar/Panel.hxx +++ b/sfx2/source/sidebar/Panel.hxx @@ -22,6 +22,7 @@ #ifndef SFX_SIDEBAR_PANEL_HXX #define SFX_SIDEBAR_PANEL_HXX +#include "Context.hxx" #include <vcl/window.hxx> #include <com/sun/star/ui/XUIElement.hpp> @@ -49,7 +50,9 @@ public: Panel ( const PanelDescriptor& rPanelDescriptor, Window* pParentWindow, - const ::boost::function<void(void)>& rDeckLayoutTrigger ); + const bool bIsInitiallyExpanded, + const ::boost::function<void(void)>& rDeckLayoutTrigger, + const ::boost::function<Context(void)>& rContextAccess); virtual ~Panel (void); void Dispose (void); @@ -80,7 +83,7 @@ private: cssu::Reference<css::ui::XSidebarPanel> mxPanelComponent; bool mbIsExpanded; const ::boost::function<void(void)> maDeckLayoutTrigger; - Rectangle maBoundingBox; + const ::boost::function<Context(void)> maContextAccess; }; typedef ::boost::shared_ptr<Panel> SharedPanel; typedef ::std::vector<SharedPanel> SharedPanelContainer; diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx index 0ab3662..cbd8d8f 100644 --- a/sfx2/source/sidebar/ResourceManager.cxx +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -572,6 +572,30 @@ void ResourceManager::ReadLegacyAddons (const Reference<frame::XFrame>& rxFrame) +void ResourceManager::StorePanelExpansionState ( + const ::rtl::OUString& rsPanelId, + const bool bExpansionState, + const Context& rContext) +{ + for (PanelContainer::iterator + iPanel(maPanels.begin()), + iEnd(maPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + if (iPanel->msId.equals(rsPanelId)) + { + ContextList::Entry* pEntry ( + iPanel->maContextList.GetMatch (rContext)); + if (pEntry != NULL) + pEntry->mbIsInitiallyVisible = bExpansionState; + } + } +} + + + + ::rtl::OUString ResourceManager::GetModuleName ( const cssu::Reference<css::frame::XFrame>& rxFrame) { diff --git a/sfx2/source/sidebar/ResourceManager.hxx b/sfx2/source/sidebar/ResourceManager.hxx index 3dcd76a..7420c1d 100644 --- a/sfx2/source/sidebar/ResourceManager.hxx +++ b/sfx2/source/sidebar/ResourceManager.hxx @@ -94,6 +94,14 @@ public: const ::rtl::OUString& rsDeckId, const cssu::Reference<css::frame::XFrame>& rxFrame); + /** Remember the expansions state per panel and context. + This is not persistent past application end. + */ + void StorePanelExpansionState ( + const ::rtl::OUString& rsPanelId, + const bool bExpansionState, + const Context& rContext); + static ::rtl::OUString GetModuleName ( const cssu::Reference<css::frame::XFrame>& rxFrame); diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 2d93c80..2552c88 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -573,19 +573,19 @@ void SidebarController::SwitchToDeck ( { // Panel already exists in current deck. Reuse it. aNewPanels[nWriteIndex] = *iPanel; + aNewPanels[nWriteIndex]->SetExpanded(rPanelContexDescriptor.mbIsInitiallyVisible); } else { // Panel does not yet exist. Create it. aNewPanels[nWriteIndex] = CreatePanel( rPanelContexDescriptor.msId, - mpCurrentDeck->GetPanelParentWindow()); + mpCurrentDeck->GetPanelParentWindow(), + rPanelContexDescriptor.mbIsInitiallyVisible); bHasPanelSetChanged = true; } if (aNewPanels[nWriteIndex] != NULL) { - // Depending on the context we have to collapse the panel. - aNewPanels[nWriteIndex]->SetExpanded(rPanelContexDescriptor.mbIsInitiallyVisible); // Depending on the context we have to apply the show menu functor. aNewPanels[nWriteIndex]->SetShowMenuFunctor( rPanelContexDescriptor.msMenuCommand.getLength()>0 @@ -649,7 +649,8 @@ bool SidebarController::ArePanelSetsEqual ( SharedPanel SidebarController::CreatePanel ( const OUString& rsPanelId, - ::Window* pParentWindow ) + ::Window* pParentWindow, + const bool bIsInitiallyExpanded) { const PanelDescriptor* pPanelDescriptor = ResourceManager::Instance().GetPanelDescriptor(rsPanelId); if (pPanelDescriptor == NULL) @@ -659,7 +660,9 @@ SharedPanel SidebarController::CreatePanel ( SharedPanel pPanel (new Panel( *pPanelDescriptor, pParentWindow, - ::boost::bind(&Deck::RequestLayout, mpCurrentDeck.get()) ) ); + bIsInitiallyExpanded, + ::boost::bind(&Deck::RequestLayout, mpCurrentDeck.get()), + ::boost::bind(&SidebarController::GetCurrentContext, this))); // Create the XUIElement. Reference<ui::XUIElement> xUIElement (CreateUIElement( @@ -1175,4 +1178,12 @@ void SidebarController::ShowPanel (const Panel& rPanel) } + + +Context SidebarController::GetCurrentContext (void) const +{ + return maCurrentContext; +} + + } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx index 3f3929c..8a2f6c7 100644 --- a/sfx2/source/sidebar/SidebarController.hxx +++ b/sfx2/source/sidebar/SidebarController.hxx @@ -172,7 +172,8 @@ private: const bool bWantsCanvas); SharedPanel CreatePanel ( const ::rtl::OUString& rsPanelId, - ::Window* pParentWindow ); + ::Window* pParentWindow, + const bool bIsInitiallyExpanded); void SwitchToDeck ( const DeckDescriptor& rDeckDescriptor, const Context& rContext); @@ -216,6 +217,8 @@ private: */ void ShowPanel (const Panel& rPanel); + Context GetCurrentContext (void) const; + virtual void SAL_CALL disposing (void); }; commit 00174b7aac9692e3b70b6134cc9b4a005f8bc701 Author: Armin Le Grand <a...@apache.org> Date: Wed May 8 09:43:02 2013 +0000 i12246 Corrected three basic problems in the metafile breaker diff --git a/svx/source/svdraw/svdfmtf.cxx b/svx/source/svdraw/svdfmtf.cxx index 1314161..e214558 100644 --- a/svx/source/svdraw/svdfmtf.cxx +++ b/svx/source/svdraw/svdfmtf.cxx @@ -129,8 +129,18 @@ ImpSdrGDIMetaFileImport::~ImpSdrGDIMetaFileImport() void ImpSdrGDIMetaFileImport::DoLoopActions(GDIMetaFile& rMtf, SvdProgressInfo* pProgrInfo, sal_uInt32* pActionsToReport) { - for( MetaAction* pAct = rMtf.FirstAction(); pAct; pAct = rMtf.NextAction() ) + const sal_uLong nCount(rMtf.GetActionCount()); + + for(sal_uLong a(0); a < nCount; a++) { + MetaAction* pAct = rMtf.GetAction(a); + + if(!pAct) + { + OSL_ENSURE(false, "OOps, no action at valid position (!)"); + pAct = rMtf.GetAction(0); + } + switch (pAct->GetType()) { case META_PIXEL_ACTION : DoAction((MetaPixelAction &)*pAct); break; @@ -515,10 +525,17 @@ void ImpSdrGDIMetaFileImport::InsertObj(SdrObject* pObj, bool bScale) aTrans.scale(fScaleX, fScaleY); aPixel.transform(aTrans); + const Size aOrigSizePixel(aBitmapEx.GetSizePixel()); + const Point aClipTopLeft( + basegfx::fround(floor(std::max(0.0, aPixel.getMinX()))), + basegfx::fround(floor(std::max(0.0, aPixel.getMinY())))); + const Size aClipSize( + basegfx::fround(ceil(std::min((double)aOrigSizePixel.Width(), aPixel.getWidth()))), + basegfx::fround(ceil(std::min((double)aOrigSizePixel.Height(), aPixel.getHeight())))); const BitmapEx aClippedBitmap( aBitmapEx, - Point(floor(std::max(0.0, aPixel.getMinX())), floor(std::max(0.0, aPixel.getMinY()))), - Size(ceil(aPixel.getWidth()), ceil(aPixel.getHeight()))); + aClipTopLeft, + aClipSize); pObj->SetMergedItem(XFillStyleItem(XFILL_BITMAP)); pObj->SetMergedItem(XFillBitmapItem(String(), Graphic(aClippedBitmap))); @@ -1010,6 +1027,10 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpAction& rAct) Rectangle aRect(rAct.GetPoint(),rAct.GetBitmap().GetSizePixel()); aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf=new SdrGrafObj(Graphic(rAct.GetBitmap()),aRect); + + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1018,6 +1039,10 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpScaleAction& rAct) Rectangle aRect(rAct.GetPoint(),rAct.GetSize()); aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf=new SdrGrafObj(Graphic(rAct.GetBitmap()),aRect); + + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1026,6 +1051,10 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpExAction& rAct) Rectangle aRect(rAct.GetPoint(),rAct.GetBitmapEx().GetSizePixel()); aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf=new SdrGrafObj( rAct.GetBitmapEx(), aRect ); + + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1034,6 +1063,10 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpExScaleAction& rAct) Rectangle aRect(rAct.GetPoint(),rAct.GetSize()); aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf=new SdrGrafObj( rAct.GetBitmapEx(), aRect ); + + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1158,22 +1191,18 @@ void ImpSdrGDIMetaFileImport::DoAction( MetaCommentAction& rAct, GDIMetaFile* pM aXGradient.SetEndIntens(rGrad.GetEndIntensity()); aXGradient.SetSteps(rGrad.GetSteps()); - if(maVD.IsLineColor()) - { - // switch line off; when there was one there will be a - // META_POLYLINE_ACTION following creating another object - const Color aLineColor(maVD.GetLineColor()); - maVD.SetLineColor(); - SetAttributes(pPath); - maVD.SetLineColor(aLineColor); - } - else - { - SetAttributes(pPath); - } + // no need to use SetAttributes(..) here since line and fill style + // need to be set individually + // SetAttributes(pPath); + // switch line off; when there was one there will be a + // META_POLYLINE_ACTION following creating another object + aGradAttr.Put(XLineStyleItem(XLINE_NONE)); + + // add detected gradient fillstyle aGradAttr.Put(XFillStyleItem(XFILL_GRADIENT)); aGradAttr.Put(XFillGradientItem(&mpModel->GetItemPool(), aXGradient)); + pPath->SetMergedItemSet(aGradAttr); InsertObj(pPath); @@ -1215,9 +1244,11 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpScalePartAction& rAct) aRect.Right()++; aRect.Bottom()++; aBitmap.Crop(Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize())); - SdrGrafObj* pGraf = new SdrGrafObj(aBitmap, aRect); + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1229,9 +1260,11 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaBmpExScalePartAction& rAct) aRect.Right()++; aRect.Bottom()++; aBitmapEx.Crop(Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize())); - SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect); + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1240,11 +1273,12 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaMaskAction& rAct) Rectangle aRect(rAct.GetPoint(), rAct.GetBitmap().GetSizePixel()); BitmapEx aBitmapEx(rAct.GetBitmap(), rAct.GetColor()); - aRect.Right()++; - aRect.Bottom()++; - + aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect); + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1253,11 +1287,12 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaMaskScaleAction& rAct) Rectangle aRect(rAct.GetPoint(), rAct.GetSize()); BitmapEx aBitmapEx(rAct.GetBitmap(), rAct.GetColor()); - aRect.Right()++; - aRect.Bottom()++; - + aRect.Right()++; aRect.Bottom()++; SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect); + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1266,12 +1301,13 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaMaskScalePartAction& rAct) Rectangle aRect(rAct.GetDestPoint(), rAct.GetDestSize()); BitmapEx aBitmapEx(rAct.GetBitmap(), rAct.GetColor()); - aRect.Right()++; - aRect.Bottom()++; + aRect.Right()++; aRect.Bottom()++; aBitmapEx.Crop(Rectangle(rAct.GetSrcPoint(), rAct.GetSrcSize())); - SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect); + // This action is not creating line and fill, set directly, do not use SetAttributes(..) + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } @@ -1417,6 +1453,9 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaFloatTransparentAction& rAct) { const Rectangle aRect(rAct.GetPoint(),rAct.GetSize()); + Rectangle aHairline; + const Rectangle aBoundRect(rMtf.GetBoundRect(*Application::GetDefaultDevice(), &aHairline)); + // convert metafile sub-content to BitmapEx BitmapEx aBitmapEx( convertMetafileToBitmapEx( @@ -1585,6 +1624,11 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaFloatTransparentAction& rAct) // create and add object SdrGrafObj* pGraf = new SdrGrafObj(aBitmapEx, aRect); + // for MetaFloatTransparentAction, do not use SetAttributes(...) + // since these metafile content is not used to draw line/fill + // dependent of these setting at the device content + pGraf->SetMergedItem(XLineStyleItem(XLINE_NONE)); + pGraf->SetMergedItem(XFillStyleItem(XFILL_NONE)); InsertObj(pGraf); } } commit db9602cbf627e1a7af56f3a419ec7c7445dcfb85 Author: Andre Fischer <a...@apache.org> Date: Wed May 8 07:21:37 2013 +0000 122254: Process mouse wheel events over sidebar scroll bar. diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx index 59946f6..eb62058 100644 --- a/sfx2/source/sidebar/Deck.cxx +++ b/sfx2/source/sidebar/Deck.cxx @@ -220,6 +220,56 @@ void Deck::DataChanged (const DataChangedEvent& rEvent) +long Deck::Notify (NotifyEvent& rEvent) +{ + if (rEvent.GetType() != EVENT_COMMAND) + return sal_False; + + CommandEvent* pCommandEvent = reinterpret_cast<CommandEvent*>(rEvent.GetData()); + if (pCommandEvent == NULL) + return sal_False; + + switch (pCommandEvent->GetCommand()) + { + case COMMAND_WHEEL: + { + if ( ! mpVerticalScrollBar + || ! mpVerticalScrollBar->IsVisible()) + return sal_False; + + // Ignore all wheel commands from outside the vertical + // scroll bar. Otherwise after a scroll we might land on + // a spin field and subsequent wheel events would change + // the value of that control. + if (rEvent.GetWindow() != mpVerticalScrollBar.get()) + return sal_True; + + // Get the wheel data and check that it describes a valid + // vertical scroll. + const CommandWheelData* pData = pCommandEvent->GetWheelData(); + if (pData==NULL + || pData->GetModifier() + || pData->GetMode() != COMMAND_WHEEL_SCROLL + || pData->IsHorz()) + return sal_False; + + // Execute the actual scroll action. + long nDelta = pData->GetDelta(); + mpVerticalScrollBar->DoScroll( + mpVerticalScrollBar->GetThumbPos() - nDelta); + return sal_True; + } + + default: + break; + } + + return sal_False; +} + + + + void Deck::SetPanels (const SharedPanelContainer& rPanels) { maPanels = rPanels; @@ -276,7 +326,6 @@ void Deck::ShowPanel (const Panel& rPanel) if (rPanel.GetTitleBar() != NULL && rPanel.GetTitleBar()->IsVisible()) nPanelTop = rPanel.GetTitleBar()->GetPosPixel().Y(); - // Determine what the new thumb position should be like. // When the whole panel does not fit then make its top visible // and it off at the bottom. @@ -419,4 +468,5 @@ void Deck::ScrollContainerWindow::SetSeparators (const ::std::vector<sal_Int32>& maSeparators = rSeparators; } + } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Deck.hxx b/sfx2/source/sidebar/Deck.hxx index 33cb09a..89f5e4b 100644 --- a/sfx2/source/sidebar/Deck.hxx +++ b/sfx2/source/sidebar/Deck.hxx @@ -73,6 +73,7 @@ public: virtual void Paint (const Rectangle& rUpdateArea); virtual void DataChanged (const DataChangedEvent& rEvent); + virtual long Notify (NotifyEvent& rEvent); void PrintWindowTree (void); void PrintWindowTree (const ::std::vector<Panel*>& rPanels);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits