1*25ea7f45SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*25ea7f45SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*25ea7f45SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*25ea7f45SAndrew Rist * distributed with this work for additional information 6*25ea7f45SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*25ea7f45SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*25ea7f45SAndrew Rist * "License"); you may not use this file except in compliance 9*25ea7f45SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*25ea7f45SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*25ea7f45SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*25ea7f45SAndrew Rist * software distributed under the License is distributed on an 15*25ea7f45SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*25ea7f45SAndrew Rist * KIND, either express or implied. See the License for the 17*25ea7f45SAndrew Rist * specific language governing permissions and limitations 18*25ea7f45SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*25ea7f45SAndrew Rist *************************************************************/ 21*25ea7f45SAndrew Rist 22*25ea7f45SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_canvas.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <canvas/debug.hxx> 28cdf0e10cSrcweir #include <canvas/verbosetrace.hxx> 29cdf0e10cSrcweir #include <canvas/canvastools.hxx> 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <osl/mutex.hxx> 32cdf0e10cSrcweir #include <rtl/instance.hxx> 33cdf0e10cSrcweir #include <cppuhelper/compbase1.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <com/sun/star/lang/NoSupportException.hpp> 36cdf0e10cSrcweir 37cdf0e10cSrcweir #include <basegfx/tools/canvastools.hxx> 38cdf0e10cSrcweir #include <basegfx/tools/unopolypolygon.hxx> 39cdf0e10cSrcweir #include <vcl/canvastools.hxx> 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include "null_spritecanvas.hxx" 42cdf0e10cSrcweir #include "null_canvasbitmap.hxx" 43cdf0e10cSrcweir #include "null_devicehelper.hxx" 44cdf0e10cSrcweir 45cdf0e10cSrcweir 46cdf0e10cSrcweir using namespace ::com::sun::star; 47cdf0e10cSrcweir 48cdf0e10cSrcweir namespace nullcanvas 49cdf0e10cSrcweir { DeviceHelper()50cdf0e10cSrcweir DeviceHelper::DeviceHelper() : 51cdf0e10cSrcweir mpSpriteCanvas( NULL ), 52cdf0e10cSrcweir maSize(), 53cdf0e10cSrcweir mbFullScreen(false) 54cdf0e10cSrcweir { 55cdf0e10cSrcweir } 56cdf0e10cSrcweir init(SpriteCanvas & rSpriteCanvas,const::basegfx::B2ISize & rSize,bool bFullscreen)57cdf0e10cSrcweir void DeviceHelper::init( SpriteCanvas& rSpriteCanvas, 58cdf0e10cSrcweir const ::basegfx::B2ISize& rSize, 59cdf0e10cSrcweir bool bFullscreen ) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir mpSpriteCanvas = &rSpriteCanvas; 62cdf0e10cSrcweir maSize = rSize; 63cdf0e10cSrcweir mbFullScreen = bFullscreen; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir disposing()66cdf0e10cSrcweir void DeviceHelper::disposing() 67cdf0e10cSrcweir { 68cdf0e10cSrcweir // release all references 69cdf0e10cSrcweir mpSpriteCanvas = NULL; 70cdf0e10cSrcweir } 71cdf0e10cSrcweir getPhysicalResolution()72cdf0e10cSrcweir geometry::RealSize2D DeviceHelper::getPhysicalResolution() 73cdf0e10cSrcweir { 74cdf0e10cSrcweir return geometry::RealSize2D( 75, 75 ); 75cdf0e10cSrcweir } 76cdf0e10cSrcweir getPhysicalSize()77cdf0e10cSrcweir geometry::RealSize2D DeviceHelper::getPhysicalSize() 78cdf0e10cSrcweir { 79cdf0e10cSrcweir return geometry::RealSize2D( 210, 280 ); 80cdf0e10cSrcweir } 81cdf0e10cSrcweir createCompatibleLinePolyPolygon(const uno::Reference<rendering::XGraphicDevice> &,const uno::Sequence<uno::Sequence<geometry::RealPoint2D>> & points)82cdf0e10cSrcweir uno::Reference< rendering::XLinePolyPolygon2D > DeviceHelper::createCompatibleLinePolyPolygon( 83cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 84cdf0e10cSrcweir const uno::Sequence< uno::Sequence< geometry::RealPoint2D > >& points ) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir // disposed? 87cdf0e10cSrcweir if( !mpSpriteCanvas ) 88cdf0e10cSrcweir return uno::Reference< rendering::XLinePolyPolygon2D >(); // we're disposed 89cdf0e10cSrcweir 90cdf0e10cSrcweir return uno::Reference< rendering::XLinePolyPolygon2D >( 91cdf0e10cSrcweir new ::basegfx::unotools::UnoPolyPolygon( 92cdf0e10cSrcweir ::basegfx::unotools::polyPolygonFromPoint2DSequenceSequence( points ))); 93cdf0e10cSrcweir } 94cdf0e10cSrcweir createCompatibleBezierPolyPolygon(const uno::Reference<rendering::XGraphicDevice> &,const uno::Sequence<uno::Sequence<geometry::RealBezierSegment2D>> & points)95cdf0e10cSrcweir uno::Reference< rendering::XBezierPolyPolygon2D > DeviceHelper::createCompatibleBezierPolyPolygon( 96cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 97cdf0e10cSrcweir const uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > >& points ) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir // disposed? 100cdf0e10cSrcweir if( !mpSpriteCanvas ) 101cdf0e10cSrcweir return uno::Reference< rendering::XBezierPolyPolygon2D >(); // we're disposed 102cdf0e10cSrcweir 103cdf0e10cSrcweir return uno::Reference< rendering::XBezierPolyPolygon2D >( 104cdf0e10cSrcweir new ::basegfx::unotools::UnoPolyPolygon( 105cdf0e10cSrcweir ::basegfx::unotools::polyPolygonFromBezier2DSequenceSequence( points ) ) ); 106cdf0e10cSrcweir } 107cdf0e10cSrcweir createCompatibleBitmap(const uno::Reference<rendering::XGraphicDevice> &,const geometry::IntegerSize2D & size)108cdf0e10cSrcweir uno::Reference< rendering::XBitmap > DeviceHelper::createCompatibleBitmap( 109cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 110cdf0e10cSrcweir const geometry::IntegerSize2D& size ) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir // disposed? 113cdf0e10cSrcweir if( !mpSpriteCanvas ) 114cdf0e10cSrcweir return uno::Reference< rendering::XBitmap >(); // we're disposed 115cdf0e10cSrcweir 116cdf0e10cSrcweir return uno::Reference< rendering::XBitmap >( 117cdf0e10cSrcweir new CanvasBitmap( 118cdf0e10cSrcweir ::basegfx::unotools::b2ISizeFromIntegerSize2D( size ), 119cdf0e10cSrcweir mpSpriteCanvas, 120cdf0e10cSrcweir false )); 121cdf0e10cSrcweir } 122cdf0e10cSrcweir createVolatileBitmap(const uno::Reference<rendering::XGraphicDevice> &,const geometry::IntegerSize2D &)123cdf0e10cSrcweir uno::Reference< rendering::XVolatileBitmap > DeviceHelper::createVolatileBitmap( 124cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 125cdf0e10cSrcweir const geometry::IntegerSize2D& /*size*/ ) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir return uno::Reference< rendering::XVolatileBitmap >(); 128cdf0e10cSrcweir } 129cdf0e10cSrcweir createCompatibleAlphaBitmap(const uno::Reference<rendering::XGraphicDevice> &,const geometry::IntegerSize2D & size)130cdf0e10cSrcweir uno::Reference< rendering::XBitmap > DeviceHelper::createCompatibleAlphaBitmap( 131cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 132cdf0e10cSrcweir const geometry::IntegerSize2D& size ) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir // disposed? 135cdf0e10cSrcweir if( !mpSpriteCanvas ) 136cdf0e10cSrcweir return uno::Reference< rendering::XBitmap >(); // we're disposed 137cdf0e10cSrcweir 138cdf0e10cSrcweir return uno::Reference< rendering::XBitmap >( 139cdf0e10cSrcweir new CanvasBitmap( 140cdf0e10cSrcweir ::basegfx::unotools::b2ISizeFromIntegerSize2D( size ), 141cdf0e10cSrcweir mpSpriteCanvas, 142cdf0e10cSrcweir true )); 143cdf0e10cSrcweir } 144cdf0e10cSrcweir createVolatileAlphaBitmap(const uno::Reference<rendering::XGraphicDevice> &,const geometry::IntegerSize2D &)145cdf0e10cSrcweir uno::Reference< rendering::XVolatileBitmap > DeviceHelper::createVolatileAlphaBitmap( 146cdf0e10cSrcweir const uno::Reference< rendering::XGraphicDevice >& /*rDevice*/, 147cdf0e10cSrcweir const geometry::IntegerSize2D& /*size*/ ) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir return uno::Reference< rendering::XVolatileBitmap >(); 150cdf0e10cSrcweir } 151cdf0e10cSrcweir hasFullScreenMode()152cdf0e10cSrcweir sal_Bool DeviceHelper::hasFullScreenMode() 153cdf0e10cSrcweir { 154cdf0e10cSrcweir // TODO(F3): offer fullscreen mode the XCanvas way 155cdf0e10cSrcweir return false; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir enterFullScreenMode(sal_Bool)158cdf0e10cSrcweir sal_Bool DeviceHelper::enterFullScreenMode( sal_Bool /*bEnter*/ ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir // TODO(F3): offer fullscreen mode the XCanvas way 161cdf0e10cSrcweir return false; 162cdf0e10cSrcweir } 163cdf0e10cSrcweir createBuffers(::sal_Int32)164cdf0e10cSrcweir ::sal_Int32 DeviceHelper::createBuffers( ::sal_Int32 /*nBuffers*/ ) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir // TODO(F3): implement XBufferStrategy interface. For now, we 167cdf0e10cSrcweir // _always_ will have exactly one backbuffer 168cdf0e10cSrcweir return 1; 169cdf0e10cSrcweir } 170cdf0e10cSrcweir destroyBuffers()171cdf0e10cSrcweir void DeviceHelper::destroyBuffers() 172cdf0e10cSrcweir { 173cdf0e10cSrcweir // TODO(F3): implement XBufferStrategy interface. For now, we 174cdf0e10cSrcweir // _always_ will have exactly one backbuffer 175cdf0e10cSrcweir } 176cdf0e10cSrcweir showBuffer(bool bIsVisible,::sal_Bool bUpdateAll)177cdf0e10cSrcweir ::sal_Bool DeviceHelper::showBuffer( bool bIsVisible, ::sal_Bool bUpdateAll ) 178cdf0e10cSrcweir { 179cdf0e10cSrcweir // forward to sprite canvas helper 180cdf0e10cSrcweir if( !bIsVisible || !mpSpriteCanvas ) 181cdf0e10cSrcweir return false; 182cdf0e10cSrcweir 183cdf0e10cSrcweir return mpSpriteCanvas->updateScreen( bUpdateAll ); 184cdf0e10cSrcweir } 185cdf0e10cSrcweir switchBuffer(bool bIsVisible,::sal_Bool bUpdateAll)186cdf0e10cSrcweir ::sal_Bool DeviceHelper::switchBuffer( bool bIsVisible, ::sal_Bool bUpdateAll ) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir // no difference for VCL canvas 189cdf0e10cSrcweir return showBuffer( bIsVisible, bUpdateAll ); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir isAccelerated() const192cdf0e10cSrcweir uno::Any DeviceHelper::isAccelerated() const 193cdf0e10cSrcweir { 194cdf0e10cSrcweir return ::com::sun::star::uno::makeAny(false); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir getDeviceHandle() const197cdf0e10cSrcweir uno::Any DeviceHelper::getDeviceHandle() const 198cdf0e10cSrcweir { 199cdf0e10cSrcweir return uno::Any(); 200cdf0e10cSrcweir } 201cdf0e10cSrcweir getSurfaceHandle() const202cdf0e10cSrcweir uno::Any DeviceHelper::getSurfaceHandle() const 203cdf0e10cSrcweir { 204cdf0e10cSrcweir return uno::Any(); 205cdf0e10cSrcweir } 206cdf0e10cSrcweir 207cdf0e10cSrcweir namespace 208cdf0e10cSrcweir { 209cdf0e10cSrcweir struct DeviceColorSpace: public rtl::StaticWithInit<uno::Reference<rendering::XColorSpace>, 210cdf0e10cSrcweir DeviceColorSpace> 211cdf0e10cSrcweir { operator ()nullcanvas::__anona012fb3e0111::DeviceColorSpace212cdf0e10cSrcweir uno::Reference<rendering::XColorSpace> operator()() 213cdf0e10cSrcweir { 214cdf0e10cSrcweir return vcl::unotools::createStandardColorSpace(); 215cdf0e10cSrcweir } 216cdf0e10cSrcweir }; 217cdf0e10cSrcweir } 218cdf0e10cSrcweir getColorSpace() const219cdf0e10cSrcweir uno::Reference<rendering::XColorSpace> DeviceHelper::getColorSpace() const 220cdf0e10cSrcweir { 221cdf0e10cSrcweir // always the same 222cdf0e10cSrcweir return DeviceColorSpace::get(); 223cdf0e10cSrcweir } 224cdf0e10cSrcweir notifySizeUpdate(const awt::Rectangle &)225cdf0e10cSrcweir void DeviceHelper::notifySizeUpdate( const awt::Rectangle& /*rBounds*/ ) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir // TODO 228cdf0e10cSrcweir } 229cdf0e10cSrcweir dumpScreenContent() const230cdf0e10cSrcweir void DeviceHelper::dumpScreenContent() const 231cdf0e10cSrcweir { 232cdf0e10cSrcweir OSL_TRACE( "%s\n", 233cdf0e10cSrcweir BOOST_CURRENT_FUNCTION ); 234cdf0e10cSrcweir } 235cdf0e10cSrcweir } 236