xref: /AOO41X/main/canvas/source/vcl/spritedevicehelper.cxx (revision 47148b3bc50811ceb41802e4cc50a5db21535900)
125ea7f45SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
325ea7f45SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
425ea7f45SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
525ea7f45SAndrew Rist  * distributed with this work for additional information
625ea7f45SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
725ea7f45SAndrew Rist  * to you under the Apache License, Version 2.0 (the
825ea7f45SAndrew Rist  * "License"); you may not use this file except in compliance
925ea7f45SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1125ea7f45SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1325ea7f45SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1425ea7f45SAndrew Rist  * software distributed under the License is distributed on an
1525ea7f45SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1625ea7f45SAndrew Rist  * KIND, either express or implied.  See the License for the
1725ea7f45SAndrew Rist  * specific language governing permissions and limitations
1825ea7f45SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2025ea7f45SAndrew Rist  *************************************************************/
2125ea7f45SAndrew Rist 
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_canvas.hxx"
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #include <canvas/debug.hxx>
26cdf0e10cSrcweir #include <canvas/canvastools.hxx>
27cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
28cdf0e10cSrcweir #include <vcl/canvastools.hxx>
29cdf0e10cSrcweir #include <basegfx/tools/canvastools.hxx>
3045fd3b9aSArmin Le Grand #include <vcl/dibtools.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #include "spritedevicehelper.hxx"
33cdf0e10cSrcweir #include "spritecanvas.hxx"
34cdf0e10cSrcweir #include "spritecanvashelper.hxx"
35cdf0e10cSrcweir #include "canvasbitmap.hxx"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir using namespace ::com::sun::star;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir namespace vclcanvas
40cdf0e10cSrcweir {
SpriteDeviceHelper()41cdf0e10cSrcweir     SpriteDeviceHelper::SpriteDeviceHelper() :
42cdf0e10cSrcweir         mpBackBuffer()
43cdf0e10cSrcweir     {
44cdf0e10cSrcweir     }
45cdf0e10cSrcweir 
init(const OutDevProviderSharedPtr & pOutDev)46cdf0e10cSrcweir     void SpriteDeviceHelper::init( const OutDevProviderSharedPtr& pOutDev )
47cdf0e10cSrcweir     {
48cdf0e10cSrcweir         DeviceHelper::init(pOutDev);
49cdf0e10cSrcweir 
50cdf0e10cSrcweir         // setup back buffer
51cdf0e10cSrcweir         OutputDevice& rOutDev( pOutDev->getOutDev() );
52cdf0e10cSrcweir         mpBackBuffer.reset( new BackBuffer( rOutDev ));
53cdf0e10cSrcweir         mpBackBuffer->setSize( rOutDev.GetOutputSizePixel() );
54cdf0e10cSrcweir 
55cdf0e10cSrcweir         // #i95645#
56cdf0e10cSrcweir #if defined( QUARTZ )
57cdf0e10cSrcweir         // use AA on VCLCanvas for Mac
58cdf0e10cSrcweir         mpBackBuffer->getOutDev().SetAntialiasing( ANTIALIASING_ENABLE_B2DDRAW | mpBackBuffer->getOutDev().GetAntialiasing() );
59cdf0e10cSrcweir #else
60cdf0e10cSrcweir         // switch off AA for WIN32 and UNIX, the VCLCanvas does not look good with it and
61cdf0e10cSrcweir         // is not required to do AA. It would need to be adapted to use it correctly
62cdf0e10cSrcweir         // (especially gradient painting). This will need extra work.
63cdf0e10cSrcweir         mpBackBuffer->getOutDev().SetAntialiasing(mpBackBuffer->getOutDev().GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW);
64cdf0e10cSrcweir #endif
65cdf0e10cSrcweir     }
66cdf0e10cSrcweir 
createBuffers(::sal_Int32 nBuffers)67cdf0e10cSrcweir     ::sal_Int32 SpriteDeviceHelper::createBuffers( ::sal_Int32 nBuffers )
68cdf0e10cSrcweir     {
69cdf0e10cSrcweir         (void)nBuffers;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir         // TODO(F3): implement XBufferStrategy interface. For now, we
72cdf0e10cSrcweir         // _always_ will have exactly one backbuffer
73cdf0e10cSrcweir         return 1;
74cdf0e10cSrcweir     }
75cdf0e10cSrcweir 
destroyBuffers()76cdf0e10cSrcweir     void SpriteDeviceHelper::destroyBuffers()
77cdf0e10cSrcweir     {
78cdf0e10cSrcweir         // TODO(F3): implement XBufferStrategy interface. For now, we
79cdf0e10cSrcweir         // _always_ will have exactly one backbuffer
80cdf0e10cSrcweir     }
81cdf0e10cSrcweir 
showBuffer(bool,::sal_Bool)82cdf0e10cSrcweir     ::sal_Bool SpriteDeviceHelper::showBuffer( bool, ::sal_Bool )
83cdf0e10cSrcweir     {
84cdf0e10cSrcweir         OSL_ENSURE(false,"Not supposed to be called, handled by SpriteCanvas");
85cdf0e10cSrcweir         return sal_False;
86cdf0e10cSrcweir     }
87cdf0e10cSrcweir 
switchBuffer(bool,::sal_Bool)88cdf0e10cSrcweir     ::sal_Bool SpriteDeviceHelper::switchBuffer( bool, ::sal_Bool )
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir         OSL_ENSURE(false,"Not supposed to be called, handled by SpriteCanvas");
91cdf0e10cSrcweir         return sal_False;
92cdf0e10cSrcweir     }
93cdf0e10cSrcweir 
disposing()94cdf0e10cSrcweir     void SpriteDeviceHelper::disposing()
95cdf0e10cSrcweir     {
96cdf0e10cSrcweir         // release all references
97cdf0e10cSrcweir         mpBackBuffer.reset();
98cdf0e10cSrcweir 
99cdf0e10cSrcweir         DeviceHelper::disposing();
100cdf0e10cSrcweir     }
101cdf0e10cSrcweir 
isAccelerated() const102cdf0e10cSrcweir     uno::Any SpriteDeviceHelper::isAccelerated() const
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir         return DeviceHelper::isAccelerated();
105cdf0e10cSrcweir     }
106cdf0e10cSrcweir 
getDeviceHandle() const107cdf0e10cSrcweir     uno::Any SpriteDeviceHelper::getDeviceHandle() const
108cdf0e10cSrcweir     {
109cdf0e10cSrcweir         return DeviceHelper::getDeviceHandle();
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir 
getSurfaceHandle() const112cdf0e10cSrcweir     uno::Any SpriteDeviceHelper::getSurfaceHandle() const
113cdf0e10cSrcweir     {
114cdf0e10cSrcweir         if( !mpBackBuffer )
115cdf0e10cSrcweir             return uno::Any();
116cdf0e10cSrcweir 
117cdf0e10cSrcweir         return uno::makeAny(
118cdf0e10cSrcweir             reinterpret_cast< sal_Int64 >(&mpBackBuffer->getOutDev()) );
119cdf0e10cSrcweir     }
120cdf0e10cSrcweir 
notifySizeUpdate(const awt::Rectangle & rBounds)121cdf0e10cSrcweir     void SpriteDeviceHelper::notifySizeUpdate( const awt::Rectangle& rBounds )
122cdf0e10cSrcweir     {
123cdf0e10cSrcweir         if( mpBackBuffer )
124cdf0e10cSrcweir             mpBackBuffer->setSize( ::Size(rBounds.Width,
125cdf0e10cSrcweir                                           rBounds.Height) );
126cdf0e10cSrcweir     }
127cdf0e10cSrcweir 
dumpScreenContent() const128cdf0e10cSrcweir     void SpriteDeviceHelper::dumpScreenContent() const
129cdf0e10cSrcweir     {
130cdf0e10cSrcweir         DeviceHelper::dumpScreenContent();
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         static sal_uInt32 nFilePostfixCount(0);
133cdf0e10cSrcweir 
134cdf0e10cSrcweir         if( mpBackBuffer )
135cdf0e10cSrcweir         {
136cdf0e10cSrcweir             String aFilename( String::CreateFromAscii("dbg_backbuffer") );
137cdf0e10cSrcweir             aFilename += String::CreateFromInt32(nFilePostfixCount);
138cdf0e10cSrcweir             aFilename += String::CreateFromAscii(".bmp");
139cdf0e10cSrcweir 
140cdf0e10cSrcweir             SvFileStream aStream( aFilename, STREAM_STD_READWRITE );
141cdf0e10cSrcweir 
142cdf0e10cSrcweir             const ::Point aEmptyPoint;
143cdf0e10cSrcweir             mpBackBuffer->getOutDev().EnableMapMode( sal_False );
144*5f27b83cSArmin Le Grand             mpBackBuffer->getOutDev().SetAntialiasing( ANTIALIASING_ENABLE_B2DDRAW );
14545fd3b9aSArmin Le Grand             WriteDIB(mpBackBuffer->getOutDev().GetBitmap(aEmptyPoint, mpBackBuffer->getOutDev().GetOutputSizePixel()), aStream, false, true);
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir         ++nFilePostfixCount;
149cdf0e10cSrcweir     }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir }
152