00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GR_GRAPHICS_H
00023 #define GR_GRAPHICS_H
00024
00025 #include "xap_Features.h"
00026
00027 #include "ut_types.h"
00028 #include "ut_units.h"
00029 #include "ut_growbuf.h"
00030 #include "ut_misc.h"
00031 #include "gr_Image.h"
00032 #include "gr_Caret.h"
00033 #include "gr_Transform.h"
00034 #include "gr_CharWidthsCache.h"
00035 #include "ut_vector.h"
00036 #include "ut_stack.h"
00037 #include "ut_TextIterator.h"
00038
00039 #ifdef ABI_GRAPHICS_PLUGIN
00040 #define VIRTUAL_SFX = 0
00041 #else
00042 #define VIRTUAL_SFX
00043 #endif
00044
00045 class UT_RGBColor;
00046 class XAP_PrefsScheme;
00047 class XAP_Frame;
00048 class UT_String;
00049 class GR_RenderInfo;
00050 class GR_Itemization;
00051 class GR_ShapingInfo;
00052
00053
00068 class GR_Graphics;
00069 class GR_Painter;
00070 class GR_Caret;
00071
00072 typedef enum {
00073 GR_FONT_UNSET=0,
00074 GR_FONT_UNIX,
00075 GR_FONT_UNIX_PANGO,
00076 GR_FONT_WIN32,
00077 GR_FONT_WIN32_USP
00078 } GrFontType;
00079
00080 class ABI_EXPORT GR_Font
00081 {
00082 friend class GR_Graphics;
00083 friend class std::map<std::string, GR_Font*>;
00084
00085 public:
00086
00087
00088 virtual ~GR_Font();
00089
00090
00091 typedef enum { FF_Unknown = 0, FF_Roman, FF_Swiss, FF_Modern,
00092 FF_Script, FF_Decorative, FF_Technical, FF_BiDi, FF_Last } FontFamilyEnum;
00093 typedef enum { FP_Unknown = 0, FP_Fixed, FP_Variable } FontPitchEnum;
00094
00095
00096
00097 static void s_getGenericFontProperties(const char * szFontName,
00098 FontFamilyEnum * pff,
00099 FontPitchEnum * pfp,
00100 bool * pbTrueType);
00101
00102 virtual const char* getFamily() const { return NULL; }
00103 UT_uint32 getAllocNumber() const {return m_iAllocNo;}
00108 virtual UT_sint32 measureUnremappedCharForCache(UT_UCSChar cChar) const = 0;
00109 virtual const std::string & hashKey(void) const;
00110 UT_sint32 getCharWidthFromCache (UT_UCSChar c) const;
00111
00112
00113 virtual GR_CharWidths* newFontWidths(void) const;
00114
00115
00116
00117
00118
00119 virtual bool doesGlyphExist(UT_UCS4Char g) const;
00120
00121
00122
00123
00124
00125
00126
00127 virtual bool glyphBox(UT_UCS4Char g, UT_Rect & rec, GR_Graphics * pG) = 0;
00128 static bool s_doesGlyphExist(UT_UCS4Char g, void *instance)
00129 {
00130 UT_return_val_if_fail(instance, false);
00131 GR_Font * pThis = static_cast<GR_Font*>(instance);
00132 return pThis->doesGlyphExist(g);
00133 }
00134
00135 GrFontType getType()const {return m_eType;}
00136
00137 protected:
00138
00139 GR_Font();
00140
00141 GR_CharWidths * _getCharWidths() const {return m_pCharWidths;}
00146 mutable std::string m_hashKey;
00147
00148 GrFontType m_eType;
00149
00150 private:
00151
00152 static UT_uint32 s_iAllocCount;
00153 UT_uint32 m_iAllocNo;
00154 mutable GR_CharWidths* m_pCharWidths;
00155 };
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180 enum GR_GraphicsId
00181 {
00182
00183
00184 GRID_DEFAULT = 0x0,
00185 GRID_DEFAULT_PRINT = 0x1,
00186
00187 GRID_LAST_DEFAULT = 0xff,
00188
00189
00190
00191 GRID_COCOA = 0x102,
00192 GRID_WIN32 = 0x104,
00193 GRID_UNIX = 0x105,
00194 GRID_UNIX_PS = 0x106,
00195 GRID_CAIRO_NULL = 0x107,
00196
00197
00198
00199 GRID_LAST_BUILT_IN = 0x200,
00200
00201
00202
00203
00204 GRID_UNIX_PANGO = 0x201,
00205 GRID_WIN32_UNISCRIBE = 0x202,
00206 GRID_UNIX_PANGO_PRINT = 0x203,
00207 GRID_UNIX_PANGO_PIXMAP = 0x204,
00208 GRID_COCOA_PANGO = 0x205,
00209
00210 GRID_LAST_EXTENSION = 0x0000ffff,
00211
00212
00213
00214 GRID_UNKNOWN = 0xffffffff
00215 };
00216
00217
00218 enum GR_Capability
00219 {
00220 GRCAP_UNKNOWN = 0,
00221 GRCAP_SCREEN_ONLY = 1,
00222 GRCAP_PRINTER_ONLY = 2,
00223 GRCAP_SCREEN_AND_PRINTER = 3
00224 };
00225
00269 class ABI_EXPORT GR_AllocInfo
00270 {
00271 public:
00272 virtual ~GR_AllocInfo() {}
00273
00274 virtual GR_GraphicsId getType() const {UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); return GRID_UNKNOWN;}
00275 virtual bool isPrinterGraphics()const {UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); return false;}
00276 };
00277
00278 typedef GR_Graphics * (*GR_Allocator)(GR_AllocInfo&);
00279 typedef const char * (*GR_Descriptor)(void);
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289 class ABI_EXPORT GR_GraphicsFactory
00290 {
00291
00292 public:
00293 GR_GraphicsFactory(){};
00294 virtual ~GR_GraphicsFactory(){};
00295
00296 UT_uint32 getClassCount() const {return m_vClassIds.getItemCount();}
00297
00298 bool registerClass(GR_Allocator, GR_Descriptor, UT_uint32 iClassId);
00299 UT_uint32 registerPluginClass(GR_Allocator, GR_Descriptor);
00300
00301 void registerAsDefault(UT_uint32 iClassId, bool bScreen)
00302 {
00303 if(bScreen)
00304 m_iDefaultScreen = iClassId;
00305 else
00306 m_iDefaultPrinter = iClassId;
00307 }
00308
00309 UT_uint32 getDefaultClass(bool bScreen) const {if(bScreen) return m_iDefaultScreen; else return m_iDefaultPrinter;}
00310 bool unregisterClass(UT_uint32 iClassId);
00311 bool isRegistered(UT_uint32 iClassId) const;
00312
00313 GR_Graphics * newGraphics(UT_uint32 iClassId, GR_AllocInfo ¶m) const;
00314 const char * getClassDescription(UT_uint32 iClassId) const;
00315
00316
00317 private:
00318 UT_GenericVector<GR_Allocator> m_vAllocators;
00319 UT_GenericVector<GR_Descriptor> m_vDescriptors;
00320 UT_NumberVector m_vClassIds;
00321
00322 UT_uint32 m_iDefaultScreen;
00323 UT_uint32 m_iDefaultPrinter;
00324 };
00325
00326
00327 enum GRShapingResult
00328 {
00329 GRSR_BufferClean = 0x00,
00330 GRSR_None = 0x01,
00331 GRSR_ContextSensitive = 0x02,
00332 GRSR_Ligatures = 0x04,
00333 GRSR_ContextSensitiveAndLigatures = 0x06,
00334 GRSR_Unknown = 0xef,
00335 GRSR_Error = 0xff
00336 };
00337
00338
00339
00340
00341
00342
00343
00344 #define GR_OC_LEFT_FLUSHED 0x40000000 // flip bit 31
00345 #define GR_OC_MAX_WIDTH 0x3fffffff
00346
00347 class ABI_EXPORT AllCarets
00348 {
00349 friend class GR_Graphics;
00350 public:
00351 AllCarets(GR_Graphics * pG,
00352 GR_Caret ** pCaret,
00353 UT_GenericVector<GR_Caret *>* vecCarets );
00354 virtual ~AllCarets(){}
00355 GR_Caret * getBaseCaret(void);
00356 void enable(void);
00357 void disable(bool bNoMulti = false);
00358 void setBlink(bool bBlink);
00359 void JustErase(UT_sint32 xPoint,UT_sint32 yPoint);
00360 void setWindowSize(UT_uint32 width, UT_uint32 height);
00361 void setCoords(UT_sint32 x, UT_sint32 y, UT_uint32 h,
00362 UT_sint32 x2 = 0, UT_sint32 y2 = 0, UT_uint32 h2 = 0,
00363 bool bPointDirection = false,
00364 const UT_RGBColor * pClr = NULL);
00365 void setInsertMode (bool mode);
00366 void forceDraw(void);
00367
00368 private:
00369 GR_Graphics * m_pG;
00370 GR_Caret ** m_pLocalCaret;
00371 UT_GenericVector<GR_Caret *>* m_vecCarets;
00372 };
00373
00374
00375 class ABI_EXPORT GR_Graphics
00376 {
00377 friend class GR_Painter;
00378 friend class GR_Caret;
00379 friend class AllCarets;
00380 public:
00381 virtual ~GR_Graphics();
00382
00383
00384
00385
00386
00387 virtual UT_uint32 getClassId() = 0;
00388
00389 virtual GR_Capability getCapability() {UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); return GRCAP_UNKNOWN;}
00390 #if 0
00391
00392
00393 static const char * graphicsDescriptor(void){UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); return "???";}
00394 static GR_Graphics * graphicsAllocator(GR_AllocInfo&){UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); return NULL;}
00395 #endif
00396
00397 AllCarets * allCarets();
00398 void disableAllCarets();
00399 void enableAllCarets();
00400
00401 UT_sint32 tdu(UT_sint32 layoutUnits) const;
00402 UT_sint32 tlu(UT_sint32 deviceUnits) const;
00403 double tduD(double layoutUnits) const;
00404 double tluD(double deviceUnits) const;
00405 void antiAliasAlways(bool bAntiAlias)
00406 { m_bAntiAliasAlways = bAntiAlias;}
00407 bool getAntiAliasAlways(void)
00408 { return m_bAntiAliasAlways;}
00409
00414 UT_sint32 ftlu(UT_sint32 fontUnits) const;
00415 double ftluD(double fontUnits) const;
00416
00417 virtual void setFont(const GR_Font* pFont) = 0;
00418 virtual void clearFont(void) = 0;
00419 virtual UT_uint32 getFontAscent() = 0;
00420 virtual UT_uint32 getFontDescent() = 0;
00421 virtual UT_uint32 getFontHeight() = 0;
00422 void invalidateCache(void);
00423 virtual bool canQuickPrint(void) const { return false;}
00424 virtual UT_uint32 measureString(const UT_UCSChar*s,
00425 int iOffset,
00426 int num,
00427 UT_GrowBufElement* pWidths, UT_uint32 *height = 0);
00428
00429 virtual UT_sint32 measureUnRemappedChar(const UT_UCSChar c, UT_uint32 * height = 0) = 0;
00430 virtual void getCoverage(UT_NumberVector& coverage) = 0;
00431
00432
00433 virtual UT_uint32 getFontAscent(const GR_Font *) = 0;
00434 virtual UT_uint32 getFontDescent(const GR_Font *) = 0;
00435 virtual UT_uint32 getFontHeight(const GR_Font *) = 0;
00436 virtual double getResolutionRatio(void) const {return 1.0;}
00437
00438 void getMaxCharacterDimension (const UT_UCSChar*s, UT_uint32 Length, UT_uint32 &width, UT_uint32 &height);
00439
00440 virtual void setColor(const UT_RGBColor& clr) = 0;
00441 virtual void getColor(UT_RGBColor& clr) = 0;
00442 virtual GR_Font* getGUIFont() = 0;
00443
00444 GR_Font* findFont(const char* pszFontFamily,
00445 const char* pszFontStyle,
00446 const char* pszFontVariant,
00447 const char* pszFontWeight,
00448 const char* pszFontStretch,
00449 const char* pszFontSize,
00450 const char* pszLang);
00451
00452
00453
00454
00455
00456 #ifdef XAP_HAVE_GR_findNearestFont
00457 static const char* findNearestFont(const char* pszFontFamily,
00458 const char* pszFontStyle,
00459 const char* pszFontVariant,
00460 const char* pszFontWeight,
00461 const char* pszFontStretch,
00462 const char* pszFontSize,
00463 const char* pszLang);
00464 #else
00465 static const char* findNearestFont(const char* pszFontFamily,
00466 const char* ,
00467 const char* ,
00468 const char* ,
00469 const char* ,
00470 const char* ,
00471 const char* )
00472 {return pszFontFamily;}
00473 #endif
00474
00475 const char * invertDimension(UT_Dimension, double) const;
00476
00477 bool scaleDimensions(const char * szLeftIn,
00478 const char * szWidthIn,
00479 UT_uint32 iWidthAvail,
00480 UT_sint32 * piLeft,
00481 UT_uint32 * piWidth) const;
00482
00483 virtual GR_Image* createNewImage(const char* pszName,
00484 const UT_ByteBuf* pBB,
00485 const std::string& mimetype,
00486 UT_sint32 iWidth,
00487 UT_sint32 iHeight,
00488 GR_Image::GRType iType = GR_Image::GRT_Raster);
00489
00490 virtual void setLineWidth(UT_sint32) = 0;
00491
00492 virtual void setClipRect(const UT_Rect* pRect) = 0;
00493 const UT_Rect * getClipRect(void) const { return m_pRect;}
00494 virtual void scroll(UT_sint32, UT_sint32) = 0;
00495 virtual void scroll(UT_sint32 x_dest,
00496 UT_sint32 y_dest,
00497 UT_sint32 x_src,
00498 UT_sint32 y_src,
00499 UT_sint32 width,
00500 UT_sint32 height) = 0;
00501
00502 typedef enum { DGP_SCREEN, DGP_PAPER, DGP_OPAQUEOVERLAY } Properties;
00503
00504 typedef enum
00505 {
00506 JOIN_MITER,
00507 JOIN_ROUND,
00508 JOIN_BEVEL
00509 } JoinStyle ;
00510
00511 typedef enum
00512 {
00513 CAP_BUTT,
00514 CAP_ROUND,
00515 CAP_PROJECTING
00516 } CapStyle ;
00517
00518 typedef enum
00519 {
00520 LINE_SOLID,
00521 LINE_ON_OFF_DASH,
00522 LINE_DOUBLE_DASH,
00523 LINE_DOTTED
00524 } LineStyle ;
00525
00526 virtual void setLineProperties ( double inWidthPixels,
00527 JoinStyle inJoinStyle = JOIN_MITER,
00528 CapStyle inCapStyle = CAP_BUTT,
00529 LineStyle inLineStyle = LINE_SOLID ) ;
00530
00531 virtual bool queryProperties(GR_Graphics::Properties gp) const = 0;
00532
00533
00534 virtual bool startPrint(void) = 0;
00535
00536 virtual bool startPage(const char * szPageLabel,
00537 UT_uint32 pageNumber,
00538 bool bPortrait,
00539 UT_uint32 iWidth,
00540 UT_uint32 iHeight) = 0;
00541
00542 virtual bool endPrint(void) = 0;
00543
00544 virtual void flush(void);
00545
00546
00547
00548 typedef enum { GR_COLORSPACE_COLOR,
00549 GR_COLORSPACE_GRAYSCALE,
00550 GR_COLORSPACE_BW
00551 } ColorSpace;
00552
00553 virtual void setColorSpace(GR_Graphics::ColorSpace c) = 0;
00554 virtual GR_Graphics::ColorSpace getColorSpace(void) const = 0;
00555
00556
00557
00558 typedef enum { GR_CURSOR_INVALID=0,
00559 GR_CURSOR_DEFAULT,
00560 GR_CURSOR_IBEAM,
00561 GR_CURSOR_RIGHTARROW,
00562 GR_CURSOR_IMAGE,
00563 GR_CURSOR_IMAGESIZE_NW,
00564 GR_CURSOR_IMAGESIZE_N,
00565 GR_CURSOR_IMAGESIZE_NE,
00566 GR_CURSOR_IMAGESIZE_E,
00567 GR_CURSOR_IMAGESIZE_SE,
00568 GR_CURSOR_IMAGESIZE_S,
00569 GR_CURSOR_IMAGESIZE_SW,
00570 GR_CURSOR_IMAGESIZE_W,
00571 GR_CURSOR_LEFTRIGHT,
00572 GR_CURSOR_UPDOWN,
00573 GR_CURSOR_EXCHANGE,
00574 GR_CURSOR_GRAB,
00575 GR_CURSOR_LINK,
00576 GR_CURSOR_WAIT,
00577 GR_CURSOR_LEFTARROW,
00578 GR_CURSOR_VLINE_DRAG,
00579 GR_CURSOR_HLINE_DRAG,
00580 GR_CURSOR_CROSSHAIR,
00581 GR_CURSOR_DOWNARROW,
00582 GR_CURSOR_DRAGTEXT,
00583 GR_CURSOR_COPYTEXT
00584 } Cursor;
00585
00586 virtual void setCursor(GR_Graphics::Cursor c) = 0;
00587 virtual GR_Graphics::Cursor getCursor(void) const = 0;
00588
00589 virtual void setZoomPercentage(UT_uint32 iZoom);
00590 inline UT_uint32 getZoomPercentage(void) const {return m_iZoomPercentage; }
00591 static UT_uint32 getResolution(void) { return UT_LAYOUT_RESOLUTION; }
00592 inline void setPortrait (bool b) {m_bIsPortrait = b;}
00593 inline bool isPortrait (void) const {return m_bIsPortrait;}
00594
00595 typedef enum { CLR3D_Foreground=0,
00596 CLR3D_Background=1,
00597 CLR3D_BevelUp=2,
00598 CLR3D_BevelDown=3,
00599 CLR3D_Highlight=4
00600 } GR_Color3D;
00601 #define COUNT_3D_COLORS 5
00602
00603 virtual void setColor3D(GR_Color3D c) = 0;
00604 virtual bool getColor3D(GR_Color3D , UT_RGBColor & )
00605 { return false; }
00606
00607 const GR_Transform & getTransform() const {return m_Transform;}
00608
00609
00610 bool setTransform(const GR_Transform & tr)
00611 {
00612 bool ret = _setTransform(tr);
00613 if(!ret)
00614 return false;
00615 m_Transform = tr;
00616 return true;
00617 }
00618
00619 void createCaret()
00620 {
00621 UT_ASSERT_HARMLESS(!m_pCaret);
00622 m_pCaret = new GR_Caret(this);
00623 }
00624
00625 GR_Caret * createCaret(const std::string& sID);
00626 GR_Caret * getCaret(const std::string& sID) const;
00627 GR_Caret * getNthCaret(UT_sint32 i) const;
00628 void removeCaret(const std::string& sID);
00629
00630 virtual void saveRectangle(UT_Rect & r, UT_uint32 iIndx) = 0;
00631 virtual void restoreRectangle(UT_uint32 iIndx) = 0;
00632 virtual UT_uint32 getDeviceResolution(void) const = 0;
00633
00634
00635
00636
00637
00638 UT_sint32 getPrevYOffset(void) const { return m_iPrevYOffset;}
00639 UT_sint32 getPrevXOffset(void) const { return m_iPrevXOffset;}
00640 void setPrevYOffset(UT_sint32 y) { m_iPrevYOffset = y;}
00641 void setPrevXOffset(UT_sint32 x) { m_iPrevXOffset = x;}
00642
00643 UT_sint32 _tduX(UT_sint32 layoutUnits) const;
00644
00645
00647
00648
00649
00650 virtual bool itemize(UT_TextIterator & text, GR_Itemization & I) VIRTUAL_SFX;
00651
00652
00653
00654 virtual bool shape(GR_ShapingInfo & si, GR_RenderInfo *& ri) VIRTUAL_SFX;
00655
00656
00657
00658
00659 virtual void prepareToRenderChars(GR_RenderInfo & ri) VIRTUAL_SFX;
00660 virtual void renderChars(GR_RenderInfo & ri) VIRTUAL_SFX;
00661
00662 virtual void appendRenderedCharsToBuff(GR_RenderInfo & ri, UT_GrowBuf & buf) const VIRTUAL_SFX;
00663 virtual void measureRenderedCharWidths(GR_RenderInfo & ri) VIRTUAL_SFX;
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678 virtual bool canBreak(GR_RenderInfo & ri, UT_sint32 &iNext, bool bAfter) VIRTUAL_SFX;
00679
00680
00681
00682 virtual bool needsSpecialCaretPositioning(GR_RenderInfo & ) VIRTUAL_SFX {return false;}
00683
00684
00685
00686
00687
00688
00689
00690 virtual UT_uint32 adjustCaretPosition(GR_RenderInfo & ri, bool bForward) VIRTUAL_SFX;
00691
00692
00693
00694
00695
00696
00697
00698
00699 virtual void adjustDeletePosition(GR_RenderInfo & ri) VIRTUAL_SFX;
00700
00701
00702
00703
00704
00705 virtual bool nativeBreakInfoForRightEdge() VIRTUAL_SFX {return true;}
00706
00707 virtual UT_sint32 resetJustification(GR_RenderInfo & ri, bool bPermanent) VIRTUAL_SFX;
00708 virtual UT_sint32 countJustificationPoints(const GR_RenderInfo & ri) const VIRTUAL_SFX;
00709 virtual void justify(GR_RenderInfo & ri) VIRTUAL_SFX;
00710
00711 virtual UT_uint32 XYToPosition(const GR_RenderInfo & ri, UT_sint32 x, UT_sint32 y) const VIRTUAL_SFX;
00712 virtual void positionToXY(const GR_RenderInfo & ri,
00713 UT_sint32& x, UT_sint32& y,
00714 UT_sint32& x2, UT_sint32& y2,
00715 UT_sint32& height, bool& bDirection) const VIRTUAL_SFX;
00716
00717 virtual UT_sint32 getTextWidth(GR_RenderInfo & ri) VIRTUAL_SFX;
00718
00719
00720
00721
00722
00723 virtual const UT_VersionInfo & getVersion() const {UT_ASSERT_HARMLESS( UT_NOT_IMPLEMENTED ); return s_Version;}
00724 UT_uint32 getPaintCount(void) const
00725 { return m_paintCount;}
00726
00727
00728
00729
00730 void beginPaint ();
00731 void endPaint ();
00732
00733 static GR_Graphics* newNullGraphics();
00734
00735 protected:
00736
00737 GR_Graphics();
00738 GR_Caret * getCaret() { return m_pCaret; }
00739
00740
00741 virtual void _beginPaint () {}
00742 virtual void _endPaint () {}
00743
00744 UT_sint32 _tduY(UT_sint32 layoutUnits) const;
00745 UT_sint32 _tduR(UT_sint32 layoutUnits) const;
00746
00747 void _destroyFonts ();
00748
00749 virtual GR_Font* _findFont(const char* pszFontFamily,
00750 const char* pszFontStyle,
00751 const char* pszFontVariant,
00752 const char* pszFontWeight,
00753 const char* pszFontStretch,
00754 const char* pszFontSize,
00755 const char* pszLang) = 0;
00756
00757
00758 virtual void drawLine(UT_sint32 x1, UT_sint32 y1, UT_sint32 x2, UT_sint32 y2) = 0;
00759 #if XAP_DONTUSE_XOR
00760 #else
00761 virtual void xorLine(UT_sint32 x1, UT_sint32 y1, UT_sint32 x2, UT_sint32 y2) = 0;
00762 #endif
00763 virtual void invertRect(const UT_Rect* pRect) = 0;
00764 #if XAP_DONTUSE_XOR
00765 #else
00766 void xorRect(UT_sint32 x, UT_sint32 y, UT_sint32 w, UT_sint32 h);
00767 void xorRect(const UT_Rect& r);
00768 #endif
00769
00770 virtual void fillRect(GR_Image *pImg, const UT_Rect &src, const UT_Rect & dest);
00771 virtual void fillRect(const UT_RGBColor& c, const UT_Rect &r);
00772 virtual void fillRect(const UT_RGBColor& c, UT_sint32 x, UT_sint32 y,
00773 UT_sint32 w, UT_sint32 h) = 0;
00774
00775 virtual void clearArea(UT_sint32 x, UT_sint32 y, UT_sint32 w, UT_sint32 h) = 0;
00776 virtual void drawImage(GR_Image* pImg, UT_sint32 xDest, UT_sint32 yDest);
00777 virtual void fillRect(GR_Color3D c, UT_Rect &r) = 0;
00778 virtual void fillRect(GR_Color3D c,
00779 UT_sint32 x, UT_sint32 y,
00780 UT_sint32 w, UT_sint32 h) = 0;
00781 virtual void polygon(UT_RGBColor& c, UT_Point *pts, UT_uint32 nPoints);
00782 virtual void polyLine(UT_Point * pts, UT_uint32 nPoints) = 0;
00783 virtual void drawGlyph(UT_uint32 glyph_idx, UT_sint32 xoff, UT_sint32 yoff) = 0;
00784 virtual void drawChars(const UT_UCSChar* pChars,
00785 int iCharOffset,
00786 int iLength,
00787 UT_sint32 xoff,
00788 UT_sint32 yoff,
00789 int* pCharWidths = NULL) = 0;
00790
00791 virtual void drawCharsRelativeToBaseline(const UT_UCSChar* pChars,
00792 int iCharOffset,
00793 int iLength,
00794 UT_sint32 xoff,
00795 UT_sint32 yoff,
00796 int* pCharWidths = NULL);
00797
00798 virtual GR_Image * genImageFromRectangle(const UT_Rect & r) = 0;
00799
00800 private:
00801 virtual bool _setTransform(const GR_Transform & )
00802 {
00803 UT_ASSERT_HARMLESS( UT_NOT_IMPLEMENTED );
00804 return false;
00805 }
00806
00807 public:
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818 UT_uint32 m_iRasterPosition;
00819
00820 protected:
00821 UT_uint32 m_iZoomPercentage;
00822 UT_uint32 m_iFontAllocNo;
00823
00824 static XAP_PrefsScheme *m_pPrefsScheme;
00825 static UT_uint32 m_uTick;
00826
00827 const UT_Rect * m_pRect;
00828
00829 bool m_bHave3DColors;
00830
00831 UT_uint32 m_paintCount;
00832
00833
00834
00835
00836
00837
00838 virtual void _DeviceContext_SwitchToBuffer() { };
00839 virtual void _DeviceContext_SwitchToScreen() { };
00840
00841
00842 bool beginDoubleBuffering();
00843
00844
00845
00846 void endDoubleBuffering(bool token);
00847
00848
00849
00850
00851
00852
00853 virtual void _DeviceContext_SuspendDrawing() { };
00854 virtual void _DeviceContext_ResumeDrawing() { };
00855
00856 bool suspendDrawing();
00857 void resumeDrawing(bool token);
00858
00859
00860 bool m_bDoubleBufferingActive;
00861 bool m_bDrawingSuspended;
00862
00863 typedef enum {
00864 SWITCHED_TO_BUFFER = 0,
00865 DRAWING_SUSPENDED
00866 } DeviceContextSwitchType;
00867
00868 UT_NumberStack m_DCSwitchManagementStack;
00869
00870 private:
00871 GR_Caret * m_pCaret;
00872 bool _PtInPolygon(UT_Point * pts,UT_uint32 nPoints,UT_sint32 x,UT_sint32 y);
00873 bool m_bIsPortrait;
00874 bool m_bSpawnedRedraw;
00875 UT_Rect m_PendingExposeArea;
00876 UT_Rect m_RecentExposeArea;
00877 bool m_bExposePending;
00878 bool m_bIsExposedAreaAccessed;
00879 bool m_bDontRedraw;
00880 bool m_bDoMerge;
00881
00882
00883
00884
00885 UT_sint32 m_iPrevYOffset;
00886 UT_sint32 m_iPrevXOffset;
00887 GR_Transform m_Transform;
00888
00889 typedef std::map<std::string, GR_Font*> FontCache;
00890 FontCache m_hashFontCache;
00891
00892 static UT_VersionInfo s_Version;
00893 static UT_uint32 s_iInstanceCount;
00894 static UT_UCS4Char s_cDefaultGlyph;
00895 UT_GenericVector<GR_Caret *> m_vecCarets;
00896 AllCarets m_AllCarets;
00897 bool m_bAntiAliasAlways;
00898 };
00899
00900 #endif