00001 // $Id: maskedrr.h 1288 2006-06-09 13:16:24Z phil $ 00002 /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE 00003 ================================XARAHEADERSTART=========================== 00004 00005 Xara LX, a vector drawing and manipulation program. 00006 Copyright (C) 1993-2006 Xara Group Ltd. 00007 Copyright on certain contributions may be held in joint with their 00008 respective authors. See AUTHORS file for details. 00009 00010 LICENSE TO USE AND MODIFY SOFTWARE 00011 ---------------------------------- 00012 00013 This file is part of Xara LX. 00014 00015 Xara LX is free software; you can redistribute it and/or modify it 00016 under the terms of the GNU General Public License version 2 as published 00017 by the Free Software Foundation. 00018 00019 Xara LX and its component source files are distributed in the hope 00020 that it will be useful, but WITHOUT ANY WARRANTY; without even the 00021 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00022 See the GNU General Public License for more details. 00023 00024 You should have received a copy of the GNU General Public License along 00025 with Xara LX (see the file GPL in the root directory of the 00026 distribution); if not, write to the Free Software Foundation, Inc., 51 00027 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00028 00029 00030 ADDITIONAL RIGHTS 00031 ----------------- 00032 00033 Conditional upon your continuing compliance with the GNU General Public 00034 License described above, Xara Group Ltd grants to you certain additional 00035 rights. 00036 00037 The additional rights are to use, modify, and distribute the software 00038 together with the wxWidgets library, the wxXtra library, and the "CDraw" 00039 library and any other such library that any version of Xara LX relased 00040 by Xara Group Ltd requires in order to compile and execute, including 00041 the static linking of that library to XaraLX. In the case of the 00042 "CDraw" library, you may satisfy obligation under the GNU General Public 00043 License to provide source code by providing a binary copy of the library 00044 concerned and a copy of the license accompanying it. 00045 00046 Nothing in this section restricts any of the rights you have under 00047 the GNU General Public License. 00048 00049 00050 SCOPE OF LICENSE 00051 ---------------- 00052 00053 This license applies to this program (XaraLX) and its constituent source 00054 files only, and does not necessarily apply to other Xara products which may 00055 in part share the same code base, and are subject to their own licensing 00056 terms. 00057 00058 This license does not apply to files in the wxXtra directory, which 00059 are built into a separate library, and are subject to the wxWindows 00060 license contained within that directory in the file "WXXTRA-LICENSE". 00061 00062 This license does not apply to the binary libraries (if any) within 00063 the "libs" directory, which are subject to a separate license contained 00064 within that directory in the file "LIBS-LICENSE". 00065 00066 00067 ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS 00068 ---------------------------------------------- 00069 00070 Subject to the terms of the GNU Public License (see above), you are 00071 free to do whatever you like with your modifications. However, you may 00072 (at your option) wish contribute them to Xara's source tree. You can 00073 find details of how to do this at: 00074 http://www.xaraxtreme.org/developers/ 00075 00076 Prior to contributing your modifications, you will need to complete our 00077 contributor agreement. This can be found at: 00078 http://www.xaraxtreme.org/developers/contribute/ 00079 00080 Please note that Xara will not accept modifications which modify any of 00081 the text between the start and end of this header (marked 00082 XARAHEADERSTART and XARAHEADEREND). 00083 00084 00085 MARKS 00086 ----- 00087 00088 Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara 00089 designs are registered or unregistered trademarks, design-marks, and/or 00090 service marks of Xara Group Ltd. All rights in these marks are reserved. 00091 00092 00093 Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK. 00094 http://www.xara.com/ 00095 00096 =================================XARAHEADEREND============================ 00097 */ 00098 // The Masked Render Region 00099 00100 #ifndef INC_MASKEDRR 00101 #define INC_MASKEDRR 00102 00103 #include "grndbmp.h" 00104 //#include "rrcaps.h" - in camtypes.h [AUTOMATICALLY REMOVED] 00105 00106 class FlatTranspFillAttribute; 00107 class StrokeTranspAttribute; 00108 00109 00110 /******************************************************************************************** 00111 00112 < struct MaskRegion 00113 00114 Author: Rik_Heywood (Xara Group Ltd) <camelotdev@xara.com> 00115 Created: 21/4/95 00116 Comment: This struct holds info that is used by the MaskedRenderRegion::GetFirstMaskRegion 00117 and MaskedRenderRegion::GetNextMaskRegion. This struct is used to define the 00118 1 pixel high regions that are extracted from the mask a scan line at a time. 00119 It is a simple struct with the following public member vars in it :- 00120 INT32 x - The X coord of the start of the masked region 00121 INT32 y - The Y Coord of the start of the masked region 00122 INT32 Length - The length in pixels of the masked region, or 0 if there are no 00123 more regions in the mask 00124 SeeAlso: MaskedRenderRegion::GetFirstMaskRegion; MaskedRenderRegion::GetNextMaskRegion 00125 00126 ********************************************************************************************/ 00127 00128 struct MaskRegion 00129 { 00130 INT32 x; 00131 INT32 y; 00132 INT32 Length; 00133 }; 00134 00135 00136 00137 /******************************************************************************************** 00138 00139 > class MaskedRenderRegion : public GRenderBitmap 00140 00141 Author: Rik_Heywood (Xara Group Ltd) <camelotdev@xara.com> 00142 Created: 11/4/95 00143 Purpose: The Masked Render region is used when rendering to regions that can not 00144 do all the fabby things that GRender Regions are capable of (eg Transparancy). 00145 They are used as part of the 3 phase rendering process, in the middle phase. 00146 In this phase all the objects that are deemed to be too complicated to be 00147 rendered by the host render region are actually rendered into a GRenderRegion. 00148 Each of the individual objects that are complex are also rendered into this 00149 Mono Masked Render Region. At the end of the process this Masked Render region 00150 is used to identify the minimum area of the render region that needs to be 00151 blitted into the host render region. 00152 00153 ********************************************************************************************/ 00154 00155 class MaskedRenderRegion : public GRenderBitmap 00156 { 00157 // Give my name in memory dumps 00158 CC_DECLARE_DYNAMIC(MaskedRenderRegion) 00159 00160 public: 00161 // Construction/Destruction etc 00162 MaskedRenderRegion(DocRect, Matrix, FIXED16, double); 00163 ~MaskedRenderRegion(); 00164 00165 // Start render function 00166 BOOL StartRender(); 00167 00168 // Function to tell us about the host render region 00169 void SetHostCaps(RRCaps* pCaps); 00170 00171 // Render Functions we have to overide 00172 virtual void DrawPathToOutputDevice(Path *PathToRender, PathShape shapePath=PATHSHAPE_PATH); 00173 virtual void DrawRect(DocRect *RectToRender); 00174 virtual void DrawLine(const DocCoord &StartPoint, const DocCoord &EndPoint); 00175 virtual void DrawPixel(const DocCoord &Point); 00176 00177 // Functions that are supposed to draw bitmaps 00178 virtual void DrawBitmap(const DocCoord &Point, KernelBitmap* pBitmap); 00179 virtual void DrawBitmap(const DocCoord &Point, UINT32 BitmapID, UINT32 ToolID = NULL); 00180 virtual BOOL DrawTransformedBitmap(NodeBitmap *pNodeBitmap); 00181 00182 // Other Pure virtual drawing functions that have to be overidden 00183 virtual void DrawDragRect(DocRect *RectToRender); 00184 virtual void DrawBlob(DocCoord p, BlobType type); 00185 virtual void DrawCross(const DocCoord &Point, const UINT32 Size); 00186 virtual void DrawBitmapBlob(const DocCoord &Point, KernelBitmap* BlobShape); 00187 virtual void DrawBitmapBlob(const DocCoord &Point, ResourceID resID ); 00188 00189 // Function to help out during the masked blit 00190 BOOL SpreadMask(); 00191 INT32 FindCoverage(BOOL AnyCoverageReturns100 = FALSE); 00192 INT32 FindMaskDpi(); 00193 //FIXED16 FindMaskDpi(); 00194 00195 // Functions to help find all the regions in the mask that need plotting 00196 void GetFirstMaskRegion(MaskRegion* pMaskInfo); 00197 void GetNextMaskRegion(MaskRegion* pMaskInfo); 00198 00199 public: 00200 virtual void SetOffscreen(OffscreenAttrValue*) 00201 { 00202 } 00203 virtual void RestoreOffscreen(OffscreenAttrValue*) 00204 { 00205 } 00206 00207 protected: 00208 // Function to help the GetFirst/NextMaskRegion functions 00209 void ScanMaskFrom(MaskRegion* pMaskInfo); 00210 00211 // Function to help the AboutToRenderComplex/SimpleShape functions 00212 void SetNextShapeColour(DocColour& RequiredCol); 00213 00214 // The colours 00215 DocColour Black; 00216 DocColour White; 00217 00218 // Member vars 00219 protected: 00220 // The Host render regions caps 00221 RRCaps HostCaps; 00222 00223 // Some attrs used as we go 00224 FlatTranspFillAttribute* pFillAttr; 00225 StrokeTranspAttribute* pStrokeAttr; 00226 00227 static INT32 BitCountTable[256]; 00228 }; 00229 00230 #endif // INC_MASKEDRR 00231 00232