diff options
-rw-r--r-- | dbaccess/source/ui/control/dbtreelistbox.cxx | 2 | ||||
-rw-r--r-- | framework/Library_fwk.mk | 1 | ||||
-rw-r--r-- | framework/inc/classes/imagewrapper.hxx | 58 | ||||
-rw-r--r-- | framework/source/fwe/classes/imagewrapper.cxx | 86 | ||||
-rw-r--r-- | framework/source/fwe/helper/actiontriggerhelper.cxx | 67 | ||||
-rw-r--r-- | include/framework/actiontriggerhelper.hxx | 11 | ||||
-rw-r--r-- | sfx2/source/view/viewsh.cxx | 10 | ||||
-rw-r--r-- | solenv/clang-format/excludelist | 2 |
8 files changed, 39 insertions, 198 deletions
diff --git a/dbaccess/source/ui/control/dbtreelistbox.cxx b/dbaccess/source/ui/control/dbtreelistbox.cxx index aab0f5efcc9f..efb5a6871668 100644 --- a/dbaccess/source/ui/control/dbtreelistbox.cxx +++ b/dbaccess/source/ui/control/dbtreelistbox.cxx @@ -448,7 +448,7 @@ IMPL_LINK(TreeListBox, CommandHdl, const CommandEvent&, rCEvt, bool) { xPopupMenu->clear(); ::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer( - pContextMenu, aEvent.ActionTriggerContainer ); + xPopupMenu, aEvent.ActionTriggerContainer ); aEvent.ActionTriggerContainer.clear(); } } diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk index fa75122a8729..07ffd62770b8 100644 --- a/framework/Library_fwk.mk +++ b/framework/Library_fwk.mk @@ -108,7 +108,6 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\ framework/source/fwe/classes/addonsoptions \ framework/source/fwe/classes/framelistanalyzer \ framework/source/fwe/classes/fwkresid \ - framework/source/fwe/classes/imagewrapper \ framework/source/fwe/classes/rootactiontriggercontainer \ framework/source/fwe/classes/sfxhelperfunctions \ framework/source/fwe/dispatch/interaction \ diff --git a/framework/inc/classes/imagewrapper.hxx b/framework/inc/classes/imagewrapper.hxx deleted file mode 100644 index eea43c4e0394..000000000000 --- a/framework/inc/classes/imagewrapper.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#pragma once - -#include <com/sun/star/awt/XBitmap.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <cppuhelper/implbase.hxx> -#include <vcl/image.hxx> - -namespace framework -{ - -class ImageWrapper final : public ::cppu::WeakImplHelper< css::awt::XBitmap, - css::lang::XUnoTunnel > -{ - public: - ImageWrapper( const Image& aImage ); - virtual ~ImageWrapper() override; - - const Image& GetImage() const - { - return m_aImage; - } - - static css::uno::Sequence<sal_Int8> const& getUnoTunnelId(); - - // XBitmap - virtual css::awt::Size SAL_CALL getSize() override; - virtual css::uno::Sequence< sal_Int8 > SAL_CALL getDIB() override; - virtual css::uno::Sequence< sal_Int8 > SAL_CALL getMaskDIB() override; - - // XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - - private: - Image m_aImage; -}; - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/classes/imagewrapper.cxx b/framework/source/fwe/classes/imagewrapper.cxx deleted file mode 100644 index 978ef77a474f..000000000000 --- a/framework/source/fwe/classes/imagewrapper.cxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include <classes/imagewrapper.hxx> -#include <comphelper/servicehelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/BitmapTools.hxx> -#include <tools/stream.hxx> -#include <vcl/dibtools.hxx> - -using namespace com::sun::star::lang; -using namespace com::sun::star::uno; - -namespace framework -{ - -static Sequence< sal_Int8 > const & impl_getStaticIdentifier() -{ - static const sal_uInt8 pGUID[16] = { 0x46, 0xAD, 0x69, 0xFB, 0xA7, 0xBE, 0x44, 0x83, 0xB2, 0xA7, 0xB3, 0xEC, 0x59, 0x4A, 0xB7, 0x00 }; - static css::uno::Sequence< sal_Int8 > seqID(reinterpret_cast<const sal_Int8*>(pGUID), 16); - return seqID; -} - -ImageWrapper::ImageWrapper( const Image& aImage ) : m_aImage( aImage ) -{ -} - -ImageWrapper::~ImageWrapper() -{ -} - -Sequence<sal_Int8> const& ImageWrapper::getUnoTunnelId() { return impl_getStaticIdentifier(); } - -// XBitmap -css::awt::Size SAL_CALL ImageWrapper::getSize() -{ - SolarMutexGuard aGuard; - - BitmapEx aBitmapEx( m_aImage.GetBitmapEx() ); - Size aBitmapSize( aBitmapEx.GetSizePixel() ); - - return css::awt::Size( aBitmapSize.Width(), aBitmapSize.Height() ); -} - -Sequence< sal_Int8 > SAL_CALL ImageWrapper::getDIB() -{ - SolarMutexGuard aGuard; - - SvMemoryStream aMem; - WriteDIB(m_aImage.GetBitmapEx().GetBitmap(), aMem, false, true); - return Sequence< sal_Int8 >( static_cast<sal_Int8 const *>(aMem.GetData()), aMem.Tell() ); -} - -Sequence< sal_Int8 > SAL_CALL ImageWrapper::getMaskDIB() -{ - SolarMutexGuard aGuard; - - return vcl::bitmap::GetMaskDIB(m_aImage.GetBitmapEx()); -} - -// XUnoTunnel -sal_Int64 SAL_CALL ImageWrapper::getSomething( const Sequence< sal_Int8 >& aIdentifier ) -{ - return comphelper::getSomethingImpl(aIdentifier, this); -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/fwe/helper/actiontriggerhelper.cxx b/framework/source/fwe/helper/actiontriggerhelper.cxx index d96e44cb9bae..60917cccbfd0 100644 --- a/framework/source/fwe/helper/actiontriggerhelper.cxx +++ b/framework/source/fwe/helper/actiontriggerhelper.cxx @@ -20,16 +20,19 @@ #include <framework/actiontriggerhelper.hxx> #include <classes/actiontriggerseparatorpropertyset.hxx> #include <classes/rootactiontriggercontainer.hxx> -#include <classes/imagewrapper.hxx> #include <framework/addonsoptions.hxx> +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/awt/XPopupMenu.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/awt/XBitmap.hpp> -#include <vcl/svapp.hxx> +#include <toolkit/awt/vclxmenu.hxx> #include <tools/stream.hxx> #include <comphelper/servicehelper.hxx> #include <cppuhelper/weak.hxx> +#include <vcl/image.hxx> +#include <vcl/svapp.hxx> +#include <vcl/graph.hxx> #include <vcl/dibtools.hxx> const sal_uInt16 START_ITEMID = 1000; @@ -95,7 +98,8 @@ static void GetMenuItemAttributes( const Reference< XPropertySet >& xActionTrigg } } -static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Reference< XIndexContainer >& xActionTriggerContainer ) +static void InsertSubMenuItems(const Reference<XPopupMenu>& rSubMenu, sal_uInt16& nItemId, + const Reference<XIndexContainer>& xActionTriggerContainer) { if ( !xActionTriggerContainer.is() ) return; @@ -114,7 +118,7 @@ static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Refer { // Separator SolarMutexGuard aGuard; - pSubMenu->InsertSeparator(); + rSubMenu->insertSeparator(i); } else { @@ -139,12 +143,12 @@ static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Refer // got a special url during conversion from menu=>actiontriggercontainer. // Now we have to extract this special url and set the correct item id!!! nNewItemId = static_cast<sal_uInt16>(aCommandURL.copy( nIndex+aSlotURL.getLength() ).toInt32()); - pSubMenu->InsertItem( nNewItemId, aLabel ); + rSubMenu->insertItem(nNewItemId, aLabel, 0, i); } else { - pSubMenu->InsertItem( nNewItemId, aLabel ); - pSubMenu->SetItemCommand( nNewItemId, aCommandURL ); + rSubMenu->insertItem(nNewItemId, aLabel, 0, i); + rSubMenu->setCommand(nNewItemId, aCommandURL); } // handle bitmap @@ -152,16 +156,11 @@ static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Refer { bool bImageSet = false; - Reference< XUnoTunnel > xUnoTunnel( xBitmap, UNO_QUERY ); - // Try to get implementation pointer through XUnoTunnel - if (auto pImageWrapper = comphelper::getFromUnoTunnel<ImageWrapper>(xUnoTunnel)) + Reference<css::graphic::XGraphic> xGraphic(xBitmap, UNO_QUERY); + if (xGraphic.is()) { - // This is our own optimized implementation of menu images! - const Image& aMenuImage = pImageWrapper->GetImage(); - - if ( !!aMenuImage ) - pSubMenu->SetItemImage( nNewItemId, aMenuImage ); - + // we can take the optimized route if XGraphic is supported + rSubMenu->setItemImage(nNewItemId, xGraphic, false); bImageSet = true; } @@ -169,7 +168,6 @@ static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Refer { // This is an unknown implementation of a XBitmap interface. We have to // use a more time consuming way to build an Image! - Image aImage; BitmapEx aBitmap; Sequence< sal_Int8 > aDIBSeq; @@ -185,30 +183,28 @@ static void InsertSubMenuItems( Menu* pSubMenu, sal_uInt16& nItemId, const Refer Bitmap aMaskBitmap; SvMemoryStream aMem( const_cast<sal_Int8 *>(aDIBSeq.getConstArray()), aDIBSeq.getLength(), StreamMode::READ ); ReadDIB(aMaskBitmap, aMem, true); - aImage = Image(BitmapEx(aBitmap.GetBitmap(), aMaskBitmap)); + aBitmap = BitmapEx(aBitmap.GetBitmap(), aMaskBitmap); } - else - aImage = Image( aBitmap ); - if ( !!aImage ) - pSubMenu->SetItemImage( nNewItemId, aImage ); + if (!aBitmap.IsEmpty()) + rSubMenu->setItemImage(nNewItemId, Graphic(aBitmap).GetXGraphic(), false); } } else { // Support add-on images for context menu interceptors - Image aImage(aAddonOptions.GetImageFromURL(aCommandURL, false, true)); - if ( !!aImage ) - pSubMenu->SetItemImage( nNewItemId, aImage ); + BitmapEx aBitmap(aAddonOptions.GetImageFromURL(aCommandURL, false, true)); + if (!aBitmap.IsEmpty()) + rSubMenu->setItemImage(nNewItemId, Graphic(aBitmap).GetXGraphic(), false); } if ( xSubContainer.is() ) { - VclPtr<PopupMenu> pNewSubMenu = VclPtr<PopupMenu>::Create(); + rtl::Reference xNewSubMenu(new VCLXPopupMenu); // Sub menu (recursive call CreateSubMenu ) - InsertSubMenuItems( pNewSubMenu, nItemId, xSubContainer ); - pSubMenu->SetPopupMenu( nNewItemId, pNewSubMenu ); + InsertSubMenuItems(xNewSubMenu, nItemId, xSubContainer); + rSubMenu->setPopupMenu(nNewItemId, xNewSubMenu); } } } @@ -264,8 +260,9 @@ static Reference< XPropertySet > CreateActionTrigger( sal_uInt16 nItemId, const Image aImage = pMenu->GetItemImage( nItemId ); if ( !!aImage ) { - // We use our own optimized XBitmap implementation - Reference< XBitmap > xBitmap = new ImageWrapper( aImage ); + Reference<css::graphic::XGraphic> xGraphic = Graphic(aImage.GetBitmapEx()).GetXGraphic(); + Reference<XBitmap> xBitmap(xGraphic, UNO_QUERY); + assert(xGraphic.is() == xBitmap.is()); a <<= xBitmap; xPropSet->setPropertyValue("Image", a ); } @@ -353,13 +350,13 @@ static void FillActionTriggerContainerWithMenu( const Menu* pMenu, Reference< XI } void ActionTriggerHelper::CreateMenuFromActionTriggerContainer( - Menu* pNewMenu, - const Reference< XIndexContainer >& rActionTriggerContainer ) + const Reference<XPopupMenu>& rNewMenu, + const Reference<XIndexContainer>& rActionTriggerContainer) { sal_uInt16 nItemId = START_ITEMID; if ( rActionTriggerContainer.is() ) - InsertSubMenuItems( pNewMenu, nItemId, rActionTriggerContainer ); + InsertSubMenuItems(rNewMenu, nItemId, rActionTriggerContainer); } void ActionTriggerHelper::FillActionTriggerContainerFromMenu( diff --git a/include/framework/actiontriggerhelper.hxx b/include/framework/actiontriggerhelper.hxx index ceccea40433b..227535648950 100644 --- a/include/framework/actiontriggerhelper.hxx +++ b/include/framework/actiontriggerhelper.hxx @@ -17,16 +17,15 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_FRAMEWORK_ACTIONTRIGGERHELPER_HXX -#define INCLUDED_FRAMEWORK_ACTIONTRIGGERHELPER_HXX +#pragma once #include <framework/fwkdllapi.h> #include <com/sun/star/uno/Reference.hxx> +namespace com::sun::star::awt { class XPopupMenu; } namespace com::sun::star::container { class XIndexContainer; } class Menu; - namespace framework { class FWK_DLLPUBLIC ActionTriggerHelper @@ -38,8 +37,8 @@ namespace framework // @param rActionTriggerContainer = must be an instance of service "com.sun.star.ui.ActionTriggerContainer" static void CreateMenuFromActionTriggerContainer( - Menu* pNewMenu, - const css::uno::Reference< css::container::XIndexContainer >& rActionTriggerContainer ); + const css::uno::Reference<css::awt::XPopupMenu>& rNewMenu, + const css::uno::Reference<css::container::XIndexContainer>& rActionTriggerContainer); // Creates a "css::ui::ActionTriggerContainer" with the structure of the menu // provided as a parameter. The implementation class stores the menu pointer @@ -64,6 +63,4 @@ namespace framework }; } -#endif // INCLUDED_FRAMEWORK_ACTIONTRIGGERHELPER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 860310b73667..03cd1fe842d0 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -1911,13 +1911,7 @@ bool SfxViewShell::TryContextMenuInterception(const Menu& rIn, const OUString& r // container was modified, create a new menu out of it css::uno::Reference<uno::XComponentContext> xContext(::comphelper::getProcessComponentContext(), css::uno::UNO_SET_THROW); rOut.set(xContext->getServiceManager()->createInstanceWithContext("com.sun.star.awt.PopupMenu", xContext), css::uno::UNO_QUERY_THROW); - - VCLXMenu* pAwtMenu = comphelper::getFromUnoTunnel<VCLXMenu>(rOut); - assert(pAwtMenu); - PopupMenu* pVCLMenu = static_cast<PopupMenu*>(pAwtMenu->GetMenu()); - assert(pVCLMenu); - - ::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(pVCLMenu, aEvent.ActionTriggerContainer); + ::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(rOut, aEvent.ActionTriggerContainer); } return true; @@ -1984,7 +1978,7 @@ bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt if ( bModified ) { rPopupMenu->clear(); - ::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(pVCLMenu, aEvent.ActionTriggerContainer); + ::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(rPopupMenu, aEvent.ActionTriggerContainer); } return true; diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist index 0c2f856a2187..a6be56e95bfa 100644 --- a/solenv/clang-format/excludelist +++ b/solenv/clang-format/excludelist @@ -4267,7 +4267,6 @@ framework/inc/classes/actiontriggercontainer.hxx framework/inc/classes/actiontriggerpropertyset.hxx framework/inc/classes/actiontriggerseparatorpropertyset.hxx framework/inc/classes/converter.hxx -framework/inc/classes/imagewrapper.hxx framework/inc/classes/protocolhandlercache.hxx framework/inc/classes/resource.hxx framework/inc/classes/rootactiontriggercontainer.hxx @@ -4404,7 +4403,6 @@ framework/source/fwe/classes/actiontriggerseparatorpropertyset.cxx framework/source/fwe/classes/addonmenu.cxx framework/source/fwe/classes/addonsoptions.cxx framework/source/fwe/classes/framelistanalyzer.cxx -framework/source/fwe/classes/imagewrapper.cxx framework/source/fwe/classes/rootactiontriggercontainer.cxx framework/source/fwe/classes/sfxhelperfunctions.cxx framework/source/fwe/dispatch/interaction.cxx |