diff options
Diffstat (limited to 'sd')
-rw-r--r-- | sd/IwyuFilter_sd.yaml | 4 | ||||
-rw-r--r-- | sd/Library_sd.mk | 1 | ||||
-rw-r--r-- | sd/source/ui/presenter/PresenterTextView.cxx | 466 | ||||
-rw-r--r-- | sd/source/ui/presenter/PresenterTextView.hxx | 71 | ||||
-rw-r--r-- | sd/util/sd.component | 4 |
5 files changed, 0 insertions, 546 deletions
diff --git a/sd/IwyuFilter_sd.yaml b/sd/IwyuFilter_sd.yaml index 530cac5249d8..650d975003f7 100644 --- a/sd/IwyuFilter_sd.yaml +++ b/sd/IwyuFilter_sd.yaml @@ -274,10 +274,6 @@ excludelist: - com/sun/star/rendering/XSpriteCanvas.hpp - com/sun/star/rendering/XBitmap.hpp - com/sun/star/awt/XWindowListener.hpp - sd/source/ui/presenter/PresenterTextView.hxx: - # base class has to be a complete type - - tools/PropertySet.hxx - - com/sun/star/lang/XInitialization.hpp sd/source/ui/presenter/SlideRenderer.hxx: # base class has to be a complete type - com/sun/star/drawing/XSlideRenderer.hpp diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk index 3c60a60b3a3d..e2ec16119adc 100644 --- a/sd/Library_sd.mk +++ b/sd/Library_sd.mk @@ -346,7 +346,6 @@ $(eval $(call gb_Library_add_exception_objects,sd,\ sd/source/ui/presenter/PresenterCanvas \ sd/source/ui/presenter/PresenterHelper \ sd/source/ui/presenter/PresenterPreviewCache \ - sd/source/ui/presenter/PresenterTextView \ sd/source/ui/presenter/SlideRenderer \ sd/source/ui/sidebar/AllMasterPagesSelector \ sd/source/ui/sidebar/CurrentMasterPagesSelector \ diff --git a/sd/source/ui/presenter/PresenterTextView.cxx b/sd/source/ui/presenter/PresenterTextView.cxx deleted file mode 100644 index d8abea74547a..000000000000 --- a/sd/source/ui/presenter/PresenterTextView.cxx +++ /dev/null @@ -1,466 +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 "PresenterTextView.hxx" - -#include <i18nlangtag/mslangid.hxx> -#include <cppcanvas/vclfactory.hxx> -#include <svl/itempool.hxx> -#include <unotools/lingucfg.hxx> -#include <editeng/colritem.hxx> -#include <editeng/editeng.hxx> -#include <editeng/editstat.hxx> -#include <editeng/eeitem.hxx> -#include <editeng/fhgtitem.hxx> -#include <editeng/fontitem.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/svapp.hxx> -#include <vcl/virdev.hxx> -#include <com/sun/star/awt/FontDescriptor.hpp> -#include <com/sun/star/awt/Size.hpp> -#include <com/sun/star/rendering/XCanvas.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> -#include <com/sun/star/i18n/ScriptType.hpp> -#include <o3tl/string_view.hxx> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; - -constexpr OUStringLiteral gsTextPropertyName(u"Text"); -constexpr OUStringLiteral gsBitmapPropertyName(u"Bitmap"); -constexpr OUStringLiteral gsSizePropertyName(u"Size"); -constexpr OUStringLiteral gsBackgroundColorPropertyName(u"BackgroundColor"); -constexpr OUStringLiteral gsTextColorPropertyName(u"TextColor"); -constexpr OUStringLiteral gsFontDescriptorPropertyName(u"FontDescriptor"); -constexpr OUStringLiteral gsTopPropertyName(u"Top"); -constexpr OUStringLiteral gsTopRelativePropertyName(u"RelativeTop"); -constexpr OUStringLiteral gsTotalHeightPropertyName(u"TotalHeight"); - -namespace sd::presenter { - -// PresenterTextView::Implementation -class PresenterTextView::Implementation -{ -public: - Implementation(); - ~Implementation(); - - void SetCanvas (const cppcanvas::CanvasSharedPtr& rCanvas); - void SetSize (const Size aSize); - void SetBackgroundColor (const Color aColor); - void SetTextColor (const Color aColor); - void SetFontDescriptor (const awt::FontDescriptor& rFontDescriptor); - sal_Int32 GetTop() const { return mnTop;} - void SetTop (const sal_Int32 nTop); - void SetText (const OUString& Text); - sal_Int32 ParseDistance (std::u16string_view sDistance) const; - Reference<rendering::XBitmap> const & GetBitmap(); - sal_Int32 GetTotalHeight(); - -private: - Reference<rendering::XBitmap> mxBitmap; - cppcanvas::CanvasSharedPtr mpCanvas; - VclPtr<VirtualDevice> mpOutputDevice; - std::unique_ptr<EditEngine> mpEditEngine; - rtl::Reference<SfxItemPool> mpEditEngineItemPool; - Size maSize; - OUString msText; - sal_Int32 mnTop; - sal_Int32 mnTotalHeight; - - void CheckTop(); -}; - -// PresenterTextView -PresenterTextView::PresenterTextView () - : mpImplementation(new Implementation()) -{ -} - -PresenterTextView::~PresenterTextView() -{ -} - -void SAL_CALL PresenterTextView::disposing() -{ - mpImplementation.reset(); -} - -// XInitialization -void SAL_CALL PresenterTextView::initialize (const Sequence<Any>& rArguments) -{ - ThrowIfDisposed(); - - if (rArguments.getLength() != 1) - { - throw RuntimeException("PresenterTextView: invalid number of arguments", - static_cast<XWeak*>(this)); - } - - Reference<rendering::XCanvas> xCanvas (rArguments[0], UNO_QUERY_THROW); - mpImplementation->SetCanvas( - cppcanvas::VCLFactory::createCanvas(xCanvas)); -} - -Any PresenterTextView::GetPropertyValue (const OUString& rsPropertyName) -{ - ThrowIfDisposed(); - - if (rsPropertyName == gsBitmapPropertyName) - { - return Any(mpImplementation->GetBitmap()); - } - else if (rsPropertyName == gsTopPropertyName) - { - return Any(mpImplementation->GetTop()); - } - else if (rsPropertyName == gsTotalHeightPropertyName) - { - return Any(mpImplementation->GetTotalHeight()); - } - - return Any(); -} - -Any PresenterTextView::SetPropertyValue ( - const OUString& rsPropertyName, - const css::uno::Any& rValue) -{ - ThrowIfDisposed(); - - Any aOldValue; - if (rsPropertyName == gsTextPropertyName) - { - OUString sText; - if (rValue >>= sText) - mpImplementation->SetText(sText); - } - else if (rsPropertyName == gsSizePropertyName) - { - awt::Size aSize; - if (rValue >>= aSize) - mpImplementation->SetSize(Size(aSize.Width,aSize.Height)); - } - else if (rsPropertyName == gsBackgroundColorPropertyName) - { - ::Color aColor; - if (rValue >>= aColor) - mpImplementation->SetBackgroundColor(aColor); - } - else if (rsPropertyName == gsTextColorPropertyName) - { - ::Color aColor; - if (rValue >>= aColor) - mpImplementation->SetTextColor(aColor); - } - else if (rsPropertyName == gsFontDescriptorPropertyName) - { - awt::FontDescriptor aFontDescriptor; - if (rValue >>= aFontDescriptor) - mpImplementation->SetFontDescriptor(aFontDescriptor); - } - else if (rsPropertyName == gsTopPropertyName) - { - sal_Int32 nTop = 0; - if (rValue >>= nTop) - mpImplementation->SetTop(nTop); - } - else if (rsPropertyName == gsTopRelativePropertyName) - { - OUString sDistance; - if (rValue >>= sDistance) - mpImplementation->SetTop( - mpImplementation->GetTop() - + mpImplementation->ParseDistance(sDistance)); - } - return aOldValue; -} - -void PresenterTextView::ThrowIfDisposed() -{ - if (PresenterTextViewInterfaceBase::rBHelper.bDisposed - || PresenterTextViewInterfaceBase::rBHelper.bInDispose || mpImplementation == nullptr) - { - throw lang::DisposedException ("PresenterTextView object has already been disposed", - static_cast<uno::XWeak*>(this)); - } -} - -// PresenterTextView::Implementation -PresenterTextView::Implementation::Implementation() - : mpOutputDevice(VclPtr<VirtualDevice>::Create(*Application::GetDefaultDevice(), DeviceFormat::DEFAULT, DeviceFormat::DEFAULT)), - mpEditEngineItemPool(EditEngine::CreatePool()), - maSize(100,100), - mnTop(0), - mnTotalHeight(-1) -{ - mpOutputDevice->SetMapMode(MapMode(MapUnit::MapPixel)); - - // set fonts to be used - SvtLinguOptions aOpt; - SvtLinguConfig().GetOptions( aOpt ); - - struct FontDta { - LanguageType nFallbackLang; - LanguageType nLang; - DefaultFontType nFontType; - sal_uInt16 nFontInfoId; - } aTable[3] = - { - // info to get western font to be used - { LANGUAGE_ENGLISH_US, LANGUAGE_NONE, - DefaultFontType::SERIF, EE_CHAR_FONTINFO }, - // info to get CJK font to be used - { LANGUAGE_JAPANESE, LANGUAGE_NONE, - DefaultFontType::CJK_TEXT, EE_CHAR_FONTINFO_CJK }, - // info to get CTL font to be used - { LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE, - DefaultFontType::CTL_TEXT, EE_CHAR_FONTINFO_CTL } - }; - aTable[0].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage, css::i18n::ScriptType::LATIN); - aTable[1].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CJK, css::i18n::ScriptType::ASIAN); - aTable[2].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CTL, css::i18n::ScriptType::COMPLEX); - - for (const FontDta & rFntDta : aTable) - { - LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ? - rFntDta.nFallbackLang : rFntDta.nLang; - vcl::Font aFont = OutputDevice::GetDefaultFont( - rFntDta.nFontType, nLang, GetDefaultFontFlags::OnlyOne); - mpEditEngineItemPool->SetPoolDefaultItem( - SvxFontItem( - aFont.GetFamilyType(), - aFont.GetFamilyName(), - aFont.GetStyleName(), - aFont.GetPitch(), - aFont.GetCharSet(), - rFntDta.nFontInfoId)); - } - - mpEditEngine.reset( new EditEngine (mpEditEngineItemPool.get()) ); - - mpEditEngine->EnableUndo (true); - mpEditEngine->SetDefTab (sal_uInt16( - Application::GetDefaultDevice()->GetTextWidth("XXXX"))); - - mpEditEngine->SetControlWord( - EEControlBits(mpEditEngine->GetControlWord() | EEControlBits::AUTOINDENTING) & - EEControlBits(~EEControlBits::UNDOATTRIBS) & - EEControlBits(~EEControlBits::PASTESPECIAL) ); - - mpEditEngine->SetWordDelimiters (" .=+-*/(){}[];\""); - mpEditEngine->SetRefMapMode(MapMode(MapUnit::MapPixel)); - mpEditEngine->SetPaperSize (Size(800, 0)); - mpEditEngine->EraseVirtualDevice(); - mpEditEngine->ClearModifyFlag(); -} - -PresenterTextView::Implementation::~Implementation() -{ - mpEditEngine.reset(); - mpEditEngineItemPool.clear(); - mpOutputDevice.disposeAndClear(); -} - -void PresenterTextView::Implementation::SetCanvas (const cppcanvas::CanvasSharedPtr& rpCanvas) -{ - mpCanvas = rpCanvas; - mxBitmap = nullptr; -} - -void PresenterTextView::Implementation::SetSize (const Size aSize) -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - - maSize = aSize; - mpEditEngine->SetPaperSize(maSize); - mnTotalHeight = -1; - mxBitmap = nullptr; -} - -void PresenterTextView::Implementation::SetBackgroundColor (const Color aColor) -{ - mxBitmap = nullptr; - - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - DBG_ASSERT(mpEditEngineItemPool!=nullptr, "EditEngineItemPool missing"); - mpEditEngine->SetBackgroundColor(aColor); - mpEditEngine->EnableAutoColor(false); - mpEditEngine->ForceAutoColor(false); -} - -void PresenterTextView::Implementation::SetTextColor (const Color aColor) -{ - mxBitmap = nullptr; - - DBG_ASSERT(mpEditEngineItemPool!=nullptr, "EditEngineItemPool missing"); - mpEditEngineItemPool->SetPoolDefaultItem(SvxColorItem(aColor, EE_CHAR_COLOR)); -} - -void PresenterTextView::Implementation::SetFontDescriptor ( - const awt::FontDescriptor& rFontDescriptor) -{ - mxBitmap = nullptr; - - DBG_ASSERT(mpEditEngineItemPool!=nullptr, "EditEngineItemPool missing"); - - const sal_Int32 nFontHeight = rFontDescriptor.Height; - - SvxFontHeightItem aFontHeight( - Application::GetDefaultDevice()->LogicToPixel( - Size(0, nFontHeight), MapMode (MapUnit::MapPoint)).Height(), - 100, - EE_CHAR_FONTHEIGHT); - mpEditEngineItemPool->SetPoolDefaultItem( aFontHeight); - aFontHeight.SetWhich (EE_CHAR_FONTHEIGHT_CJK); - mpEditEngineItemPool->SetPoolDefaultItem( aFontHeight); - aFontHeight.SetWhich (EE_CHAR_FONTHEIGHT_CTL); - mpEditEngineItemPool->SetPoolDefaultItem( aFontHeight); - - SvxFontItem aSvxFontItem (EE_CHAR_FONTINFO); - aSvxFontItem.SetFamilyName( rFontDescriptor.Name ); - mpEditEngineItemPool->SetPoolDefaultItem(aSvxFontItem); - - mnTotalHeight = -1; - mxBitmap = nullptr; - - CheckTop(); - mnTotalHeight = -1; -} - -void PresenterTextView::Implementation::SetTop (const sal_Int32 nTop) -{ - if (nTop == mnTop) - return; - - mnTop = nTop; - mxBitmap = nullptr; - CheckTop(); -} - -void PresenterTextView::Implementation::SetText (const OUString& rText) -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - msText = rText; - mpEditEngine->SetPaperSize(maSize); - mnTotalHeight = -1; - mxBitmap = nullptr; -} - -sal_Int32 PresenterTextView::Implementation::ParseDistance (std::u16string_view sDistance) const -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - sal_Int32 nDistance (0); - if (o3tl::ends_with(sDistance, u"px")) - { - nDistance = o3tl::toInt32(sDistance.substr(0,sDistance.size()-2)); - } - else if (o3tl::ends_with(sDistance, u"l")) - { - const sal_Int32 nLines (o3tl::toInt32(sDistance.substr(0,sDistance.size()-1))); - // Take the height of the first line as the height of every line. - const sal_uInt32 nFirstLineHeight (mpEditEngine->GetLineHeight(0)); - nDistance = nFirstLineHeight * nLines; - } - - return nDistance; -} - -Reference<rendering::XBitmap> const & PresenterTextView::Implementation::GetBitmap() -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - - if ( ! mxBitmap.is()) - { - mpOutputDevice.disposeAndClear(); - mpOutputDevice = VclPtr<VirtualDevice>::Create(*Application::GetDefaultDevice(), - DeviceFormat::DEFAULT, DeviceFormat::DEFAULT); - mpOutputDevice->SetMapMode(MapMode(MapUnit::MapPixel)); - mpOutputDevice->SetOutputSizePixel(maSize); - mpOutputDevice->SetLineColor(); - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetBackground(Wallpaper()); - mpOutputDevice->Erase(); - - MapMode aMapMode (mpOutputDevice->GetMapMode()); - aMapMode.SetOrigin(Point(0,0)); - mpOutputDevice->SetMapMode(aMapMode); - const ::tools::Rectangle aWindowBox (Point(0,0), maSize); - mpOutputDevice->DrawRect(aWindowBox); - - mpEditEngine->Clear(); - mpEditEngine->SetText(msText); - mpEditEngine->SetPaperSize(maSize); - - mpEditEngine->Draw(*mpOutputDevice, aWindowBox, Point(0,mnTop)); - - const BitmapEx aBitmap (mpOutputDevice->GetBitmapEx(Point(0,0), maSize)); - mxBitmap = cppcanvas::VCLFactory::createBitmap( - mpCanvas, - aBitmap - )->getUNOBitmap(); - } - return mxBitmap; -} - -sal_Int32 PresenterTextView::Implementation::GetTotalHeight() -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - - if (mnTotalHeight < 0) - { - if ( ! mxBitmap.is()) - GetBitmap(); - mnTotalHeight = mpEditEngine->GetTextHeight(); - } - return mnTotalHeight; -} - -void PresenterTextView::Implementation::CheckTop() -{ - DBG_ASSERT(mpEditEngine!=nullptr, "EditEngine missing"); - - if (mpEditEngine!=nullptr && mnTotalHeight < 0) - mnTotalHeight = mpEditEngine->GetTextHeight(); - if (mpEditEngine!=nullptr && mnTop >= mnTotalHeight) - mnTop = mnTotalHeight - mpEditEngine->GetLineHeight(0); - - if (mnTotalHeight < maSize.Height()) - mnTop = 0; - - if (mnTotalHeight - mnTop < maSize.Height()) - mnTop = mnTotalHeight - maSize.Height(); - - if (mnTop < 0) - mnTop = 0; -} - -} // end of namespace ::sd::presenter - - -extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* -com_sun_star_comp_Draw_PresenterTextView_get_implementation(css::uno::XComponentContext*, - css::uno::Sequence<css::uno::Any> const &) -{ - return cppu::acquire(new sd::presenter::PresenterTextView); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/presenter/PresenterTextView.hxx b/sd/source/ui/presenter/PresenterTextView.hxx deleted file mode 100644 index 28b68aaa57d6..000000000000 --- a/sd/source/ui/presenter/PresenterTextView.hxx +++ /dev/null @@ -1,71 +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 <tools/PropertySet.hxx> -#include <com/sun/star/lang/XInitialization.hpp> -#include <cppuhelper/implbase.hxx> -#include <memory> - -namespace sd::presenter { - -typedef ::cppu::ImplInheritanceHelper < - tools::PropertySet, - css::lang::XInitialization -> PresenterTextViewInterfaceBase; - -/** Render text into bitmaps. An edit engine is used to render the text. - This service is used by the presenter screen to render the notes view. -*/ -class PresenterTextView - : public PresenterTextViewInterfaceBase -{ -public: - PresenterTextView (); - virtual ~PresenterTextView() override; - PresenterTextView(const PresenterTextView&) = delete; - PresenterTextView& operator=(const PresenterTextView&) = delete; - - // XInitialization - - virtual void SAL_CALL initialize (const css::uno::Sequence<css::uno::Any>& rArguments) override; - -protected: - virtual void SAL_CALL disposing() override; - - virtual css::uno::Any GetPropertyValue ( - const OUString& rsPropertyName) override; - virtual css::uno::Any SetPropertyValue ( - const OUString& rsPropertyName, - const css::uno::Any& rValue) override; - -private: - class Implementation; - std::unique_ptr<Implementation> mpImplementation; - - /** @throws css::lang::DisposedException when the object has already been - disposed. - */ - void ThrowIfDisposed(); -}; - -} // end of namespace ::sd::presenter - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/util/sd.component b/sd/util/sd.component index 77731ac018ea..04bd60513491 100644 --- a/sd/util/sd.component +++ b/sd/util/sd.component @@ -41,10 +41,6 @@ constructor="com_sun_star_comp_Draw_PresenterPreviewCache_get_implementation"> <service name="com.sun.star.drawing.PresenterPreviewCache"/> </implementation> - <implementation name="com.sun.star.comp.Draw.PresenterTextView" - constructor="com_sun_star_comp_Draw_PresenterTextView_get_implementation"> - <service name="com.sun.star.drawing.PresenterTextView"/> - </implementation> <implementation name="com.sun.star.comp.Draw.SlideRenderer" constructor="com_sun_star_comp_Draw_SlideRenderer_get_implementation"> <service name="com.sun.star.drawing.SlideRenderer"/> |