vcl: separate ImplImageTree - ImageTree singleton and public iface

ImplImageTree was used outside of VCL which is not consistent with
the name and the header also contains a lot of implementation
detail. This separates the implementation to ImplImageTree and
the public interface and singleton to ImageTree only.

Change-Id: I3a26444f0f6971a6b1d83472e9cef19c93192d3e
Reviewed-on: https://gerrit.libreoffice.org/32134
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
This commit is contained in:
Tomaž Vajngerl
2016-12-18 14:31:14 +01:00
committed by Tomaž Vajngerl
parent f9a97a5d5a
commit bf5f6df9e4
22 changed files with 183 additions and 97 deletions

View File

@@ -177,8 +177,8 @@ public:
|| name == "g_pHyphIter" // SwEditShell::HyphEnd()
|| name == "pFieldEditEngine" // ScGlobal::Clear()
|| name == "xDrawClipDocShellRef" // ScGlobal::Clear()
|| name == "s_ImplImageTree"
// ImplImageTree::get(), ImplImageTree::shutDown()
|| name == "s_ImageTree"
// ImageTree::get(), ImageTree::shutDown()
|| name == "s_pMouseFrame"
// vcl/osx/salframeview.mm, mouseEntered/Exited, not owning
|| name == "pCurrentMenuBar"

View File

@@ -13,7 +13,7 @@
#include <vcl/bitmapex.hxx>
#include <tools/stream.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
namespace vcl {
namespace bitmap {

78
include/vcl/ImageTree.hxx Normal file
View File

@@ -0,0 +1,78 @@
/* -*- 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 .
*/
#ifndef INCLUDED_INCLUDE_VCL_IMAGETREE_HXX
#define INCLUDED_INCLUDE_VCL_IMAGETREE_HXX
#include <sal/config.h>
#include <vcl/dllapi.h>
#include <vcl/bitmapex.hxx>
enum class ImageLoadFlags : sal_uInt16
{
NONE = 0,
IgnoreScalingFactor = 1,
IgnoreDarkTheme = 2,
};
namespace o3tl {
template<> struct typed_flags<ImageLoadFlags>: is_typed_flags<ImageLoadFlags, 0x3> {};
}
namespace com { namespace sun { namespace star { namespace container {
class XNameAccess;
}}}}
class ImplImageTree;
class ImageTree
{
private:
std::unique_ptr<ImplImageTree> mpImplImageTree;
public:
ImageTree();
VCL_DLLPUBLIC static ImageTree & get();
VCL_DLLPUBLIC OUString getImageUrl(
OUString const & name, OUString const & style, OUString const & lang);
bool loadImage(
OUString const & name, OUString const & style,
BitmapEx & bitmap, bool localized,
const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
bool loadDefaultImage(
OUString const & style,
BitmapEx& bitmap,
const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
VCL_DLLPUBLIC css::uno::Reference<css::container::XNameAccess> getNameAccess();
/** a crude form of life cycle control (called from DeInitVCL; otherwise,
* if the ImplImageTree singleton were destroyed during exit that would
* be too late for the destructors of the bitmaps in maIconCache)*/
void shutdown();
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -20,13 +20,13 @@
#include <osl/mutex.hxx>
#include <rtl/uri.hxx>
#include <rtl/ustrbuf.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/svapp.hxx>
#include <ucbhelper/content.hxx>
// A LO-private ("implementation detail") UCP used to access images from help
// content, with theme fallback and localization support as provided by VCL's
// ImplImageTree.
// ImageTree.
//
// The URL scheme is
//
@@ -133,7 +133,7 @@ private:
OUString newUrl;
{
SolarMutexGuard g;
newUrl = ImplImageTree::get().getImageUrl(decPath, auth, lang);
newUrl = ImageTree::get().getImageUrl(decPath, auth, lang);
}
ucbhelper::Content content;
return

View File

@@ -310,6 +310,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
vcl/source/image/Image \
vcl/source/image/ImageArrayData \
vcl/source/image/ImageList \
vcl/source/image/ImageTree \
vcl/source/image/ImageRepository \
vcl/source/image/ImplImage \
vcl/source/image/ImplImageList \

View File

@@ -41,7 +41,6 @@
#include <basegfx/numeric/ftools.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <vcldemo-debug.hxx>
#include <rtl/math.hxx>

View File

@@ -17,8 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_INCLUDE_VCL_IMPLIMAGETREE_HXX
#define INCLUDED_INCLUDE_VCL_IMPLIMAGETREE_HXX
#ifndef INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
#define INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
#include <sal/config.h>
@@ -32,30 +32,19 @@
#include <vcl/bitmapex.hxx>
#include <vcl/dllapi.h>
#include <i18nlangtag/languagetag.hxx>
#include <vcl/ImageTree.hxx>
namespace com { namespace sun { namespace star { namespace container {
class XNameAccess;
} } } }
}}}}
enum class ImageLoadFlags : sal_uInt16
class ImplImageTree
{
NONE = 0,
IgnoreScalingFactor = 1,
IgnoreDarkTheme = 2,
};
namespace o3tl {
template<> struct typed_flags<ImageLoadFlags>: is_typed_flags<ImageLoadFlags, 0x3> {};
}
class ImplImageTree {
public:
VCL_DLLPUBLIC static ImplImageTree & get();
ImplImageTree();
~ImplImageTree();
VCL_DLLPUBLIC OUString getImageUrl(
OUString getImageUrl(
OUString const & name, OUString const & style, OUString const & lang);
bool loadImage(
@@ -71,15 +60,11 @@ public:
/** a crude form of life cycle control (called from DeInitVCL; otherwise,
* if the ImplImageTree singleton were destroyed during exit that would
* be too late for the destructors of the bitmaps in maIconCache)*/
void shutDown();
void shutdown();
css::uno::Reference< css::container::XNameAccess > getNameAccess();
private:
ImplImageTree();
~ImplImageTree();
ImplImageTree(const ImplImageTree&) = delete;
ImplImageTree& operator=(const ImplImageTree&) = delete;

View File

@@ -150,7 +150,7 @@
#include <vcl/help.hxx>
#include <vcl/i18nhelp.hxx>
#include <vcl/image.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/keycod.hxx>
#include <vcl/keycodes.hxx>
#include <vcl/layout.hxx>

View File

@@ -1,25 +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/.
*/
#ifndef INCLUDED_VCL_INC_VCLDEMO_DEBUG_HXX
#define INCLUDED_VCL_INC_VCLDEMO_DEBUG_HXX
#include <sal/config.h>
#include <com/sun/star/uno/Sequence.hxx>
#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <vcl/dllapi.h>
// For vcldemo / debugging
VCL_DLLPUBLIC css::uno::Sequence< OUString > ImageTree_getAllImageNames();
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -24,7 +24,7 @@
#include <sal/main.h>
#include <vcl/commandevent.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/svapp.hxx>
#include <vcl/window.hxx>
@@ -374,8 +374,8 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
(void)app;
std::vector<OUString> aFile;
aFile.push_back( GetOUString( pFile ) );
const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::Type::Print, aFile);
AquaSalInstance::aAppEventList.push_back( pAppEvent );
const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::Type::Print, aFile);
AquaSalInstance::aAppEventList.push_back( pAppEvent );
return YES;
}
-(NSApplicationPrintReply)application: (NSApplication *) app printFiles:(NSArray *)files withSettings: (NSDictionary *)printSettings showPrintPanels:(BOOL)bShowPrintPanels
@@ -393,8 +393,8 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
{
aFileList.push_back( GetOUString( pFile ) );
}
const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::Type::Print, aFileList);
AquaSalInstance::aAppEventList.push_back( pAppEvent );
const ApplicationEvent* pAppEvent = new ApplicationEvent(ApplicationEvent::Type::Print, aFileList);
AquaSalInstance::aAppEventList.push_back( pAppEvent );
// we have no back channel here, we have to assume success
// correct handling would be NSPrintingReplyLater and then send [app replyToOpenOrPrint]
return NSPrintingSuccess;
@@ -425,7 +425,7 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
{
ApplicationEvent aEv(ApplicationEvent::Type::PrivateDoShutdown);
GetpApp()->AppEvent( aEv );
ImplImageTree::get().shutDown();
ImageTree::get().shutdown();
// DeInitVCL should be called in ImplSVMain - unless someon _exits first which
// can occur in Desktop::doShutdown for example
}
@@ -440,8 +440,8 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
SolarMutexGuard aGuard;
const SalData* pSalData = GetSalData();
if( !pSalData->maFrames.empty() )
pSalData->maFrames.front()->CallCallback( SalEvent::SettingsChanged, nullptr );
if( !pSalData->maFrames.empty() )
pSalData->maFrames.front()->CallCallback( SalEvent::SettingsChanged, nullptr );
}
-(void)screenParametersChanged: (NSNotification*) pNotification

View File

@@ -42,7 +42,7 @@
#include <vcl/event.hxx>
#include <vcl/settings.hxx>
#include <vcl/i18nhelp.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/configsettings.hxx>
#include <vcl/gradient.hxx>
#include <vcl/outdev.hxx>

View File

@@ -38,7 +38,7 @@
#include <vcl/cvtgrf.hxx>
#include <vcl/scheduler.hxx>
#include <vcl/image.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/settings.hxx>
#include <vcl/unowrap.hxx>
#include <vcl/commandinfoprovider.hxx>
@@ -403,7 +403,7 @@ void DeInitVCL()
SAL_WARN_IF( nBadTopWindows!=0, "vcl", aBuf.getStr() );
#endif
ImplImageTree::get().shutDown();
ImageTree::get().shutdown();
osl_removeSignalHandler( pExceptionHandler);
pExceptionHandler = nullptr;

View File

@@ -42,7 +42,7 @@ BitmapEx loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags)
OUString aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
ImplImageTree::get().loadImage(rFileName, aIconTheme, aBitmapEx, true, eFlags);
ImageTree::get().loadImage(rFileName, aIconTheme, aBitmapEx, true, eFlags);
return aBitmapEx;
}

View File

@@ -23,7 +23,7 @@
#include <vcl/dialog.hxx>
#include <vcl/event.hxx>
#include <vcl/fixed.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>

View File

@@ -25,7 +25,7 @@
#include <tools/stream.hxx>
#include <tools/debug.hxx>
#include <tools/rc.h>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/salbtype.hxx>
#include <vcl/outdev.hxx>
#include <vcl/alpha.hxx>
@@ -110,7 +110,7 @@ void BitmapEx::loadFromIconTheme( const OUString& rIconName )
{
OUString aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
if( !ImplImageTree::get().loadImage( rIconName, aIconTheme, *this, true ) )
if (!ImageTree::get().loadImage(rIconName, aIconTheme, *this, true))
{
#ifdef DBG_UTIL
OStringBuffer aErrorStr(

View File

@@ -30,7 +30,7 @@
#include <vcl/svapp.hxx>
#include <vcl/image.hxx>
#include <vcl/imagerepository.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <sal/types.h>
#include <image.h>

View File

@@ -26,7 +26,7 @@
#include <vcl/image.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <image.h>
#include <memory>
@@ -70,7 +70,7 @@ void ImageAryData::Load(const OUString &rPrefix)
OUString aFileName = rPrefix;
aFileName += maName;
bool bSuccess = ImplImageTree::get().loadImage(aFileName, aIconTheme, maBitmapEx, true);
bool bSuccess = ImageTree::get().loadImage(aFileName, aIconTheme, maBitmapEx, true);
if (bSuccess)
{}

View File

@@ -30,7 +30,7 @@
#include <vcl/svapp.hxx>
#include <vcl/image.hxx>
#include <vcl/imagerepository.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <image.h>
ImageList::ImageList()

View File

@@ -19,7 +19,7 @@
#include <vcl/bitmapex.hxx>
#include <vcl/imagerepository.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/ImageTree.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
@@ -29,13 +29,13 @@ namespace vcl
{
OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
return ImplImageTree::get().loadImage( _rName, sIconTheme, _out_rImage, _bSearchLanguageDependent );
return ImageTree::get().loadImage( _rName, sIconTheme, _out_rImage, _bSearchLanguageDependent );
}
bool ImageRepository::loadDefaultImage( BitmapEx& _out_rImage)
{
OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
return ImplImageTree::get().loadDefaultImage( sIconTheme,_out_rImage);
return ImageTree::get().loadDefaultImage( sIconTheme,_out_rImage);
}
} // namespace vcl

View File

@@ -0,0 +1,56 @@
/* -*- 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/.
*
*/
#include <vcl/ImageTree.hxx>
#include "implimagetree.hxx"
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/container/XNameAccess.hpp>
ImageTree & ImageTree::get() {
static ImageTree s_ImageTree;
return s_ImageTree;
}
ImageTree::ImageTree()
: mpImplImageTree(new ImplImageTree)
{
}
OUString ImageTree::getImageUrl(OUString const & rName, OUString const & rStyle, OUString const & rLang)
{
return mpImplImageTree->getImageUrl(rName, rStyle, rLang);
}
bool ImageTree::loadImage(OUString const & rName, OUString const & rStyle,
BitmapEx & rBitmap, bool bLocalized,
const ImageLoadFlags eFlags)
{
return mpImplImageTree->loadImage(rName, rStyle, rBitmap, bLocalized, eFlags);
}
bool ImageTree::loadDefaultImage(OUString const & rStyle, BitmapEx& rBitmap,
const ImageLoadFlags eFlags)
{
return mpImplImageTree->loadDefaultImage(rStyle, rBitmap, eFlags);
}
css::uno::Reference<css::container::XNameAccess> ImageTree::getNameAccess()
{
return mpImplImageTree->getNameAccess();
}
void ImageTree::shutdown()
{
mpImplImageTree->shutdown();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -37,13 +37,13 @@
#include "tools/stream.hxx"
#include "tools/urlobj.hxx"
#include "implimagetree.hxx"
#include <vcl/bitmapex.hxx>
#include <vcl/dibtools.hxx>
#include <vcl/implimagetree.hxx>
#include <vcl/pngread.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <vcldemo-debug.hxx>
#include <vcl/BitmapProcessor.hxx>
#include <vcl/BitmapTools.hxx>
@@ -171,11 +171,6 @@ void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString con
}
ImplImageTree & ImplImageTree::get() {
static ImplImageTree s_ImplImageTree;
return s_ImplImageTree;
}
ImplImageTree::ImplImageTree()
{
}
@@ -368,7 +363,7 @@ bool ImplImageTree::doLoadImage(OUString const & name, OUString const & style, B
return found;
}
void ImplImageTree::shutDown()
void ImplImageTree::shutdown()
{
maCurrentStyle.clear();
maIconSets.clear();
@@ -545,12 +540,4 @@ css::uno::Reference<css::container::XNameAccess> ImplImageTree::getNameAccess()
return getCurrentIconSet().maNameAccess;
}
/// Recursively dump all names ...
css::uno::Sequence<OUString> ImageTree_getAllImageNames()
{
css::uno::Reference<css::container::XNameAccess> xRef(ImplImageTree::get().getNameAccess());
return xRef->getElementNames();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -17,6 +17,9 @@
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/registry/XSimpleRegistry.hpp>
#include <com/sun/star/ucb/UniversalContentBroker.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/container/XNameAccess.hpp>
#include <osl/time.h>
#include <vcl/vclmain.hxx>
@@ -38,10 +41,10 @@
#include <vcl/bitmapaccess.hxx>
#include <vcl/help.hxx>
#include <vcl/menu.hxx>
#include <vcl/ImageTree.hxx>
#include <basegfx/numeric/ftools.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <vcldemo-debug.hxx>
#include <opengl/zone.hxx>
// internal headers for OpenGLTests class.
@@ -1211,7 +1214,9 @@ public:
return;
bHasLoadedAll = true;
css::uno::Sequence< OUString > aAllIcons = ImageTree_getAllImageNames();
css::uno::Reference<css::container::XNameAccess> xRef(ImageTree::get().getNameAccess());
css::uno::Sequence< OUString > aAllIcons = xRef->getElementNames();
for (sal_Int32 i = 0; i < aAllIcons.getLength(); i++)
{
if (aAllIcons[i].endsWithIgnoreAsciiCase("svg"))