// $Id: ccpanose.h 751 2006-03-31 15:43:49Z alex $ /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE ================================XARAHEADERSTART=========================== Xara LX, a vector drawing and manipulation program. Copyright (C) 1993-2006 Xara Group Ltd. Copyright on certain contributions may be held in joint with their respective authors. See AUTHORS file for details. LICENSE TO USE AND MODIFY SOFTWARE ---------------------------------- This file is part of Xara LX. Xara LX is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. Xara LX and its component source files are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Xara LX (see the file GPL in the root directory of the distribution); if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ADDITIONAL RIGHTS ----------------- Conditional upon your continuing compliance with the GNU General Public License described above, Xara Group Ltd grants to you certain additional rights. The additional rights are to use, modify, and distribute the software together with the wxWidgets library, the wxXtra library, and the "CDraw" library and any other such library that any version of Xara LX relased by Xara Group Ltd requires in order to compile and execute, including the static linking of that library to XaraLX. In the case of the "CDraw" library, you may satisfy obligation under the GNU General Public License to provide source code by providing a binary copy of the library concerned and a copy of the license accompanying it. Nothing in this section restricts any of the rights you have under the GNU General Public License. SCOPE OF LICENSE ---------------- This license applies to this program (XaraLX) and its constituent source files only, and does not necessarily apply to other Xara products which may in part share the same code base, and are subject to their own licensing terms. This license does not apply to files in the wxXtra directory, which are built into a separate library, and are subject to the wxWindows license contained within that directory in the file "WXXTRA-LICENSE". This license does not apply to the binary libraries (if any) within the "libs" directory, which are subject to a separate license contained within that directory in the file "LIBS-LICENSE". ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS ---------------------------------------------- Subject to the terms of the GNU Public License (see above), you are free to do whatever you like with your modifications. However, you may (at your option) wish contribute them to Xara's source tree. You can find details of how to do this at: http://www.xaraxtreme.org/developers/ Prior to contributing your modifications, you will need to complete our contributor agreement. This can be found at: http://www.xaraxtreme.org/developers/contribute/ Please note that Xara will not accept modifications which modify any of the text between the start and end of this header (marked XARAHEADERSTART and XARAHEADEREND). MARKS ----- Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara designs are registered or unregistered trademarks, design-marks, and/or service marks of Xara Group Ltd. All rights in these marks are reserved. Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK. http://www.xara.com/ =================================XARAHEADEREND============================ */ /******************************************************************************************** > CCPanose.h Author: Andy_Hayward (Xara Group Ltd) Created: 24/05/96 Purpose: Kernel Panose related class and functions ********************************************************************************************/ #ifndef INC_CCPANOSE #define INC_CCPANOSE #if !defined(__WXMSW__) struct PANOSE { BYTE bFamilyType; BYTE bSerifStyle; BYTE bWeight; BYTE bProportion; BYTE bContrast; BYTE bStrokeVariation; BYTE bArmStyle; BYTE bLetterform; BYTE bMidline; BYTE bXHeight; }; typedef PANOSE *LPPANOSE; #define PAN_ANY 0 /* Any */ #define PAN_NO_FIT 1 /* No Fit */ #define PAN_FAMILY_TEXT_DISPLAY 2 /* Text and Display */ #define PAN_FAMILY_SCRIPT 3 /* Script */ #define PAN_FAMILY_DECORATIVE 4 /* Decorative */ #define PAN_FAMILY_PICTORIAL 5 /* Pictorial */ #define PAN_SERIF_COVE 2 /* Cove */ #define PAN_SERIF_OBTUSE_COVE 3 /* Obtuse Cove */ #define PAN_SERIF_SQUARE_COVE 4 /* Square Cove */ #define PAN_SERIF_OBTUSE_SQUARE_COVE 5 /* Obtuse Square Cove */ #define PAN_SERIF_SQUARE 6 /* Square */ #define PAN_SERIF_THIN 7 /* Thin */ #define PAN_SERIF_BONE 8 /* Bone */ #define PAN_SERIF_EXAGGERATED 9 /* Exaggerated */ #define PAN_SERIF_TRIANGLE 10 /* Triangle */ #define PAN_SERIF_NORMAL_SANS 11 /* Normal Sans */ #define PAN_SERIF_OBTUSE_SANS 12 /* Obtuse Sans */ #define PAN_SERIF_PERP_SANS 13 /* Prep Sans */ #define PAN_SERIF_FLARED 14 /* Flared */ #define PAN_SERIF_ROUNDED 15 /* Rounded */ #define PAN_WEIGHT_VERY_LIGHT 2 /* Very Light */ #define PAN_WEIGHT_LIGHT 3 /* Light */ #define PAN_WEIGHT_THIN 4 /* Thin */ #define PAN_WEIGHT_BOOK 5 /* Book */ #define PAN_WEIGHT_MEDIUM 6 /* Medium */ #define PAN_WEIGHT_DEMI 7 /* Demi */ #define PAN_WEIGHT_BOLD 8 /* Bold */ #define PAN_WEIGHT_HEAVY 9 /* Heavy */ #define PAN_WEIGHT_BLACK 10 /* Black */ #define PAN_WEIGHT_NORD 11 /* Nord */ #define PAN_PROP_OLD_STYLE 2 /* Old Style */ #define PAN_PROP_MODERN 3 /* Modern */ #define PAN_PROP_EVEN_WIDTH 4 /* Even Width */ #define PAN_PROP_EXPANDED 5 /* Expanded */ #define PAN_PROP_CONDENSED 6 /* Condensed */ #define PAN_PROP_VERY_EXPANDED 7 /* Very Expanded */ #define PAN_PROP_VERY_CONDENSED 8 /* Very Condensed */ #define PAN_PROP_MONOSPACED 9 /* Monospaced */ #define PAN_CONTRAST_NONE 2 /* None */ #define PAN_CONTRAST_VERY_LOW 3 /* Very Low */ #define PAN_CONTRAST_LOW 4 /* Low */ #define PAN_CONTRAST_MEDIUM_LOW 5 /* Medium Low */ #define PAN_CONTRAST_MEDIUM 6 /* Medium */ #define PAN_CONTRAST_MEDIUM_HIGH 7 /* Mediim High */ #define PAN_CONTRAST_HIGH 8 /* High */ #define PAN_CONTRAST_VERY_HIGH 9 /* Very High */ #define PAN_STROKE_GRADUAL_DIAG 2 /* Gradual/Diagonal */ #define PAN_STROKE_GRADUAL_TRAN 3 /* Gradual/Transitional */ #define PAN_STROKE_GRADUAL_VERT 4 /* Gradual/Vertical */ #define PAN_STROKE_GRADUAL_HORZ 5 /* Gradual/Horizontal */ #define PAN_STROKE_RAPID_VERT 6 /* Rapid/Vertical */ #define PAN_STROKE_RAPID_HORZ 7 /* Rapid/Horizontal */ #define PAN_STROKE_INSTANT_VERT 8 /* Instant/Vertical */ #define PAN_STRAIGHT_ARMS_HORZ 2 /* Straight Arms/Horizontal */ #define PAN_STRAIGHT_ARMS_WEDGE 3 /* Straight Arms/Wedge */ #define PAN_STRAIGHT_ARMS_VERT 4 /* Straight Arms/Vertical */ #define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5 /* Straight Arms/Single-Serif */ #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6 /* Straight Arms/Double-Serif */ #define PAN_BENT_ARMS_HORZ 7 /* Non-Straight Arms/Horizontal */ #define PAN_BENT_ARMS_WEDGE 8 /* Non-Straight Arms/Wedge */ #define PAN_BENT_ARMS_VERT 9 /* Non-Straight Arms/Vertical */ #define PAN_BENT_ARMS_SINGLE_SERIF 10 /* Non-Straight Arms/Single-Serif */ #define PAN_BENT_ARMS_DOUBLE_SERIF 11 /* Non-Straight Arms/Double-Serif */ #define PAN_LETT_NORMAL_CONTACT 2 /* Normal/Contact */ #define PAN_LETT_NORMAL_WEIGHTED 3 /* Normal/Weighted */ #define PAN_LETT_NORMAL_BOXED 4 /* Normal/Boxed */ #define PAN_LETT_NORMAL_FLATTENED 5 /* Normal/Flattened */ #define PAN_LETT_NORMAL_ROUNDED 6 /* Normal/Rounded */ #define PAN_LETT_NORMAL_OFF_CENTER 7 /* Normal/Off Center */ #define PAN_LETT_NORMAL_SQUARE 8 /* Normal/Square */ #define PAN_LETT_OBLIQUE_CONTACT 9 /* Oblique/Contact */ #define PAN_LETT_OBLIQUE_WEIGHTED 10 /* Oblique/Weighted */ #define PAN_LETT_OBLIQUE_BOXED 11 /* Oblique/Boxed */ #define PAN_LETT_OBLIQUE_FLATTENED 12 /* Oblique/Flattened */ #define PAN_LETT_OBLIQUE_ROUNDED 13 /* Oblique/Rounded */ #define PAN_LETT_OBLIQUE_OFF_CENTER 14 /* Oblique/Off Center */ #define PAN_LETT_OBLIQUE_SQUARE 15 /* Oblique/Square */ #define PAN_MIDLINE_STANDARD_TRIMMED 2 /* Standard/Trimmed */ #define PAN_MIDLINE_STANDARD_POINTED 3 /* Standard/Pointed */ #define PAN_MIDLINE_STANDARD_SERIFED 4 /* Standard/Serifed */ #define PAN_MIDLINE_HIGH_TRIMMED 5 /* High/Trimmed */ #define PAN_MIDLINE_HIGH_POINTED 6 /* High/Pointed */ #define PAN_MIDLINE_HIGH_SERIFED 7 /* High/Serifed */ #define PAN_MIDLINE_CONSTANT_TRIMMED 8 /* Constant/Trimmed */ #define PAN_MIDLINE_CONSTANT_POINTED 9 /* Constant/Pointed */ #define PAN_MIDLINE_CONSTANT_SERIFED 10 /* Constant/Serifed */ #define PAN_MIDLINE_LOW_TRIMMED 11 /* Low/Trimmed */ #define PAN_MIDLINE_LOW_POINTED 12 /* Low/Pointed */ #define PAN_MIDLINE_LOW_SERIFED 13 /* Low/Serifed */ #define PAN_XHEIGHT_CONSTANT_SMALL 2 /* Constant/Small */ #define PAN_XHEIGHT_CONSTANT_STD 3 /* Constant/Standard */ #define PAN_XHEIGHT_CONSTANT_LARGE 4 /* Constant/Large */ #define PAN_XHEIGHT_DUCKING_SMALL 5 /* Ducking/Small */ #define PAN_XHEIGHT_DUCKING_STD 6 /* Ducking/Standard */ #define PAN_XHEIGHT_DUCKING_LARGE 7 /* Ducking/Large */ struct OUTLINETEXTMETRIC { PANOSE otmPanoseNumber; }; #endif /******************************************************************************************** > class CCPanose Author: Andy_Hayward (Xara Group Ltd) Created: 24/05/96 Base Class: CCObject Purpose: Class to hold and manipulate Panose numbers See also: class FontMan, class ATMFontMan, class TTFontMan ********************************************************************************************/ class CCPanose : public CCObject { CC_DECLARE_DYNCREATE(CCPanose) // private member variables private: // identical to the member variables of the Win32 PANOSE structure. We duplicate them here // since this is kernel code - platform independent (alledgedly!) BYTE mFamilyType; BYTE mSerifStyle; BYTE mWeight; BYTE mProportion; BYTE mContrast; BYTE mStrokeVariation; BYTE mArmStyle; BYTE mLetterform; BYTE mMidline; BYTE mXHeight; // constructor, copy constructor, destructor, assignment public: CCPanose(); CCPanose(const PANOSE &PanoseNumber); // public member functions public: void SetAllToAny(); // Sets all components of the panose number to PAN_ANY void SetAll(BYTE, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE, BYTE); void operator=(const CCPanose & x); BOOL BodgePanoseNumber(BOOL Bold, BOOL Italic); BOOL BodgeToNormal(); // static member functions public: static UINT32 Distance(const CCPanose &x, const CCPanose &y); private: static UINT32 DistanceFamilyType(BYTE x, BYTE y); static UINT32 DistanceSerifStyle(BYTE x, BYTE y); static UINT32 DistanceWeight(BYTE x, BYTE y); static UINT32 DistanceProportion(BYTE x, BYTE y); static UINT32 DistanceContrast(BYTE x, BYTE y); static UINT32 DistanceStrokeVariation(BYTE x, BYTE y); static UINT32 DistanceArmStyle(BYTE x, BYTE y); static UINT32 DistanceLetterform(BYTE x, BYTE y); static UINT32 DistanceMidline(BYTE x, BYTE y); static UINT32 DistanceXHeight(BYTE x, BYTE y); // separate set and get functions, to hide the internals of this class. the internals // may change - we could have a member structure of the OS's panose class. public: void SetFamilyType(BYTE value) {mFamilyType = value;}; void SetSerifStyle(BYTE value) {mSerifStyle = value;}; void SetWeight(BYTE value) {mWeight = value;}; void SetProportion(BYTE value) {mProportion = value;}; void SetContrast(BYTE value) {mContrast = value;}; void SetStrokeVariation(BYTE value) {mStrokeVariation = value;}; void SetArmStyle(BYTE value) {mArmStyle = value;}; void SetLetterform(BYTE value) {mLetterform = value;}; void SetMidline(BYTE value) {mMidline = value;}; void SetXHeight(BYTE value) {mXHeight = value;}; BYTE GetFamilyType() const {return mFamilyType;}; BYTE GetSerifStyle() const {return mSerifStyle;}; BYTE GetWeight() const {return mWeight;}; BYTE GetProportion() const {return mProportion;}; BYTE GetContrast() const {return mContrast;}; BYTE GetStrokeVariation() const {return mStrokeVariation;}; BYTE GetArmStyle() const {return mArmStyle;}; BYTE GetLetterform() const {return mLetterform;}; BYTE GetMidline() const {return mMidline;}; BYTE GetXHeight() const {return mXHeight;}; public: // debug details, used in various places, such as the camelot debug tree, new file format tree display.. void GetDebugDetails(StringBase * Str); }; #endif