xref: /trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrmediaobj.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_svx.hxx"
30 
31 #include <svx/sdr/contact/objectcontactofpageview.hxx>
32 #include <svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx>
33 #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
34 #include <svx/sdr/contact/displayinfo.hxx>
35 #include <svx/svdomedia.hxx>
36 #include <svx/svdpagv.hxx>
37 #include <vcl/outdev.hxx>
38 #include <vcl/window.hxx>
39 #include <avmedia/mediaitem.hxx>
40 #include "sdrmediawindow.hxx"
41 #include <svx/sdrpagewindow.hxx>
42 #include <svx/sdrpaintwindow.hxx>
43 
44 //////////////////////////////////////////////////////////////////////////////
45 
46 namespace sdr { namespace contact {
47 
48 // ----------------------------------
49 // - ViewObjectContactOfSdrMediaObj -
50 // ----------------------------------
51 
52 ViewObjectContactOfSdrMediaObj::ViewObjectContactOfSdrMediaObj( ObjectContact& rObjectContact,
53                                                                 ViewContact& rViewContact,
54                                                                 const ::avmedia::MediaItem& rMediaItem ) :
55     ViewObjectContactOfSdrObj( rObjectContact, rViewContact ),
56     mpMediaWindow( NULL )
57 {
58     Window* pWindow = getWindow();
59 
60     if( pWindow )
61     {
62         mpMediaWindow = new SdrMediaWindow( pWindow, *this );
63         mpMediaWindow->hide();
64         executeMediaItem( rMediaItem );
65     }
66 }
67 
68 // ------------------------------------------------------------------------------
69 
70 ViewObjectContactOfSdrMediaObj::~ViewObjectContactOfSdrMediaObj()
71 {
72     delete mpMediaWindow;
73     mpMediaWindow = NULL;
74 }
75 
76 // ------------------------------------------------------------------------------
77 
78 Window* ViewObjectContactOfSdrMediaObj::getWindow() const
79 {
80     Window* pRetval = 0;
81 
82     const ObjectContactOfPageView* pObjectContactOfPageView = dynamic_cast< const ObjectContactOfPageView* >(&GetObjectContact());
83 
84     if(pObjectContactOfPageView)
85     {
86         const SdrPageWindow& rPageWindow = pObjectContactOfPageView->GetPageWindow();
87         const SdrPaintWindow* pPaintWindow = &rPageWindow.GetPaintWindow();
88 
89         if(rPageWindow.GetOriginalPaintWindow())
90         {
91             // #i83183# prefer OriginalPaintWindow if set; this is
92             // the real target device. GetPaintWindow() may return
93             // the current buffer device instead
94             pPaintWindow = rPageWindow.GetOriginalPaintWindow();
95         }
96 
97         OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
98 
99         if(OUTDEV_WINDOW == rOutDev.GetOutDevType())
100         {
101             pRetval = static_cast< Window* >(&rOutDev);
102         }
103     }
104 
105     return pRetval;
106 }
107 
108 // ------------------------------------------------------------------------------
109 
110 bool ViewObjectContactOfSdrMediaObj::hasPreferredSize() const
111 {
112     return( mpMediaWindow != NULL && mpMediaWindow->hasPreferredSize() );
113 }
114 
115 // ------------------------------------------------------------------------------
116 
117 Size ViewObjectContactOfSdrMediaObj::getPreferredSize() const
118 {
119     Size aRet;
120 
121     if( mpMediaWindow )
122         aRet = mpMediaWindow->getPreferredSize();
123 
124     return aRet;
125 }
126 
127 // ------------------------------------------------------------------------------
128 
129 void ViewObjectContactOfSdrMediaObj::updateMediaItem( ::avmedia::MediaItem& rItem ) const
130 {
131     if( mpMediaWindow )
132     {
133         mpMediaWindow->updateMediaItem( rItem );
134 
135         // show/hide is now dependent of play state
136         if(avmedia::MEDIASTATE_STOP == rItem.getState())
137         {
138             mpMediaWindow->hide();
139         }
140         else
141         {
142             basegfx::B2DRange aViewRange(getObjectRange());
143             aViewRange.transform(GetObjectContact().getViewInformation2D().getViewTransformation());
144 
145             const Rectangle aViewRectangle(
146                 (sal_Int32)floor(aViewRange.getMinX()), (sal_Int32)floor(aViewRange.getMinY()),
147                 (sal_Int32)ceil(aViewRange.getMaxX()), (sal_Int32)ceil(aViewRange.getMaxY()));
148 
149             mpMediaWindow->setPosSize(aViewRectangle);
150             mpMediaWindow->show();
151         }
152     }
153 }
154 
155 // ------------------------------------------------------------------------------
156 
157 void ViewObjectContactOfSdrMediaObj::executeMediaItem( const ::avmedia::MediaItem& rItem )
158 {
159     if( mpMediaWindow )
160     {
161         ::avmedia::MediaItem aUpdatedItem;
162 
163         mpMediaWindow->executeMediaItem( rItem );
164 
165         // query new properties after trying to set the new properties
166         updateMediaItem( aUpdatedItem );
167         static_cast< ViewContactOfSdrMediaObj& >( GetViewContact() ).mediaPropertiesChanged( aUpdatedItem );
168     }
169 }
170 
171 // ------------------------------------------------------------------------------
172 
173 }} // end of namespace sdr::contact
174 
175 //////////////////////////////////////////////////////////////////////////////
176 // eof
177