191c99ff4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 391c99ff4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 491c99ff4SAndrew Rist * or more contributor license agreements. See the NOTICE file 591c99ff4SAndrew Rist * distributed with this work for additional information 691c99ff4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 791c99ff4SAndrew Rist * to you under the Apache License, Version 2.0 (the 891c99ff4SAndrew Rist * "License"); you may not use this file except in compliance 991c99ff4SAndrew Rist * with the License. You may obtain a copy of the License at 1091c99ff4SAndrew Rist * 1191c99ff4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 1291c99ff4SAndrew Rist * 1391c99ff4SAndrew Rist * Unless required by applicable law or agreed to in writing, 1491c99ff4SAndrew Rist * software distributed under the License is distributed on an 1591c99ff4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1691c99ff4SAndrew Rist * KIND, either express or implied. See the License for the 1791c99ff4SAndrew Rist * specific language governing permissions and limitations 1891c99ff4SAndrew Rist * under the License. 1991c99ff4SAndrew Rist * 2091c99ff4SAndrew Rist *************************************************************/ 2191c99ff4SAndrew Rist 2291c99ff4SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef INCLUDED_CANVAS_SURFACEPROXY_HXX 25cdf0e10cSrcweir #define INCLUDED_CANVAS_SURFACEPROXY_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <canvas/rendering/isurfaceproxy.hxx> 28cdf0e10cSrcweir #include <canvas/rendering/icolorbuffer.hxx> 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include "pagemanager.hxx" 31cdf0e10cSrcweir #include "surface.hxx" 32cdf0e10cSrcweir 33cdf0e10cSrcweir namespace canvas 34cdf0e10cSrcweir { 35cdf0e10cSrcweir 36cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////// 37cdf0e10cSrcweir // SurfaceProxy 38cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////// 39cdf0e10cSrcweir 40cdf0e10cSrcweir /** Definition of the surface proxy class. 41cdf0e10cSrcweir 42cdf0e10cSrcweir Surface proxies are the connection between *one* source image 43cdf0e10cSrcweir and *one or more* hardware surfaces (or textures). in a 44*07a3d7f1SPedro Giffuni logical structure surface proxies represent solely this 45cdf0e10cSrcweir dependeny plus some simple cache management. 46cdf0e10cSrcweir */ 47cdf0e10cSrcweir class SurfaceProxy : public ISurfaceProxy 48cdf0e10cSrcweir { 49cdf0e10cSrcweir public: 50cdf0e10cSrcweir 51cdf0e10cSrcweir SurfaceProxy( const canvas::IColorBufferSharedPtr& pBuffer, 52cdf0e10cSrcweir const PageManagerSharedPtr &pPageManager ); 53cdf0e10cSrcweir 54cdf0e10cSrcweir // ISurfaceProxy interface 55cdf0e10cSrcweir virtual void setColorBufferDirty(); 56cdf0e10cSrcweir 57cdf0e10cSrcweir /** Render the surface content to screen. 58cdf0e10cSrcweir 59cdf0e10cSrcweir @param fAlpha 60cdf0e10cSrcweir Overall alpha for content 61cdf0e10cSrcweir 62cdf0e10cSrcweir @param rPos 63cdf0e10cSrcweir Output position 64cdf0e10cSrcweir 65cdf0e10cSrcweir @param rTransform 66cdf0e10cSrcweir Output transformation (does not affect output position) 67cdf0e10cSrcweir */ 68cdf0e10cSrcweir virtual bool draw( double fAlpha, 69cdf0e10cSrcweir const ::basegfx::B2DPoint& rPos, 70cdf0e10cSrcweir const ::basegfx::B2DHomMatrix& rTransform ); 71cdf0e10cSrcweir 72cdf0e10cSrcweir /** Render the surface content to screen. 73cdf0e10cSrcweir 74cdf0e10cSrcweir @param fAlpha 75cdf0e10cSrcweir Overall alpha for content 76cdf0e10cSrcweir 77cdf0e10cSrcweir @param rPos 78cdf0e10cSrcweir Output position 79cdf0e10cSrcweir 80cdf0e10cSrcweir @param rArea 81cdf0e10cSrcweir Subset of the surface to render. Coordinate system are 82cdf0e10cSrcweir surface area pixel, given area will be clipped to the 83cdf0e10cSrcweir surface bounds. 84cdf0e10cSrcweir 85cdf0e10cSrcweir @param rTransform 86cdf0e10cSrcweir Output transformation (does not affect output position) 87cdf0e10cSrcweir */ 88cdf0e10cSrcweir virtual bool draw( double fAlpha, 89cdf0e10cSrcweir const ::basegfx::B2DPoint& rPos, 90cdf0e10cSrcweir const ::basegfx::B2DRange& rArea, 91cdf0e10cSrcweir const ::basegfx::B2DHomMatrix& rTransform ); 92cdf0e10cSrcweir 93cdf0e10cSrcweir /** Render the surface content to screen. 94cdf0e10cSrcweir 95cdf0e10cSrcweir @param fAlpha 96cdf0e10cSrcweir Overall alpha for content 97cdf0e10cSrcweir 98cdf0e10cSrcweir @param rPos 99cdf0e10cSrcweir Output position 100cdf0e10cSrcweir 101cdf0e10cSrcweir @param rClipPoly 102cdf0e10cSrcweir Clip polygon for the surface. The clip polygon is also 103cdf0e10cSrcweir subject to the output transformation. 104cdf0e10cSrcweir 105cdf0e10cSrcweir @param rTransform 106cdf0e10cSrcweir Output transformation (does not affect output position) 107cdf0e10cSrcweir */ 108cdf0e10cSrcweir virtual bool draw( double fAlpha, 109cdf0e10cSrcweir const ::basegfx::B2DPoint& rPos, 110cdf0e10cSrcweir const ::basegfx::B2DPolyPolygon& rClipPoly, 111cdf0e10cSrcweir const ::basegfx::B2DHomMatrix& rTransform ); 112cdf0e10cSrcweir 113cdf0e10cSrcweir private: 114cdf0e10cSrcweir PageManagerSharedPtr mpPageManager; 115cdf0e10cSrcweir 116cdf0e10cSrcweir // the pagemanager will distribute the image 117cdf0e10cSrcweir // to one or more surfaces, this is why we 118cdf0e10cSrcweir // need a list here. 119cdf0e10cSrcweir std::vector<SurfaceSharedPtr> maSurfaceList; 120cdf0e10cSrcweir 121cdf0e10cSrcweir // pointer to the source of image data 122cdf0e10cSrcweir // which always is stored in system memory, 123cdf0e10cSrcweir // 32bit rgba and can have any size. 124cdf0e10cSrcweir canvas::IColorBufferSharedPtr mpBuffer; 125cdf0e10cSrcweir }; 126cdf0e10cSrcweir 127cdf0e10cSrcweir typedef ::boost::shared_ptr< SurfaceProxy > SurfaceProxySharedPtr; 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir #endif 131