blob: 72ef8563544c5c6f362ce69df3d24ac020ff1059 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include <svx/sdr/contact/objectcontactofpageview.hxx>
#include <svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx>
#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
#include <svx/sdr/contact/displayinfo.hxx>
#include <svx/svdomedia.hxx>
#include <svx/svdpagv.hxx>
#include <vcl/outdev.hxx>
#include <vcl/window.hxx>
#include <avmedia/mediaitem.hxx>
#include "sdrmediawindow.hxx"
#include <svx/sdrpagewindow.hxx>
#include <svx/sdrpaintwindow.hxx>
//////////////////////////////////////////////////////////////////////////////
namespace sdr { namespace contact {
// ----------------------------------
// - ViewObjectContactOfSdrMediaObj -
// ----------------------------------
ViewObjectContactOfSdrMediaObj::ViewObjectContactOfSdrMediaObj( ObjectContact& rObjectContact,
ViewContact& rViewContact,
const ::avmedia::MediaItem& rMediaItem ) :
ViewObjectContactOfSdrObj( rObjectContact, rViewContact ),
mpMediaWindow( NULL )
{
Window* pWindow = getWindow();
if( pWindow )
{
mpMediaWindow = new SdrMediaWindow( pWindow, *this );
mpMediaWindow->hide();
executeMediaItem( rMediaItem );
}
}
// ------------------------------------------------------------------------------
ViewObjectContactOfSdrMediaObj::~ViewObjectContactOfSdrMediaObj()
{
delete mpMediaWindow;
mpMediaWindow = NULL;
}
// ------------------------------------------------------------------------------
Window* ViewObjectContactOfSdrMediaObj::getWindow() const
{
Window* pRetval = 0;
const ObjectContactOfPageView* pObjectContactOfPageView = dynamic_cast< const ObjectContactOfPageView* >(&GetObjectContact());
if(pObjectContactOfPageView)
{
const SdrPageWindow& rPageWindow = pObjectContactOfPageView->GetPageWindow();
const SdrPaintWindow* pPaintWindow = &rPageWindow.GetPaintWindow();
if(rPageWindow.GetOriginalPaintWindow())
{
// #i83183# prefer OriginalPaintWindow if set; this is
// the real target device. GetPaintWindow() may return
// the current buffer device instead
pPaintWindow = rPageWindow.GetOriginalPaintWindow();
}
OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
if(OUTDEV_WINDOW == rOutDev.GetOutDevType())
{
pRetval = static_cast< Window* >(&rOutDev);
}
}
return pRetval;
}
// ------------------------------------------------------------------------------
bool ViewObjectContactOfSdrMediaObj::hasPreferredSize() const
{
return( mpMediaWindow != NULL && mpMediaWindow->hasPreferredSize() );
}
// ------------------------------------------------------------------------------
Size ViewObjectContactOfSdrMediaObj::getPreferredSize() const
{
Size aRet;
if( mpMediaWindow )
aRet = mpMediaWindow->getPreferredSize();
return aRet;
}
// ------------------------------------------------------------------------------
void ViewObjectContactOfSdrMediaObj::updateMediaItem( ::avmedia::MediaItem& rItem ) const
{
if( mpMediaWindow )
{
mpMediaWindow->updateMediaItem( rItem );
// show/hide is now dependent of play state
if(avmedia::MEDIASTATE_STOP == rItem.getState())
{
mpMediaWindow->hide();
}
else
{
basegfx::B2DRange aViewRange(getObjectRange());
aViewRange.transform(GetObjectContact().getViewInformation2D().getViewTransformation());
const Rectangle aViewRectangle(
(sal_Int32)floor(aViewRange.getMinX()), (sal_Int32)floor(aViewRange.getMinY()),
(sal_Int32)ceil(aViewRange.getMaxX()), (sal_Int32)ceil(aViewRange.getMaxY()));
mpMediaWindow->setPosSize(aViewRectangle);
mpMediaWindow->show();
}
}
}
// ------------------------------------------------------------------------------
void ViewObjectContactOfSdrMediaObj::executeMediaItem( const ::avmedia::MediaItem& rItem )
{
if( mpMediaWindow )
{
::avmedia::MediaItem aUpdatedItem;
mpMediaWindow->executeMediaItem( rItem );
// query new properties after trying to set the new properties
updateMediaItem( aUpdatedItem );
static_cast< ViewContactOfSdrMediaObj& >( GetViewContact() ).mediaPropertiesChanged( aUpdatedItem );
}
}
// ------------------------------------------------------------------------------
}} // end of namespace sdr::contact
//////////////////////////////////////////////////////////////////////////////
// eof