ie. void f(void); becomes void f(); I used the following command to make the changes: git grep -lP '\(\s*void\s*\)' -- *.cxx \ | xargs perl -pi -w -e 's/(\w+)\s*\(\s*void\s*\)/$1\(\)/g;' and ran it for both .cxx and .hxx files. Change-Id: I314a1b56e9c14d10726e32841736b0ad5eef8ddd
458 lines
13 KiB
C++
458 lines
13 KiB
C++
/* -*- 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 "PresenterPaneBase.hxx"
|
|
#include "PresenterCanvasHelper.hxx"
|
|
#include "PresenterController.hxx"
|
|
#include "PresenterGeometryHelper.hxx"
|
|
#include "PresenterPaintManager.hxx"
|
|
#include "PresenterTextView.hxx"
|
|
#include <com/sun/star/awt/PosSize.hpp>
|
|
#include <com/sun/star/awt/XWindow2.hpp>
|
|
#include <com/sun/star/awt/XWindowPeer.hpp>
|
|
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
|
|
#include <com/sun/star/drawing/CanvasFeature.hpp>
|
|
#include <com/sun/star/rendering/CompositeOperation.hpp>
|
|
#include <com/sun/star/rendering/TexturingMode.hpp>
|
|
#include <osl/mutex.hxx>
|
|
|
|
using namespace css;
|
|
using namespace css::uno;
|
|
using namespace css::drawing::framework;
|
|
|
|
namespace sdext { namespace presenter {
|
|
|
|
//===== PresenterPaneBase =====================================================
|
|
|
|
PresenterPaneBase::PresenterPaneBase (
|
|
const Reference<XComponentContext>& rxContext,
|
|
const ::rtl::Reference<PresenterController>& rpPresenterController)
|
|
: PresenterPaneBaseInterfaceBase(m_aMutex),
|
|
mpPresenterController(rpPresenterController),
|
|
mxParentWindow(),
|
|
mxBorderWindow(),
|
|
mxBorderCanvas(),
|
|
mxContentWindow(),
|
|
mxContentCanvas(),
|
|
mxPaneId(),
|
|
mxBorderPainter(),
|
|
mxPresenterHelper(),
|
|
msTitle(),
|
|
mxComponentContext(rxContext),
|
|
mpViewBackground(),
|
|
mbHasCallout(false),
|
|
maCalloutAnchor()
|
|
{
|
|
if (mpPresenterController.get() != NULL)
|
|
mxPresenterHelper = mpPresenterController->GetPresenterHelper();
|
|
}
|
|
|
|
PresenterPaneBase::~PresenterPaneBase()
|
|
{
|
|
}
|
|
|
|
void PresenterPaneBase::disposing()
|
|
{
|
|
if (mxBorderWindow.is())
|
|
{
|
|
mxBorderWindow->removeWindowListener(this);
|
|
mxBorderWindow->removePaintListener(this);
|
|
}
|
|
|
|
{
|
|
Reference<XComponent> xComponent (mxContentCanvas, UNO_QUERY);
|
|
mxContentCanvas = NULL;
|
|
if (xComponent.is())
|
|
xComponent->dispose();
|
|
}
|
|
|
|
{
|
|
Reference<XComponent> xComponent (mxContentWindow, UNO_QUERY);
|
|
mxContentWindow = NULL;
|
|
if (xComponent.is())
|
|
xComponent->dispose();
|
|
}
|
|
|
|
{
|
|
Reference<XComponent> xComponent (mxBorderCanvas, UNO_QUERY);
|
|
mxBorderCanvas = NULL;
|
|
if (xComponent.is())
|
|
xComponent->dispose();
|
|
}
|
|
|
|
{
|
|
Reference<XComponent> xComponent (mxBorderWindow, UNO_QUERY);
|
|
mxBorderWindow = NULL;
|
|
if (xComponent.is())
|
|
xComponent->dispose();
|
|
}
|
|
|
|
mxComponentContext = NULL;
|
|
}
|
|
|
|
void PresenterPaneBase::SetTitle (const OUString& rsTitle)
|
|
{
|
|
msTitle = rsTitle;
|
|
|
|
OSL_ASSERT(mpPresenterController.get()!=NULL);
|
|
OSL_ASSERT(mpPresenterController->GetPaintManager().get()!=NULL);
|
|
|
|
mpPresenterController->GetPaintManager()->Invalidate(mxBorderWindow);
|
|
}
|
|
|
|
OUString PresenterPaneBase::GetTitle() const
|
|
{
|
|
return msTitle;
|
|
}
|
|
|
|
Reference<drawing::framework::XPaneBorderPainter>
|
|
PresenterPaneBase::GetPaneBorderPainter() const
|
|
{
|
|
return mxBorderPainter;
|
|
}
|
|
|
|
void PresenterPaneBase::SetCalloutAnchor (const css::awt::Point& rCalloutAnchor)
|
|
{
|
|
mbHasCallout = true;
|
|
// Anchor is given in the coorindate system of the parent window.
|
|
// Transform it into the local coordinate system.
|
|
maCalloutAnchor = rCalloutAnchor;
|
|
const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
|
|
maCalloutAnchor.X -= aBorderBox.X;
|
|
maCalloutAnchor.Y -= aBorderBox.Y;
|
|
|
|
// Move the bottom of the border window so that it goes through the
|
|
// callout anchor (special case for bottom callout).
|
|
sal_Int32 nHeight (rCalloutAnchor.Y - aBorderBox.Y);
|
|
if (mxBorderPainter.is() && mxPaneId.is())
|
|
nHeight += mxBorderPainter->getCalloutOffset(mxPaneId->getResourceURL()).Y;
|
|
|
|
if (nHeight != aBorderBox.Height)
|
|
{
|
|
mxBorderWindow->setPosSize(
|
|
aBorderBox.X,
|
|
aBorderBox.Y,
|
|
aBorderBox.Width,
|
|
nHeight,
|
|
awt::PosSize::HEIGHT);
|
|
}
|
|
|
|
mpPresenterController->GetPaintManager()->Invalidate(mxBorderWindow);
|
|
}
|
|
|
|
awt::Point PresenterPaneBase::GetCalloutAnchor() const
|
|
{
|
|
return maCalloutAnchor;
|
|
}
|
|
|
|
//----- XInitialization -------------------------------------------------------
|
|
|
|
void SAL_CALL PresenterPaneBase::initialize (const Sequence<Any>& rArguments)
|
|
throw (Exception, RuntimeException, std::exception)
|
|
{
|
|
ThrowIfDisposed();
|
|
|
|
if ( ! mxComponentContext.is())
|
|
{
|
|
throw RuntimeException(
|
|
"PresenterSpritePane: missing component context",
|
|
static_cast<XWeak*>(this));
|
|
}
|
|
|
|
if (rArguments.getLength() == 5 || rArguments.getLength() == 6)
|
|
{
|
|
try
|
|
{
|
|
// Get the resource id from the first argument.
|
|
if ( ! (rArguments[0] >>= mxPaneId))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid pane id",
|
|
static_cast<XWeak*>(this),
|
|
0);
|
|
}
|
|
|
|
if ( ! (rArguments[1] >>= mxParentWindow))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid parent window",
|
|
static_cast<XWeak*>(this),
|
|
1);
|
|
}
|
|
|
|
Reference<rendering::XSpriteCanvas> xParentCanvas;
|
|
if ( ! (rArguments[2] >>= xParentCanvas))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid parent canvas",
|
|
static_cast<XWeak*>(this),
|
|
2);
|
|
}
|
|
|
|
if ( ! (rArguments[3] >>= msTitle))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid title",
|
|
static_cast<XWeak*>(this),
|
|
3);
|
|
}
|
|
|
|
if ( ! (rArguments[4] >>= mxBorderPainter))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid border painter",
|
|
static_cast<XWeak*>(this),
|
|
4);
|
|
}
|
|
|
|
bool bIsWindowVisibleOnCreation (true);
|
|
if (rArguments.getLength()>5 && ! (rArguments[5] >>= bIsWindowVisibleOnCreation))
|
|
{
|
|
throw lang::IllegalArgumentException(
|
|
"PresenterPane: invalid window visibility flag",
|
|
static_cast<XWeak*>(this),
|
|
5);
|
|
}
|
|
|
|
CreateWindows(mxParentWindow, bIsWindowVisibleOnCreation);
|
|
|
|
if (mxBorderWindow.is())
|
|
{
|
|
mxBorderWindow->addWindowListener(this);
|
|
mxBorderWindow->addPaintListener(this);
|
|
}
|
|
|
|
CreateCanvases(mxParentWindow, xParentCanvas);
|
|
|
|
// Raise new windows.
|
|
ToTop();
|
|
}
|
|
catch (Exception&)
|
|
{
|
|
mxContentWindow = NULL;
|
|
mxComponentContext = NULL;
|
|
throw;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw RuntimeException(
|
|
"PresenterSpritePane: invalid number of arguments",
|
|
static_cast<XWeak*>(this));
|
|
}
|
|
}
|
|
|
|
//----- XResourceId -----------------------------------------------------------
|
|
|
|
Reference<XResourceId> SAL_CALL PresenterPaneBase::getResourceId()
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
ThrowIfDisposed();
|
|
return mxPaneId;
|
|
}
|
|
|
|
sal_Bool SAL_CALL PresenterPaneBase::isAnchorOnly()
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//----- XWindowListener -------------------------------------------------------
|
|
|
|
void SAL_CALL PresenterPaneBase::windowResized (const awt::WindowEvent& rEvent)
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
(void)rEvent;
|
|
ThrowIfDisposed();
|
|
}
|
|
|
|
void SAL_CALL PresenterPaneBase::windowMoved (const awt::WindowEvent& rEvent)
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
(void)rEvent;
|
|
ThrowIfDisposed();
|
|
}
|
|
|
|
void SAL_CALL PresenterPaneBase::windowShown (const lang::EventObject& rEvent)
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
(void)rEvent;
|
|
ThrowIfDisposed();
|
|
}
|
|
|
|
void SAL_CALL PresenterPaneBase::windowHidden (const lang::EventObject& rEvent)
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
(void)rEvent;
|
|
ThrowIfDisposed();
|
|
}
|
|
|
|
//----- lang::XEventListener --------------------------------------------------
|
|
|
|
void SAL_CALL PresenterPaneBase::disposing (const lang::EventObject& rEvent)
|
|
throw (RuntimeException, std::exception)
|
|
{
|
|
if (rEvent.Source == mxBorderWindow)
|
|
{
|
|
mxBorderWindow = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void PresenterPaneBase::CreateWindows (
|
|
const Reference<awt::XWindow>& rxParentWindow,
|
|
const bool bIsWindowVisibleOnCreation)
|
|
{
|
|
if (mxPresenterHelper.is() && rxParentWindow.is())
|
|
{
|
|
|
|
mxBorderWindow = mxPresenterHelper->createWindow(
|
|
rxParentWindow,
|
|
sal_False,
|
|
bIsWindowVisibleOnCreation,
|
|
sal_False,
|
|
sal_False);
|
|
mxContentWindow = mxPresenterHelper->createWindow(
|
|
mxBorderWindow,
|
|
sal_False,
|
|
bIsWindowVisibleOnCreation,
|
|
sal_False,
|
|
sal_False);
|
|
}
|
|
}
|
|
|
|
Reference<awt::XWindow> PresenterPaneBase::GetBorderWindow() const
|
|
{
|
|
return mxBorderWindow;
|
|
}
|
|
|
|
void PresenterPaneBase::ToTop()
|
|
{
|
|
if (mxPresenterHelper.is())
|
|
mxPresenterHelper->toTop(mxContentWindow);
|
|
}
|
|
|
|
void PresenterPaneBase::SetBackground (const SharedBitmapDescriptor& rpBackground)
|
|
{
|
|
mpViewBackground = rpBackground;
|
|
}
|
|
|
|
void PresenterPaneBase::PaintBorderBackground (
|
|
const awt::Rectangle& rBorderBox,
|
|
const awt::Rectangle& rUpdateBox)
|
|
{
|
|
(void)rBorderBox;
|
|
(void)rUpdateBox;
|
|
/*
|
|
// The outer box of the border is given. We need the center and inner
|
|
// box as well.
|
|
awt::Rectangle aCenterBox (
|
|
mxBorderPainter->removeBorder(
|
|
mxPaneId->getResourceURL(),
|
|
rBorderBox,
|
|
drawing::framework::BorderType_OUTER_BORDER));
|
|
awt::Rectangle aInnerBox (
|
|
mxBorderPainter->removeBorder(
|
|
mxPaneId->getResourceURL(),
|
|
rBorderBox,
|
|
drawing::framework::BorderType_TOTAL_BORDER));
|
|
mpPresenterController->GetCanvasHelper()->Paint(
|
|
mpViewBackground,
|
|
mxBorderCanvas,
|
|
rUpdateBox,
|
|
aCenterBox,
|
|
aInnerBox);
|
|
*/
|
|
}
|
|
|
|
void PresenterPaneBase::PaintBorder (const awt::Rectangle& rUpdateBox)
|
|
{
|
|
OSL_ASSERT(mxPaneId.is());
|
|
|
|
if (mxBorderPainter.is() && mxBorderWindow.is() && mxBorderCanvas.is())
|
|
{
|
|
awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
|
|
awt::Rectangle aLocalBorderBox (0,0, aBorderBox.Width, aBorderBox.Height);
|
|
|
|
PaintBorderBackground(aLocalBorderBox, rUpdateBox);
|
|
|
|
if (mbHasCallout)
|
|
mxBorderPainter->paintBorderWithCallout(
|
|
mxPaneId->getResourceURL(),
|
|
mxBorderCanvas,
|
|
aLocalBorderBox,
|
|
rUpdateBox,
|
|
msTitle,
|
|
maCalloutAnchor);
|
|
else
|
|
mxBorderPainter->paintBorder(
|
|
mxPaneId->getResourceURL(),
|
|
mxBorderCanvas,
|
|
aLocalBorderBox,
|
|
rUpdateBox,
|
|
msTitle);
|
|
}
|
|
}
|
|
|
|
void PresenterPaneBase::LayoutContextWindow()
|
|
{
|
|
OSL_ASSERT(mxPaneId.is());
|
|
OSL_ASSERT(mxBorderWindow.is());
|
|
OSL_ASSERT(mxContentWindow.is());
|
|
if (mxBorderPainter.is() && mxPaneId.is() && mxBorderWindow.is() && mxContentWindow.is())
|
|
{
|
|
const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
|
|
const awt::Rectangle aInnerBox (mxBorderPainter->removeBorder(
|
|
mxPaneId->getResourceURL(),
|
|
aBorderBox,
|
|
drawing::framework::BorderType_TOTAL_BORDER));
|
|
mxContentWindow->setPosSize(
|
|
aInnerBox.X - aBorderBox.X,
|
|
aInnerBox.Y - aBorderBox.Y,
|
|
aInnerBox.Width,
|
|
aInnerBox.Height,
|
|
awt::PosSize::POSSIZE);
|
|
}
|
|
}
|
|
|
|
bool PresenterPaneBase::IsVisible() const
|
|
{
|
|
Reference<awt::XWindow2> xWindow2 (mxBorderPainter, UNO_QUERY);
|
|
if (xWindow2.is())
|
|
return xWindow2->isVisible();
|
|
|
|
return false;
|
|
}
|
|
|
|
void PresenterPaneBase::ThrowIfDisposed()
|
|
throw (::com::sun::star::lang::DisposedException)
|
|
{
|
|
if (rBHelper.bDisposed || rBHelper.bInDispose)
|
|
{
|
|
throw lang::DisposedException (
|
|
"PresenterPane object has already been disposed",
|
|
static_cast<uno::XWeak*>(this));
|
|
}
|
|
}
|
|
|
|
} } // end of namespace ::sd::presenter
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|