00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 #ifndef INC_MI32_MGD2_H
00102 #define INC_MI32_MGD2_H
00103
00104 #ifndef INC_MI32_MG2BASE_H
00105 #include <mi32/mg2base.h>
00106 #endif
00107
00108 #ifndef INC_MI32_ELEMSTYL_H
00109 #include <mi32/elemstyl.h>
00110 #endif
00111
00112 #ifndef INC_MI32_DISPINFO_H
00113 #include <mi32/dispinfo.h>
00114 #endif
00115
00116 #ifndef INC_MI32_RECT_H
00117 #include <mi32/rect.h>
00118 #endif
00119
00120 #ifndef INC_MI32_SCRNUNIT_H
00121 #include <mi32/scrnunit.h>
00122 #endif
00123
00124 #ifndef INC_MI32_TEXTBASE_H
00125 #include <mi32/textbase.h>
00126 #endif
00127
00128 #ifndef INC_MI32_COLORARRAY_H
00129 #include <mi32/colorarray.h>
00130 #endif
00131
00132 #ifndef INC_MI32_MG2CMS_H
00133 #include <mi32/mg2cms.h>
00134 #endif
00135
00136 #ifndef INC_MI32_MG2ENUMS_H
00137 #include <mi32/mg2enums.h>
00138 #endif
00139
00140 #ifndef INC_MI32_ICONID_H
00141 #include <mi32/iconid.h>
00142 #endif
00143
00144 #ifndef INC_MI32_STIPPLEMASK_H
00145 #include <mi32/stipplemask.h>
00146 #endif
00147
00148
00149 #ifndef GENERATING_DOXYGEN_OUTPUT
00150
00151 class MISTRING;
00152 class LABELSTYLE;
00153 class POLYLINE;
00154 class POLYLINELIST;
00155 class REGION2D;
00156 class SUBREGION2D;
00157 struct TEXTMETRICS;
00158 struct FTFACE;
00159 struct COLORCOMPSTRUCT;
00160 struct MICONSTRUCT;
00161 class BINARYTOREGIONINTERFACE;
00162 class SAVEFONTFLAGS;
00163 namespace SPATMOD {
00164 namespace IMAGE {
00165 class STAGE_ARRAY;
00166 }
00167 }
00168 namespace HTML {
00169 class HTMLDOC;
00170 }
00171 namespace RVC {
00172 class STYLE;
00173 class RASTER;
00174 class STYLEPATTERN_BASE;
00175 class STYLEPATTERN_BITMAP;
00176 class STYLEPATTERN_LINE;
00177 class STYLEPATTERN_HATCH;
00178 class STYLEPATTERN_SYMBOL;
00179 }
00180 namespace {
00181 class LOCALOPENFONTS;
00182 }
00183 namespace MGD {
00184 class OTPRIV;
00185 struct STRINGDATA;
00186 class CONTEXT;
00187 class DEVICE_MEM1;
00188 class DEVICE_MEM1_SPARSE;
00189 class DEVICE_MEM8G;
00190 }
00191 #endif // GENERATING_DOXYGEN_OUTPUT
00192
00193
00194 namespace MGD {
00195
00196
00197
00198
00199
00200
00201 #define MgdTEXTGID_ChangeFace 0xFFFF
00202 #define MgdTEXTGID_LeftToRight 0xFFFE
00203 #define MgdTEXTGID_RightToLeft 0xFFFD
00204 #define MgdTEXTGID_NextGlyph0Width 0xFFFC
00205 #define MgdTEXTGID_FallbackFace 0xFFFB
00206 #define MgdTEXTGID_SpecialCodeMin 0xFFFB // For quicker comparison
00207
00208
00210 struct GLYPHINFO {
00211 double lbearing;
00212 double rbearing;
00213 double rspacing;
00214 double ascent;
00215 double descent;
00216 };
00217
00218
00220 struct FONTINFO {
00221 double ascent;
00222 double descent;
00223 double linespace;
00224 UINT16 NumGlyphs;
00225 UINT16 InitChar;
00226 UINT16 LastChar;
00227 UINT16 NullChar;
00228 };
00229
00230
00232 class FONT {
00233 public:
00234
00235 enum MODE {
00236 MODE_MIUNICODE,
00237 MODE_RAWGID,
00238 MODE_GID
00239 };
00240
00241 enum FONTTYPE {
00242 FONTTYPE_OF,
00243 FONTTYPE_TTF
00244 };
00245
00256 static ERRVALUE ReadTTF (
00257 const MIUNICODE* name,
00258 SIMPLE_ARRAY<UINT8>& data
00259 );
00260
00261 FONT();
00262
00263 virtual ~FONT();
00264
00265 virtual int DrawGlyph (
00266 MGD::CONTEXT* context,
00267 double dx,
00268 double dy,
00269 double baseangle,
00270 const MIUNICODE* ucstr,
00271 MGD::FONT::MODE mode
00272 ) = 0;
00273
00274 virtual int DrawGlyph (
00275 MGD::CONTEXT* context,
00276 double dx,
00277 double dy,
00278 double baseangle,
00279 const STRINGDATA& string,
00280 int n
00281 ) = 0;
00282
00283 virtual double NextPosition (
00284 MGD::CONTEXT* context,
00285 double* retx,
00286 double* rety,
00287 double baseangle,
00288 const STRINGDATA& string,
00289 int n,
00290 double SpaceExtra = 0.0,
00291 double GlyphExtra = 0.0
00292 ) = 0;
00293
00294 virtual int GetFontMetrics (
00295 MGD::CONTEXT* context,
00296 MGD::FONTINFO& fontinfo
00297 ) = 0;
00298
00299 virtual int GetGlyphMetrics (
00300 MGD::CONTEXT* context,
00301 MIUNICODE ch,
00302 MGD::GLYPHINFO& glyphinfo,
00303 MGD::FONT::MODE mode
00304 ) = 0;
00305
00306 virtual int GetGlyphExtents (
00307 MGD::CONTEXT* context,
00308 const double& dx,
00309 const double& dy,
00310 const double& baseangle,
00311 MIUNICODE ch,
00312 DRECT2D& extents,
00313 MGD::FONT::MODE mode
00314 ) = 0;
00315
00316 virtual bool IsEmbeddable (
00317 ) const = 0;
00318
00319 virtual int UCtoGID (
00320 MGD::CONTEXT* context,
00321 const MIUNICODE* uc,
00322 MGD::STRINGDATA& strdata
00323 ) = 0;
00324
00325 const MIUNICODE* GetFontName (
00326 ) const {
00327 return (m_fontname);
00328 }
00329
00330 virtual MGD::FONT::FONTTYPE GetFontType (
00331 ) const = 0;
00332
00338 virtual ERRVALUE GetGlyphOutline (
00339 UINT16 GlyphIndex,
00340 REGION2D& region,
00341 UINT32 FontFlags
00342 );
00343
00344 MIUNICODE GetInitChar (
00345 ) const {
00346 return (m_InitChar);
00347 }
00348
00349 MIUNICODE GetLastChar (
00350 ) const {
00351 return (m_LastChar);
00352 }
00353
00354 MIUNICODE GetNULLChar (
00355 ) const {
00356 return (m_NullChar);
00357 }
00358
00359 MIUNICODE GetNumGlyphs (
00360 ) const {
00361 return (m_NumGlyphs);
00362 }
00363
00364 protected:
00365 MISTRING m_fontname;
00366 FILEPATH m_filename;
00367 UINT16 m_NumGlyphs;
00368 MIUNICODE m_InitChar;
00369 MIUNICODE m_LastChar;
00370 MIUNICODE m_NullChar;
00371 };
00372
00373
00375 struct TEXTSETTINGS : public TEXTSTYLE {
00376 PIXEL ForegroundPixel;
00377 PIXEL BackgroundPixel;
00378 PIXEL UnderlinePixel;
00379
00380 TEXTSETTINGS (
00381 ) { Reset(); }
00382
00383 double GetBoldness (
00384 ) const { return (BoldnessWidth); }
00385
00386 void Reset (
00387 );
00388
00389 };
00390
00391
00393 struct TEXTBLOCK {
00394
00395 TEXTBLOCK();
00396 TEXTBLOCK(const TEXTBLOCK&);
00397
00398 ~TEXTBLOCK();
00399
00400 ERRVALUE ComputeExtents (
00401 MGD::CONTEXT* gc,
00402 DRECT2D& rect
00403 );
00404
00405 int Draw (
00406 MGD::CONTEXT* gc
00407 );
00408
00409 double GetBaseAngle (
00410 ) const { return (m_baseangle); }
00411
00412 const DPOINT2D& GetBasePoint (
00413 ) const { return (m_basepoint); }
00414
00415 TEXTBASEORIGIN GetBaseOrigin (
00416 ) const { return (m_baseorigin); }
00417
00419 ERRVALUE GetFirstString (
00420 MISTRING& string
00421 );
00422
00423 ERRVALUE GetFirstString (
00424 MGD::CONTEXT* gc,
00425 MISTRING& string
00426 );
00427
00431 HTML::HTMLDOC* GetHTMLDOC (
00432 );
00433
00434 const TEXTSTYLE& GetStyle (
00435 ) const { return m_Style; }
00436
00437 const MISTRING& GetText (
00438 ) const {
00439 return (m_Text);
00440 }
00441
00442 bool IsAntialiased (
00443 ) const { return m_bIsAntialiased; }
00444
00445 void SetAntialiasing (
00446 bool value
00447 ) { m_bIsAntialiased = value; }
00448
00449 void SetBaseAngle (
00450 double angle = 0
00451 );
00452
00454 void SetBasePoint (
00455 const DPOINT2D& pt,
00456 TEXTBASEORIGIN baseorigin = TEXTBASEORIGIN_FirstLine
00457 );
00458
00462 void SetDoFormatting (bool bDoFormatting);
00463
00469 void SetImages (
00470 const SIMPLE_ARRAY<MGD::DEVICE*>& Images
00471 );
00472
00473 void SetStyle (
00474 const TEXTSTYLE& Style
00475 );
00476
00478 void SetText (
00479 const MISTRING& text
00480 );
00481
00485 void SetSourcePath (
00486 const FILEPATH& filepath
00487 );
00488
00489 bool UsesTransparency (
00490 ) const { return m_bUsesTransparency; }
00491
00492 #ifndef GENERATING_DOXYGEN_OUTPUT
00493 private:
00494 class PRIV;
00495 friend class PRIV;
00496 PRIV* m_Priv;
00497
00498 MISTRING m_Text;
00499 TEXTSTYLE m_Style;
00500 DPOINT2D m_basepoint;
00501 double m_baseangle;
00502 TEXTBASEORIGIN m_baseorigin;
00503 bool m_bIsAntialiased;
00504 bool m_bUsesTransparency;
00505 #endif
00506 };
00507
00508
00510 class DEVICE {
00511 public:
00512
00516 static DEVICE& GetNull ();
00517
00519 virtual ~DEVICE ();
00520
00525 bool AvoidFillSpans (
00526 ) const { return (v_AvoidFillSpans()); }
00527
00528 ERRVALUE Clear (
00529 const COLOR& color
00530 ) { return (v_Clear(color)); }
00531
00533 void ClearICMDestProfile (
00534 ) { m_DestProfile.Free(); }
00535
00537 void ClearICMProofProfile ()
00538 { m_ProofProfileParms.m_bProofToScreen = false; }
00539
00550 ERRVALUE ComputeRegion (
00551 BINARYTOREGIONINTERFACE& bintoreg,
00552 COMPONENT component = COMPONENT_Alpha,
00553 int threshold = 128,
00554 bool above = true
00555 ) const;
00556
00559 double ConvertScreenUnits (
00560 double value,
00561 int iunits,
00562 int ounits
00563 ) const { return (::ConvertScreenUnits(value,GetPixelSizeMM(),1.0,iunits,ounits)); }
00564
00566 MGD::CONTEXT* CreateContext ();
00567
00569 ERRVALUE DepthInit ();
00570
00572 ERRVALUE DepthInit (
00573 UINT16 FrameBuffer
00574 );
00575
00577 void DepthRelease ();
00578
00580 void DepthRelease (
00581 UINT16 FrameBuffer
00582 );
00583
00585 PIXEL GetAllPlanesMask (
00586 ) const { return (m_AllPlanesMask); }
00587
00589 CAPABILITY GetCapabilities () const
00590 { return (v_GetCapabilities()); }
00591
00594 const COLOR_ARRAY* GetColorMap (
00595 ) const { return (v_GetColorMap()); }
00596
00597 #ifndef NO_DEPRECATED
00602 DEPRECATED PIXEL GetColorPixel (
00603 const COLOR& color
00604 ) { return (v_GetColorPixel(color)); }
00605 #endif
00606
00611 COLORSPACE GetColorSpace (
00612 ) const { return (v_GetColorSpace()); }
00613
00615 float GetDepth (
00616 INT32 x,
00617 INT32 y,
00618 UINT16 FrameBuffer
00619 ) const;
00620
00621 const DISPLAYINFO& GetDeviceInfo (
00622 ) const { return (m_devinfo); }
00623
00625 const LRECT2D& GetExtents (
00626 ) const { return (m_Extents); }
00627
00629 INT32 GetHeight (
00630 ) const { return (GetExtents().GetHeight()); }
00631
00632 const PROFILE& GetICMDestProfile (
00633 ) const { return (m_DestProfile); }
00634
00635 PROFILE::INTENT GetICMIntent (
00636 ) const { return (m_ICMIntent); }
00637
00639 int GetImageBytesPerPixel (
00640 ) const { return (m_ImageBytesPerPixel); }
00641
00648 UINT8* GetImagePointer (
00649 INT32 x,
00650 INT32 y,
00651 INT32 len,
00652 UINT16 FrameBuffer,
00653 bool UseVirtualWindow
00654 ) {
00655 if (UseVirtualWindow && m_bHasVirtualWindow) {
00656 x -= m_offset.x;
00657 y -= m_offset.y;
00658 }
00659 return (v_GetImagePointer(x,y,len,FrameBuffer));
00660 }
00661
00663 UINT8* GetImagePointer (
00664 INT32 x,
00665 INT32 y,
00666 INT32 len,
00667 UINT16 FrameBuffer
00668 ) { return (v_GetImagePointer(x,y,len,FrameBuffer)); }
00669
00671 bool GetNeedFullImageLine (
00672 ) const { return (v_GetNeedFullImageLine()); }
00673
00675 UINT16 GetNumFrameBuffers () const
00676 { return (v_GetNumFrameBuffers()); }
00677
00678 #ifndef NO_DEPRECATED
00681 DEPRECATED void GetPixelColor (
00682 PIXEL pixel,
00683 COLOR& color
00684 ) const {
00685 v_GetPixelColor(pixel, color);
00686 }
00687 #endif
00688
00692 double GetPixelSizeMM () const;
00693
00697 void GetPixelSizeMM (
00698 double& xsize,
00699 double& ysize
00700 ) const;
00701
00703 double GetPixelSizeDPI (
00704 ) const { return ((1000.0 / METERSTOINCHES) / GetPixelSizeMM()); }
00705
00707 void GetPixelSizeDPI (
00708 double& xsize,
00709 double& ysize
00710 ) const {
00711 double x, y;
00712 GetPixelSizeMM(x, y);
00713 xsize = (1000.0 / METERSTOINCHES) / x;
00714 ysize = (1000.0 / METERSTOINCHES) / y;
00715 }
00716
00718 UINT32 GetTypeId () const
00719 { return (m_TypeId); }
00720
00721 INT32 GetWidth (
00722 ) const { return (GetExtents().GetWidth()); }
00723
00724 bool HasCapability (
00725 MGD::CAPABILITY capability
00726 ) const { return ((v_GetCapabilities() & capability) != 0); }
00727
00729 bool HasDepth (
00730 UINT16 FrameBuffer
00731 ) const { return (FrameBuffer < m_DepthBuffers.GetNumItems() && m_DepthBuffers[FrameBuffer] != 0); }
00732
00735 void ResetVirtualWindow ();
00736
00738 void SetDepth (
00739 INT32 x,
00740 INT32 y,
00741 float z,
00742 UINT16 FrameBuffer
00743 );
00744
00746 void SetICMDestProfile (
00747 const PROFILE& profile,
00748 PROFILE::INTENT intent = PROFILE::INTENT_Perceptual
00749 );
00750
00752 void SetICMDestProfile (
00753 const PROFILEPARMS_PRINTER& profile
00754 );
00755
00758 void SetICMDestProfileScreen ();
00759
00765 void SetICMProofProfile (
00766 const PROFILEPARMS_PRINTER& profile
00767 );
00768
00770 void SetPixelSizeMM (
00771 double xsize,
00772 double ysize
00773 ) { m_mmPerPixel.Set(xsize,ysize); }
00774
00781 void SetVirtualWindow (
00782 INT32 dx,
00783 INT32 dy,
00784 INT32 fullwidth,
00785 INT32 fullheight
00786 );
00787
00789 bool SupportsOpacityBlendMode (
00790 MGD::OPACITY_MODE mode
00791 ) const { return (v_SupportsOpacityBlendMode(mode)); }
00792
00793 protected:
00794
00795 #ifndef GENERATING_DOXYGEN_OUTPUT
00796 LRECT2D m_Extents;
00797 PIXEL m_AllPlanesMask;
00798 int m_ImageBytesPerPixel;
00799 DPOINT2D m_mmPerPixel;
00800 LPOINT2D m_TileSize;
00801 #endif
00802
00804 static UINT32 AllocTypeId ()
00805 { ++s_LastTypeId; return (s_LastTypeId); }
00806
00817 DEVICE ();
00818
00831 float* GetDepthBuffer (
00832 INT32 x,
00833 INT32 y,
00834 INT32 len,
00835 UINT16 FrameBuffer,
00836 bool UseVirtualWindow
00837 );
00838
00840 const UINT8* GetImagePointerConst (
00841 INT32 x,
00842 INT32 y,
00843 INT32 len,
00844 UINT16 FrameBuffer,
00845 bool UseVirtualWindow
00846 ) { return (GetImagePointer(x,y,len,FrameBuffer,UseVirtualWindow)); }
00847
00849 const UINT8* GetImagePointerConst (
00850 INT32 x,
00851 INT32 y,
00852 INT32 len,
00853 UINT16 FrameBuffer
00854 ) { return (GetImagePointer(x,y,len,FrameBuffer)); }
00855
00857 UINT8* GetImagePointerNoRead (
00858 INT32 x,
00859 INT32 y,
00860 INT32 len,
00861 UINT16 FrameBuffer,
00862 bool UseVirtualWindow
00863 ) {
00864 if (UseVirtualWindow && m_bHasVirtualWindow) {
00865 x -= m_offset.x;
00866 y -= m_offset.y;
00867 }
00868 return (v_GetImagePointerNoRead(x,y,len,FrameBuffer));
00869 }
00870
00871 UINT8* GetImagePointerNoRead (
00872 INT32 x,
00873 INT32 y,
00874 INT32 len,
00875 UINT16 FrameBuffer
00876 ) { return (v_GetImagePointerNoRead(x,y,len,FrameBuffer)); }
00877
00878 const LPOINT2D& GetRealSize (
00879 ) const { return (m_RealSize); }
00880
00881 const LPOINT2D& GetVirtualOffset () const
00882 { return (m_offset); }
00883
00884 bool HasVirtualWindow () const
00885 { return (m_bHasVirtualWindow); }
00886
00888 void SetDeviceColorSpace (
00889 COLORSPACE colorspace
00890 );
00891
00893 ERRVALUE SetDeviceInfo (
00894 const DISPLAYINFO& dispinfo
00895 );
00896
00897 void SetRealSize (
00898 int height,
00899 int width
00900 ) { m_RealSize.Set(width,height); }
00901
00904 void SetTypeId (UINT32 TypeId)
00905 { m_TypeId = TypeId; }
00906
00910 ERRVALUE WriteDepthBuffer (
00911 INT32 x,
00912 INT32 y,
00913 INT32 len,
00914 const float *zbuf,
00915 UINT16 FrameBuffer
00916 );
00917
00920 ERRVALUE WriteImageBuffer (
00921 INT32 x,
00922 INT32 y,
00923 INT32 len,
00924 UINT8 *buf,
00925 UINT16 FrameBuffer
00926 ) { return (v_WriteImageBuffer(x,y,len,buf,FrameBuffer)); }
00927
00930 virtual CAPABILITY v_GetCapabilities (
00931 ) const;
00932
00933 private:
00934 #ifndef GENERATING_DOXYGEN_OUTPUT
00935
00936 DEVICE (const DEVICE&);
00937 DEVICE& operator= (const DEVICE&);
00938
00939 friend class CONTEXT;
00940
00941 class ZBUFFER;
00942
00943 static UINT32 s_LastTypeId;
00944
00945 DISPLAYINFO m_devinfo;
00946 PROFILE m_DestProfile;
00947 PROFILE::INTENT m_ICMIntent;
00948 PROFILEPARMS_PRINTER m_ProofProfileParms;
00949 SIMPLE_ARRAY<ZBUFFER*> m_DepthBuffers;
00950 LPOINT2D m_offset;
00951 LPOINT2D m_RealSize;
00952 UINT32 m_TypeId;
00953 bool m_bHasVirtualWindow;
00954
00955 static void MCB_ScreenProfileChanged (MICALLBACKLIST::ANYCALLBACKSTRUCT*, void*);
00956 #endif // GENERATING_DOXYGEN_OUTPUT
00957
00963 virtual bool v_AvoidFillSpans () const;
00964
00965 virtual ERRVALUE v_Clear (
00966 const COLOR& color
00967 );
00968
00973 virtual MGD::CONTEXT* v_CreateContext ();
00974
00984 virtual ERRVALUE v_FillSpan (
00985 MGD::CONTEXT *gc,
00986 INT32 x1,
00987 INT32 x2,
00988 INT32 y
00989 );
00990
00992 virtual const COLOR_ARRAY* v_GetColorMap (
00993 ) const;
00994
01001 virtual PIXEL v_GetColorPixel (
01002 const COLOR& color
01003 );
01004
01009 virtual COLORSPACE v_GetColorSpace () const;
01010
01017 virtual UINT8* v_GetImagePointer (
01018 INT32 x,
01019 INT32 y,
01020 INT32 len,
01021 UINT16 FrameBuffer
01022 );
01023
01030 virtual UINT8* v_GetImagePointerNoRead (
01031 INT32 x,
01032 INT32 y,
01033 INT32 len,
01034 UINT16 FrameBuffer
01035 );
01036
01039 virtual bool v_GetNeedFullImageLine () const;
01040
01043 virtual UINT16 v_GetNumFrameBuffers () const;
01044
01048 virtual void v_GetPixelColor (
01049 PIXEL pixel,
01050 COLOR& color
01051 ) const;
01052
01053 virtual bool v_SupportsOpacityBlendMode (
01054 MGD::OPACITY_MODE
01055 ) const;
01056
01060 virtual bool v_UseAntiAliasing () const;
01061
01067 virtual ERRVALUE v_WriteImageBuffer (
01068 INT32 x,
01069 INT32 y,
01070 INT32 len,
01071 UINT8 *buf,
01072 UINT16 FrameBuffer
01073 );
01074
01075 };
01076
01077
01079 class CONTEXT {
01080 public:
01081
01082
01086 class PRIVDATA {
01087 public:
01088 PRIVDATA() {}
01089 virtual ~PRIVDATA() {}
01090 };
01091
01094 static int AllocPrivDataIndex ();
01095
01096 static ERRVALUE TextGetFontName (
01097 int fonthandle,
01098 MISTRING& fontname
01099 );
01100
01102 static ERRVALUE TextGetFontInfo (
01103 int fonthandle,
01104 MGD::FONT **font
01105 );
01106
01108 static int TextOpenFont (
01109 const MIUNICODE *fontname
01110 );
01111
01113 virtual ~CONTEXT();
01114
01121 ERRVALUE AddExteriorToClip (
01122 const LRECT2D& rect
01123 );
01124
01129 ERRVALUE AddToClip (
01130 const DRECT2D& rect
01131 );
01132
01137 ERRVALUE AddToClip (
01138 const LRECT2D& rect
01139 );
01140
01145 ERRVALUE AddToClip (
01146 const POLYLINE& polyline
01147 );
01148
01153 ERRVALUE AddToClip (
01154 const REGION2D& region
01155 );
01156
01158 bool Calculate3dDepthFunction (
01159 const DPOINT3D& p1,
01160 const DPOINT3D& p2,
01161 const DPOINT3D& p3,
01162 const double viewPlaneDistance,
01163 const bool isPerspective,
01164 const MAT3X3& matrix
01165 );
01166
01168 void ClearClipMask ();
01169
01171 void ClearICMSourceProfile (
01172 ) {
01173 m_SourceProfile.Free();
01174 SetupICMTransform();
01175 }
01176
01193 ERRVALUE ComputeLabelExtents (
01194 REGION2D& extents,
01195 const MIUNICODE* text,
01196 const POLYLINE& BaseLine,
01197 const LABELSTYLE& Style,
01198 const POLYLINELIST& LeaderLines,
01199 bool bCheckClip = false,
01200 REGION2D* frame = 0
01201 );
01202
01219 ERRVALUE ComputeLabelExtents (
01220 REGION2D& extents,
01221 const TEXTBLOCK& textblock,
01222 const LABELSTYLE& Style,
01223 const POLYLINELIST& LeaderLines,
01224 bool bCheckClip = false,
01225 REGION2D* frame = 0
01226 );
01227
01234 ERRVALUE ComputeLabelFrame (
01235 REGION2D& frame,
01236 const MIUNICODE* text,
01237 const POLYLINE& BaseLine,
01238 const LABELSTYLE& Style,
01239 const POLYLINELIST& LeaderLines
01240 );
01241
01244 double ConvertScreenUnits (
01245 double value,
01246 int iunits,
01247 int ounits
01248 ) { return (::ConvertScreenUnits(value,m_dev->GetPixelSizeMM(),1.0,iunits,ounits)); }
01249
01251 void Copy (
01252 const CONTEXT &rhs
01253 ) { v_Copy(rhs); }
01254
01258 ERRVALUE CopyRect (
01259 const MGD::DEVICE *pDevSrc,
01260 const LRECT2D& RectSrc,
01261 const LPOINT2D& PtTgt,
01262 MGD::DEVICE_MEM8G *pDevAlpha = 0
01263 );
01264
01273 ERRVALUE CopyRectSampled (
01274 const MGD::DEVICE *pDevSrc,
01275 const LRECT2D& srcrect,
01276 const LRECT2D& destrect,
01277 MGD::DEVICE_MEM8G *pDevAlpha = 0
01278 );
01279
01280 void DepthTestDisable (
01281 ) { SetDepthTest(MGD::DEPTHTEST_None); }
01282
01283 void DepthTestEnable (
01284 ) { SetDepthTest(MGD::DEPTHTEST_CheckAndSet); }
01285
01289 void DisableICM (
01290 ) { m_ICMTransform.Free(); }
01291
01293 ERRVALUE DrawArc (
01294 INT32 xcenter,
01295 INT32 ycenter,
01296 INT32 xradius,
01297 INT32 yradius,
01298 double startangle,
01299 double sweepangle,
01300 double rotangle = 0,
01301 MGD::SHAPECLOSE closemode = SHAPECLOSE_None
01302 ) { return (v_DrawArc(xcenter, ycenter, xradius, yradius, startangle, sweepangle, rotangle, closemode)); }
01303
01304 ERRVALUE DrawArc (
01305 double xcenter,
01306 double ycenter,
01307 double xradius,
01308 double yradius,
01309 double startangle,
01310 double sweepangle,
01311 double rotangle = 0,
01312 MGD::SHAPECLOSE closemode = SHAPECLOSE_None
01313 ) { return (v_DrawArc(xcenter, ycenter, xradius, yradius, startangle, sweepangle, rotangle, closemode)); }
01314
01316 ERRVALUE DrawArrow (
01317 const DPOINT2D& EndPoint,
01318 double angle,
01319 double length,
01320 double sweep = 30.0 * DEGTORAD,
01321 MGD::ARROWTYPE type = ARROWTYPE_FilledTriangle
01322 );
01323
01325 ERRVALUE DrawCircle (
01326 INT32 xcenter,
01327 INT32 ycenter,
01328 INT32 radius
01329 ) { return (v_DrawCircle(xcenter, ycenter, radius)); }
01330
01332 ERRVALUE DrawCircle (
01333 double xcenter,
01334 double ycenter,
01335 double radius
01336 ) { return (v_DrawCircle(xcenter, ycenter, radius)); }
01337
01339 ERRVALUE DrawEllipse (
01340 INT32 xcenter,
01341 INT32 ycenter,
01342 INT32 xradius,
01343 INT32 yradius,
01344 double rotangle = 0
01345 ) { return (v_DrawEllipse(xcenter, ycenter, xradius, yradius, rotangle)); }
01346
01347 ERRVALUE DrawEllipse (
01348 double xcenter,
01349 double ycenter,
01350 double xradius,
01351 double yradius,
01352 double rotangle = 0
01353 ) { return (v_DrawEllipse(xcenter, ycenter, xradius, yradius, rotangle)); }
01354
01356 ERRVALUE DrawIcon (
01357 INT32 x,
01358 INT32 y,
01359 MICONSTRUCT* icon,
01360 ICONFLAGS flags
01361 ) { return (v_DrawIcon(x, y, icon, flags)); }
01362
01364 ERRVALUE DrawIcon (
01365 INT32 x,
01366 INT32 y,
01367 ICONID iconid,
01368 const COLOR& bgcolor,
01369 ICONFLAGS flags
01370 );
01371
01374 ERRVALUE DrawLabel (
01375 const MIUNICODE* text,
01376 const POLYLINE& BaseLine,
01377 const LABELSTYLE& Style,
01378 const POLYLINELIST& LeaderLines
01379 );
01380
01383 ERRVALUE DrawLabel (
01384 const TEXTBLOCK& textblock,
01385 const LABELSTYLE& Style,
01386 const POLYLINELIST& LeaderLines
01387 );
01388
01390 ERRVALUE DrawLine (
01391 INT32 x1,
01392 INT32 y1,
01393 INT32 x2,
01394 INT32 y2
01395 ) { return (v_DrawLine(x1, y1, x2, y2)); }
01396
01398 ERRVALUE DrawLine3D (
01399 INT32 x1,
01400 INT32 y1,
01401 float z1,
01402 INT32 x2,
01403 INT32 y2,
01404 float z2
01405 ) { return (v_DrawLine3D(x1, y1, z1, x2, y2, z2)); }
01406
01408 ERRVALUE DrawLines (
01409 const LPOINT2D* points,
01410 INT32 numpoints,
01411 bool close = false
01412 );
01413
01415 ERRVALUE DrawLines (
01416 const POLYLINE& line
01417 );
01418
01420 ERRVALUE DrawLines (
01421 const SIMPLE_ARRAY<LPOINT2D>& points,
01422 bool close = false
01423 ) { return (DrawLines(points, points.GetNumItems(), close)); }
01424
01426 ERRVALUE DrawLinesDashed (
01427 const LPOINT2D* points,
01428 INT32 numpoints,
01429 const SIMPLE_ARRAY<double>& DashArray,
01430 double DashOffset = 0.0,
01431 bool close = false
01432 ) { return (v_DrawLinesDashed(points, numpoints, DashArray, DashArray.GetNumItems(), DashOffset, close)); }
01433
01435 ERRVALUE DrawLinesDashed (
01436 const SIMPLE_ARRAY<LPOINT2D>& points,
01437 const SIMPLE_ARRAY<double>& DashArray,
01438 double DashOffset = 0.0,
01439 bool close = false
01440 ) { return (v_DrawLinesDashed(points, points.GetNumItems(), DashArray, DashArray.GetNumItems(), DashOffset, close)); }
01441
01443 ERRVALUE DrawLinesDashed (
01444 const LPOINT2D* points,
01445 INT32 numpoints,
01446 const double *DashArray,
01447 INT32 DashCount,
01448 double DashOffset = 0.0,
01449 bool close = false
01450 ) { return (v_DrawLinesDashed(points, numpoints, DashArray, DashCount, DashOffset, close)); }
01451
01453 ERRVALUE DrawLinesDashed (
01454 const SIMPLE_ARRAY<LPOINT2D>& points,
01455 const double *DashArray,
01456 INT32 DashCount,
01457 double DashOffset = 0.0,
01458 bool close = false
01459 ) { return (v_DrawLinesDashed(points, points.GetNumItems(), DashArray, DashCount, DashOffset, close)); }
01460
01462 ERRVALUE DrawLinesDashed (
01463 const POLYLINE& line,
01464 const double *DashArray,
01465 INT32 DashCount,
01466 double DashOffset = 0.0,
01467 bool close = false
01468 );
01469
01471 ERRVALUE DrawLineStyleSample (
01472 const RVC::STYLE& styleobj,
01473 const LINESTYLE& style,
01474 const LRECT2D& rect,
01475 STYLESAMPLEFLAGS flags = STYLESAMPLE_Default
01476 );
01477
01480 ERRVALUE DrawPixel (
01481 INT32 x,
01482 INT32 y
01483 );
01484
01486 ERRVALUE DrawPoint (
01487 INT32 x,
01488 INT32 y
01489 ) { return (v_DrawPoint(x, y)); }
01490
01492 ERRVALUE DrawPoint (
01493 const DPOINT2D& pt
01494 ) { return (v_DrawPoint(pt)); }
01495
01497 ERRVALUE DrawPoints (
01498 const LPOINT2D* points,
01499 INT32 NumPoints
01500 ) { return (v_DrawPoints(points, NumPoints)); }
01501
01503 ERRVALUE DrawPoints (
01504 const SIMPLE_ARRAY<LPOINT2D>& points
01505 ) { return (DrawPoints(points, points.GetNumItems())); }
01506
01508 ERRVALUE DrawPointStyleSample (
01509 const RVC::STYLE& styleobj,
01510 const POINTSTYLE& style,
01511 const LRECT2D& rect,
01512 STYLESAMPLEFLAGS flags = STYLESAMPLE_Default
01513 );
01514
01516 ERRVALUE DrawPolyStyleSample (
01517 const RVC::STYLE& styleobj,
01518 const POLYSTYLE& style,
01519 const LRECT2D& rect,
01520 STYLESAMPLEFLAGS flags = STYLESAMPLE_Default
01521 );
01522
01524 ERRVALUE DrawRectangle (
01525 INT32 x1,
01526 INT32 y1,
01527 INT32 x2,
01528 INT32 y2
01529 ) { return (v_DrawRectangle(x1, y1, x2, y2)); }
01530
01532 ERRVALUE DrawRectangle (
01533 const LRECT2D& rect
01534 ) { return (v_DrawRectangle(rect)); }
01535
01537 ERRVALUE DrawRectangle (
01538 const DRECT2D& rect
01539 ) { return (v_DrawRectangle(rect)); }
01540
01542 ERRVALUE DrawRegion (
01543 const REGION2D& polygons
01544 );
01545
01549 ERRVALUE DrawRoundedRectangle (
01550 const LRECT2D& rect,
01551 INT32 radius = -1
01552 );
01553
01555 ERRVALUE DrawSegments (
01556 const LSEGMENT2D* segments,
01557 INT32 NumSegments
01558 ) { return (v_DrawSegments(segments, NumSegments)); }
01559
01561 ERRVALUE DrawSegments (
01562 const SIMPLE_ARRAY<LSEGMENT2D>& segments
01563 ) { return (v_DrawSegments(segments, segments.GetNumItems())); }
01564
01567 void DrawSimpleArrowHead (
01568 INT32 xbase,
01569 INT32 ybase,
01570 INT32 size,
01571 MGD::DIRECTION direction
01572 );
01573
01575 void DrawSimpleFrame (
01576 const LRECT2D& rect,
01577 const COLOR& ColorTopLeft,
01578 const COLOR& ColorBottomRight
01579 );
01580
01582 ERRVALUE DrawSubRegion (
01583 const SUBREGION2D& polygons
01584 );
01585
01587 ERRVALUE EraseRectangle (
01588 const LRECT2D& rectangle,
01589 const COLOR& color
01590 ) { return (v_EraseRectangle(rectangle,color)); }
01591
01593 ERRVALUE FillArc (
01594 INT32 xcenter,
01595 INT32 ycenter,
01596 INT32 xradius,
01597 INT32 yradius,
01598 double startangle,
01599 double sweepangle,
01600 double rotangle = 0,
01601 MGD::SHAPECLOSE closemode = SHAPECLOSE_Direct
01602 ) { return (v_FillArc(xcenter, ycenter, xradius, yradius, startangle, sweepangle, rotangle, closemode)); }
01603
01604 ERRVALUE FillArc (
01605 double xcenter,
01606 double ycenter,
01607 double xradius,
01608 double yradius,
01609 double startangle,
01610 double sweepangle,
01611 double rotangle = 0,
01612 MGD::SHAPECLOSE closemode = SHAPECLOSE_Direct
01613 ) { return (v_FillArc(xcenter, ycenter, xradius, yradius, startangle, sweepangle, rotangle, closemode)); }
01614
01616 ERRVALUE FillCircle (
01617 INT32 xcenter,
01618 INT32 ycenter,
01619 INT32 radius
01620 ) { return (v_FillCircle(xcenter, ycenter, radius)); }
01621
01622 ERRVALUE FillCircle (
01623 double xcenter,
01624 double ycenter,
01625 double radius
01626 ) { return (v_FillCircle(xcenter, ycenter, radius)); }
01627
01629 ERRVALUE FillEllipse (
01630 INT32 xcenter,
01631 INT32 ycenter,
01632 INT32 xradius,
01633 INT32 yradius,
01634 double rotangle = 0
01635 ) { return (v_FillEllipse(xcenter, ycenter, xradius, yradius, rotangle)); }
01636
01637 ERRVALUE FillEllipse (
01638 double xcenter,
01639 double ycenter,
01640 double xradius,
01641 double yradius,
01642 double rotangle = 0
01643 ) { return (v_FillEllipse(xcenter, ycenter, xradius, yradius, rotangle)); }
01644
01646 ERRVALUE FillPolygon (
01647 const LPOINT2D* points,
01648 INT32 NumPoints,
01649 MGD::POLYSHAPE shape = POLYSHAPE_Complex,
01650 bool DrawOutline = false
01651 ) { return (v_FillPolygon(points, NumPoints, shape, DrawOutline)); }
01652
01656 ERRVALUE FillPolygons (
01657 const LPOLYGON* polygons,
01658 INT32 NumPolys,
01659 bool DrawOutline = false
01660 ) { return (v_FillPolygons(polygons, NumPolys, DrawOutline)); }
01661
01663 ERRVALUE FillRectangle (
01664 INT32 x1,
01665 INT32 y1,
01666 INT32 x2,
01667 INT32 y2
01668 ) { return (v_FillRectangle(x1, y1, x2, y2)); }
01669
01671 ERRVALUE FillRectangle (
01672 const LRECT2D& rect
01673 ) { return (v_FillRectangle(rect)); }
01674
01676 ERRVALUE FillRectangle (
01677 const DRECT2D& rect
01678 ) { return (v_FillRectangle(rect)); }
01679
01681 ERRVALUE FillRegion (
01682 const REGION2D& polygons,
01683 bool DrawOutline = false
01684 ) { return (v_FillRegion(polygons, DrawOutline)); }
01685
01689 ERRVALUE FillRoundedRectangle (
01690 const LRECT2D& rect,
01691 INT32 radius,
01692 bool bDrawBorder = false
01693 );
01694
01696 ERRVALUE FillSpan (
01697 INT32 x1,
01698 INT32 x2,
01699 INT32 y
01700 );
01701
01703 ERRVALUE FillSubRegion (
01704 const SUBREGION2D& polygons,
01705 bool DrawOutline = false
01706 ) { return (v_FillSubRegion(polygons, DrawOutline)); }
01707
01708 void Get3dDepthFunction (
01709 float &xcoeff,
01710 float &ycoeff,
01711 float &zconst,
01712 bool &isPespective
01713 ) const {
01714 xcoeff = m_dfx;
01715 ycoeff = m_dfy;
01716 zconst = m_dfz;
01717 isPespective = m_IsPerspective;
01718 }
01719
01720 bool GetAntialiasing () const;
01721
01723 void GetClipRegion (
01724 REGION2D& region
01725 ) const;
01726
01727 const LRECT2D& GetClipRectangle (
01728 ) const { return (m_ClipRect); }
01729
01731 PIXEL GetColor (
01732 ) const { return (m_DrawColorPixel); }
01733
01734 bool GetColorLock (
01735 ) const { return (m_bColorLocked); }
01736
01739 PIXEL GetColorPixel (
01740 const COLOR& color
01741 ) const;
01742
01744 PIXEL GetColorPixelNoICM (
01745 const COLOR& color
01746 ) const;
01747
01749 float GetDepth3D (
01750 INT32 x,
01751 INT32 y
01752 ) { return (m_dev->GetDepth(x,y,m_FrameBuffer)); }
01753
01754 MGD::DEPTHTEST GetDepthTest () const
01755 { return (m_DepthTest); }
01756
01758 MGD::DEVICE& GetDevice (
01759 ) const { return (*m_dev); }
01760
01762 DEPRECATED_MSG("Use GetDevice instead") MGD::DEVICE* GetDisplay (
01763 ) const { return (m_dev); }
01764
01766 const DISPLAYINFO& GetDisplayInfo (
01767 ) const { return (m_dev->GetDeviceInfo()); }
01768
01769 FONT* GetFont (
01770 ) const { return (m_font); }
01771
01773 UINT16 GetFrameBuffer () const
01774 { return (m_FrameBuffer); }
01775
01780 ERRVALUE GetGlyphOutline (
01781 MIUNICODE uc,
01782 REGION2D& region,
01783 bool bUseGlyphIndex = false
01784 );
01785
01788 void GetPixelColor (
01789 PIXEL pixel,
01790 COLOR& color
01791 ) const;
01792
01794 void GetPixelColorNoICM (
01795 PIXEL pixel,
01796 COLOR& color
01797 ) const;
01798
01800 bool GetLine4Connected () const
01801 { return m_bLine4Connected; }
01802
01803 MGD::LINECAP GetLineCap () const
01804 { return m_LineCap; }
01805
01806 MGD::LINEJOIN GetLineJoin () const
01807 { return m_LineJoin; }
01808
01810 bool GetLineScaledToMap () const
01811 { return (m_bLineScaledToMap); }
01812
01813 double GetLineWidth () const
01814 { return (m_LineWidth); }
01815
01816 #ifndef NO_DEPRECATED
01819 DEPRECATED double GetMapScale () const
01820 { return (GetOutputScale()); }
01821 #endif
01822
01825 OPACITY_MODE GetOpacityBlendMode (
01826 ) const { return m_OpacityBlendMode; }
01827
01828 #ifndef GENERATING_DOXYGEN_OUTPUT
01829 OTPRIV* GetOpenTypePriv (
01830 );
01831 #endif
01832
01834 double GetOutputScale () const
01835 { return (this == 0) ? 1.0 : m_MapScale; }
01836
01838 MGD::PIXELFUNC GetPixelFunction (
01839 ) const { return m_PixelFunc; }
01840
01841 double GetPixelSizeMM () const
01842 { return (m_dev->GetPixelSizeMM()); }
01843
01844 PIXEL GetPlaneMask () const
01845 { return m_PlaneMask; }
01846
01847 bool GetPlaneMaskLock () const
01848 { return m_bPlaneMaskLocked; }
01849
01851 bool GetPointScaledToMap (
01852 ) const {
01853 return (m_bPointScaledToMap);
01854 }
01855
01858 PRIVDATA* GetPrivData (
01859 int indx
01860 ) const;
01861
01863 const POLYSTYLE& GetStyleFill (
01864 ) const { return (m_FillStyle); }
01865
01867 const LINESTYLE& GetStyleLine (
01868 ) const { return (m_LineStyle); }
01869
01871 const POINTSTYLE& GetStylePoint (
01872 ) const { return (m_PointStyle); }
01873
01874 MGD::TEXTSETTINGS& GetTextSettings ()
01875 { return m_Text; }
01876
01877 const MGD::TEXTSETTINGS& GetTextSettings () const
01878 { return m_Text; }
01879
01881 const TEXTSTYLE& GetTextStyle () const
01882 { return (m_Text); }
01883
01887 bool GetThinLineWidthHint () const
01888 { return (m_bThinLineWidthHint); }
01889
01890 int GetTransparency () const
01891 { return (m_Transparency); }
01892
01893 bool GetTransparencyLock (
01894 ) const { return (m_bTransparencyLocked); }
01895
01897 bool GetUsePatternPoint (
01898 ) const { return (m_bUsePatternPoint); }
01899
01901 bool GetUsePatternLine (
01902 ) const { return (m_bUsePatternLine); }
01903
01905 bool GetUsePatternFill () const
01906 { return (m_bUsePatternFill); }
01907
01911 bool HasComplexClip (
01912 ) const {
01913 return (m_ClipRegion != 0);
01914 }
01915
01917 bool HasUsedTransparency (
01918 ) const {
01919 return (m_bHasUsedTransparency);
01920 }
01921
01926 ERRVALUE HatchPolygonStyle (
01927 const LPOINT2D *point,
01928 INT32 numpts
01929 );
01930
01935 ERRVALUE ImageBegin (
01936 INT32 x,
01937 INT32 y,
01938 INT32 width,
01939 INT32 height,
01940 COLORSPACE colorspace,
01941 const COLOR_ARRAY* colormap = 0,
01942 UINT32 flags = 0
01943 );
01944
01949 ERRVALUE ImageBegin (
01950 const LRECT2D& rect,
01951 COLORSPACE colorspace,
01952 const COLOR_ARRAY* colormap = 0,
01953 UINT32 flags = 0
01954 ) {
01955 return (ImageBegin(rect.xinit, rect.yinit, rect.GetWidth(), rect.GetHeight(), colorspace, colormap, flags));
01956 }
01957
01960 ERRVALUE ImageEnd (
01961 UINT32 flags = 0
01962 );
01963
01982 ERRVALUE InterfaceTextDrawString (
01983 INT32 x,
01984 INT32 y,
01985 const MIUNICODE* string,
01986 TEXTBASEORIGIN baseorigin = TEXTBASEORIGIN_FirstLine,
01987 bool bVisualOrder = false,
01988 INTERFACETEXTSTYLE style = INTERFACETEXTSTYLE_Normal
01989 ) {
01990 return (v_InterfaceTextDrawString(x, y, string, baseorigin, bVisualOrder, style));
01991 }
01992
01997 ERRVALUE InterfaceTextGetExtents (
01998 const MIUNICODE* string,
01999 int *width,
02000 int *height = 0,
02001 int *ascent = 0,
02002 INTERFACETEXTSTYLE style = INTERFACETEXTSTYLE_Normal
02003 ) {
02004 return (v_InterfaceTextGetExtents(string, width, height, ascent, style));
02005 }
02006
02011 ERRVALUE InterfaceTextGetMetrics (
02012 const MIUNICODE* string,
02013 TEXTMETRICS& metrics,
02014 INTERFACETEXTSTYLE style = INTERFACETEXTSTYLE_Normal
02015 ) {
02016 return (v_InterfaceTextGetMetrics(string, metrics, style));
02017 }
02018
02023 int InterfaceTextGetWidth (
02024 const MIUNICODE* string,
02025 INTERFACETEXTSTYLE style = INTERFACETEXTSTYLE_Normal,
02026 bool bInkMetrics = true
02027 ) {
02028 return (v_InterfaceTextGetWidth(string, style, bInkMetrics));
02029 }
02030
02031 #ifndef NO_DEPRECATED
02036 DEPRECATED int InterfaceTextGetWidth (
02037 const MIUNICODE* string,
02038 bool bInkMetrics
02039 ) {
02040 return (v_InterfaceTextGetWidth(string, INTERFACETEXTSTYLE_Normal, bInkMetrics));
02041 }
02042 #endif
02043
02047 ERRVALUE IntersectClip (
02048 const DRECT2D& rect
02049 );
02050
02054 ERRVALUE IntersectClip (
02055 const LRECT2D& rect
02056 );
02057
02061 ERRVALUE IntersectClip (
02062 const POLYLINE& polyline
02063 );
02064
02068 ERRVALUE IntersectClip (
02069 const REGION2D& region
02070 );
02071
02072 bool Is3dEnabled (
02073 ) const {
02074 return (GetDevice().HasCapability(CAPABILITY_3D));
02075 }
02076
02078 void MultiPassBegin ();
02079
02083 bool MultiPassIsDone () const;
02084
02088 void MultiPassNext ();
02089
02093 void MultiPassReset ();
02094
02097 int MultiPassGetCurrentPass () const;
02098
02103 int MultiPassGetNumPasses () const;
02104
02105 #ifndef NO_DEPRECATED
02109 DEPRECATED bool MultiPassTestStyle (
02110 const LINESTYLE& style,
02111 const void* pattern,
02112 int patternbytes
02113 ) const;
02114 #endif
02115
02118 bool MultiPassTestStyle (
02119 const LINESTYLE& style,
02120 const RVC::STYLEPATTERN_BASE *pPattern = 0
02121 ) const;
02122
02127 bool MultiPassTestStyle (
02128 const POLYSTYLE& style,
02129 const void* pattern = 0,
02130 int patternbytes = 0
02131 ) const;
02132
02141 ERRVALUE PutImageSpan (
02142 INT32 x,
02143 INT32 y,
02144 INT32 len,
02145 const void* data,
02146 const UINT8 *mask = 0
02147 );
02148
02152 ERRVALUE PutPixel (
02153 INT32 x,
02154 INT32 y,
02155 PIXEL pixel
02156 );
02157
02159 ERRVALUE PutPixel3D (
02160 INT32 x,
02161 INT32 y,
02162 float z,
02163 PIXEL pixel
02164 );
02165
02167 void Reset ()
02168 { v_Reset(); }
02169
02171 void ResetUsedTransparency (
02172 ) { m_bHasUsedTransparency = false; }
02173
02177 ERRVALUE Set3dDepthFunction (
02178 float xcoeff,
02179 float ycoeff,
02180 float zconst,
02181 bool isPespective
02182 );
02183
02187 void SetAntialiasing (
02188 bool enable = true
02189 ) { m_bAntialiasingEnabled = enable; }
02190
02195 void SetBitmapOrigin (
02196 INT32 xorigin,
02197 INT32 yorigin
02198 ) { v_SetBitmapOrigin(xorigin, yorigin); }
02199
02204 void SetClipForPut (
02205 bool DoClipForPut = true
02206 ) { m_bDoClipForPut = DoClipForPut; }
02207
02211 void SetClipNone ();
02212
02217 void SetClipRectangle (
02218 const LRECT2D & rect
02219 );
02220
02222 void SetClipRectangle (
02223 int xinit,
02224 int yinit,
02225 int xlast,
02226 int ylast
02227 ) {
02228 SetClipRectangle(LRECT2D(xinit, yinit, xlast, ylast));
02229 }
02230
02232 void SetClipRegion (
02233 const REGION2D& region
02234 );
02235
02241 void SetColor (
02242 PIXEL pixel
02243 );
02244
02251 void SetColor (
02252 const COLOR& color
02253 );
02254
02260 void SetColor (
02261 COLOR::NAME color
02262 ) { SetColor(COLOR(color)); }
02263
02267 void SetColorIsPatternVariable (
02268 bool value
02269 ) { v_SetColorIsPatternVariable(value); }
02270
02273 void SetColorLock (
02274 bool ColorLocked
02275 ) { m_bColorLocked = ColorLocked; }
02276
02280 DEPRECATED_MSG("Use SetColor() instead") void SetColorPixel (
02281 PIXEL pixel
02282 ) { SetColor(pixel); }
02283
02285 void SetDepth3D (
02286 INT32 x,
02287 INT32 y,
02288 float z
02289 ) { m_dev->SetDepth(x,y,z,m_FrameBuffer); }
02290
02292 void SetDepthTest (
02293 MGD::DEPTHTEST testmode
02294 );
02295
02296 void SetFont (
02297 MGD::FONT* font
02298 );
02299
02302 void SetFrameBuffer (
02303 UINT16 FrameBuffer
02304 );
02305
02307 void SetICMSourceProfile (
02308 const PROFILE& profile
02309 );
02310
02312 void SetLine4Connected (
02313 bool state = true
02314 ) { m_bLine4Connected = state; }
02315
02318 void SetLineAttributes (
02319 MGD::LINECAP capstyle,
02320 MGD::LINEJOIN joinstyle
02321 );
02322
02324 void SetLineScaledToMap (
02325 bool LineScaledToMap
02326 ) { m_bLineScaledToMap = LineScaledToMap; }
02327
02330 void SetLineWidth (
02331 double width
02332 );
02333
02336 void SetLineWidthMM (
02337 double width
02338 ) { SetLineWidth(width / m_dev->GetPixelSizeMM()); }
02339
02341 void SetNoFillRightPolyPixels (
02342 bool NoFillRightPolyPixels
02343 ) { m_bNoFillRightPolyPixels = NoFillRightPolyPixels; }
02344
02346 void SetNoMultiPointSpan (
02347 bool state
02348 ) { m_bNoMultiPointSpan = state; }
02349
02352 void SetOpacityBlendMode (
02353 OPACITY_MODE OpacityBlendMode
02354 ) { m_OpacityBlendMode = OpacityBlendMode; }
02355
02357 void SetOutputScale (
02358 double mapscale
02359 );
02360
02362 void SetPixelFunction (
02363 MGD::PIXELFUNC func
02364 );
02365
02370 void SetPlaneMask (
02371 UINT32 mask
02372 );
02373
02375 void SetPlaneMask (
02376 UINT8 redmask,
02377 UINT8 greenmask,
02378 UINT8 bluemask
02379 );
02380
02385 void SetPlaneMaskRGB (
02386 UINT8 redmask,
02387 UINT8 greenmask,
02388 UINT8 bluemask
02389 ) { SetPlaneMask(redmask, greenmask, bluemask); }
02390
02393 void SetPlaneMaskLock (
02394 bool PlaneMaskLocked
02395 ) { m_bPlaneMaskLocked = PlaneMaskLocked; }
02396
02399 void SetPointScaledToMap (
02400 bool PointScaledToMap
02401 ) { m_bPointScaledToMap = PointScaledToMap; }
02402
02405 void SetPrivData (
02406 int indx,
02407 PRIVDATA* data
02408 );
02409
02410 #ifndef DEPRECATE_ALL
02413 DEPRECATED_MSG("Use the version that takes RVC::STYLEPATTERN_BITMAP or RVC::STYLEPATTERN_HATCH")
02414 ERRVALUE SetStyleFill (
02415 const POLYSTYLE* style,
02416 const void* pattern,
02417 INT32 patternbytes
02418 );
02419 #endif
02420
02422 ERRVALUE SetStyleFill (
02423 const POLYSTYLE* style,
02424 const RVC::STYLEPATTERN_BASE* Pattern = 0
02425 );
02426
02428 ERRVALUE SetStyleFill (
02429 MGD::BUILTINFILLSTYLE style,
02430 const COLOR& color
02431 );
02432
02434 ERRVALUE SetStyleLine (
02435 const LINESTYLE* style,
02436 const RVC::STYLEPATTERN_BASE* Pattern = 0
02437 );
02438
02439 #ifndef DEPRECATE_ALL
02445 DEPRECATED_MSG("Use the version that takes RVC::STYLEPATTERN_LINE or RVC::STYLEPATTERN_BITMAP")
02446 ERRVALUE SetStyleLine (
02447 const LINESTYLE* style,
02448 const void* pattern,
02449 INT32 patternbytes
02450 );
02451 #endif
02452
02454 ERRVALUE SetStylePoint (
02455 const POINTSTYLE* style,
02456 const RVC::STYLEPATTERN_BASE* Symbol = 0
02457 );
02458
02459 #ifndef DEPRECATE_ALL
02466 DEPRECATED_MSG("Use the version that takes RVC::STYLEPATTERN_SYMBOL")
02467 ERRVALUE SetStylePoint (
02468 const POINTSTYLE* style,
02469 const void* pattern,
02470 INT32 patternbytes
02471 );
02472 #endif
02473
02474
02475
02476
02477 void SetTextSettings (
02478 const MGD::TEXTSETTINGS& settings
02479 ) { m_Text = settings; }
02480
02482 void SetTextStyle (
02483 const TEXTSTYLE& style
02484 ) { TextSetStyle(style); }
02485
02491 void SetThinLineWidthHint (
02492 bool enable = true
02493 ) { m_bThinLineWidthHint = enable; }
02494
02505 void SetTransparency (
02506 UINT8 transparency
02507 );
02508
02511 void SetTransparencyLock (
02512 bool TransparencyLocked
02513 ) { m_bTransparencyLocked = TransparencyLocked; }
02514
02517 void SetTranspForPutImage (
02518 bool DoTranspForPutImage
02519 ) { m_bDoTranspPutImage = DoTranspForPutImage; }
02520
02522 void SetUsePatternFill (
02523 bool state = true
02524 ) { m_bUsePatternFill = state; }
02525
02527 void SetUsePatternLine (
02528 bool state = true
02529 ) { m_bUsePatternLine = state; }
02530
02532 void SetUsePatternPoint (
02533 bool state = true
02534 ) { m_bUsePatternPoint = state; }
02535
02537 const STIPPLEMASK& StippleGetMask () const
02538 { return (m_StippleMask); }
02539
02541 bool StippleIsUsed () const
02542 { return (m_StippleIsUsed); }
02543
02546 void StippleSetMask (
02547 const STIPPLEMASK& StippleMask
02548 );
02549
02551 void StippleSetUsed (
02552 bool used
02553 );
02554
02556 ERRVALUE TextAddToClip (
02557 const MIUNICODE *string,
02558 const POLYLINE& Baseline,
02559 MGD::BASELINE baseflags,
02560 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02561 );
02562
02563 ERRVALUE TextBlockComputeExtents (
02564 MGD::TEXTBLOCK& block,
02565 DRECT2D& extents
02566 );
02567
02568 ERRVALUE TextBlockDraw (
02569 MGD::TEXTBLOCK& block
02570 );
02571
02572 ERRVALUE TextBlockGetFirstString (
02573 MGD::TEXTBLOCK& block,
02574 MISTRING& string
02575 );
02576
02578 ERRVALUE TextDrawGlyph (
02579 double x,
02580 double y,
02581 double baseangle,
02582 MIUNICODE character,
02583 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02584 );
02585
02587 ERRVALUE TextDrawString (
02588 const DPOINT2D *basepoints,
02589 int numbasepoints,
02590 MGD::BASELINE baseflags,
02591 const MIUNICODE *string,
02592 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02593 );
02594
02596 ERRVALUE TextDrawStringPart (
02597 const DPOINT2D *basepoints,
02598 int numbasepoints,
02599 MGD::BASELINE baseflags,
02600 const MIUNICODE *string,
02601 int startindex = 0,
02602 int endindex = 0,
02603 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02604 );
02605
02607 ERRVALUE TextDrawStringSimple (
02608 double x,
02609 double y,
02610 double baseangle,
02611 const MIUNICODE *string,
02612 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02613 );
02614
02616 ERRVALUE TextGetFontMetrics (
02617 MGD::FONTINFO& fontinfo
02618 );
02619
02621 ERRVALUE TextGetGlyphExtents (
02622 const double& x,
02623 const double& y,
02624 const double& baseangle,
02625 MIUNICODE ch,
02626 DRECT2D& rect,
02627 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02628 ) {
02629 return (GetFont()->GetGlyphExtents(this, x, y, baseangle, ch, rect, mode));
02630 }
02631
02633 ERRVALUE TextGetGlyphMetrics (
02634 MIUNICODE ch,
02635 MGD::GLYPHINFO& glyphinfo,
02636 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02637 ) {
02638 return (GetFont()->GetGlyphMetrics(this, ch, glyphinfo, mode));
02639 }
02640
02642 ERRVALUE TextGetStringExtents (
02643 const DPOINT2D *basepoints,
02644 int numbasepoints,
02645 MGD::BASELINE baseflags,
02646 const MIUNICODE *string,
02647 DRECT2D& extents,
02648 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02649 );
02650
02652 ERRVALUE TextGetStringExtentsJustified (
02653 const DPOINT2D *basepoints,
02654 int numbasepoints,
02655 MGD::BASELINE baseflags,
02656 const MIUNICODE *string,
02657 DRECT2D& extents,
02658 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02659 );
02660
02662 ERRVALUE TextGetStringExtentsSimple (
02663 double x,
02664 double y,
02665 double baseangle,
02666 const MIUNICODE *string,
02667 DRECT2D& extents,
02668 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02669 );
02670
02672 ERRVALUE TextGetStringExtentsSimpleJustified (
02673 double x,
02674 double y,
02675 double baseangle,
02676 const MIUNICODE *string,
02677 DRECT2D& extents,
02678 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02679 );
02680
02682 ERRVALUE TextGetStringMetrics (
02683 const MIUNICODE *string,
02684 MGD::GLYPHINFO& glyphinfo,
02685 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02686 );
02687
02689 ERRVALUE TextGetStringWidth (
02690 const MIUNICODE *string,
02691 double& width,
02692 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
02693 );
02694
02696 void TextSetClipWidth (
02697 double percent
02698 );
02699
02701 void TextSetColors (
02702 PIXEL fgpixel,
02703 PIXEL bgpixel,
02704 PIXEL ulpixel
02705 );
02706
02710 void TextSetColors (
02711 const COLOR& fgcolor,
02712 const COLOR& bgcolor,
02713 const COLOR *ulcolor = 0
02714 );
02715
02717 void TextSetEnhanceWidth (
02718 double width,
02719 bool ValueInPixels = true
02720 );
02721
02725 ERRVALUE TextSetFont (
02726 int fonthandle
02727 );
02728
02736 ERRVALUE TextSetFontByName (
02737 const MIUNICODE *fontname,
02738 UINT32 FontFlagsRequested = 0,
02739 UINT32* pFontFlagsFound = 0
02740 );
02741
02743 void TextSetHeight (
02744 double height,
02745 SCREENUNIT units = SCREENUNIT_Pixels
02746 );
02747
02755 void TextSetOpenTypeFeatures (
02756 const MISTRING& features
02757 );
02758
02760 void TextSetShadowValues (
02761 double offset,
02762 double angle,
02763 bool relative
02764 );
02765
02767 void TextSetStrokeWidth (
02768 double width,
02769 bool ValueInPixels = true
02770 );
02771
02773 void TextSetStyle (
02774 const TEXTSTYLE& style
02775 );
02776
02778 void TextSetUnderlineValues (
02779 double offset,
02780 double thickness
02781 );
02782
02783 int TTFComputeGlyphExtentsByIndex (
02784 UINT16 GlyphIndex,
02785 MGD::GLYPHINFO& glyphinfo
02786 );
02787
02791 int TTFDrawGlyphByIndex (
02792 double x,
02793 double y,
02794 double baseangle,
02795 UINT16 idx
02796 );
02797
02799 int TTFGlyphToChar (
02800 UINT16 GlyphIndex,
02801 MIUNICODE& Char
02802 );
02803
02804 protected:
02805 MGD::DEVICE* m_dev;
02806 bool m_bUsePatternPoint;
02807 bool m_bUsePatternLine;
02808 bool m_bUsePatternFill;
02809 bool m_bLine4Connected;
02810 bool m_bColorLocked;
02811 bool m_bPatternFromString;
02812 bool m_bTransparencyLocked;
02813 bool m_bHasUsedTransparency;
02814 bool m_bPlaneMaskLocked;
02815 bool m_bDoClipForPut;
02816 bool m_bDoTranspPutImage;
02817 bool m_bDepthVariable;
02818 bool m_bPointScaledToMap;
02819 bool m_bLineScaledToMap;
02820 bool m_bNoMultiPointSpan;
02821 bool m_bNoFillRightPolyPixels;
02822
02823 PIXEL m_DrawColorPixel;
02824 PIXEL m_PlaneMask;
02825 double m_LineWidth;
02826
02827 POINTSTYLE m_PointStyle;
02828 LINESTYLE m_LineStyle;
02829 POLYSTYLE m_FillStyle;
02830 double m_MapScale;
02831
02832 MGD::FONT *m_font;
02833 MGD::TEXTSETTINGS m_Text;
02834
02835
02836 RVC::STYLEPATTERN_BASE* m_pFillPattern;
02837 RVC::STYLEPATTERN_LINE* m_pLinePattern;
02838 RVC::STYLEPATTERN_SYMBOL* m_pPointSymbol;
02839 RVC::STYLEPATTERN_BITMAP* m_pPointBitmap;
02840
02841 INT32 m_bitmapxorigin;
02842 INT32 m_bitmapyorigin;
02843 UINT8 m_Transparency;
02844 float m_dfx, m_dfy, m_dfz;
02845 INT32 m_xsize, m_ysize;
02846 INT32 m_xsize2, m_ysize2;
02847
02848 DEVICE_MEM1_SPARSE *m_pClipDevice;
02849 CONTEXT *m_pClipContext;
02850 REGION2D *m_ClipRegion;
02851 bool m_bNeedToUpdateClipMask;
02852
02853 MGD::LINECAP m_LineCap;
02854 MGD::LINEJOIN m_LineJoin;
02855 MGD::DEPTHTEST m_DepthTest;
02856 MGD::PIXELFUNC m_PixelFunc;
02857
02859 COLOR_ARRAY m_PutImageColorMap;
02860 COLORSPACE m_PutImageColorSpace;
02861 int m_PutImageBytesPerPixel;
02862
02863 LRECT2D m_ClipRect;
02864 COLORCOMPSTRUCT *m_ColorComp;
02865 SIMPLE_ARRAY<UINT8> m_ColorConvBuf;
02866 SIMPLE_ARRAY<UINT8> m_ICMConvBuf;
02867
02868 bool m_IsPerspective;
02869 SIMPLE_ARRAY<LPOINT2D> m_WorkPoints;
02870 PROFILE m_SourceProfile;
02871 TRANSFORM m_ImageICMTransform;
02872 TRANSFORM m_ICMTransform;
02873 mutable TRANSFORM m_ICMTransformInv;
02874
02876 struct EDGELIST;
02877 SIMPLE_ARRAY<EDGELIST> m_EdgeList;
02878 SIMPLE_ARRAY<INT32> m_etptr;
02879 SIMPLE_ARRAY<INT32> m_lptr;
02880 SIMPLE_ARRAY<LPOLYGON> m_PolygonArray;
02881 SIMPLE_ARRAY<LPOINT2D> m_PointArray;
02882 bool m_bAntialiasingEnabled;
02883 bool m_bThinLineWidthHint;
02884
02886 CONTEXT (
02887 MGD::DEVICE* disp
02888 );
02889
02890 ERRVALUE ClipRegionUpdateMask ();
02891
02897 ERRVALUE CopyRectSampledLow (
02898 const MGD::DEVICE *pDevSrc,
02899 const LRECT2D& srcrect,
02900 const LRECT2D& destrect,
02901 MGD::DEVICE_MEM8G *pDevAlpha = 0
02902 );
02903
02905 float DepthCalc (
02906 float z
02907 ) const { return (m_IsPerspective ? (1.0F / z) : z); }
02908
02909 bool DepthTest (
02910 float z,
02911 float bufz
02912 ) const { return (DepthCalc(z) >= bufz); }
02913
02916 ERRVALUE _DrawGlyph (
02917 MGD::FONT* font,
02918 double x,
02919 double y,
02920 double baseangle,
02921 const MGD::STRINGDATA& gidstr,
02922 int num
02923 ) {
02924 return (v_DrawGlyph(font, x, y, baseangle, gidstr, num));
02925 }
02926
02935 ERRVALUE DrawLinesLow (
02936 const LPOINT2D* points,
02937 INT32 numpts
02938 ) {
02939 return (v_DrawLinesLow(points, numpts));
02940 }
02941
02950 ERRVALUE DrawLinesLow (
02951 const POLYLINE& line
02952 ) { return (v_DrawLinesLow(line)); }
02953
02959 ERRVALUE DrawStringStraight (
02960 const DPOINT2D& pt,
02961 double baseangle,
02962 const MGD::STRINGDATA& gidstr,
02963 int sindex,
02964 int eindex,
02965 double SpaceExtra,
02966 double GlyphExtra
02967 ) {
02968 return (v_DrawStringStraight(pt, baseangle, gidstr, sindex, eindex, SpaceExtra, GlyphExtra));
02969 }
02970
02973 COLORSPACE GetImageColorSpace (
02974 ) const {
02975 return (m_PutImageColorSpace);
02976 }
02977
02978 int GetStringExtents (
02979 const DPOINT2D* baseline,
02980 int numpts,
02981 double baseangle,
02982 MGD::BASELINE baseflags,
02983 const MIUNICODE* string,
02984 DRECT2D& extents,
02985 MGD::FONT::MODE mode,
02986 bool TakeJustificationIntoAccount
02987 );
02988
02989 int GetStringExtents (
02990 const DPOINT2D* baseline,
02991 int numpts,
02992 double baseangle,
02993 MGD::BASELINE baseflags,
02994 const MGD::STRINGDATA& bidstr,
02995 int startindex,
02996 int endindex,
02997 DRECT2D& extents,
02998 bool TakeJustificationIntoAccount
02999 );
03000
03001 int GetStringExtentsAlongCurve (
03002 const DPOINT2D* baseline,
03003 int numpts,
03004 const MGD::STRINGDATA& bidstr,
03005 int startindex,
03006 int endindex,
03007 UINT32 baseflags,
03008 DRECT2D& extents
03009 );
03010
03015 ERRVALUE ImageSetColorSpace (
03016 COLORSPACE colorspace,
03017 const COLOR_ARRAY* colmap = 0
03018 );
03019
03028 double _NextGlyphPosition (
03029 MGD::FONT *font,
03030 double *x,
03031 double *y,
03032 double baseangle,
03033 const MGD::STRINGDATA& gidstr,
03034 int num,
03035 double SpaceExtra = 0.0,
03036 double GlyphExtra = 0.0
03037 ) { return (font->NextPosition(this, x, y, baseangle, gidstr, num, SpaceExtra, GlyphExtra)); }
03038
03049 ERRVALUE PutImageSpanDirect (
03050 INT32 x,
03051 INT32 y,
03052 INT32 len,
03053 const void* data,
03054 const UINT8 *mask = 0
03055 );
03056
03059 bool StippleTest (
03060 INT32 x,
03061 INT32 y
03062 ) const { return (!m_StippleIsUsed || m_StippleMask.TestPoint(x,y)); }
03063
03065 virtual void v_Copy (
03066 const CONTEXT &rhs
03067 );
03068
03072 virtual ERRVALUE v_CopyRect (
03073 const MGD::DEVICE *pDevSrc,
03074 const LRECT2D& RectSrc,
03075 const LPOINT2D& PtTgt,
03076 MGD::DEVICE_MEM8G *pDevAlpha = 0
03077 );
03078
03083 virtual ERRVALUE v_DrawArc (
03084 INT32 xcenter,
03085 INT32 ycenter,
03086 INT32 xradius,
03087 INT32 yradius,
03088 double startangle,
03089 double sweepangle,
03090 double rotangle = 0,
03091 MGD::SHAPECLOSE closemode = SHAPECLOSE_None
03092 );
03093
03094 virtual ERRVALUE v_DrawArc (
03095 double xcenter,
03096 double ycenter,
03097 double xradius,
03098 double yradius,
03099 double startangle,
03100 double sweepangle,
03101 double rotangle = 0,
03102 MGD::SHAPECLOSE closemode = SHAPECLOSE_None
03103 );
03104
03113 virtual ERRVALUE v_DrawCircle (
03114 INT32 xcenter,
03115 INT32 ycenter,
03116 INT32 radius
03117 );
03118
03119 virtual ERRVALUE v_DrawCircle (
03120 double xcenter,
03121 double ycenter,
03122 double radius
03123 );
03124
03127 virtual ERRVALUE v_DrawEllipse (
03128 INT32 xcenter,
03129 INT32 ycenter,
03130 INT32 xradius,
03131 INT32 yradius,
03132 double rotangle = 0
03133 );
03134
03135 virtual ERRVALUE v_DrawEllipse (
03136 double xcenter,
03137 double ycenter,
03138 double xradius,
03139 double yradius,
03140 double rotangle
03141 );
03142
03147 virtual ERRVALUE v_DrawGlyph (
03148 MGD::FONT* font,
03149 double x,
03150 double y,
03151 double baseangle,
03152 const MGD::STRINGDATA& gidstr,
03153 int num
03154 );
03155
03159 virtual ERRVALUE v_DrawLine (
03160 INT32 x1,
03161 INT32 y1,
03162 INT32 x2,
03163 INT32 y2
03164 );
03165
03169 virtual ERRVALUE v_DrawLine3D (
03170 INT32 x1,
03171 INT32 y1,
03172 float z1,
03173 INT32 x2,
03174 INT32 y2,
03175 float z2
03176 );
03177
03179 virtual ERRVALUE v_DrawLinesDashed (
03180 const LPOINT2D *points,
03181 INT32 numpoints,
03182 const double *DashArray,
03183 INT32 DashCount,
03184 double DashOffset = 0.0,
03185 bool close = false
03186 );
03187
03197 virtual ERRVALUE v_DrawLinesLow (
03198 const LPOINT2D* points,
03199 INT32 numpts
03200 );
03201
03222 virtual ERRVALUE v_DrawLinesLow (
03223 const POLYLINE& line
03224 );
03225
03230 virtual ERRVALUE v_DrawPixel (
03231 INT32 x,
03232 INT32 y
03233 );
03234
03238 virtual ERRVALUE v_DrawPoint (
03239 INT32 x,
03240 INT32 y
03241 );
03242
03246 virtual ERRVALUE v_DrawPoint (
03247 const DPOINT2D& pt
03248 );
03249
03255 virtual ERRVALUE v_DrawPoints (
03256 const LPOINT2D* points,
03257 INT32 NumPoints
03258 );
03259
03262 virtual ERRVALUE v_DrawRectangle (
03263 INT32 x1,
03264 INT32 y1,
03265 INT32 x2,
03266 INT32 y2
03267 );
03268
03271 virtual ERRVALUE v_DrawRectangle (
03272 const LRECT2D& rect
03273 );
03274
03278 virtual ERRVALUE v_DrawRectangle (
03279 const DRECT2D& rect
03280 );
03281
03285 virtual ERRVALUE v_DrawSegments (
03286 const LSEGMENT2D* segments,
03287 INT32 NumSegments
03288 );
03289
03295 virtual ERRVALUE v_DrawStringStraight (
03296 const DPOINT2D& pt,
03297 double baseangle,
03298 const MGD::STRINGDATA& gidstr,
03299 int sindex,
03300 int eindex,
03301 double SpaceExtra,
03302 double GlyphExtra
03303 );
03304
03308 virtual ERRVALUE v_EraseRectangle (
03309 const LRECT2D& rectangle,
03310 const COLOR& color
03311 );
03312
03317 virtual ERRVALUE v_FillArc (
03318 INT32 xcenter,
03319 INT32 ycenter,
03320 INT32 xradius,
03321 INT32 yradius,
03322 double startangle,
03323 double sweepangle,
03324 double rotangle = 0,
03325 MGD::SHAPECLOSE closemode = SHAPECLOSE_Direct
03326 );
03327
03328 virtual ERRVALUE v_FillArc (
03329 double xcenter,
03330 double ycenter,
03331 double xradius,
03332 double yradius,
03333 double startangle,
03334 double sweepangle,
03335 double rotangle,
03336 MGD::SHAPECLOSE closemode
03337 );
03338
03342 virtual ERRVALUE v_FillCircle (
03343 INT32 xcenter,
03344 INT32 ycenter,
03345 INT32 radius
03346 );
03347
03348 virtual ERRVALUE v_FillCircle (
03349 double xcenter,
03350 double ycenter,
03351 double radius
03352 );
03353
03357 virtual ERRVALUE v_FillEllipse (
03358 INT32 xcenter,
03359 INT32 ycenter,
03360 INT32 xradius,
03361 INT32 yradius,
03362 double rotangle = 0
03363 );
03364
03365 virtual ERRVALUE v_FillEllipse (
03366 double xcenter,
03367 double ycenter,
03368 double xradius,
03369 double yradius,
03370 double rotangle
03371 );
03372
03376 virtual ERRVALUE v_FillPolygon (
03377 const LPOINT2D* points,
03378 INT32 NumPoints,
03379 MGD::POLYSHAPE shape = POLYSHAPE_Complex,
03380 bool DrawOutline = false
03381 );
03382
03389 virtual ERRVALUE v_FillPolygons (
03390 const LPOLYGON* polygons,
03391 INT32 NumPolys,
03392 bool DrawOutline = false
03393 );
03394
03401 virtual ERRVALUE v_FillRectangle (
03402 INT32 x1,
03403 INT32 y1,
03404 INT32 x2,
03405 INT32 y2
03406 );
03407
03411 virtual ERRVALUE v_FillRectangle (
03412 const LRECT2D& rect
03413 );
03414
03418 virtual ERRVALUE v_FillRectangle (
03419 const DRECT2D& rect
03420 );
03421
03424 virtual ERRVALUE v_FillRegion (
03425 const REGION2D& polygons,
03426 bool DrawOutline = false
03427 );
03428
03431 virtual ERRVALUE v_FillSubRegion (
03432 const SUBREGION2D& polygons,
03433 bool DrawOutline = false
03434 );
03435
03445 virtual ERRVALUE v_ImageBegin (
03446 INT32 x,
03447 INT32 y,
03448 INT32 width,
03449 INT32 height,
03450 COLORSPACE colorspace,
03451 const COLOR_ARRAY* colormap = 0,
03452 UINT32 flags = 0
03453 );
03454
03458 virtual ERRVALUE v_ImageEnd (
03459 UINT32 flags = 0
03460 );
03461
03472 virtual ERRVALUE v_PutImageSpanDirect (
03473 INT32 x,
03474 INT32 y,
03475 INT32 len,
03476 const void* data,
03477 const UINT8 *mask = 0
03478 );
03479
03486 virtual ERRVALUE v_PutPixel (
03487 INT32 x,
03488 INT32 y,
03489 PIXEL pixel
03490 );
03491
03497 virtual ERRVALUE v_PutPixel3D (
03498 INT32 x,
03499 INT32 y,
03500 float z,
03501 PIXEL pixel
03502 );
03503
03509 virtual void v_Reset ();
03510
03518 virtual void v_SetBitmapOrigin (
03519 INT32 xorigin,
03520 INT32 yorigin
03521 );
03522
03527 virtual void v_SetColorIsPatternVariable (
03528 bool value
03529 );
03530
03531 private:
03532 #ifndef GENERATING_DOXYGEN_OUTPUT
03533
03534 SIMPLE_ARRAY<PRIVDATA*> m_PrivData;
03535 int m_CurrentPassNum;
03536 int m_NumPassesNeeded;
03537 MGD::OPACITY_MODE m_OpacityBlendMode;
03538 UINT16 m_FrameBuffer;
03539 STIPPLEMASK m_StippleMask;
03540 bool m_StippleIsUsed;
03541
03542 static ERRVALUE OpenFontTTF (const MIUNICODE* fontname, MGD::FONT** pFont);
03543 static ERRVALUE OpenFontOF (const MIUNICODE* fontname, MGD::FONT** pFont);
03544
03545
03546 CONTEXT (const CONTEXT&);
03547 CONTEXT& operator= (const CONTEXT&);
03548
03549 void ClipRegionValidate ();
03550 void ClipRegionInit ();
03551
03552 ERRVALUE ComputeLabelFrame (
03553 REGION2D& Frame,
03554 const LABELSTYLE& Style,
03555 const DRECT2D& Extents,
03556 const DRECT2D* ExtentsSansDecenders,
03557 const DPOINT2D& BasePt,
03558 double RotAngle
03559 );
03560
03561 ERRVALUE ComputeLabelExtentsAlongCurve (
03562 REGION2D& extents,
03563 const MIUNICODE* text,
03564 const POLYLINE& BaseLine,
03565 const LABELSTYLE& Style,
03566 const POLYLINELIST& LeaderLines,
03567 bool bCheckClipping = false
03568 );
03569
03570 ERRVALUE ComputeTextExtentsShrinkWrapped (
03571 REGION2D& CombinedExtents,
03572 const MIUNICODE* string,
03573 const POLYLINE& Baseline,
03574 const TEXTSTYLE& style,
03575 double BufferDistance = 0.0,
03576 MGD::BASELINE baseflags = MGD::BASELINE_Straight,
03577 MGD::FONT::MODE mode = MGD::FONT::MODE_MIUNICODE
03578 );
03579
03580 ERRVALUE DrawLabelAlongCurve (const MIUNICODE *text, const POLYLINE& BaseLine, const LABELSTYLE& Style, const POLYLINELIST& LeaderLines);
03581 ERRVALUE DrawLabelFrameAndLeaders (const REGION2D& Frame, const LABELSTYLE& Style, const POLYLINELIST& LeaderLines);
03582
03583 ERRVALUE DrawLinesPattern (const LPOINT2D* points, INT32 NumPoints);
03584 ERRVALUE DrawLinesPattern (const POLYLINE& lines);
03585 ERRVALUE DrawLinesThick (const LPOINT2D* points, INT32 NumPoints);
03586 ERRVALUE DrawLinesThickAA (const LPOINT2D* points, INT32 NumPoints);
03587 ERRVALUE DrawLinesThickAA (const POLYLINE& line);
03588 ERRVALUE DrawLinesThin (const LPOINT2D* points, INT32 NumPoints);
03589 ERRVALUE DrawLinesThinAA (const LPOINT2D* points, INT32 NumPoints);
03590 ERRVALUE DrawLinesThinAA (const POLYLINE& line);
03591
03592 ERRVALUE DrawPointPattern (INT32 x, INT32 y);
03593
03594 ERRVALUE DrawStringAlongCurve (const POLYLINE& BaseLine, const MGD::STRINGDATA& gidstr, int sindex, int eindex, UINT32 baseflags);
03595
03596 ERRVALUE FillSpanSub (INT32 x1, INT32 x2, INT32 y);
03597 ERRVALUE FillSpanWithDepthTest (INT32 x1, INT32 x2, INT32 y);
03598
03599 ERRVALUE GenArcPoints (
03600 const LPOINT2D& center,
03601 INT32 xradius,
03602 INT32 yradius,
03603 double StartAngle,
03604 double SweepAngle,
03605 double RotAngle,
03606 SIMPLE_ARRAY<LPOINT2D>& points,
03607 bool bKeepExistingPoints = false
03608 );
03609
03610 ERRVALUE GenRoundedRectPoints (const LRECT2D& rect, INT32 radius, SIMPLE_ARRAY<LPOINT2D>& points);
03611
03612 ERRVALUE HatchMBR (const LRECTXY &mbr, RVC::STYLEPATTERN_HATCH& HatchPatt, const void *vpHatchElement);
03613 ERRVALUE HatchPolygons (const LPOLYGON *poly, INT32 numpoly);
03614 ERRVALUE HatchPolygons (const REGION2D&);
03615 ERRVALUE HatchPolygonsStyle (const LPOLYGON *poly, INT32 numpoly);
03616 ERRVALUE HatchPolygonsStyle (const REGION2D& region);
03617
03618 ERRVALUE LabelFrameMergeBalloonLeaders (REGION2D& frame, const LABELSTYLE& Style, const POLYLINELIST& LeaderLines);
03619
03620 bool SetupICMTransform ();
03621
03622 friend class MGD::DEVICE;
03623 friend struct MGD::TEXTBLOCK;
03624 friend class SAVEFONTFLAGS;
03625 friend class LOCALOPENFONTS;
03626 #endif // GENERATING_DOXYGEN_OUTPUT
03627
03630 virtual ERRVALUE v_DrawIcon (
03631 INT32 x,
03632 INT32 y,
03633 MICONSTRUCT* icon,
03634 ICONFLAGS flags
03635 );
03636
03655 virtual ERRVALUE v_InterfaceTextDrawString (
03656 INT32 x,
03657 INT32 y,
03658 const MIUNICODE* string,
03659 TEXTBASEORIGIN baseorigin,
03660 bool bVisualOrder,
03661 INTERFACETEXTSTYLE style
03662 );
03663
03668 virtual ERRVALUE v_InterfaceTextGetExtents (
03669 const MIUNICODE* string,
03670 int *width,
03671 int *height,
03672 int *ascent,
03673 INTERFACETEXTSTYLE style
03674 );
03675
03680 virtual ERRVALUE v_InterfaceTextGetMetrics (
03681 const MIUNICODE* string,
03682 TEXTMETRICS& metrics,
03683 INTERFACETEXTSTYLE style
03684 );
03685
03690 virtual int v_InterfaceTextGetWidth (
03691 const MIUNICODE* string,
03692 INTERFACETEXTSTYLE style,
03693 bool bInkMetrics
03694 );
03695
03699 virtual void v_SymbolBegin ();
03700
03703 virtual void v_SymbolEnd ();
03704
03710 virtual void v_TextBlockBegin (
03711 const MGD::TEXTBLOCK& block
03712 );
03713
03719 virtual void v_TextBlockEnd (
03720 const MGD::TEXTBLOCK& block
03721 );
03722
03728 virtual void v_TextSpanBegin ();
03729
03735 virtual void v_TextSpanEnd ();
03736
03741 virtual void v_UpdateClipNone ();
03742
03747 virtual void v_UpdateClipRect ();
03748
03753 virtual void v_UpdateClipRegion ();
03754
03762 virtual void v_UpdateColor ();
03763
03772 virtual void v_UpdateColor2 (const COLOR&);
03773
03778 virtual void v_UpdateFont (const MGD::FONT*);
03779
03784 virtual void v_UpdateLineAttributes ();
03785
03790 virtual void v_UpdateLineWidth ();
03791
03796 virtual void v_UpdatePixelFunc ();
03797
03802 virtual void v_UpdatePlaneMask ();
03803
03808 virtual void v_UpdateStipple ();
03809
03810 };
03811
03812
03815 class SAVECLIP {
03816 public:
03817 SAVECLIP (
03818 MGD::CONTEXT& gc
03819 );
03820
03821 ~SAVECLIP();
03822
03823 private:
03824 #ifndef GENERATING_DOXYGEN_OUTPUT
03825 MGD::CONTEXT& m_gc;
03826 REGION2D* m_SavedClip;
03827 #endif // GENERATING_DOXYGEN_OUTPUT
03828 };
03829
03830
03832 struct STRINGDATA {
03833 STRINGDATA() {}
03834 ~STRINGDATA() {}
03835
03836 STRINGDATA (
03837 MGD::CONTEXT* context,
03838 const MISTRING& str
03839 );
03840
03841 STRINGDATA (
03842 MGD::CONTEXT* context,
03843 const MIUNICODE* str,
03844 MGD::FONT::MODE mode
03845 );
03846
03847 struct CHARDATA {
03848 UINT16 gid;
03849 UINT16 flags;
03850 FTFACE* face;
03851 DPOINT2D pos;
03852 };
03853
03854 SIMPLE_ARRAY<UINT16> m_gid;
03855 SIMPLE_ARRAY<FTFACE*> m_face;
03856 SIMPLE_ARRAY<UINT16> m_gflags;
03857 SIMPLE_ARRAY<DPOINT2D> m_pos;
03858 MISTRING m_str;
03859 private:
03860 #ifndef GENERATING_DOXYGEN_OUTPUT
03861 STRINGDATA(const STRINGDATA&);
03862
03863 ERRVALUE Initialize (
03864 MGD::CONTEXT* context,
03865 const MIUNICODE* str,
03866 MGD::FONT::MODE mode
03867 );
03868 #endif // GENERATING_DOXYGEN_OUTPUT
03869 };
03870
03871
03872
03873
03877 class COLORLOCK {
03878 public:
03879
03881 COLORLOCK (
03882 CONTEXT *pContext
03883 ) : m_pContext(pContext), m_locked(false) { }
03884
03886 ~COLORLOCK (
03887 ) { Clear(); }
03888
03890 void Clear (
03891 ) { if (m_locked) m_pContext->SetColorLock(false); m_locked = false; }
03892
03894 void Set (
03895 ) { if (!m_locked) m_pContext->SetColorLock(true); m_locked = true; }
03896
03897 private:
03898 #ifndef GENERATING_DOXYGEN_OUTPUT
03899 CONTEXT *m_pContext;
03900 bool m_locked;
03901
03902 COLORLOCK (const COLORLOCK&);
03903 COLORLOCK& operator= (const COLORLOCK&);
03904 #endif // GENERATING_DOXYGEN_OUTPUT
03905 };
03906
03907
03909 class CONTEXT_AUTOPTR {
03910 public:
03911
03913 CONTEXT_AUTOPTR (
03914 ): m_pContext(DEVICE::GetNull().CreateContext())
03915 { }
03916
03918 explicit CONTEXT_AUTOPTR (
03919 DEVICE& dev
03920 ): m_pContext(dev.CreateContext())
03921 { }
03922
03923 ~CONTEXT_AUTOPTR (
03924 ) { delete m_pContext; }
03925
03926 CONTEXT& operator* () const {
03927 return (*m_pContext);
03928 }
03929
03930 CONTEXT* operator-> () const {
03931 return (m_pContext);
03932 }
03933
03935 operator CONTEXT* (
03936 ) const { return (m_pContext); }
03937
03938 private:
03939 #ifndef GENERATING_DOXYGEN_OUTPUT
03940 CONTEXT_AUTOPTR(const CONTEXT_AUTOPTR&);
03941 CONTEXT_AUTOPTR& operator=(const CONTEXT_AUTOPTR&);
03942
03943 CONTEXT *m_pContext;
03944 #endif // GENERATING_DOXYGEN_OUTPUT
03945 };
03946
03947
03948
03949
03950 ERRVALUE DlgGetScalableFont (
03951 MDLGPARENT dlgparent,
03952 MISTRING& FontName,
03953 const MISTRING& PromptStr,
03954 bool TrueTypeOnly = true
03955 );
03956
03959 DEPRECATED int TextGetFontByName (
03960 INIHANDLE ini,
03961 MIUNICODE *fontname,
03962 MIUNICODE *family,
03963 UINT32 StyleFlags,
03964 UINT32 *pStyleFlags
03965 );
03966
03968 int TextGetFontByName (
03969 MISTRING& fontname,
03970 const MIUNICODE *family,
03971 UINT32 StyleFlags,
03972 UINT32 *pStyleFlags,
03973 INIHANDLE ini = 0
03974 );
03975
03976 int TextGetFontByFamily (
03977 MISTRING& fontname,
03978 const MIUNICODE *family,
03979 UINT32 StyleFlags,
03980 UINT32 *pStyleFlags,
03981 INIHANDLE ini = 0
03982 );
03983
03984 int TextGetFontByFullName (
03985 MISTRING& fontname,
03986 const MIUNICODE *realname,
03987 UINT32 StyleFlags,
03988 UINT32 *pStyleFlags,
03989 INIHANDLE ini = 0
03990 );
03991
03993 ERRVALUE TextGetFontInfo (
03994 int fhandle,
03995 MGD::FONT *font
03996 );
03997
03999 ERRVALUE TextGetFontName (
04000 int fonthandle,
04001 MISTRING& fontname
04002 );
04003
04005
04006 ERRVALUE TextGetFontNameOld (
04007 int fonthandle,
04008 MIUNICODE* fontname
04009 );
04010
04011 ERRVALUE TextGetTTFName (
04012 INIHANDLE ini,
04013 const MIUNICODE *fontname,
04014 MGD::TTFNAMEID nameid,
04015 MISTRING& name,
04016 UINT32 *pStyleFlags
04017 );
04018
04019 void GetDefaultFontName (
04020 MISTRING& name
04021 );
04022
04023
04024
04025 }
04026
04027 #endif // INC_MI32_MGD2_H
04028
04029