drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx | 14 drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx | 2 drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 257 +++++++++- drawinglayer/source/processor2d/vclprocessor2d.cxx | 80 --- sc/source/ui/sidebar/AlignmentPropertyPanel.hxx | 1 sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx | 1 sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx | 3 sfx2/Library_sfx.mk | 2 sfx2/inc/sfx2/sidebar/ControllerItem.hxx | 2 sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx | 6 sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx | 5 sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx | 3 sfx2/source/sidebar/ControllerItem.cxx | 10 svx/source/sidebar/insert/InsertPropertyPanel.cxx | 9 svx/source/sidebar/insert/SimpleToolBoxController.cxx | 85 --- svx/source/sidebar/insert/SimpleToolBoxController.hxx | 54 -- svx/source/sidebar/text/TextPropertyPanel.cxx | 70 +- svx/source/sidebar/text/TextPropertyPanel.hxx | 1 svx/source/sidebar/text/TextPropertyPanel.src | 16 vcl/inc/vcl/outdev.hxx | 7 vcl/source/gdi/outdev.cxx | 58 ++ 21 files changed, 398 insertions(+), 288 deletions(-)
New commits: commit 784ed0d2e9cc2de7e3de8420d4708ee5c4631a5c Author: Andre Fischer <a...@apache.org> Date: Fri May 10 11:30:31 2013 +0000 122218: Replaced local tool box controller with existing GenericToolboxController (cleanup). diff --git a/svx/source/sidebar/insert/InsertPropertyPanel.cxx b/svx/source/sidebar/insert/InsertPropertyPanel.cxx index 4f4c3bb..2403f43 100755 --- a/svx/source/sidebar/insert/InsertPropertyPanel.cxx +++ b/svx/source/sidebar/insert/InsertPropertyPanel.cxx @@ -23,7 +23,6 @@ #include "InsertPropertyPanel.hxx" #include "InsertPropertyPanel.hrc" -#include "SimpleToolBoxController.hxx" #include "sfx2/sidebar/CommandInfoProvider.hxx" #include <sfx2/sidebar/Theme.hxx> @@ -32,6 +31,7 @@ #include <svx/dialmgr.hxx> #include <svtools/miscopt.hxx> +#include <svtools/generictoolboxcontroller.hxx> #include <vcl/toolbox.hxx> #include <sfx2/tbxctrl.hxx> #include <framework/sfxhelperfunctions.hxx> @@ -281,7 +281,12 @@ void InsertPropertyPanel::CreateController ( UNO_QUERY); if ( ! aDescriptor.mxController.is()) aDescriptor.mxController.set( - static_cast<XWeak*>(new SimpleToolBoxController(mxFrame, *pToolBox, nItemId, sCommandName)), + static_cast<XWeak*>(new svt::GenericToolboxController( + ::comphelper::getProcessServiceFactory(), + mxFrame, + pToolBox, + nItemId, + sCommandName)), UNO_QUERY); if ( ! aDescriptor.mxController.is()) return; diff --git a/svx/source/sidebar/insert/SimpleToolBoxController.cxx b/svx/source/sidebar/insert/SimpleToolBoxController.cxx deleted file mode 100755 index dda97d9..0000000 --- a/svx/source/sidebar/insert/SimpleToolBoxController.cxx +++ /dev/null @@ -1,85 +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. - * - *************************************************************/ - -#include "precompiled_svx.hxx" - -#include "SimpleToolBoxController.hxx" - -#include <comphelper/processfactory.hxx> -#include <vcl/toolbox.hxx> -#include <vos/mutex.hxx> -#include <vcl/svapp.hxx> - - -using namespace ::com::sun::star; - -namespace svx { namespace sidebar { - -SimpleToolBoxController::SimpleToolBoxController( - const cssu::Reference<css::frame::XFrame>& rxFrame, - ToolBox& rToolBox, - const sal_uInt16 nItemId, - const rtl::OUString& rsCommand) - : svt::ToolboxController(::comphelper::getProcessServiceFactory(), rxFrame, rsCommand), - mrToolbox(rToolBox), - mnItemId(nItemId) -{ -} - - - - -SimpleToolBoxController::~SimpleToolBoxController (void) -{ -} - - - - -void SAL_CALL SimpleToolBoxController::statusChanged (const css::frame::FeatureStateEvent& rEvent) - throw (cssu::RuntimeException) -{ - vos::OGuard aSolarMutexGuard (Application::GetSolarMutex()); - - if (m_bDisposed) - return; - - mrToolbox.EnableItem(mnItemId, rEvent.IsEnabled); - - sal_uInt16 nItemBits = mrToolbox.GetItemBits(mnItemId); - nItemBits &= ~TIB_CHECKABLE; - TriState eState = STATE_NOCHECK; - - sal_Bool bValue = sal_False; - if (rEvent.State >>= bValue) - { - // Boolean, treat it as checked/unchecked - mrToolbox.CheckItem(mnItemId, bValue); - if ( bValue ) - eState = STATE_CHECK; - nItemBits |= TIB_CHECKABLE; - } - - mrToolbox.SetItemState(mnItemId, eState); - mrToolbox.SetItemBits(mnItemId, nItemBits); -} - -} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/insert/SimpleToolBoxController.hxx b/svx/source/sidebar/insert/SimpleToolBoxController.hxx deleted file mode 100755 index 0e4071f..0000000 --- a/svx/source/sidebar/insert/SimpleToolBoxController.hxx +++ /dev/null @@ -1,54 +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. - * - *************************************************************/ - -#ifndef SVX_SIDEBAR_INSERT_SIMPLE_TOOLBOX_CONTROLLER_HXX -#define SVX_SIDEBAR_INSERT_SIMPLE_TOOLBOX_CONTROLLER_HXX - -#include <svtools/toolboxcontroller.hxx> - -namespace css = ::com::sun::star; -namespace cssu = ::com::sun::star::uno; - -namespace svx { namespace sidebar { - -class SimpleToolBoxController : public svt::ToolboxController -{ -public: - SimpleToolBoxController( - const cssu::Reference<css::frame::XFrame>& rxFrame, - ToolBox& rToolBox, - const sal_uInt16 nItTemId, - const rtl::OUString& rsComand); - virtual ~SimpleToolBoxController (void); - - // XStatusListener - virtual void SAL_CALL statusChanged (const css::frame::FeatureStateEvent& rEvent) - throw (cssu::RuntimeException); - -private: - ToolBox& mrToolbox; - const sal_uInt16 mnItemId; -}; - -} } // end of namespace svx::sidebar - - -#endif commit 8f3625e6cf098c3fd5e6701b7b687a0423d78f51 Author: Andre Fischer <a...@apache.org> Date: Fri May 10 11:03:45 2013 +0000 122047: Adding virutal destructors to interfaces to prevent problems with older compilers. diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx b/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx index 3693d18..6ae2e4a 100755 --- a/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx @@ -22,7 +22,6 @@ #ifndef SC_PROPERTYPANEL_ALIGNMENT_HXX #define SC_PROPERTYPANEL_ALIGNMENT_HXX -#include <sfx2/sidebar/SidebarPanelBase.hxx> #include <sfx2/sidebar/ControllerItem.hxx> #include <sfx2/sidebar/IContextChangeReceiver.hxx> #include <vcl/fixed.hxx> diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx index 08f30dd..c422486 100755 --- a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx +++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx @@ -22,7 +22,6 @@ #ifndef SC_PROPERTYPANEL_APPEARANCE_HXX #define SC_PROPERTYPANEL_APPEARANCE_HXX -#include <sfx2/sidebar/SidebarPanelBase.hxx> #include <sfx2/sidebar/ControllerItem.hxx> #include <sfx2/sidebar/IContextChangeReceiver.hxx> #include <boost/scoped_ptr.hpp> diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx index 762f6a1..3795251 100755 --- a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx +++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx @@ -22,7 +22,6 @@ #ifndef SC_PROPERTYPANEL_NUMFORMAT_HXX #define SC_PROPERTYPANEL_NUMFORMAT_HXX -#include <sfx2/sidebar/SidebarPanelBase.hxx> #include <sfx2/sidebar/ControllerItem.hxx> #include <sfx2/sidebar/IContextChangeReceiver.hxx> #include <boost/scoped_ptr.hpp> @@ -97,6 +96,6 @@ private: } } // end of namespace ::sc::sidebar -#endif SC_PROPERTYPANEL_NUMFORMAT_HXX +#endif // eof diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index 9a14410..c10196b 100755 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -234,6 +234,8 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/sidebar/EnumContext \ sfx2/source/sidebar/FocusManager \ sfx2/source/sidebar/MenuButton \ + sfx2/source/sidebar/IContextChangeReceiver \ + sfx2/source/sidebar/ILayoutableWindow \ sfx2/source/sidebar/Paint \ sfx2/source/sidebar/Panel \ sfx2/source/sidebar/PanelDescriptor \ diff --git a/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx b/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx index e495e65..5fd8f25 100644 --- a/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx +++ b/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx @@ -23,6 +23,7 @@ #define SFX_SIDEBAR_CONTEXT_CHANGE_RECEIVER_INTERFACE_HXX #include "EnumContext.hxx" +#include "sfx2/dllapi.h" namespace sfx2 { namespace sidebar { @@ -31,8 +32,9 @@ namespace sfx2 { namespace sidebar { class SFX2_DLLPUBLIC IContextChangeReceiver { public: - virtual void HandleContextChange ( - const EnumContext aContext) = 0; + virtual ~IContextChangeReceiver (void); + + virtual void HandleContextChange (const EnumContext aContext) = 0; }; } } // end of namespace ::sd::sidebar diff --git a/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx b/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx index 22b0efc..024acab 100644 --- a/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx +++ b/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx @@ -22,6 +22,7 @@ #ifndef SFX_SIDEBAR_LAYOUTABLE_WINDOW_INTERFACE_HXX #define SFX_SIDEBAR_LAYOUTABLE_WINDOW_INTERFACE_HXX +#include "sfx2/dllapi.h" #include <tools/gen.hxx> #include <sal/types.h> @@ -32,9 +33,11 @@ class Window; namespace sfx2 { namespace sidebar { -class ILayoutableWindow +class SFX2_DLLPUBLIC ILayoutableWindow { public: + virtual ~ILayoutableWindow (void); + /** Return the preferred height with the constraint, that the window will be set to the given width. */ diff --git a/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx b/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx index 9f894e0..97c5b04 100644 --- a/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx +++ b/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx @@ -23,6 +23,7 @@ #define SFX_SIDEBAR_PANEL_BASE_HXX #include "EnumContext.hxx" +#include "IContextChangeReceiver.hxx" #include <cppuhelper/compbase4.hxx> #include <cppuhelper/basemutex.hxx> @@ -67,7 +68,7 @@ public: static cssu::Reference<css::ui::XUIElement> Create ( const ::rtl::OUString& rsResourceURL, const cssu::Reference<css::frame::XFrame>& rxFrame, - Window* mpWindow, + Window* pControl, const css::ui::LayoutSize& rLayoutSize); // XContextChangeEventListener commit f213ea43fac43326a643f30ff13abd9d77f6aed7 Author: Andre Fischer <a...@apache.org> Date: Fri May 10 09:00:58 2013 +0000 122082: Remove temporary change. diff --git a/svx/source/sidebar/text/TextPropertyPanel.hxx b/svx/source/sidebar/text/TextPropertyPanel.hxx index 54ce1a6..8b2781b 100644 --- a/svx/source/sidebar/text/TextPropertyPanel.hxx +++ b/svx/source/sidebar/text/TextPropertyPanel.hxx @@ -61,7 +61,6 @@ public: SfxBindings* pBindings); virtual void DataChanged (const DataChangedEvent& rEvent); - virtual void Resize (void); ::sfx2::sidebar::ControllerItem& GetSpaceController(); long GetSelFontSize(); commit ffcc8c326640dfbc6b765cd25875adf9e0ab66ad Author: Andre Fischer <a...@apache.org> Date: Fri May 10 08:51:15 2013 +0000 122082: Disable controls of text property sidebar panel for disabled document parts. diff --git a/sfx2/inc/sfx2/sidebar/ControllerItem.hxx b/sfx2/inc/sfx2/sidebar/ControllerItem.hxx index aaecd44..0641e38 100644 --- a/sfx2/inc/sfx2/sidebar/ControllerItem.hxx +++ b/sfx2/inc/sfx2/sidebar/ControllerItem.hxx @@ -91,7 +91,7 @@ public: Changes of this state are notified via the ItemUpdateReceiverInterface::NotifyContextChang() method. */ - bool IsEnabled (void) const; + bool IsEnabled (const SfxItemState eState) const; /** Force the controller item to call its NotifyItemUpdate callback with up-to-date data. diff --git a/sfx2/source/sidebar/ControllerItem.cxx b/sfx2/source/sidebar/ControllerItem.cxx index d549a0d..a4b6a08 100644 --- a/sfx2/source/sidebar/ControllerItem.cxx +++ b/sfx2/source/sidebar/ControllerItem.cxx @@ -139,15 +139,17 @@ void ControllerItem::StateChanged ( SfxItemState eState, const SfxPoolItem* pState) { - mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState, IsEnabled()); + mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState, IsEnabled(eState)); } -bool ControllerItem::IsEnabled (void) const +bool ControllerItem::IsEnabled (SfxItemState eState) const { - if ( ! SvtCommandOptions().HasEntries(SvtCommandOptions::CMDOPTION_DISABLED)) + if (eState == SFX_ITEM_DISABLED) + return false; + else if ( ! SvtCommandOptions().HasEntries(SvtCommandOptions::CMDOPTION_DISABLED)) { // There are no disabled commands. return true; @@ -174,7 +176,7 @@ void ControllerItem::RequestUpdate (void) { SfxPoolItem* pState = NULL; const SfxItemState eState (GetBindings().QueryState(GetId(), pState)); - mrItemUpdateReceiver.NotifyItemUpdate(GetId(), eState, pState, IsEnabled()); + mrItemUpdateReceiver.NotifyItemUpdate(GetId(), eState, pState, IsEnabled(eState)); } diff --git a/svx/source/sidebar/text/TextPropertyPanel.cxx b/svx/source/sidebar/text/TextPropertyPanel.cxx index 727d43c..58d209c 100644 --- a/svx/source/sidebar/text/TextPropertyPanel.cxx +++ b/svx/source/sidebar/text/TextPropertyPanel.cxx @@ -45,6 +45,7 @@ #include <sfx2/sidebar/ResourceDefinitions.hrc> #include <sfx2/sidebar/ControlFactory.hxx> #include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/PanelLayouter.hxx> #include "sfx2/imagemgr.hxx" #include <svtools/ctrltool.hxx> #include <svtools/unitconv.hxx> @@ -73,17 +74,8 @@ namespace svx { namespace sidebar { #undef HAS_IA2 -#define FONT_CONTROL_WIDTH 160 -#define SIZE_CONTROL_WIDTH 80 -#define CONTROL_COMBOX_HEIGHT 20 -#define CONTROL_HEIGHT_5X 120 - -#define TEXT_SECTIONPAGE_HEIGHT_S SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + ( TOOLBOX_ITEM_HEIGHT + 2 ) + CONTROL_SPACING_VERTICAL * 1 + SECTIONPAGE_MARGIN_VERTICAL_BOT -#define TEXT_SECTIONPAGE_HEIGHT SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + ( TOOLBOX_ITEM_HEIGHT + 2 ) * 2 + CONTROL_SPACING_VERTICAL * 2 + SECTIONPAGE_MARGIN_VERTICAL_BOT - - - PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent) +PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent) { return new TextCharacterSpacingControl(pParent, *this, mpBindings); } @@ -344,6 +336,7 @@ void TextPropertyPanel::DataChanged (const DataChangedEvent& rEvent) + void TextPropertyPanel::Initialize (void) { //<<modify fill font list @@ -429,11 +422,6 @@ void TextPropertyPanel::Initialize (void) maFontSizeBox.SetSelectHdl(aLink); aLink = LINK(this, TextPropertyPanel, FontSizeLoseFocus); maFontSizeBox.SetLoseFocusHdl(aLink); - - Size aSize(PROPERTYPAGE_WIDTH, TEXT_SECTIONPAGE_HEIGHT); - aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); - aSize.setWidth(GetOutputSizePixel().Width()); - SetSizePixel(aSize); } void TextPropertyPanel::EndSpacingPopupMode (void) @@ -953,16 +941,38 @@ void TextPropertyPanel::NotifyItemUpdate ( { mpHeightItem = (SvxFontHeightItem*)pState;//const SvxFontHeightItem* SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric(); - long iValue = (long)CalcToPoint( mpHeightItem->GetHeight(), eUnit, 10 ); + const sal_Int64 nValue (CalcToPoint(mpHeightItem->GetHeight(), eUnit, 10 )); mpToolBoxIncDec->Enable(); mpToolBoxIncDec->SetItemState(TBI_INCREASE, STATE_NOCHECK); mpToolBoxIncDec->SetItemState(TBI_DECREASE, STATE_NOCHECK); + // For Writer we have to update the states of the + // increase and decrease buttons here, because we have + // no access to the slots used by Writer. + switch(maContext.GetCombinedContext_DI()) + { + case CombinedEnumContext(Application_DrawImpress, Context_DrawText): + case CombinedEnumContext(Application_DrawImpress, Context_Text): + case CombinedEnumContext(Application_DrawImpress, Context_Table): + case CombinedEnumContext(Application_DrawImpress, Context_OutlineText): + case CombinedEnumContext(Application_DrawImpress, Context_Draw): + case CombinedEnumContext(Application_DrawImpress, Context_TextObject): + case CombinedEnumContext(Application_DrawImpress, Context_Graphic): + break; + + default: + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE, bIsEnabled && nValue<960); + mpToolBoxIncDec->EnableItem(TBI_DECREASE, bIsEnabled && nValue>60); + break; + } + } + if( mbFocusOnFontSizeCtrl ) return; - maFontSizeBox.SetValue( iValue ); + maFontSizeBox.SetValue(nValue); maFontSizeBox.LoseFocus(); UpdateItem(SID_SHRINK_FONT_SIZE); @@ -1156,8 +1166,8 @@ void TextPropertyPanel::NotifyItemUpdate ( { meEscape = SVX_ESCAPEMENT_OFF; } - mpToolBoxScriptSw->EnableItem(TBI_SUPER, bIsItemEnabled && bIsEnabled); - mpToolBoxScriptSw->EnableItem(TBI_SUB, bIsItemEnabled && bIsEnabled); + mpToolBoxScriptSw->EnableItem(TBI_SUPER_SW, bIsItemEnabled && bIsEnabled); + mpToolBoxScriptSw->EnableItem(TBI_SUB_SW, bIsItemEnabled && bIsEnabled); break; } @@ -1233,17 +1243,27 @@ void TextPropertyPanel::NotifyItemUpdate ( case CombinedEnumContext(Application_DrawImpress, Context_Draw): case CombinedEnumContext(Application_DrawImpress, Context_TextObject): case CombinedEnumContext(Application_DrawImpress, Context_Graphic): + { if(eState == SFX_ITEM_DISABLED) mpToolBoxIncDec->Disable(); else mpToolBoxIncDec->Enable(); - break; + const sal_Int64 nSize (maFontSizeBox.GetValue()); + switch(nSID) + { + case SID_GROW_FONT_SIZE: + mpToolBoxIncDec->EnableItem(TBI_INCREASE, bIsEnabled && nSize<960); + break; + + case SID_SHRINK_FONT_SIZE: + mpToolBoxIncDec->EnableItem(TBI_DECREASE, bIsEnabled && nSize>60); + break; + + default: + break; + } + } } - const sal_Int32 nSize (maFontSizeBox.GetValue()); - if (nSID == SID_GROW_FONT_SIZE) - mpToolBoxIncDec->EnableItem(TBI_INCREASE, bIsEnabled && nSize<960); - else - mpToolBoxIncDec->EnableItem(TBI_DECREASE, bIsEnabled && nSize>60); break; } } diff --git a/svx/source/sidebar/text/TextPropertyPanel.hxx b/svx/source/sidebar/text/TextPropertyPanel.hxx index 39dc4cf..54ce1a6 100644 --- a/svx/source/sidebar/text/TextPropertyPanel.hxx +++ b/svx/source/sidebar/text/TextPropertyPanel.hxx @@ -61,6 +61,8 @@ public: SfxBindings* pBindings); virtual void DataChanged (const DataChangedEvent& rEvent); + virtual void Resize (void); + ::sfx2::sidebar::ControllerItem& GetSpaceController(); long GetSelFontSize(); void SetSpacing(long nKern); diff --git a/svx/source/sidebar/text/TextPropertyPanel.src b/svx/source/sidebar/text/TextPropertyPanel.src index da264dd..9e33ed8 100644 --- a/svx/source/sidebar/text/TextPropertyPanel.src +++ b/svx/source/sidebar/text/TextPropertyPanel.src @@ -64,6 +64,7 @@ Control RID_SIDEBAR_TEXT_PANEL DropDown = TRUE; HelpID = HID_COMBO_FONT_NAME ; QuickHelpText [ en-US ] = "Font"; +// Command = ".uno:CharFontName"; }; MetricBox MB_SBFONT_FONTSIZE { @@ -74,6 +75,7 @@ Control RID_SIDEBAR_TEXT_PANEL DropDown = TRUE; HelpID = HID_METRIC_FONT_SIZE; QuickHelpText [ en-US ] = "Font Size"; +// Command = ".uno:FontHeight"; }; ToolBox TB_INCREASE_DECREASE @@ -90,11 +92,13 @@ Control RID_SIDEBAR_TEXT_PANEL { Identifier = TBI_INCREASE; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_INCREASE; + Command = ".uno:Grow"; }; ToolBoxItem { Identifier = TBI_DECREASE; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_DECREASE; + Command = ".uno:Shrink"; }; }; }; @@ -112,27 +116,32 @@ Control RID_SIDEBAR_TEXT_PANEL { Identifier = TBI_BOLD; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_BOLD; + Command = ".uno:Bold"; }; ToolBoxItem { Identifier = TBI_ITALIC; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_ITALIC; + Command = ".uno:Italic"; }; ToolBoxItem { Identifier = TBI_UNDERLINE; DropDown = TRUE ; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_UNDERLINE; + Command = ".uno:Underline"; }; ToolBoxItem { Identifier = TBI_STRIKEOUT; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_STRIKEOUT; + Command = ".uno:Strikeout"; }; ToolBoxItem { Identifier = TBI_SHADOWED; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SHADOWED; + Command = ".uno:Shadowed"; }; }; }; @@ -152,6 +161,7 @@ Control RID_SIDEBAR_TEXT_PANEL Identifier = TBI_FONTCOLOR ; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_FONT_COLOR; DropDown = TRUE ; + Command = ".uno:Color"; }; }; }; @@ -171,6 +181,7 @@ Control RID_SIDEBAR_TEXT_PANEL Identifier = TBI_HIGHLIGHT ; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_HIGHLIGHT_COLOR; DropDown = TRUE ; + Command = ".uno:CharacterBackgroundPattern"; }; }; }; @@ -189,11 +200,13 @@ Control RID_SIDEBAR_TEXT_PANEL { Identifier = TBI_SUPER_SW; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUPER_SW; + Command = ".uno:SuperScript"; }; ToolBoxItem { Identifier = TBI_SUB_SW; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUB_SW; + Command = ".uno:SubScript"; }; }; }; @@ -211,11 +224,13 @@ Control RID_SIDEBAR_TEXT_PANEL { Identifier = TBI_SUPER; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUPER; + Command = ".uno:SuperScript"; }; ToolBoxItem { Identifier = TBI_SUB; HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUB; + Command = ".uno:SubScript"; }; }; }; @@ -235,6 +250,7 @@ Control RID_SIDEBAR_TEXT_PANEL Identifier = TBI_SPACING; DropDown = TRUE ; HelpID = HID_TBI_SPACING; + Command = ".uno:Spacing"; }; }; }; commit 144eb666b72516ef78c15424087800dff1be5cfd Author: Armin Le Grand <a...@apache.org> Date: Fri May 10 08:48:11 2013 +0000 i110384 added better fat line rendering where possible diff --git a/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx index 0366e0f..3caae61 100644 --- a/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx +++ b/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx @@ -29,6 +29,15 @@ #include <vcl/outdev.hxx> ////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace drawinglayer { namespace primitive2d { + class PolyPolygonColorPrimitive2D; + class PolygonHairlinePrimitive2D; + class PolygonStrokePrimitive2D; +}} + +////////////////////////////////////////////////////////////////////////////// namespace drawinglayer { @@ -49,6 +58,11 @@ namespace drawinglayer */ virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); + // some helpers to try direct paints (shortcuts) + bool tryDrawPolyPolygonColorPrimitive2DDirect(const drawinglayer::primitive2d::PolyPolygonColorPrimitive2D& rSource, double fTransparency); + bool tryDrawPolygonHairlinePrimitive2DDirect(const drawinglayer::primitive2d::PolygonHairlinePrimitive2D& rSource, double fTransparency); + bool tryDrawPolygonStrokePrimitive2DDirect(const drawinglayer::primitive2d::PolygonStrokePrimitive2D& rSource, double fTransparency); + public: /// constructor/destructor VclPixelProcessor2D( diff --git a/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx index eae8247..bc8a11a 100644 --- a/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx +++ b/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx @@ -41,7 +41,6 @@ namespace drawinglayer { namespace primitive2d { class FillGraphicPrimitive2D; class PolyPolygonGradientPrimitive2D; class PolyPolygonGraphicPrimitive2D; - class PolyPolygonColorPrimitive2D; class MetafilePrimitive2D; class MaskPrimitive2D; class UnifiedTransparencePrimitive2D; @@ -98,7 +97,6 @@ namespace drawinglayer void RenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate); void RenderFillGraphicPrimitive2D(const primitive2d::FillGraphicPrimitive2D& rFillBitmapCandidate); void RenderPolyPolygonGraphicPrimitive2D(const primitive2d::PolyPolygonGraphicPrimitive2D& rPolygonCandidate); - void RenderPolyPolygonColorPrimitive2D(const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate); void RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive2D& rMaskCandidate); void RenderModifiedColorPrimitive2D(const primitive2d::ModifiedColorPrimitive2D& rModifiedCandidate); void RenderUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D& rTransCandidate); diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 914d45e..0dd8466 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -99,6 +99,141 @@ namespace drawinglayer mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); } + bool VclPixelProcessor2D::tryDrawPolyPolygonColorPrimitive2DDirect(const drawinglayer::primitive2d::PolyPolygonColorPrimitive2D& rSource, double fTransparency) + { + basegfx::B2DPolyPolygon aLocalPolyPolygon(rSource.getB2DPolyPolygon()); + + if(!aLocalPolyPolygon.count()) + { + // no geometry, done + return true; + } + + const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rSource.getBColor())); + + mpOutputDevice->SetFillColor(Color(aPolygonColor)); + mpOutputDevice->SetLineColor(); + aLocalPolyPolygon.transform(maCurrentTransformation); + mpOutputDevice->DrawTransparent( + aLocalPolyPolygon, + fTransparency); + + return true; + } + + bool VclPixelProcessor2D::tryDrawPolygonHairlinePrimitive2DDirect(const drawinglayer::primitive2d::PolygonHairlinePrimitive2D& rSource, double fTransparency) + { + basegfx::B2DPolygon aLocalPolygon(rSource.getB2DPolygon()); + + if(!aLocalPolygon.count()) + { + // no geometry, done + return true; + } + + const basegfx::BColor aLineColor(maBColorModifierStack.getModifiedColor(rSource.getBColor())); + + mpOutputDevice->SetFillColor(); + mpOutputDevice->SetLineColor(Color(aLineColor)); + aLocalPolygon.transform(maCurrentTransformation); + + // try drawing; if it did not work, use standard fallback + if(mpOutputDevice->TryDrawPolyLineDirect( + aLocalPolygon, + 0.0, + fTransparency)) + { + return true; + } + + return false; + } + + bool VclPixelProcessor2D::tryDrawPolygonStrokePrimitive2DDirect(const drawinglayer::primitive2d::PolygonStrokePrimitive2D& rSource, double fTransparency) + { + basegfx::B2DPolygon aLocalPolygon(rSource.getB2DPolygon()); + + if(!aLocalPolygon.count()) + { + // no geometry, done + return true; + } + + aLocalPolygon = basegfx::tools::simplifyCurveSegments(aLocalPolygon); + basegfx::B2DPolyPolygon aHairLinePolyPolygon; + + if(rSource.getStrokeAttribute().isDefault() || 0.0 == rSource.getStrokeAttribute().getFullDotDashLen()) + { + // no line dashing, just copy + aHairLinePolyPolygon.append(aLocalPolygon); + } + else + { + // apply LineStyle + basegfx::tools::applyLineDashing( + aLocalPolygon, + rSource.getStrokeAttribute().getDotDashArray(), + &aHairLinePolyPolygon, + 0, + rSource.getStrokeAttribute().getFullDotDashLen()); + } + + if(!aHairLinePolyPolygon.count()) + { + // no geometry, done + return true; + } + + const basegfx::BColor aLineColor( + maBColorModifierStack.getModifiedColor( + rSource.getLineAttribute().getColor())); + + mpOutputDevice->SetFillColor(); + mpOutputDevice->SetLineColor(Color(aLineColor)); + aHairLinePolyPolygon.transform(maCurrentTransformation); + + double fLineWidth(rSource.getLineAttribute().getWidth()); + + if(basegfx::fTools::more(fLineWidth, 0.0)) + { + basegfx::B2DVector aLineWidth(fLineWidth, 0.0); + + aLineWidth = maCurrentTransformation * aLineWidth; + fLineWidth = aLineWidth.getLength(); + } + + bool bHasPoints(false); + bool bTryWorked(false); + + for(sal_uInt32 a(0); a < aHairLinePolyPolygon.count(); a++) + { + const basegfx::B2DPolygon aSingle(aHairLinePolyPolygon.getB2DPolygon(a)); + + if(aSingle.count()) + { + bHasPoints = true; + + if(mpOutputDevice->TryDrawPolyLineDirect( + aSingle, + fLineWidth, + fTransparency, + rSource.getLineAttribute().getLineJoin(), + rSource.getLineAttribute().getLineCap())) + { + bTryWorked = true; + } + } + } + + if(!bTryWorked && !bHasPoints) + { + // no geometry despite try + bTryWorked = true; + } + + return bTryWorked; + } + void VclPixelProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) { switch(rCandidate.getPrimitive2DID()) @@ -176,8 +311,17 @@ namespace drawinglayer } case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : { + // try to use directly + const primitive2d::PolygonHairlinePrimitive2D& rPolygonHairlinePrimitive2D = static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate); + static bool bAllowed(true); + + if(bAllowed && tryDrawPolygonHairlinePrimitive2DDirect(rPolygonHairlinePrimitive2D, 0.0)) + { + break; + } + // direct draw of hairline - RenderPolygonHairlinePrimitive2D(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate), true); + RenderPolygonHairlinePrimitive2D(rPolygonHairlinePrimitive2D, true); break; } case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : @@ -247,8 +391,53 @@ namespace drawinglayer } case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : { - // direct draw of PolyPolygon with color - RenderPolyPolygonColorPrimitive2D(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); + // try to use directly + const primitive2d::PolyPolygonColorPrimitive2D& rPolyPolygonColorPrimitive2D = static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate); + basegfx::B2DPolyPolygon aLocalPolyPolygon; + static bool bAllowed(true); + + if(bAllowed && tryDrawPolyPolygonColorPrimitive2DDirect(rPolyPolygonColorPrimitive2D, 0.0)) + { + // okay, done. In this case no gaps should have to be repaired, too + } + else + { + // direct draw of PolyPolygon with color + const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolyPolygonColorPrimitive2D.getBColor())); + + mpOutputDevice->SetFillColor(Color(aPolygonColor)); + mpOutputDevice->SetLineColor(); + aLocalPolyPolygon = rPolyPolygonColorPrimitive2D.getB2DPolyPolygon(); + aLocalPolyPolygon.transform(maCurrentTransformation); + mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); + } + + // when AA is on and this filled polygons are the result of stroked line geometry, + // draw the geometry once extra as lines to avoid AA 'gaps' between partial polygons + // Caution: This is needed in both cases (!) + if(mnPolygonStrokePrimitive2D + && getOptionsDrawinglayer().IsAntiAliasing() + && (mpOutputDevice->GetAntialiasing() & ANTIALIASING_ENABLE_B2DDRAW)) + { + const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolyPolygonColorPrimitive2D.getBColor())); + sal_uInt32 nCount(aLocalPolyPolygon.count()); + + if(!nCount) + { + aLocalPolyPolygon = rPolyPolygonColorPrimitive2D.getB2DPolyPolygon(); + aLocalPolyPolygon.transform(maCurrentTransformation); + nCount = aLocalPolyPolygon.count(); + } + + mpOutputDevice->SetFillColor(); + mpOutputDevice->SetLineColor(Color(aPolygonColor)); + + for(sal_uInt32 a(0); a < nCount; a++) + { + mpOutputDevice->DrawPolyLine(aLocalPolyPolygon.getB2DPolygon(a), 0.0); + } + } + break; } case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : @@ -320,25 +509,41 @@ namespace drawinglayer // single transparent PolyPolygon identified, use directly const primitive2d::PolyPolygonColorPrimitive2D* pPoPoColor = static_cast< const primitive2d::PolyPolygonColorPrimitive2D* >(pBasePrimitive); OSL_ENSURE(pPoPoColor, "OOps, PrimitiveID and PrimitiveType do not match (!)"); - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(pPoPoColor->getBColor())); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - basegfx::B2DPolyPolygon aLocalPolyPolygon(pPoPoColor->getB2DPolyPolygon()); - aLocalPolyPolygon.transform(maCurrentTransformation); - - mpOutputDevice->DrawTransparent(aLocalPolyPolygon, rUniTransparenceCandidate.getTransparence()); - bDrawTransparentUsed = true; + bDrawTransparentUsed = tryDrawPolyPolygonColorPrimitive2DDirect(*pPoPoColor, rUniTransparenceCandidate.getTransparence()); + break; + } + case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D: + { + // single transparent PolygonHairlinePrimitive2D identified, use directly + const primitive2d::PolygonHairlinePrimitive2D* pPoHair = static_cast< const primitive2d::PolygonHairlinePrimitive2D* >(pBasePrimitive); + OSL_ENSURE(pPoHair, "OOps, PrimitiveID and PrimitiveType do not match (!)"); + + // do no tallow by default - problem is that self-overlapping parts of this geometry will + // not be in a all-same transparency but will already alpha-cover themselves with blending. + // This is not what the UnifiedTransparencePrimitive2D defines: It requires all it's + // content to be uniformely transparent. + // For hairline the effect is pretty minimal, but still not correct. + static bool bAllowed(false); + + bDrawTransparentUsed = bAllowed && tryDrawPolygonHairlinePrimitive2DDirect(*pPoHair, rUniTransparenceCandidate.getTransparence()); + break; + } + case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D: + { + // single transparent PolygonStrokePrimitive2D identified, use directly + const primitive2d::PolygonStrokePrimitive2D* pPoStroke = static_cast< const primitive2d::PolygonStrokePrimitive2D* >(pBasePrimitive); + OSL_ENSURE(pPoStroke, "OOps, PrimitiveID and PrimitiveType do not match (!)"); + + // do no tallow by default - problem is that self-overlapping parts of this geometry will + // not be in a all-same transparency but will already alpha-cover themselves with blending. + // This is not what the UnifiedTransparencePrimitive2D defines: It requires all it's + // content to be uniformely transparent. + // To check, acitvate and draw a wide transparent self-crossing line/curve + static bool bAllowed(false); + + bDrawTransparentUsed = bAllowed && tryDrawPolygonStrokePrimitive2DDirect(*pPoStroke, rUniTransparenceCandidate.getTransparence()); break; } - // #i# need to wait for #i101378# which is in CWS vcl112 to directly paint transparent hairlines - //case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D: - //{ - // // single transparent PolygonHairlinePrimitive2D identified, use directly - // const primitive2d::PolygonHairlinePrimitive2D* pPoHair = static_cast< const primitive2d::PolygonHairlinePrimitive2D* >(pBasePrimitive); - // OSL_ENSURE(pPoHair, "OOps, PrimitiveID and PrimitiveType do not match (!)"); - // break; - //} } } } @@ -438,6 +643,14 @@ namespace drawinglayer } case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D: { + // try to use directly + const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokePrimitive2D = static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate); + + if(tryDrawPolygonStrokePrimitive2DDirect(rPolygonStrokePrimitive2D, 0.0)) + { + break; + } + // the stroke primitive may be decomposed to filled polygons. To keep // evtl. set DrawModes aka DRAWMODE_BLACKLINE, DRAWMODE_GRAYLINE, // DRAWMODE_GHOSTEDLINE, DRAWMODE_WHITELINE or DRAWMODE_SETTINGSLINE @@ -466,9 +679,7 @@ namespace drawinglayer // as filled polygons is geometrically corret but looks wrong since polygon filling avoids // the right and bottom pixels. The used method evaluates that and takes the correct action, // including calling recursively with decomposition if line is wide enough - const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokePrimitive = static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate); - - RenderPolygonStrokePrimitive2D(rPolygonStrokePrimitive); + RenderPolygonStrokePrimitive2D(rPolygonStrokePrimitive2D); } // restore DrawMode diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx index a525d30..ea51d51 100644 --- a/drawinglayer/source/processor2d/vclprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx @@ -756,86 +756,6 @@ namespace drawinglayer } } - // direct draw of PolyPolygon with color - void VclProcessor2D::RenderPolyPolygonColorPrimitive2D(const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate) - { - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - aLocalPolyPolygon.transform(maCurrentTransformation); - - static bool bCheckTrapezoidDecomposition(false); - static bool bShowOutlinesThere(false); - if(bCheckTrapezoidDecomposition) - { - // clip against discrete ViewPort - const basegfx::B2DRange& rDiscreteViewport = getViewInformation2D().getDiscreteViewport(); - aLocalPolyPolygon = basegfx::tools::clipPolyPolygonOnRange( - aLocalPolyPolygon, rDiscreteViewport, true, false); - - if(aLocalPolyPolygon.count()) - { - // subdivide - aLocalPolyPolygon = basegfx::tools::adaptiveSubdivideByDistance( - aLocalPolyPolygon, 0.5); - - // trapezoidize - basegfx::B2DTrapezoidVector aB2DTrapezoidVector; - basegfx::tools::trapezoidSubdivide(aB2DTrapezoidVector, aLocalPolyPolygon); - - const sal_uInt32 nCount(aB2DTrapezoidVector.size()); - - if(nCount) - { - basegfx::BColor aInvPolygonColor(aPolygonColor); - aInvPolygonColor.invert(); - - for(sal_uInt32 a(0); a < nCount; a++) - { - const basegfx::B2DPolygon aTempPolygon(aB2DTrapezoidVector[a].getB2DPolygon()); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - } - - mpOutputDevice->DrawPolygon(aTempPolygon); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aInvPolygonColor)); - mpOutputDevice->DrawPolyLine(aTempPolygon, 0.0); - } - } - } - } - } - else - { - mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); - - if(mnPolygonStrokePrimitive2D - && getOptionsDrawinglayer().IsAntiAliasing() - && (mpOutputDevice->GetAntialiasing() & ANTIALIASING_ENABLE_B2DDRAW)) - { - // when AA is on and this filled polygons are the result of stroked line geometry, - // draw the geometry once extra as lines to avoid AA 'gaps' between partial polygons - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aPolygonColor)); - const sal_uInt32 nCount(aLocalPolyPolygon.count()); - - for(sal_uInt32 a(0); a < nCount; a++) - { - mpOutputDevice->DrawPolyLine(aLocalPolyPolygon.getB2DPolygon(a), 0.0); - } - } - } - } - // mask group. Force output to VDev and create mask from given mask void VclProcessor2D::RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive2D& rMaskCandidate) { diff --git a/vcl/inc/vcl/outdev.hxx b/vcl/inc/vcl/outdev.hxx index 8161fc6..7c413fe 100644 --- a/vcl/inc/vcl/outdev.hxx +++ b/vcl/inc/vcl/outdev.hxx @@ -562,6 +562,7 @@ public: SAL_DLLPRIVATE bool ImpTryDrawPolyLineDirect( const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth = 0.0, + double fTransparency = 0.0, basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE, com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT); @@ -699,6 +700,12 @@ public: double fLineWidth = 0.0, basegfx::B2DLineJoin = basegfx::B2DLINEJOIN_ROUND, com::sun::star::drawing::LineCap = com::sun::star::drawing::LineCap_BUTT); + bool TryDrawPolyLineDirect( + const basegfx::B2DPolygon& rB2DPolygon, + double fLineWidth = 0.0, + double fTransparency = 0.0, + basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE, + com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT); /** Render the given polygon as a line stroke diff --git a/vcl/source/gdi/outdev.cxx b/vcl/source/gdi/outdev.cxx index 4e88430..3849c99 100644 --- a/vcl/source/gdi/outdev.cxx +++ b/vcl/source/gdi/outdev.cxx @@ -2260,6 +2260,7 @@ void OutputDevice::ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPo bool OutputDevice::ImpTryDrawPolyLineDirect( const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth, + double fTransparency, basegfx::B2DLineJoin eLineJoin, com::sun::star::drawing::LineCap eLineCap) { @@ -2289,13 +2290,64 @@ bool OutputDevice::ImpTryDrawPolyLineDirect( // draw the polyline return mpGraphics->DrawPolyLine( aB2DPolygon, - 0.0, + fTransparency, aB2DLineWidth, eLineJoin, eLineCap, this); } +bool OutputDevice::TryDrawPolyLineDirect( + const basegfx::B2DPolygon& rB2DPolygon, + double fLineWidth, + double fTransparency, + basegfx::B2DLineJoin eLineJoin, + com::sun::star::drawing::LineCap eLineCap) +{ + // AW: Do NOT paint empty PolyPolygons + if(!rB2DPolygon.count()) + return true; + + // we need a graphics + if( !mpGraphics ) + if( !ImplGetGraphics() ) + return false; + + if( mbInitClipRegion ) + ImplInitClipRegion(); + + if( mbOutputClipped ) + return true; + + if( mbInitLineColor ) + ImplInitLineColor(); + + const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) + && mpGraphics->supportsOperation(OutDevSupport_B2DDraw) + && ROP_OVERPAINT == GetRasterOp() + && IsLineColor()); + + if(bTryAA) + { + if(ImpTryDrawPolyLineDirect(rB2DPolygon, fLineWidth, fTransparency, eLineJoin, eLineCap)) + { + // worked, add metafile action (if recorded) and return true + if( mpMetaFile ) + { + LineInfo aLineInfo; + if( fLineWidth != 0.0 ) + aLineInfo.SetWidth( static_cast<long>(fLineWidth+0.5) ); + const Polygon aToolsPolygon( rB2DPolygon ); + mpMetaFile->AddAction( new MetaPolyLineAction( aToolsPolygon, aLineInfo ) ); + } + + return true; + } + } + + return false; +} + void OutputDevice::DrawPolyLine( const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth, @@ -2304,8 +2356,6 @@ void OutputDevice::DrawPolyLine( { DBG_TRACE( "OutputDevice::DrawPolyLine(B2D&)" ); DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice ); - (void)eLineJoin; // ATM used in UNX, but not in WNT, access it for warning-free - (void)eLineCap; #if 0 // MetaB2DPolyLineAction is not implemented yet: // according to AW adding it is very dangerous since there is a lot @@ -2347,7 +2397,7 @@ void OutputDevice::DrawPolyLine( && IsLineColor()); // use b2dpolygon drawing if possible - if(bTryAA && ImpTryDrawPolyLineDirect(rB2DPolygon, fLineWidth, eLineJoin, eLineCap)) + if(bTryAA && ImpTryDrawPolyLineDirect(rB2DPolygon, fLineWidth, 0.0, eLineJoin, eLineCap)) { return; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits