summaryrefslogtreecommitdiff
path: root/sd/source/ui/presenter/PresenterTextView.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/presenter/PresenterTextView.cxx')
-rw-r--r--sd/source/ui/presenter/PresenterTextView.cxx648
1 files changed, 0 insertions, 648 deletions
diff --git a/sd/source/ui/presenter/PresenterTextView.cxx b/sd/source/ui/presenter/PresenterTextView.cxx
deleted file mode 100644
index f593384c0..000000000
--- a/sd/source/ui/presenter/PresenterTextView.cxx
+++ /dev/null
@@ -1,648 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "PresenterTextView.hxx"
-
-#include <i18npool/mslangid.hxx>
-#include <cppcanvas/vclfactory.hxx>
-#include <svl/itempool.hxx>
-#include <svl/itemset.hxx>
-#include <unotools/linguprops.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 <svx/xflclit.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/XSpriteCanvas.hpp>
-#include <com/sun/star/util/Color.hpp>
-#include <com/sun/star/i18n/ScriptType.hpp>
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using ::rtl::OUString;
-
-namespace sd { namespace presenter {
-
-//===== Service ===============================================================
-
-Reference<XInterface> SAL_CALL PresenterTextViewService_createInstance (
- const Reference<XComponentContext>& rxContext)
-{
- return Reference<XInterface>(static_cast<XWeak*>(new PresenterTextView(rxContext)));
-}
-
-
-
-
-::rtl::OUString PresenterTextViewService_getImplementationName (void) throw(RuntimeException)
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.PresenterTextView"));
-}
-
-
-
-
-Sequence<rtl::OUString> SAL_CALL PresenterTextViewService_getSupportedServiceNames (void)
- throw (RuntimeException)
-{
- static const ::rtl::OUString sServiceName(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.PresenterTextView")));
- return Sequence<rtl::OUString>(&sServiceName, 1);
-}
-
-
-
-//===== PresenterTextView::Implementation =====================================
-
-class PresenterTextView::Implementation
-{
-public:
- const OUString msTextPropertyName;
- const OUString msBitmapPropertyName;
- const OUString msSizePropertyName;
- const OUString msBackgroundColorPropertyName;
- const OUString msTextColorPropertyName;
- const OUString msFontDescriptorPropertyName;
- const OUString msTopPropertyName;
- const OUString msTopRelativePropertyName;
- const OUString msTotalHeightPropertyName;
-
- Implementation (void);
- ~Implementation (void);
-
- 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 (void) const;
- void SetTop (const sal_Int32 nTop);
- void SetText (const OUString& Text);
- sal_Int32 ParseDistance (const OUString& rsDistance) const;
- Reference<rendering::XBitmap> GetBitmap (void);
- sal_Int32 GetTotalHeight (void);
-
-private:
- Reference<rendering::XBitmap> mxBitmap;
- cppcanvas::CanvasSharedPtr mpCanvas;
- VirtualDevice* mpOutputDevice;
- EditEngine* mpEditEngine;
- SfxItemPool* mpEditEngineItemPool;
- Size maSize;
- Color maBackgroundColor;
- Color maTextColor;
- String msText;
- sal_Int32 mnTop;
- sal_Int32 mnTotalHeight;
-
- EditEngine * GetEditEngine (void);
- EditEngine* CreateEditEngine (void);
- void CheckTop (void);
-};
-
-
-
-
-//===== PresenterTextView =====================================================
-
-PresenterTextView::PresenterTextView (const Reference<XComponentContext>& rxContext)
- : PresenterTextViewInterfaceBase(),
- mpImplementation(new Implementation())
-{
- (void)rxContext;
-}
-
-
-
-
-PresenterTextView::~PresenterTextView (void)
-{
-}
-
-
-
-
-void SAL_CALL PresenterTextView::disposing (void)
-{
- mpImplementation.reset();
-}
-
-
-
-
-//----- XInitialization -------------------------------------------------------
-
-void SAL_CALL PresenterTextView::initialize (const Sequence<Any>& rArguments)
- throw (Exception, RuntimeException)
-{
- ThrowIfDisposed();
-
- if (rArguments.getLength() == 1)
- {
- try
- {
- Reference<rendering::XBitmapCanvas> xCanvas (rArguments[0], UNO_QUERY_THROW);
- if (xCanvas.is())
- {
- mpImplementation->SetCanvas(
- cppcanvas::VCLFactory::getInstance().createCanvas(xCanvas));
- }
- }
- catch (RuntimeException&)
- {
- throw;
- }
- }
- else
- {
- throw RuntimeException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("PresenterTextView: invalid number of arguments")),
- static_cast<XWeak*>(this));
- }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-Any PresenterTextView::GetPropertyValue (const OUString& rsPropertyName)
-{
- ThrowIfDisposed();
-
- if (rsPropertyName == mpImplementation->msBitmapPropertyName)
- {
- return Any(mpImplementation->GetBitmap());
- }
- else if (rsPropertyName == mpImplementation->msTopPropertyName)
- {
- return Any(mpImplementation->GetTop());
- }
- else if (rsPropertyName == mpImplementation->msTotalHeightPropertyName)
- {
- return Any(mpImplementation->GetTotalHeight());
- }
-
- return Any();
-}
-
-
-
-
-Any PresenterTextView::SetPropertyValue (
- const ::rtl::OUString& rsPropertyName,
- const css::uno::Any& rValue)
-{
- ThrowIfDisposed();
-
- Any aOldValue;
- if (rsPropertyName == mpImplementation->msTextPropertyName)
- {
- OUString sText;
- if (rValue >>= sText)
- mpImplementation->SetText(sText);
- }
- else if (rsPropertyName == mpImplementation->msSizePropertyName)
- {
- awt::Size aSize;
- if (rValue >>= aSize)
- mpImplementation->SetSize(Size(aSize.Width,aSize.Height));
- }
- else if (rsPropertyName == mpImplementation->msBackgroundColorPropertyName)
- {
- util::Color aColor = util::Color();
- if (rValue >>= aColor)
- mpImplementation->SetBackgroundColor(Color(aColor));
- }
- else if (rsPropertyName == mpImplementation->msTextColorPropertyName)
- {
- util::Color aColor = util::Color();
- if (rValue >>= aColor)
- mpImplementation->SetTextColor(Color(aColor));
- }
- else if (rsPropertyName == mpImplementation->msFontDescriptorPropertyName)
- {
- awt::FontDescriptor aFontDescriptor;
- if (rValue >>= aFontDescriptor)
- mpImplementation->SetFontDescriptor(aFontDescriptor);
- }
- else if (rsPropertyName == mpImplementation->msTopPropertyName)
- {
- sal_Int32 nTop = 0;
- if (rValue >>= nTop)
- mpImplementation->SetTop(nTop);
- }
- else if (rsPropertyName == mpImplementation->msTopRelativePropertyName)
- {
- OUString sDistance;
- if (rValue >>= sDistance)
- mpImplementation->SetTop(
- mpImplementation->GetTop()
- + mpImplementation->ParseDistance(sDistance));
- }
- return aOldValue;
-}
-
-
-
-
-void PresenterTextView::ThrowIfDisposed (void)
- throw (::com::sun::star::lang::DisposedException)
-{
- if (PresenterTextViewInterfaceBase::rBHelper.bDisposed
- || PresenterTextViewInterfaceBase::rBHelper.bInDispose
- || mpImplementation.get()==NULL)
- {
- throw lang::DisposedException (
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "PresenterTextView object has already been disposed")),
- static_cast<uno::XWeak*>(this));
- }
-}
-
-
-
-
-//===== PresenterTextView::Implementation =====================================
-
-PresenterTextView::Implementation::Implementation (void)
- : msTextPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("Text"))),
- msBitmapPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("Bitmap"))),
- msSizePropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("Size"))),
- msBackgroundColorPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("BackgroundColor"))),
- msTextColorPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("TextColor"))),
- msFontDescriptorPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("FontDescriptor"))),
- msTopPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("Top"))),
- msTopRelativePropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("RelativeTop"))),
- msTotalHeightPropertyName(OUString(RTL_CONSTASCII_USTRINGPARAM("TotalHeight"))),
- mxBitmap(),
- mpCanvas(),
- mpOutputDevice(new VirtualDevice(*Application::GetDefaultDevice(), 0, 0)),
- mpEditEngine(NULL),
- mpEditEngineItemPool(EditEngine::CreatePool()),
- maSize(100,100),
- maBackgroundColor(0xffffffff),
- maTextColor(0x00000000),
- msText(),
- mnTop(0),
- mnTotalHeight(-1)
-{
- mpOutputDevice->SetMapMode(MAP_PIXEL);
-
- GetEditEngine();
-}
-
-
-
-
-PresenterTextView::Implementation::~Implementation (void)
-{
- delete mpEditEngine;
- SfxItemPool::Free(mpEditEngineItemPool);
- delete mpOutputDevice;
-}
-
-
-
-
-EditEngine * PresenterTextView::Implementation::GetEditEngine (void)
-{
- if (mpEditEngine == NULL)
- mpEditEngine = CreateEditEngine ();
- return mpEditEngine;
-}
-
-
-
-
-EditEngine* PresenterTextView::Implementation::CreateEditEngine (void)
-{
- EditEngine* pEditEngine = mpEditEngine;
- if (pEditEngine == NULL)
- {
- //
- // set fonts to be used
- //
- SvtLinguOptions aOpt;
- SvtLinguConfig().GetOptions( aOpt );
-
- struct FontDta {
- sal_Int16 nFallbackLang;
- sal_Int16 nLang;
- sal_uInt16 nFontType;
- sal_uInt16 nFontInfoId;
- } aTable[3] =
- {
- // info to get western font to be used
- { LANGUAGE_ENGLISH_US, LANGUAGE_NONE,
- DEFAULTFONT_SERIF, EE_CHAR_FONTINFO },
- // info to get CJK font to be used
- { LANGUAGE_JAPANESE, LANGUAGE_NONE,
- DEFAULTFONT_CJK_TEXT, EE_CHAR_FONTINFO_CJK },
- // info to get CTL font to be used
- { LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
- DEFAULTFONT_CTL_TEXT, EE_CHAR_FONTINFO_CTL }
- };
- aTable[0].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
- aTable[1].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
- aTable[2].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
-
- for (int i = 0; i < 3; ++i)
- {
- const FontDta &rFntDta = aTable[i];
- LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ?
- rFntDta.nFallbackLang : rFntDta.nLang;
- Font aFont = Application::GetDefaultDevice()->GetDefaultFont(
- rFntDta.nFontType, nLang, DEFAULTFONT_FLAGS_ONLYONE);
- mpEditEngineItemPool->SetPoolDefaultItem(
- SvxFontItem(
- aFont.GetFamily(),
- aFont.GetName(),
- aFont.GetStyleName(),
- aFont.GetPitch(),
- aFont.GetCharSet(),
- rFntDta.nFontInfoId));
- }
-
-
- pEditEngine = new EditEngine (mpEditEngineItemPool);
-
- pEditEngine->EnableUndo (sal_True);
- pEditEngine->SetDefTab (sal_uInt16(
- Application::GetDefaultDevice()->GetTextWidth(
- UniString::CreateFromAscii("XXXX"))));
-
- pEditEngine->SetControlWord(
- (pEditEngine->GetControlWord()
- | EE_CNTRL_AUTOINDENTING) &
- (~EE_CNTRL_UNDOATTRIBS) &
- (~EE_CNTRL_PASTESPECIAL));
-
- pEditEngine->SetWordDelimiters (
- UniString::CreateFromAscii(" .=+-*/(){}[];\""));
- pEditEngine->SetRefMapMode (MAP_PIXEL);
- pEditEngine->SetPaperSize (Size(800, 0));
- pEditEngine->EraseVirtualDevice();
- pEditEngine->ClearModifyFlag();
- }
-
- return pEditEngine;
-}
-
-
-
-
-void PresenterTextView::Implementation::SetCanvas (const cppcanvas::CanvasSharedPtr& rpCanvas)
-{
- mpCanvas = rpCanvas;
- mxBitmap = NULL;
-}
-
-
-
-
-void PresenterTextView::Implementation::SetSize (const Size aSize)
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
-
- maSize = aSize;
- mpEditEngine->SetPaperSize(maSize);
- mnTotalHeight = -1;
- mxBitmap = NULL;
-}
-
-
-
-
-void PresenterTextView::Implementation::SetBackgroundColor (const Color aColor)
-{
- maBackgroundColor = aColor;
- mxBitmap = NULL;
-
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
- DBG_ASSERT(mpEditEngineItemPool!=NULL, "EditEngineItemPool missing");
- mpEditEngine->SetBackgroundColor(aColor);
- mpEditEngine->EnableAutoColor(sal_False);
- mpEditEngine->ForceAutoColor(sal_False);
-}
-
-
-
-
-void PresenterTextView::Implementation::SetTextColor (const Color aColor)
-{
- maTextColor = aColor;
- mxBitmap = NULL;
-
- DBG_ASSERT(mpEditEngineItemPool!=NULL, "EditEngineItemPool missing");
- mpEditEngineItemPool->SetPoolDefaultItem(SvxColorItem(aColor, EE_CHAR_COLOR));
-}
-
-
-
-
-void PresenterTextView::Implementation::SetFontDescriptor (
- const awt::FontDescriptor& rFontDescriptor)
-{
- mxBitmap = NULL;
-
- DBG_ASSERT(mpEditEngineItemPool!=NULL, "EditEngineItemPool missing");
-
- const sal_Int32 nFontHeight = rFontDescriptor.Height;
-
- SvxFontHeightItem aFontHeight(
- Application::GetDefaultDevice()->LogicToPixel(
- Size(0, nFontHeight), MapMode (MAP_POINT)).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 = NULL;
-
- CheckTop();
- mnTotalHeight = -1;
-}
-
-
-
-
-sal_Int32 PresenterTextView::Implementation::GetTop (void) const
-{
- return mnTop;
-}
-
-
-
-
-void PresenterTextView::Implementation::SetTop (const sal_Int32 nTop)
-{
- if (nTop == mnTop)
- return;
-
- mnTop = nTop;
- mxBitmap = NULL;
- CheckTop();
-}
-
-
-
-
-void PresenterTextView::Implementation::SetText (const OUString& rText)
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
- msText = rText;
- mpEditEngine->SetPaperSize(maSize);
- mnTotalHeight = -1;
- mxBitmap = NULL;
-}
-
-
-
-
-sal_Int32 PresenterTextView::Implementation::ParseDistance (const OUString& rsDistance) const
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
- sal_Int32 nDistance (0);
- if (rsDistance.endsWithAsciiL("px", 2))
- {
- nDistance = rsDistance.copy(0,rsDistance.getLength()-2).toInt32();
- }
- else if (rsDistance.endsWithAsciiL("l", 1))
- {
- const sal_Int32 nLines (rsDistance.copy(0,rsDistance.getLength()-1).toInt32());
- // Take the height of the first line as the height of every line.
- const sal_uInt32 nFirstLineHeight (mpEditEngine->GetLineHeight(0,0));
- nDistance = nFirstLineHeight * nLines;
- }
-
- return nDistance;
-}
-
-
-
-
-Reference<rendering::XBitmap> PresenterTextView::Implementation::GetBitmap (void)
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
-
- if ( ! mxBitmap.is())
- {
- if (mpOutputDevice != NULL)
- delete mpOutputDevice;
- mpOutputDevice = new VirtualDevice(*Application::GetDefaultDevice(), 0, 0);
- mpOutputDevice->SetMapMode(MAP_PIXEL);
- mpOutputDevice->SetOutputSizePixel(maSize, sal_True);
- mpOutputDevice->SetLineColor();
- mpOutputDevice->SetFillColor();
- mpOutputDevice->SetBackground(Wallpaper());
- mpOutputDevice->Erase();
-
- MapMode aMapMode (mpOutputDevice->GetMapMode());
- aMapMode.SetOrigin(Point(0,0));
- mpOutputDevice->SetMapMode(aMapMode);
- const 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::getInstance().createBitmap(
- mpCanvas,
- aBitmap
- )->getUNOBitmap();
- }
- return mxBitmap;
-}
-
-
-
-
-sal_Int32 PresenterTextView::Implementation::GetTotalHeight (void)
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
-
- if (mnTotalHeight < 0)
- {
- if ( ! mxBitmap.is())
- GetBitmap();
- mnTotalHeight = mpEditEngine->GetTextHeight();
- }
- return mnTotalHeight;
-}
-
-
-
-
-void PresenterTextView::Implementation::CheckTop (void)
-{
- DBG_ASSERT(mpEditEngine!=NULL, "EditEngine missing");
-
- if (mnTotalHeight < 0)
- mnTotalHeight = mpEditEngine->GetTextHeight();
- if (mpEditEngine!=NULL && mnTop >= mnTotalHeight)
- mnTop = mnTotalHeight - mpEditEngine->GetLineHeight(0,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
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */