colcomp.h

Go to the documentation of this file.
00001 // $Id: colcomp.h 1282 2006-06-09 09:46:49Z alex $
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 
00099 // The document component for the document's colour list.
00100 
00101 #ifndef INC_COLCOMP
00102 #define INC_COLCOMP
00103 
00104 //#include "doccomp.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00105 //#include "colmodel.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00106 //#include "epsstack.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00107 
00108 class ColourList;
00109 class DocColour;
00110 class ImportedColours;
00111 class EPSExportDC;
00112 class NewColourInfo;
00113 class BaseCamelotFilter;
00114 class ExportedColours;
00115 class CXaraFileRecord;
00116 
00117 /********************************************************************************************
00118 
00119 >   class ColourListComponentClass : public DocComponentClass
00120 
00121     Author:     Tim_Browse (Xara Group Ltd) <camelotdev@xara.com>
00122     Created:    02/08/94
00123     Purpose:    Provide a class that will add Colour List components to new documents.
00124     SeeAlso:    DocComponentClass
00125 
00126 ********************************************************************************************/
00127 
00128 class ColourListComponentClass : public DocComponentClass
00129 {
00130     CC_DECLARE_DYNAMIC(ColourListComponentClass)
00131 
00132 public:
00133     static BOOL Init();
00134 
00135     BOOL AddComponent(BaseDocument *);
00136 };
00137 
00138 
00139 
00140 // CopyColourAcross() returns one of 3 valkues to indicate failure or success.
00141 // Success also indicates if an existing colour was merged, or a completely new
00142 // colour has been generated.
00143 typedef enum
00144 {
00145     CCCOPY_FAILED = 0,          // FALSE
00146     CCCOPY_NEWCOLOUR,
00147     CCCOPY_MERGEDCOLOUR
00148 } ColCompCopyResult;
00149 
00150 // Should correspond to the IndexedColourTypes in all but the shade one.
00151 // This is so we can export a shade as a shade rather than a tint
00152 
00153 typedef enum
00154 {
00155     EXPORT_COLOURTYPE_NORMAL = 0,           // The colour is a perfectly normal colour
00156     EXPORT_COLOURTYPE_SPOT,                 // The colour is a Spot Colour
00157     EXPORT_COLOURTYPE_TINT,                 // The colour is a Tint (or a shade, a special type of tint)
00158     EXPORT_COLOURTYPE_LINKED,               // The colour is a Linked colour
00159     EXPORT_COLOURTYPE_SHADE                 // The colour is a Shade
00160 } ExportColourType;
00161 
00162 
00163 /********************************************************************************************
00164 
00165 >   class ColourListComponent : public DocComponent
00166 
00167     Author:     Tim_Browse (Xara Group Ltd) <camelotdev@xara.com>
00168     Created:    02/08/94
00169     Purpose:    Provide a component that is linked to a ColourList object.  This allows
00170                 us to save out colour lists using the serialisation facilities of the
00171                 DocComponent base class.
00172     SeeAlso:    DocComponent
00173 
00174 ********************************************************************************************/
00175 
00176 class ColourListComponent : public DocComponent
00177 {
00178     CC_DECLARE_DYNAMIC(ColourListComponent)
00179 
00180     friend class ImportedColours;
00181 
00182 public:
00183     ColourListComponent();
00184     ColourListComponent(ColourList *);
00185     virtual ~ColourListComponent();
00186     ColourList *GetColourList() { return pIndexedColours; }
00187 
00188 public:
00189     // Usual document component functions...
00190     // These are the EPS related functions - covers from simple EPS to the old native EPS formats
00191     virtual BOOL EPSStartImport(EPSFilter *);
00192     virtual void EPSEndImport(EPSFilter *, BOOL);
00193     virtual BOOL WriteEPSComments(EPSFilter *);
00194     virtual ProcessEPSResult ProcessEPSComment(EPSFilter *, PCTSTR );
00195     virtual void EndOfEPSComment(EPSFilter *);
00196 
00197     // -------------------------------
00198     
00199     // These are the Camelot Version 2 Web and Native file related functions
00200     virtual BOOL StartImport(BaseCamelotFilter *pFilter);
00201     virtual BOOL EndImport(BaseCamelotFilter *pFilter, BOOL Success);
00202     virtual BOOL StartExport(BaseCamelotFilter *pFilter);               // Set up export data structures
00203     virtual BOOL EndExport(BaseCamelotFilter *pFilter, BOOL Success);   // Write out pending data
00204     virtual void CleanUpAfterExport(BOOL Success);                      // Destroy export data structures
00205 
00206 
00207 public:
00208     // Functions for use by code that imports objects and needs to reference the colours
00209     // imported from the file.
00210     IndexedColour *FindNamedColour(PCTSTR, 
00211                                    DocColour *ColDef = NULL, 
00212                                    UINT32 Tint = 100,
00213                                    BOOL Strict = FALSE);
00214 
00215 private:
00216     ColourList *pIndexedColours;
00217 
00218     ImportedColours *pNewColours;
00219 
00220     // Our list of colours that we have currently exported from this document 
00221     ExportedColours *pExportedColours;
00222 
00223     void AddNewColour(IndexedColour *pNewCol);
00224 
00225     BOOL FindIdenticalColour(IndexedColour *pColour, IndexedColour **pResult);
00226 
00227     INT32  ExtractString(PCTSTR Comment, INT32 Start, PTSTR String);
00228     void ReadEPS_RGB(ColourRGBT *pCol, TCHAR *pComment, NewColourInfo *pColourInfo);
00229     void ReadEPS_CMYK(ColourCMYK *pCol, TCHAR *pComment, NewColourInfo *pColourInfo);
00230     void ReadEPS_HSV(ColourHSVT *pCol, TCHAR *pComment, NewColourInfo *pColourInfo);
00231     void ReadEPS_Grey(ColourGreyT *pCol, TCHAR *pComment, NewColourInfo *pColourInfo);
00232     UINT32 ReadEPS_Tint(TCHAR *pComment);
00233     void ReadEPS_Shade(TCHAR *pComment, INT32 *ResultX, INT32 *ResultY);
00234 
00235     BOOL ColourOrChildIsShade(IndexedColour *pCol);
00236     BOOL SaveColourAndChildren(IndexedColour *pCol, EPSExportDC *pDC, 
00237                                BOOL CamelotEPS, INT32 NestingLevel = 0,
00238                                BOOL SaveShades = FALSE);
00239 
00240     void AddComponentValue( PTSTR ColDef, PCTSTR Format, 
00241                            double ComponentValue, BOOL Inherited);
00242 
00243     // Web and Native functions 
00244     INT32 SaveColourAndParents(IndexedColour *pCol, BaseCamelotFilter *pFilter, INT32 NestingLevel = 0);
00245     INT32 SaveComplexColour(IndexedColour *pCol, BaseCamelotFilter *pFilter,    BOOL AddColourToList = TRUE);
00246     INT32 SaveSimpleColour(IndexedColour *pCol, BaseCamelotFilter *pFilter);
00247     INT32 SaveSimpleColour(DocColour *pDocCol, BaseCamelotFilter *pFilter, BOOL CheckSimpleColourList = FALSE);
00248     UINT32 AddComponentValue(FIXED24 ComponentValue, BOOL Inherited);
00249 
00250     INT32 GetIndexColourNumber(IndexedColour *pCol);
00251 
00252     BOOL ReadRGB(ColourRGBT *pCol, NewColourInfo *pColourInfo,
00253                  UINT32 Comp1, UINT32 Comp2, UINT32 Comp3, UINT32 Comp4);
00254     BOOL ReadCMYK(ColourCMYK *pCol, NewColourInfo *pColourInfo,
00255                  UINT32 Comp1, UINT32 Comp2, UINT32 Comp3, UINT32 Comp4);
00256     BOOL ReadHSV(ColourHSVT *pCol, NewColourInfo *pColourInfo,
00257                  UINT32 Comp1, UINT32 Comp2, UINT32 Comp3, UINT32 Comp4);
00258     BOOL ReadGrey(ColourGreyT *pCol, NewColourInfo *pColourInfo, UINT32 Comp1);
00259     BOOL ReadTint(NewColourInfo *pColourInfo, UINT32 Comp1);
00260     BOOL ReadShade(NewColourInfo *pColourInfo, UINT32 Comp1, UINT32 Comp2);
00261 
00262 public:
00263     // The public way of importing and exporting colours for the new native/web filters
00264     BOOL GetDocColour(INT32 ColourRef, DocColour* pDocColour);
00265     BOOL ImportSimpleColour(CXaraFileRecord* pCXFileRec);
00266     BOOL ImportColourDefinition(CXaraFileRecord* pCXFileRec);
00267     INT32 GetWriteColourReference(DocColour* pDocColour, BaseCamelotFilter *pFilter);
00268 
00269 public:
00270     // Functions to fix DocColours (that reference IndexedColours) as we copy them between
00271     // documents. They copy the IndexedColours as necessary to the destination document,
00272     // and fix the copied DocColours to reference the version of the IndexedColour for the
00273     // destination document rather than the source document.
00274     virtual BOOL StartComponentCopy();
00275     virtual BOOL EndComponentCopy();
00276     virtual BOOL EndComponentCopy(IndexedColour *InsertBefore, BOOL Report);
00277     virtual void AbortComponentCopy();
00278     ColCompCopyResult CopyColourAcross(DocColour* pDocColour, BOOL SourceIsUnique = FALSE);
00279     IndexedColour *ExactMatchExists(IndexedColour *SourceColour);
00280 
00281 
00282 private:    // Private ComponentCopy methods/data
00283     // Methods exclusively for CopyColourAcross to use.
00284     // Should NOT be used by any other caller.
00285     INT32 ExtendTables(void);
00286     IndexedColour *MapColour(IndexedColour *SourceColour, BOOL *AlreadyThere = NULL,
00287                              BOOL SourceIsUnique = FALSE);
00288 
00289     // Array pointers - used when copying colour componenents in order to remember
00290     // colour mappings between the source and destination documents.
00291     // To be used only by [Start|End|Abort]ComponentCopy and CopyColourAcross methods
00292     IndexedColour **SourceColours;      // Colour pointers as they appeared in the source doc
00293     IndexedColour **DestColours;        // Col pointers as they now appear in destination doc
00294     BOOL           *MergeColours;       // TRUE if the given colour is to be merged into the dest
00295     INT32 ColourTableSize;              // Size of the dynamically allocated arrays
00296 
00297     IndexedColour *GetIndexedParentOfColour(DocColour Colour);
00298 private:    // Private Importing data
00299     // Used when importing linked/tinted colours
00300     INT32 LinkNesting;
00301 
00302 private:    // Private link used during Importing to provide warnings to the user
00303     BaseCamelotFilter *pCamFilter;
00304     BOOL WarnedBefore;
00305 };
00306 
00307 #endif  // INC_COLCOMP
00308 
00309 

Generated on Sat Nov 10 03:44:48 2007 for Camelot by  doxygen 1.4.4