1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _SV_OUTDEV_HXX 25*b1cdbd2cSJim Jagielski #define _SV_OUTDEV_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <tools/gen.hxx> 28*b1cdbd2cSJim Jagielski #include <tools/string.hxx> 29*b1cdbd2cSJim Jagielski #include <vcl/sv.h> 30*b1cdbd2cSJim Jagielski #include <vcl/dllapi.h> 31*b1cdbd2cSJim Jagielski #include <tools/rc.hxx> 32*b1cdbd2cSJim Jagielski #include <tools/color.hxx> 33*b1cdbd2cSJim Jagielski #include <vcl/font.hxx> 34*b1cdbd2cSJim Jagielski #include <vcl/region.hxx> 35*b1cdbd2cSJim Jagielski #include <vcl/mapmod.hxx> 36*b1cdbd2cSJim Jagielski #include <vcl/wall.hxx> 37*b1cdbd2cSJim Jagielski #include <vcl/settings.hxx> 38*b1cdbd2cSJim Jagielski #include <vcl/salnativewidgets.hxx> 39*b1cdbd2cSJim Jagielski #include <tools/poly.hxx> 40*b1cdbd2cSJim Jagielski #include <basegfx/vector/b2enums.hxx> 41*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.h> 42*b1cdbd2cSJim Jagielski #include <unotools/fontdefs.hxx> 43*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolypolygon.hxx> 44*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/LineCap.hpp> 45*b1cdbd2cSJim Jagielski #include <vector> 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski struct ImplOutDevData; 48*b1cdbd2cSJim Jagielski class ImplFontEntry; 49*b1cdbd2cSJim Jagielski struct ImplObjStack; 50*b1cdbd2cSJim Jagielski struct ImplKernPairData; 51*b1cdbd2cSJim Jagielski struct SystemGraphicsData; 52*b1cdbd2cSJim Jagielski struct SystemFontData; 53*b1cdbd2cSJim Jagielski struct SystemTextLayoutData; 54*b1cdbd2cSJim Jagielski class ImplFontCache; 55*b1cdbd2cSJim Jagielski class ImplDevFontList; 56*b1cdbd2cSJim Jagielski class ImplGetDevFontList; 57*b1cdbd2cSJim Jagielski class ImplGetDevSizeList; 58*b1cdbd2cSJim Jagielski class ImplMultiTextLineInfo; 59*b1cdbd2cSJim Jagielski class SalGraphics; 60*b1cdbd2cSJim Jagielski class Gradient; 61*b1cdbd2cSJim Jagielski class Hatch; 62*b1cdbd2cSJim Jagielski class Bitmap; 63*b1cdbd2cSJim Jagielski class BitmapReadAccess; 64*b1cdbd2cSJim Jagielski class BitmapEx; 65*b1cdbd2cSJim Jagielski class Image; 66*b1cdbd2cSJim Jagielski class TextRectInfo; 67*b1cdbd2cSJim Jagielski class FontInfo; 68*b1cdbd2cSJim Jagielski class FontMetric; 69*b1cdbd2cSJim Jagielski class GDIMetaFile; 70*b1cdbd2cSJim Jagielski class List; 71*b1cdbd2cSJim Jagielski class GfxLink; 72*b1cdbd2cSJim Jagielski class Line; 73*b1cdbd2cSJim Jagielski class LineInfo; 74*b1cdbd2cSJim Jagielski class AlphaMask; 75*b1cdbd2cSJim Jagielski class FontCharMap; 76*b1cdbd2cSJim Jagielski class SalLayout; 77*b1cdbd2cSJim Jagielski class ImplLayoutArgs; 78*b1cdbd2cSJim Jagielski class ImplFontAttributes; 79*b1cdbd2cSJim Jagielski class VirtualDevice; 80*b1cdbd2cSJim Jagielski struct SalTwoRect; 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski namespace com { 83*b1cdbd2cSJim Jagielski namespace sun { 84*b1cdbd2cSJim Jagielski namespace star { 85*b1cdbd2cSJim Jagielski namespace rendering { 86*b1cdbd2cSJim Jagielski class XCanvas; 87*b1cdbd2cSJim Jagielski }}}} 88*b1cdbd2cSJim Jagielski namespace basegfx { 89*b1cdbd2cSJim Jagielski class B2DHomMatrix; 90*b1cdbd2cSJim Jagielski class B2DPolygon; 91*b1cdbd2cSJim Jagielski class B2DPolyPolygon; 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski namespace com { 95*b1cdbd2cSJim Jagielski namespace sun { 96*b1cdbd2cSJim Jagielski namespace star { 97*b1cdbd2cSJim Jagielski namespace awt { 98*b1cdbd2cSJim Jagielski class XGraphics; 99*b1cdbd2cSJim Jagielski } } } } 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski typedef std::vector< Rectangle > MetricVector; 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski namespace vcl 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski class PDFWriterImpl; 106*b1cdbd2cSJim Jagielski class ExtOutDevData; 107*b1cdbd2cSJim Jagielski class ITextLayout; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski #define OUTDEV_BUFFER_SIZE 128 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski // --------------------- 114*b1cdbd2cSJim Jagielski // - OutputDevice-Data - 115*b1cdbd2cSJim Jagielski // --------------------- 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski struct ImplMapRes 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski long mnMapOfsX; // Offset in X Richtung 120*b1cdbd2cSJim Jagielski long mnMapOfsY; // Offset in Y Richtung 121*b1cdbd2cSJim Jagielski long mnMapScNumX; // Skal.-faktor Zaehler X Richtung 122*b1cdbd2cSJim Jagielski long mnMapScNumY; // Skal.-faktor Zaehler Y Richtung 123*b1cdbd2cSJim Jagielski long mnMapScDenomX; // Skal.-faktor Nenner X Richtung 124*b1cdbd2cSJim Jagielski long mnMapScDenomY; // Skal.-faktor Nenner Y Richtung 125*b1cdbd2cSJim Jagielski }; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski struct ImplThresholdRes 128*b1cdbd2cSJim Jagielski { 129*b1cdbd2cSJim Jagielski long mnThresLogToPixX; // Schwellenwerte fuer Berechnung 130*b1cdbd2cSJim Jagielski long mnThresLogToPixY; // mit BigInts 131*b1cdbd2cSJim Jagielski long mnThresPixToLogX; // "" 132*b1cdbd2cSJim Jagielski long mnThresPixToLogY; // "" 133*b1cdbd2cSJim Jagielski }; 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski // --------------- 136*b1cdbd2cSJim Jagielski // - KerningPair - 137*b1cdbd2cSJim Jagielski // --------------- 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski struct KerningPair 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski sal_Unicode nChar1; 142*b1cdbd2cSJim Jagielski sal_Unicode nChar2; 143*b1cdbd2cSJim Jagielski long nKern; 144*b1cdbd2cSJim Jagielski }; 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski // ---------------------- 147*b1cdbd2cSJim Jagielski // - OutputDevice-Types - 148*b1cdbd2cSJim Jagielski // ---------------------- 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski // Flags for Push() 151*b1cdbd2cSJim Jagielski #define PUSH_LINECOLOR ((sal_uInt16)0x0001) 152*b1cdbd2cSJim Jagielski #define PUSH_FILLCOLOR ((sal_uInt16)0x0002) 153*b1cdbd2cSJim Jagielski #define PUSH_FONT ((sal_uInt16)0x0004) 154*b1cdbd2cSJim Jagielski #define PUSH_TEXTCOLOR ((sal_uInt16)0x0008) 155*b1cdbd2cSJim Jagielski #define PUSH_MAPMODE ((sal_uInt16)0x0010) 156*b1cdbd2cSJim Jagielski #define PUSH_CLIPREGION ((sal_uInt16)0x0020) 157*b1cdbd2cSJim Jagielski #define PUSH_RASTEROP ((sal_uInt16)0x0040) 158*b1cdbd2cSJim Jagielski #define PUSH_TEXTFILLCOLOR ((sal_uInt16)0x0080) 159*b1cdbd2cSJim Jagielski #define PUSH_TEXTALIGN ((sal_uInt16)0x0100) 160*b1cdbd2cSJim Jagielski #define PUSH_REFPOINT ((sal_uInt16)0x0200) 161*b1cdbd2cSJim Jagielski #define PUSH_TEXTLINECOLOR ((sal_uInt16)0x0400) 162*b1cdbd2cSJim Jagielski #define PUSH_TEXTLAYOUTMODE ((sal_uInt16)0x0800) 163*b1cdbd2cSJim Jagielski #define PUSH_TEXTLANGUAGE ((sal_uInt16)0x1000) 164*b1cdbd2cSJim Jagielski #define PUSH_OVERLINECOLOR ((sal_uInt16)0x2000) 165*b1cdbd2cSJim Jagielski #define PUSH_ALLTEXT (PUSH_TEXTCOLOR | PUSH_TEXTFILLCOLOR | PUSH_TEXTLINECOLOR | PUSH_OVERLINECOLOR | PUSH_TEXTALIGN | PUSH_TEXTLAYOUTMODE | PUSH_TEXTLANGUAGE) 166*b1cdbd2cSJim Jagielski #define PUSH_ALLFONT (PUSH_ALLTEXT | PUSH_FONT) 167*b1cdbd2cSJim Jagielski #define PUSH_ALL ((sal_uInt16)0xFFFF) 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski // Flags for DrawText() 170*b1cdbd2cSJim Jagielski #define TEXT_DRAW_DISABLE ((sal_uInt16)0x0001) 171*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MNEMONIC ((sal_uInt16)0x0002) 172*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MONO ((sal_uInt16)0x0004) 173*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CLIP ((sal_uInt16)0x0008) 174*b1cdbd2cSJim Jagielski #define TEXT_DRAW_LEFT ((sal_uInt16)0x0010) 175*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CENTER ((sal_uInt16)0x0020) 176*b1cdbd2cSJim Jagielski #define TEXT_DRAW_RIGHT ((sal_uInt16)0x0040) 177*b1cdbd2cSJim Jagielski #define TEXT_DRAW_TOP ((sal_uInt16)0x0080) 178*b1cdbd2cSJim Jagielski #define TEXT_DRAW_VCENTER ((sal_uInt16)0x0100) 179*b1cdbd2cSJim Jagielski #define TEXT_DRAW_BOTTOM ((sal_uInt16)0x0200) 180*b1cdbd2cSJim Jagielski #define TEXT_DRAW_ENDELLIPSIS ((sal_uInt16)0x0400) 181*b1cdbd2cSJim Jagielski #define TEXT_DRAW_PATHELLIPSIS ((sal_uInt16)0x0800) 182*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MULTILINE ((sal_uInt16)0x1000) 183*b1cdbd2cSJim Jagielski #define TEXT_DRAW_WORDBREAK ((sal_uInt16)0x2000) 184*b1cdbd2cSJim Jagielski #define TEXT_DRAW_NEWSELLIPSIS ((sal_uInt16)0x4000) 185*b1cdbd2cSJim Jagielski // in the long run we should make text style flags longer 186*b1cdbd2cSJim Jagielski // but at the moment we can get away with this 2 bit field for ellipsis style 187*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CENTERELLIPSIS (TEXT_DRAW_ENDELLIPSIS | TEXT_DRAW_PATHELLIPSIS) 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski #define TEXT_DRAW_WORDBREAK_HYPHENATION (((sal_uInt16)0x8000) | TEXT_DRAW_WORDBREAK) 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski // Flags for CopyArea() 192*b1cdbd2cSJim Jagielski #define COPYAREA_WINDOWINVALIDATE ((sal_uInt16)0x0001) 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski // Flags for DrawImage() 195*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_DISABLE ((sal_uInt16)0x0001) 196*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_HIGHLIGHT ((sal_uInt16)0x0002) 197*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_DEACTIVE ((sal_uInt16)0x0004) 198*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_COLORTRANSFORM ((sal_uInt16)0x0008) 199*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_SEMITRANSPARENT ((sal_uInt16)0x0010) 200*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_MONOCHROME_BLACK ((sal_uInt16)0x0020) 201*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_MONOCHROME_WHITE ((sal_uInt16)0x0040) 202*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_3DLOOK 0 203*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_BTNLOOK 0 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski // WaveLine 206*b1cdbd2cSJim Jagielski #define WAVE_FLAT 1 207*b1cdbd2cSJim Jagielski #define WAVE_SMALL 2 208*b1cdbd2cSJim Jagielski #define WAVE_NORMAL 3 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski // Grid 211*b1cdbd2cSJim Jagielski #define GRID_DOTS ((sal_uLong)0x00000001) 212*b1cdbd2cSJim Jagielski #define GRID_HORZLINES ((sal_uLong)0x00000002) 213*b1cdbd2cSJim Jagielski #define GRID_VERTLINES ((sal_uLong)0x00000004) 214*b1cdbd2cSJim Jagielski #define GRID_LINES (GRID_HORZLINES | GRID_VERTLINES) 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski // LayoutModes for Complex Text Layout 217*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_DEFAULT ((sal_uLong)0x00000000) 218*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_LTR ((sal_uLong)0x00000000) 219*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_RTL ((sal_uLong)0x00000001) 220*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_STRONG ((sal_uLong)0x00000002) 221*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_TEXTORIGIN_LEFT ((sal_uLong)0x00000004) 222*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_TEXTORIGIN_RIGHT ((sal_uLong)0x00000008) 223*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_COMPLEX_DISABLED ((sal_uLong)0x00000100) 224*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_ENABLE_LIGATURES ((sal_uLong)0x00000200) 225*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_SUBSTITUTE_DIGITS ((sal_uLong)0x00000400) 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski // DrawModes 228*b1cdbd2cSJim Jagielski #define DRAWMODE_DEFAULT ((sal_uLong)0x00000000) 229*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKLINE ((sal_uLong)0x00000001) 230*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKFILL ((sal_uLong)0x00000002) 231*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKTEXT ((sal_uLong)0x00000004) 232*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKBITMAP ((sal_uLong)0x00000008) 233*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKGRADIENT ((sal_uLong)0x00000010) 234*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYLINE ((sal_uLong)0x00000020) 235*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYFILL ((sal_uLong)0x00000040) 236*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYTEXT ((sal_uLong)0x00000080) 237*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYBITMAP ((sal_uLong)0x00000100) 238*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYGRADIENT ((sal_uLong)0x00000200) 239*b1cdbd2cSJim Jagielski #define DRAWMODE_NOFILL ((sal_uLong)0x00000400) 240*b1cdbd2cSJim Jagielski #define DRAWMODE_NOBITMAP ((sal_uLong)0x00000800) 241*b1cdbd2cSJim Jagielski #define DRAWMODE_NOGRADIENT ((sal_uLong)0x00001000) 242*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDLINE ((sal_uLong)0x00002000) 243*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDFILL ((sal_uLong)0x00004000) 244*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDTEXT ((sal_uLong)0x00008000) 245*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDBITMAP ((sal_uLong)0x00010000) 246*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDGRADIENT ((sal_uLong)0x00020000) 247*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITELINE ((sal_uLong)0x00100000) 248*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEFILL ((sal_uLong)0x00200000) 249*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITETEXT ((sal_uLong)0x00400000) 250*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEBITMAP ((sal_uLong)0x00800000) 251*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEGRADIENT ((sal_uLong)0x01000000) 252*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSLINE ((sal_uLong)0x02000000) 253*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSFILL ((sal_uLong)0x04000000) 254*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSTEXT ((sal_uLong)0x08000000) 255*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSGRADIENT ((sal_uLong)0x10000000) 256*b1cdbd2cSJim Jagielski #define DRAWMODE_NOTRANSPARENCY ((sal_uLong)0x80000000) 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski // Antialiasing 259*b1cdbd2cSJim Jagielski #define ANTIALIASING_DISABLE_TEXT ((sal_uInt16)0x0001) 260*b1cdbd2cSJim Jagielski #define ANTIALIASING_ENABLE_B2DDRAW ((sal_uInt16)0x0002) 261*b1cdbd2cSJim Jagielski #define ANTIALIASING_PIXELSNAPHAIRLINE ((sal_uInt16)0x0004) 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski // AddFontSubstitute 264*b1cdbd2cSJim Jagielski #define FONT_SUBSTITUTE_ALWAYS ((sal_uInt16)0x0001) 265*b1cdbd2cSJim Jagielski #define FONT_SUBSTITUTE_SCREENONLY ((sal_uInt16)0x0002) 266*b1cdbd2cSJim Jagielski 267*b1cdbd2cSJim Jagielski #define DEFAULTFONT_FLAGS_ONLYONE ((sal_uLong)0x00000001) 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski enum OutDevType { OUTDEV_DONTKNOW, OUTDEV_WINDOW, OUTDEV_PRINTER, OUTDEV_VIRDEV }; 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski enum OutDevViewType { OUTDEV_VIEWTYPE_DONTKNOW, OUTDEV_VIEWTYPE_PRINTPREVIEW, OUTDEV_VIEWTYPE_SLIDESHOW }; 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski // ---------------- 274*b1cdbd2cSJim Jagielski // - OutputDevice - 275*b1cdbd2cSJim Jagielski // ---------------- 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski class VirtualDevice; 278*b1cdbd2cSJim Jagielski class Printer; 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski const char* ImplDbgCheckOutputDevice( const void* pObj ); 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski class VCL_DLLPUBLIC OutputDevice : public Resource 283*b1cdbd2cSJim Jagielski { 284*b1cdbd2cSJim Jagielski friend class Application; 285*b1cdbd2cSJim Jagielski friend class Bitmap; 286*b1cdbd2cSJim Jagielski friend class ImplImageBmp; 287*b1cdbd2cSJim Jagielski friend class ImplQPrinter; 288*b1cdbd2cSJim Jagielski friend class Printer; 289*b1cdbd2cSJim Jagielski friend class SalGraphicsLayout; 290*b1cdbd2cSJim Jagielski friend class System; 291*b1cdbd2cSJim Jagielski friend class VirtualDevice; 292*b1cdbd2cSJim Jagielski friend class Window; 293*b1cdbd2cSJim Jagielski friend class WorkWindow; 294*b1cdbd2cSJim Jagielski friend class vcl::PDFWriterImpl; 295*b1cdbd2cSJim Jagielski friend const char* ImplDbgCheckOutputDevice( const void* pObj ); 296*b1cdbd2cSJim Jagielski friend void ImplHandleResize( Window* pWindow, long nNewWidth, long nNewHeight ); 297*b1cdbd2cSJim Jagielski 298*b1cdbd2cSJim Jagielski private: 299*b1cdbd2cSJim Jagielski mutable SalGraphics* mpGraphics; 300*b1cdbd2cSJim Jagielski mutable OutputDevice* mpPrevGraphics; 301*b1cdbd2cSJim Jagielski mutable OutputDevice* mpNextGraphics; 302*b1cdbd2cSJim Jagielski GDIMetaFile* mpMetaFile; 303*b1cdbd2cSJim Jagielski mutable ImplFontEntry* mpFontEntry; 304*b1cdbd2cSJim Jagielski mutable ImplFontCache* mpFontCache; 305*b1cdbd2cSJim Jagielski mutable ImplDevFontList* mpFontList; 306*b1cdbd2cSJim Jagielski mutable ImplGetDevFontList* mpGetDevFontList; 307*b1cdbd2cSJim Jagielski mutable ImplGetDevSizeList* mpGetDevSizeList; 308*b1cdbd2cSJim Jagielski ImplObjStack* mpObjStack; 309*b1cdbd2cSJim Jagielski ImplOutDevData* mpOutDevData; 310*b1cdbd2cSJim Jagielski List* mpUnoGraphicsList; 311*b1cdbd2cSJim Jagielski vcl::PDFWriterImpl* mpPDFWriter; 312*b1cdbd2cSJim Jagielski vcl::ExtOutDevData* mpExtOutDevData; 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski // TEMP TEMP TEMP 315*b1cdbd2cSJim Jagielski VirtualDevice* mpAlphaVDev; 316*b1cdbd2cSJim Jagielski 317*b1cdbd2cSJim Jagielski /// Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset) 318*b1cdbd2cSJim Jagielski long mnOutOffOrigX; 319*b1cdbd2cSJim Jagielski /// Additional output offset in _logical_ coordinates, applied in PixelToLogic (used by SetPixelOffset/GetPixelOffset) 320*b1cdbd2cSJim Jagielski long mnOutOffLogicX; 321*b1cdbd2cSJim Jagielski /// Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset) 322*b1cdbd2cSJim Jagielski long mnOutOffOrigY; 323*b1cdbd2cSJim Jagielski /// Additional output offset in _logical_ coordinates, applied in PixelToLogic (used by SetPixelOffset/GetPixelOffset) 324*b1cdbd2cSJim Jagielski long mnOutOffLogicY; 325*b1cdbd2cSJim Jagielski /// Output offset for device output in pixel (pseudo window offset within window system's frames) 326*b1cdbd2cSJim Jagielski long mnOutOffX; 327*b1cdbd2cSJim Jagielski /// Output offset for device output in pixel (pseudo window offset within window system's frames) 328*b1cdbd2cSJim Jagielski long mnOutOffY; 329*b1cdbd2cSJim Jagielski long mnOutWidth; 330*b1cdbd2cSJim Jagielski long mnOutHeight; 331*b1cdbd2cSJim Jagielski sal_Int32 mnDPIX; 332*b1cdbd2cSJim Jagielski sal_Int32 mnDPIY; 333*b1cdbd2cSJim Jagielski /// font specific text alignment offsets in pixel units 334*b1cdbd2cSJim Jagielski mutable long mnTextOffX; 335*b1cdbd2cSJim Jagielski mutable long mnTextOffY; 336*b1cdbd2cSJim Jagielski mutable long mnEmphasisAscent; 337*b1cdbd2cSJim Jagielski mutable long mnEmphasisDescent; 338*b1cdbd2cSJim Jagielski sal_uLong mnDrawMode; 339*b1cdbd2cSJim Jagielski sal_uLong mnTextLayoutMode; 340*b1cdbd2cSJim Jagielski ImplMapRes maMapRes; 341*b1cdbd2cSJim Jagielski ImplThresholdRes maThresRes; 342*b1cdbd2cSJim Jagielski OutDevType meOutDevType; 343*b1cdbd2cSJim Jagielski OutDevViewType meOutDevViewType; 344*b1cdbd2cSJim Jagielski Region maRegion; // contains the clip region, see SetClipRegion(...) 345*b1cdbd2cSJim Jagielski Color maLineColor; 346*b1cdbd2cSJim Jagielski Color maFillColor; 347*b1cdbd2cSJim Jagielski Font maFont; 348*b1cdbd2cSJim Jagielski Color maTextColor; 349*b1cdbd2cSJim Jagielski Color maTextLineColor; 350*b1cdbd2cSJim Jagielski Color maOverlineColor; 351*b1cdbd2cSJim Jagielski TextAlign meTextAlign; 352*b1cdbd2cSJim Jagielski RasterOp meRasterOp; 353*b1cdbd2cSJim Jagielski Wallpaper maBackground; 354*b1cdbd2cSJim Jagielski AllSettings maSettings; 355*b1cdbd2cSJim Jagielski MapMode maMapMode; 356*b1cdbd2cSJim Jagielski Point maRefPoint; 357*b1cdbd2cSJim Jagielski sal_uInt16 mnAntialiasing; 358*b1cdbd2cSJim Jagielski LanguageType meTextLanguage; 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski /// bitfield 361*b1cdbd2cSJim Jagielski mutable bool mbMap : 1; 362*b1cdbd2cSJim Jagielski mutable bool mbMapIsDefault : 1; 363*b1cdbd2cSJim Jagielski mutable bool mbClipRegion : 1; 364*b1cdbd2cSJim Jagielski mutable bool mbBackground : 1; 365*b1cdbd2cSJim Jagielski mutable bool mbOutput : 1; 366*b1cdbd2cSJim Jagielski mutable bool mbDevOutput : 1; 367*b1cdbd2cSJim Jagielski mutable bool mbOutputClipped : 1; 368*b1cdbd2cSJim Jagielski mutable bool mbLineColor : 1; 369*b1cdbd2cSJim Jagielski mutable bool mbFillColor : 1; 370*b1cdbd2cSJim Jagielski mutable bool mbInitLineColor : 1; 371*b1cdbd2cSJim Jagielski mutable bool mbInitFillColor : 1; 372*b1cdbd2cSJim Jagielski mutable bool mbInitFont : 1; 373*b1cdbd2cSJim Jagielski mutable bool mbInitTextColor : 1; 374*b1cdbd2cSJim Jagielski mutable bool mbInitClipRegion : 1; 375*b1cdbd2cSJim Jagielski mutable bool mbClipRegionSet : 1; 376*b1cdbd2cSJim Jagielski mutable bool mbKerning : 1; 377*b1cdbd2cSJim Jagielski mutable bool mbNewFont : 1; 378*b1cdbd2cSJim Jagielski mutable bool mbTextLines : 1; 379*b1cdbd2cSJim Jagielski mutable bool mbTextSpecial : 1; 380*b1cdbd2cSJim Jagielski mutable bool mbRefPoint : 1; 381*b1cdbd2cSJim Jagielski mutable bool mbEnableRTL : 1; 382*b1cdbd2cSJim Jagielski 383*b1cdbd2cSJim Jagielski public: ImplGetDPIX() const384*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE sal_Int32 ImplGetDPIX() const { return mnDPIX; } ImplGetDPIY() const385*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE sal_Int32 ImplGetDPIY() const { return mnDPIY; } 386*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE int ImplGetGraphics() const; 387*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplReleaseGraphics( sal_Bool bRelease = sal_True ); 388*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE sal_Bool ImplHasMirroredGraphics(); 389*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplReMirror( Point &rPoint ) const; 390*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplReMirror( Rectangle &rRect ) const; 391*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplReMirror( Region &rRegion ) const; 392*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitOutDevData(); 393*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDeInitOutDevData(); 394*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitLineColor(); 395*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitFillColor(); 396*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE bool ImplNewFont() const; 397*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitFont() const; 398*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitTextColor(); 399*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitClipRegion(); 400*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE bool ImplSelectClipRegion( const Region&, SalGraphics* pGraphics = NULL ); 401*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplSetClipRegion( const Region* pRegion ); 402*b1cdbd2cSJim Jagielski 403*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE SalLayout* ImplLayout( const String&, xub_StrLen nIndex, 404*b1cdbd2cSJim Jagielski xub_StrLen nLen, const Point& rLogicPos = Point(0,0), 405*b1cdbd2cSJim Jagielski long nLogicWidth=0, const sal_Int32* pLogicDXArray=NULL, 406*b1cdbd2cSJim Jagielski bool bFilter = false ) const; 407*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE ImplLayoutArgs ImplPrepareLayoutArgs( String&, 408*b1cdbd2cSJim Jagielski xub_StrLen nIndex, xub_StrLen nLen, 409*b1cdbd2cSJim Jagielski long nPixelWidth, 410*b1cdbd2cSJim Jagielski const sal_Int32* pPixelDXArray ) const; 411*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE SalLayout* ImplGlyphFallbackLayout( SalLayout*, ImplLayoutArgs& ) const; 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplGetTextWidth( const SalLayout& ) const; 414*b1cdbd2cSJim Jagielski static 415*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE XubString ImplGetEllipsisString( const OutputDevice& rTargetDevice, const XubString& rStr, 416*b1cdbd2cSJim Jagielski long nMaxWidth, sal_uInt16 nStyle, const ::vcl::ITextLayout& _rLayout ); 417*b1cdbd2cSJim Jagielski static 418*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& rRect, 419*b1cdbd2cSJim Jagielski const String& rOrigStr, sal_uInt16 nStyle, 420*b1cdbd2cSJim Jagielski MetricVector* pVector, String* pDisplayText, ::vcl::ITextLayout& _rLayout ); 421*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawTextBackground( const SalLayout& ); 422*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawTextLines( SalLayout&, FontStrikeout eStrikeout, FontUnderline eUnderline, FontUnderline eOverline, sal_Bool bWordLine, sal_Bool bUnderlineAbove ); 423*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE bool ImplDrawRotateText( SalLayout& ); 424*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawTextDirect( SalLayout&, sal_Bool bTextLines ); 425*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawSpecialText( SalLayout& ); 426*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawText( SalLayout& ); 427*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Rectangle ImplGetTextBoundRect( const SalLayout& ); 428*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawEmphasisMarks( SalLayout& ); 429*b1cdbd2cSJim Jagielski 430*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawTextRect( long nBaseX, long nBaseY, long nX, long nY, long nWidth, long nHeight ); 431*b1cdbd2cSJim Jagielski 432*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitTextLineSize(); 433*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitAboveTextLineSize(); 434*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawWaveLine( long nBaseX, long nBaseY, long nStartX, long nStartY, long nWidth, long nHeight, long nLineWidth, short nOrientation, const Color& rColor ); 435*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawWaveTextLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontUnderline eTextLine, Color aColor, sal_Bool bIsAbove ); 436*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawStraightTextLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontUnderline eTextLine, Color aColor, sal_Bool bIsAbove ); 437*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawStrikeoutLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontStrikeout eStrikeout, Color aColor ); 438*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawStrikeoutChar( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontStrikeout eStrikeout, Color aColor ); 439*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawTextLine( long nBaseX, long nX, long nY, long nWidth, FontStrikeout eStrikeout, FontUnderline eUnderline, FontUnderline eOverline, sal_Bool bUnderlineAbove ); 440*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawMnemonicLine( long nX, long nY, long nWidth ); 441*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplGetEmphasisMark( PolyPolygon& rPolyPoly, sal_Bool& rPolyLine, Rectangle& rRect1, Rectangle& rRect2, long& rYOff, long& rWidth, FontEmphasisMark eEmphasis, long nHeight, short nOrient ); 442*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawEmphasisMark( long nBaseX, long nX, long nY, const PolyPolygon& rPolyPoly, sal_Bool bPolyLine, const Rectangle& rRect1, const Rectangle& rRect2 ); 443*b1cdbd2cSJim Jagielski static 444*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo, long nWidth, const XubString& rStr, sal_uInt16 nStyle, const ::vcl::ITextLayout& _rLayout ); 445*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInitFontList() const; 446*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplUpdateFontData( bool bNewFontLists ); 447*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE static void ImplUpdateAllFontData( bool bNewFontLists ); 448*b1cdbd2cSJim Jagielski 449*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplLogicXToDevicePixel( long nX ) const; 450*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplLogicYToDevicePixel( long nY ) const; 451*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplLogicWidthToDevicePixel( long nWidth ) const; 452*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplLogicHeightToDevicePixel( long nHeight ) const; 453*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplDevicePixelToLogicWidth( long nWidth ) const; 454*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE long ImplDevicePixelToLogicHeight( long nHeight ) const; 455*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE float ImplFloatLogicWidthToDevicePixel( float ) const; 456*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE float ImplFloatLogicHeightToDevicePixel( float ) const; 457*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE float ImplFloatDevicePixelToLogicWidth( float ) const; 458*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE float ImplFloatDevicePixelToLogicHeight( float ) const; 459*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Point ImplLogicToDevicePixel( const Point& rLogicPt ) const; 460*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Size ImplLogicToDevicePixel( const Size& rLogicSize ) const; 461*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Rectangle ImplLogicToDevicePixel( const Rectangle& rLogicRect ) const; 462*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE ::basegfx::B2DPolygon ImplLogicToDevicePixel( const ::basegfx::B2DPolygon& ) const; 463*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE ::basegfx::B2DPolyPolygon ImplLogicToDevicePixel( const ::basegfx::B2DPolyPolygon& ) const; 464*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Polygon ImplLogicToDevicePixel( const Polygon& rLogicPoly ) const; 465*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE PolyPolygon ImplLogicToDevicePixel( const PolyPolygon& rLogicPolyPoly ) const; 466*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE LineInfo ImplLogicToDevicePixel( const LineInfo& rLineInfo ) const; 467*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Rectangle ImplDevicePixelToLogic( const Rectangle& rLogicRect ) const; 468*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Region ImplPixelToDevicePixel( const Region& rRegion ) const; 469*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplInvalidateViewTransform(); 470*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const; 471*b1cdbd2cSJim Jagielski 472*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawPolygon( const Polygon& rPoly, const PolyPolygon* pClipPolyPoly = NULL ); 473*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawPolyPolygon( const PolyPolygon& rPolyPoly, const PolyPolygon* pClipPolyPoly = NULL ); 474*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawPolyPolygon( sal_uInt16 nPoly, const PolyPolygon& rPolyPoly ); 475*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawLinearGradient( const Rectangle& rRect, const Gradient& rGradient, sal_Bool bMtf, const PolyPolygon* pClipPolyPoly ); 476*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawComplexGradient( const Rectangle& rRect, const Gradient& rGradient, sal_Bool bMtf, const PolyPolygon* pClipPolyPoly ); 477*b1cdbd2cSJim Jagielski 478*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawHatch( const PolyPolygon& rPolyPoly, const Hatch& rHatch, sal_Bool bMtf ); 479*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplCalcHatchValues( const Rectangle& rRect, long nDist, sal_uInt16 nAngle10, Point& rPt1, Point& rPt2, Size& rInc, Point& rEndPt1 ); 480*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawHatchLine( const Line& rLine, const PolyPolygon& rPolyPoly, Point* pPtBuffer, sal_Bool bMtf ); 481*b1cdbd2cSJim Jagielski 482*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper ); 483*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawColorWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper ); 484*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawBitmapWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper ); 485*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawGradientWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper ); 486*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDraw2ColorFrame( const Rectangle& rRect, const Color& rLeftTopColor, const Color& rRightBottomColor ); 487*b1cdbd2cSJim Jagielski 488*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawOutDevDirect( const OutputDevice* pSrcDev, SalTwoRect& rPosAry ); 489*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawBitmap( const Point& rDestPt, const Size& rDestSize, 490*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 491*b1cdbd2cSJim Jagielski const Bitmap& rBitmap, const sal_uLong nAction ); 492*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize, 493*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 494*b1cdbd2cSJim Jagielski const BitmapEx& rBitmapEx, const sal_uLong nAction ); 495*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawMask( const Point& rDestPt, const Size& rDestSize, 496*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 497*b1cdbd2cSJim Jagielski const Bitmap& rBitmap, const Color& rMaskColor, 498*b1cdbd2cSJim Jagielski const sal_uLong nAction ); 499*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawAlpha( const Bitmap& rBmp, const AlphaMask& rAlpha, 500*b1cdbd2cSJim Jagielski const Point& rDestPt, const Size& rDestSize, 501*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel ); 502*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Bitmap ImplBlend( Bitmap aBmp, 503*b1cdbd2cSJim Jagielski BitmapReadAccess* pP, 504*b1cdbd2cSJim Jagielski BitmapReadAccess* pA, 505*b1cdbd2cSJim Jagielski const sal_Int32 nOffY, 506*b1cdbd2cSJim Jagielski const sal_Int32 nDstHeight, 507*b1cdbd2cSJim Jagielski const sal_Int32 nOffX, 508*b1cdbd2cSJim Jagielski const sal_Int32 nDstWidth, 509*b1cdbd2cSJim Jagielski const Rectangle& aBmpRect, 510*b1cdbd2cSJim Jagielski const Size& aOutSz, 511*b1cdbd2cSJim Jagielski const bool bHMirr, 512*b1cdbd2cSJim Jagielski const bool bVMirr, 513*b1cdbd2cSJim Jagielski const long* pMapX, 514*b1cdbd2cSJim Jagielski const long* pMapY ); 515*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE Bitmap ImplBlendWithAlpha( Bitmap aBmp, 516*b1cdbd2cSJim Jagielski BitmapReadAccess* pP, 517*b1cdbd2cSJim Jagielski BitmapReadAccess* pA, 518*b1cdbd2cSJim Jagielski const Rectangle& aDstRect, 519*b1cdbd2cSJim Jagielski const sal_Int32 nOffY, 520*b1cdbd2cSJim Jagielski const sal_Int32 nDstHeight, 521*b1cdbd2cSJim Jagielski const sal_Int32 nOffX, 522*b1cdbd2cSJim Jagielski const sal_Int32 nDstWidth, 523*b1cdbd2cSJim Jagielski const long* pMapX, 524*b1cdbd2cSJim Jagielski const long* pMapY ); 525*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplPrintTransparent( const Bitmap& rBmp, const Bitmap& rMask, 526*b1cdbd2cSJim Jagielski const Point& rDestPt, const Size& rDestSize, 527*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel ); 528*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplPrintMask( const Bitmap& rMask, const Color& rMaskColor, 529*b1cdbd2cSJim Jagielski const Point& rDestPt, const Size& rDestSize, 530*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel ); 531*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplDrawFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize, 532*b1cdbd2cSJim Jagielski const OutputDevice& rOutDev, const Region& rRegion ); 533*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplGetFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize, 534*b1cdbd2cSJim Jagielski OutputDevice& rOutDev ); 535*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImplGetFrameBitmap( const Point& rPt, const Size& rSize, 536*b1cdbd2cSJim Jagielski Bitmap& rBitmap ) const; 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE sal_Bool ImplIsRecordLayout() const; 539*b1cdbd2cSJim Jagielski 540*b1cdbd2cSJim Jagielski void ImplAddDevFontSubstitute( const XubString& rFontName, 541*b1cdbd2cSJim Jagielski const XubString& rReplaceFontName, 542*b1cdbd2cSJim Jagielski sal_uInt16 nFlags = 0 ); 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE static FontEmphasisMark ImplGetEmphasisMarkStyle( const Font& rFont ); 545*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE static sal_Bool ImplIsUnderlineAbove( const Font& ); 546*b1cdbd2cSJim Jagielski 547*b1cdbd2cSJim Jagielski // tells whether this output device is RTL in an LTR UI or LTR in a RTL UI 548*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE bool ImplIsAntiparallel() const ; 549*b1cdbd2cSJim Jagielski 550*b1cdbd2cSJim Jagielski // #i101491# 551*b1cdbd2cSJim Jagielski // Helper which holds the old line geometry creation and is extended to use AA when 552*b1cdbd2cSJim Jagielski // switched on. Advantage is that line geometry is only temporarily used for paint 553*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo); 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski // #i101491# 556*b1cdbd2cSJim Jagielski // Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon 557*b1cdbd2cSJim Jagielski // without MetaFile processing 558*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE void ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly); 559*b1cdbd2cSJim Jagielski 560*b1cdbd2cSJim Jagielski // #i101491# 561*b1cdbd2cSJim Jagielski // Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool. Contains no AA check. 562*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE bool ImpTryDrawPolyLineDirect( 563*b1cdbd2cSJim Jagielski const basegfx::B2DPolygon& rB2DPolygon, 564*b1cdbd2cSJim Jagielski double fLineWidth = 0.0, 565*b1cdbd2cSJim Jagielski double fTransparency = 0.0, 566*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE, 567*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT); 568*b1cdbd2cSJim Jagielski 569*b1cdbd2cSJim Jagielski // Helper for line geometry paint with support for graphic expansion (pattern and fat_to_area) 570*b1cdbd2cSJim Jagielski void impPaintLineGeometryWithEvtlExpand(const LineInfo& rInfo, basegfx::B2DPolyPolygon aLinePolyPolygon); 571*b1cdbd2cSJim Jagielski 572*b1cdbd2cSJim Jagielski protected: 573*b1cdbd2cSJim Jagielski OutputDevice(); 574*b1cdbd2cSJim Jagielski 575*b1cdbd2cSJim Jagielski private: 576*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE OutputDevice( const OutputDevice& rOutDev ); 577*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE OutputDevice& operator =( const OutputDevice& rOutDev ); 578*b1cdbd2cSJim Jagielski 579*b1cdbd2cSJim Jagielski public: 580*b1cdbd2cSJim Jagielski virtual ~OutputDevice(); 581*b1cdbd2cSJim Jagielski GetOutDevType() const582*b1cdbd2cSJim Jagielski OutDevType GetOutDevType() const { return meOutDevType; } 583*b1cdbd2cSJim Jagielski 584*b1cdbd2cSJim Jagielski /** query an <code>OutputDevice</code> whether it spports a specific operation 585*b1cdbd2cSJim Jagielski 586*b1cdbd2cSJim Jagielski @return 587*b1cdbd2cSJim Jagielski true if operation supported, else false 588*b1cdbd2cSJim Jagielski */ 589*b1cdbd2cSJim Jagielski bool supportsOperation( OutDevSupportType ) const; 590*b1cdbd2cSJim Jagielski GetPDFWriter() const591*b1cdbd2cSJim Jagielski vcl::PDFWriterImpl* GetPDFWriter() const { return mpPDFWriter; } 592*b1cdbd2cSJim Jagielski SetExtOutDevData(vcl::ExtOutDevData * pExtOutDevData)593*b1cdbd2cSJim Jagielski void SetExtOutDevData( vcl::ExtOutDevData* pExtOutDevData ) { mpExtOutDevData = pExtOutDevData; } GetExtOutDevData() const594*b1cdbd2cSJim Jagielski vcl::ExtOutDevData* GetExtOutDevData() const { return mpExtOutDevData; } 595*b1cdbd2cSJim Jagielski 596*b1cdbd2cSJim Jagielski void DrawTextLine( const Point& rPos, long nWidth, 597*b1cdbd2cSJim Jagielski FontStrikeout eStrikeout, 598*b1cdbd2cSJim Jagielski FontUnderline eUnderline, 599*b1cdbd2cSJim Jagielski FontUnderline eOverline, 600*b1cdbd2cSJim Jagielski sal_Bool bUnderlineAbove = sal_False ); 601*b1cdbd2cSJim Jagielski static sal_Bool IsTextUnderlineAbove( const Font& rFont ); 602*b1cdbd2cSJim Jagielski 603*b1cdbd2cSJim Jagielski void DrawText( const Point& rStartPt, const XubString& rStr, 604*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, 605*b1cdbd2cSJim Jagielski MetricVector* pVector = NULL, String* pDisplayText = NULL ); 606*b1cdbd2cSJim Jagielski long GetTextWidth( const XubString& rStr, xub_StrLen nIndex = 0, 607*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN ) const; 608*b1cdbd2cSJim Jagielski long GetTextHeight() const; 609*b1cdbd2cSJim Jagielski void DrawTextArray( const Point& rStartPt, const XubString& rStr, 610*b1cdbd2cSJim Jagielski const sal_Int32* pDXAry = NULL, 611*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, 612*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN ); 613*b1cdbd2cSJim Jagielski long GetTextArray( const XubString& rStr, sal_Int32* pDXAry = NULL, 614*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, 615*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN ) const; 616*b1cdbd2cSJim Jagielski bool GetCaretPositions( const XubString&, sal_Int32* pCaretXArray, 617*b1cdbd2cSJim Jagielski xub_StrLen nIndex, xub_StrLen nLen, 618*b1cdbd2cSJim Jagielski sal_Int32* pDXAry = NULL, long nWidth = 0, 619*b1cdbd2cSJim Jagielski sal_Bool bCellBreaking = sal_True ) const; 620*b1cdbd2cSJim Jagielski void DrawStretchText( const Point& rStartPt, sal_uLong nWidth, 621*b1cdbd2cSJim Jagielski const XubString& rStr, 622*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN ); 623*b1cdbd2cSJim Jagielski xub_StrLen GetTextBreak( const XubString& rStr, long nTextWidth, 624*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, 625*b1cdbd2cSJim Jagielski long nCharExtra = 0, sal_Bool bCellBreaking = sal_True ) const; 626*b1cdbd2cSJim Jagielski xub_StrLen GetTextBreak( const XubString& rStr, long nTextWidth, 627*b1cdbd2cSJim Jagielski sal_uInt16 nExtraChar, xub_StrLen& rExtraCharPos, 628*b1cdbd2cSJim Jagielski xub_StrLen nIndex, xub_StrLen nLen, 629*b1cdbd2cSJim Jagielski long nCharExtra = 0 ) const; 630*b1cdbd2cSJim Jagielski /** Generate MetaTextActions for the text rect 631*b1cdbd2cSJim Jagielski 632*b1cdbd2cSJim Jagielski This method splits up the text rect into multiple 633*b1cdbd2cSJim Jagielski MetaTextActions, one for each line of text. This is comparable 634*b1cdbd2cSJim Jagielski to AddGradientActions(), which splits up a gradient into its 635*b1cdbd2cSJim Jagielski constituing polygons. Parameter semantics fully compatible to 636*b1cdbd2cSJim Jagielski DrawText(). 637*b1cdbd2cSJim Jagielski */ 638*b1cdbd2cSJim Jagielski void AddTextRectActions( const Rectangle& rRect, 639*b1cdbd2cSJim Jagielski const String& rOrigStr, 640*b1cdbd2cSJim Jagielski sal_uInt16 nStyle, 641*b1cdbd2cSJim Jagielski GDIMetaFile& rMtf ); 642*b1cdbd2cSJim Jagielski void DrawText( const Rectangle& rRect, 643*b1cdbd2cSJim Jagielski const XubString& rStr, sal_uInt16 nStyle = 0, 644*b1cdbd2cSJim Jagielski MetricVector* pVector = NULL, String* pDisplayText = NULL, 645*b1cdbd2cSJim Jagielski ::vcl::ITextLayout* _pTextLayout = NULL ); 646*b1cdbd2cSJim Jagielski Rectangle GetTextRect( const Rectangle& rRect, 647*b1cdbd2cSJim Jagielski const XubString& rStr, sal_uInt16 nStyle = TEXT_DRAW_WORDBREAK, 648*b1cdbd2cSJim Jagielski TextRectInfo* pInfo = NULL, 649*b1cdbd2cSJim Jagielski const ::vcl::ITextLayout* _pTextLayout = NULL ) const; 650*b1cdbd2cSJim Jagielski XubString GetEllipsisString( const XubString& rStr, long nMaxWidth, 651*b1cdbd2cSJim Jagielski sal_uInt16 nStyle = TEXT_DRAW_ENDELLIPSIS ) const; 652*b1cdbd2cSJim Jagielski void DrawCtrlText( const Point& rPos, const XubString& rStr, 653*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, 654*b1cdbd2cSJim Jagielski sal_uInt16 nStyle = TEXT_DRAW_MNEMONIC, MetricVector* pVector = NULL, String* pDisplayText = NULL ); 655*b1cdbd2cSJim Jagielski long GetCtrlTextWidth( const XubString& rStr, xub_StrLen nIndex = 0, 656*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN, 657*b1cdbd2cSJim Jagielski sal_uInt16 nStyle = TEXT_DRAW_MNEMONIC ) const; 658*b1cdbd2cSJim Jagielski static XubString GetNonMnemonicString( const XubString& rStr, xub_StrLen& rMnemonicPos ); GetNonMnemonicString(const XubString & rStr)659*b1cdbd2cSJim Jagielski static XubString GetNonMnemonicString( const XubString& rStr ) 660*b1cdbd2cSJim Jagielski { xub_StrLen nDummy; return GetNonMnemonicString( rStr, nDummy ); } 661*b1cdbd2cSJim Jagielski 662*b1cdbd2cSJim Jagielski sal_Bool GetTextBoundRect( Rectangle& rRect, 663*b1cdbd2cSJim Jagielski const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, 664*b1cdbd2cSJim Jagielski sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; 665*b1cdbd2cSJim Jagielski sal_Bool GetTextOutline( PolyPolygon&, 666*b1cdbd2cSJim Jagielski const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, 667*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True, 668*b1cdbd2cSJim Jagielski sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; 669*b1cdbd2cSJim Jagielski sal_Bool GetTextOutlines( PolyPolyVector&, 670*b1cdbd2cSJim Jagielski const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, 671*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True, 672*b1cdbd2cSJim Jagielski sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; 673*b1cdbd2cSJim Jagielski sal_Bool GetTextOutlines( ::basegfx::B2DPolyPolygonVector&, 674*b1cdbd2cSJim Jagielski const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, 675*b1cdbd2cSJim Jagielski xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True, 676*b1cdbd2cSJim Jagielski sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const; 677*b1cdbd2cSJim Jagielski sal_Bool GetGlyphBoundRects( const Point& rOrigin, const String& rStr, int nIndex, 678*b1cdbd2cSJim Jagielski int nLen, int nBase, MetricVector& rVector ); 679*b1cdbd2cSJim Jagielski 680*b1cdbd2cSJim Jagielski void DrawPixel( const Point& rPt ); 681*b1cdbd2cSJim Jagielski void DrawPixel( const Point& rPt, const Color& rColor ); 682*b1cdbd2cSJim Jagielski void DrawPixel( const Polygon& rPts, const Color* pColors = NULL ); 683*b1cdbd2cSJim Jagielski void DrawPixel( const Polygon& rPts, const Color& rColor ); 684*b1cdbd2cSJim Jagielski 685*b1cdbd2cSJim Jagielski void DrawLine( const Point& rStartPt, const Point& rEndPt ); 686*b1cdbd2cSJim Jagielski void DrawLine( const Point& rStartPt, const Point& rEndPt, 687*b1cdbd2cSJim Jagielski const LineInfo& rLineInfo ); 688*b1cdbd2cSJim Jagielski 689*b1cdbd2cSJim Jagielski /** Render the given polygon as a line stroke 690*b1cdbd2cSJim Jagielski 691*b1cdbd2cSJim Jagielski The given polygon is stroked with the current LineColor, start 692*b1cdbd2cSJim Jagielski and end point are not automatically connected 693*b1cdbd2cSJim Jagielski 694*b1cdbd2cSJim Jagielski @see DrawPolygon 695*b1cdbd2cSJim Jagielski @see DrawPolyPolygon 696*b1cdbd2cSJim Jagielski */ 697*b1cdbd2cSJim Jagielski void DrawPolyLine( const Polygon& rPoly ); 698*b1cdbd2cSJim Jagielski void DrawPolyLine( 699*b1cdbd2cSJim Jagielski const basegfx::B2DPolygon&, 700*b1cdbd2cSJim Jagielski double fLineWidth = 0.0, 701*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin = basegfx::B2DLINEJOIN_ROUND, 702*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap = com::sun::star::drawing::LineCap_BUTT); 703*b1cdbd2cSJim Jagielski bool TryDrawPolyLineDirect( 704*b1cdbd2cSJim Jagielski const basegfx::B2DPolygon& rB2DPolygon, 705*b1cdbd2cSJim Jagielski double fLineWidth = 0.0, 706*b1cdbd2cSJim Jagielski double fTransparency = 0.0, 707*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE, 708*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT); 709*b1cdbd2cSJim Jagielski 710*b1cdbd2cSJim Jagielski /** Render the given polygon as a line stroke 711*b1cdbd2cSJim Jagielski 712*b1cdbd2cSJim Jagielski The given polygon is stroked with the current LineColor, start 713*b1cdbd2cSJim Jagielski and end point are not automatically connected. The line is 714*b1cdbd2cSJim Jagielski rendered according to the specified LineInfo, e.g. supplying a 715*b1cdbd2cSJim Jagielski dash pattern, or a line thickness. 716*b1cdbd2cSJim Jagielski 717*b1cdbd2cSJim Jagielski @see DrawPolygon 718*b1cdbd2cSJim Jagielski @see DrawPolyPolygon 719*b1cdbd2cSJim Jagielski */ 720*b1cdbd2cSJim Jagielski void DrawPolyLine( const Polygon& rPoly, 721*b1cdbd2cSJim Jagielski const LineInfo& rLineInfo ); 722*b1cdbd2cSJim Jagielski 723*b1cdbd2cSJim Jagielski /** Render the given polygon 724*b1cdbd2cSJim Jagielski 725*b1cdbd2cSJim Jagielski The given polygon is stroked with the current LineColor, and 726*b1cdbd2cSJim Jagielski filled with the current FillColor. If one of these colors are 727*b1cdbd2cSJim Jagielski transparent, the corresponding stroke or fill stays 728*b1cdbd2cSJim Jagielski invisible. Start and end point of the polygon are 729*b1cdbd2cSJim Jagielski automatically connected. 730*b1cdbd2cSJim Jagielski 731*b1cdbd2cSJim Jagielski @see DrawPolyLine 732*b1cdbd2cSJim Jagielski */ 733*b1cdbd2cSJim Jagielski void DrawPolygon( const Polygon& rPoly ); 734*b1cdbd2cSJim Jagielski void DrawPolygon( const basegfx::B2DPolygon& ); 735*b1cdbd2cSJim Jagielski 736*b1cdbd2cSJim Jagielski /** Render the given poly-polygon 737*b1cdbd2cSJim Jagielski 738*b1cdbd2cSJim Jagielski The given poly-polygon is stroked with the current LineColor, 739*b1cdbd2cSJim Jagielski and filled with the current FillColor. If one of these colors 740*b1cdbd2cSJim Jagielski are transparent, the corresponding stroke or fill stays 741*b1cdbd2cSJim Jagielski invisible. Start and end points of the contained polygons are 742*b1cdbd2cSJim Jagielski automatically connected. 743*b1cdbd2cSJim Jagielski 744*b1cdbd2cSJim Jagielski @see DrawPolyLine 745*b1cdbd2cSJim Jagielski */ 746*b1cdbd2cSJim Jagielski void DrawPolyPolygon( const PolyPolygon& rPolyPoly ); 747*b1cdbd2cSJim Jagielski void DrawPolyPolygon( const basegfx::B2DPolyPolygon& ); 748*b1cdbd2cSJim Jagielski 749*b1cdbd2cSJim Jagielski void DrawRect( const Rectangle& rRect ); 750*b1cdbd2cSJim Jagielski void DrawRect( const Rectangle& rRect, 751*b1cdbd2cSJim Jagielski sal_uLong nHorzRount, sal_uLong nVertRound ); 752*b1cdbd2cSJim Jagielski void DrawEllipse( const Rectangle& rRect ); 753*b1cdbd2cSJim Jagielski void DrawArc( const Rectangle& rRect, 754*b1cdbd2cSJim Jagielski const Point& rStartPt, const Point& rEndPt ); 755*b1cdbd2cSJim Jagielski void DrawPie( const Rectangle& rRect, 756*b1cdbd2cSJim Jagielski const Point& rStartPt, const Point& rEndPt ); 757*b1cdbd2cSJim Jagielski void DrawChord( const Rectangle& rRect, 758*b1cdbd2cSJim Jagielski const Point& rStartPt, const Point& rEndPt ); 759*b1cdbd2cSJim Jagielski 760*b1cdbd2cSJim Jagielski void DrawOutDev( const Point& rDestPt, const Size& rDestSize, 761*b1cdbd2cSJim Jagielski const Point& rSrcPt, const Size& rSrcSize ); 762*b1cdbd2cSJim Jagielski void DrawOutDev( const Point& rDestPt, const Size& rDestSize, 763*b1cdbd2cSJim Jagielski const Point& rSrcPt, const Size& rSrcSize, 764*b1cdbd2cSJim Jagielski const OutputDevice& rOutDev ); 765*b1cdbd2cSJim Jagielski void CopyArea( const Point& rDestPt, 766*b1cdbd2cSJim Jagielski const Point& rSrcPt, const Size& rSrcSize, 767*b1cdbd2cSJim Jagielski sal_uInt16 nFlags = 0 ); 768*b1cdbd2cSJim Jagielski 769*b1cdbd2cSJim Jagielski void DrawBitmap( const Point& rDestPt, 770*b1cdbd2cSJim Jagielski const Bitmap& rBitmap ); 771*b1cdbd2cSJim Jagielski void DrawBitmap( const Point& rDestPt, const Size& rDestSize, 772*b1cdbd2cSJim Jagielski const Bitmap& rBitmap ); 773*b1cdbd2cSJim Jagielski void DrawBitmap( const Point& rDestPt, const Size& rDestSize, 774*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 775*b1cdbd2cSJim Jagielski const Bitmap& rBitmap ); 776*b1cdbd2cSJim Jagielski 777*b1cdbd2cSJim Jagielski void DrawBitmapEx( const Point& rDestPt, 778*b1cdbd2cSJim Jagielski const BitmapEx& rBitmapEx ); 779*b1cdbd2cSJim Jagielski void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize, 780*b1cdbd2cSJim Jagielski const BitmapEx& rBitmapEx ); 781*b1cdbd2cSJim Jagielski void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize, 782*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 783*b1cdbd2cSJim Jagielski const BitmapEx& rBitmapEx ); 784*b1cdbd2cSJim Jagielski 785*b1cdbd2cSJim Jagielski /** Draw BitampEx transformed 786*b1cdbd2cSJim Jagielski 787*b1cdbd2cSJim Jagielski @param rTransformation 788*b1cdbd2cSJim Jagielski The transformation describing the target positioning of the given bitmap. Transforming 789*b1cdbd2cSJim Jagielski the unit object coordinates (0, 0, 1, 1) with this matrix is the transformation to 790*b1cdbd2cSJim Jagielski discrete coordinates 791*b1cdbd2cSJim Jagielski 792*b1cdbd2cSJim Jagielski @param rBitmapEx 793*b1cdbd2cSJim Jagielski The BitmapEx to be painted 794*b1cdbd2cSJim Jagielski */ 795*b1cdbd2cSJim Jagielski void DrawTransformedBitmapEx( 796*b1cdbd2cSJim Jagielski const basegfx::B2DHomMatrix& rTransformation, 797*b1cdbd2cSJim Jagielski const BitmapEx& rBitmapEx); 798*b1cdbd2cSJim Jagielski 799*b1cdbd2cSJim Jagielski void DrawMask( const Point& rDestPt, 800*b1cdbd2cSJim Jagielski const Bitmap& rBitmap, const Color& rMaskColor ); 801*b1cdbd2cSJim Jagielski void DrawMask( const Point& rDestPt, const Size& rDestSize, 802*b1cdbd2cSJim Jagielski const Bitmap& rBitmap, const Color& rMaskColor ); 803*b1cdbd2cSJim Jagielski void DrawMask( const Point& rDestPt, const Size& rDestSize, 804*b1cdbd2cSJim Jagielski const Point& rSrcPtPixel, const Size& rSrcSizePixel, 805*b1cdbd2cSJim Jagielski const Bitmap& rBitmap, const Color& rMaskColor ); 806*b1cdbd2cSJim Jagielski 807*b1cdbd2cSJim Jagielski void DrawImage( const Point& rPos, 808*b1cdbd2cSJim Jagielski const Image& rImage, sal_uInt16 nStyle = 0 ); 809*b1cdbd2cSJim Jagielski void DrawImage( const Point& rPos, const Size& rSize, 810*b1cdbd2cSJim Jagielski const Image& rImage, sal_uInt16 nStyle = 0 ); 811*b1cdbd2cSJim Jagielski 812*b1cdbd2cSJim Jagielski void DrawGradient( const Rectangle& rRect, const Gradient& rGradient ); 813*b1cdbd2cSJim Jagielski void DrawGradient( const PolyPolygon& rPolyPoly, const Gradient& rGradient ); 814*b1cdbd2cSJim Jagielski void AddGradientActions( const Rectangle& rRect, 815*b1cdbd2cSJim Jagielski const Gradient& rGradient, 816*b1cdbd2cSJim Jagielski GDIMetaFile& rMtf ); 817*b1cdbd2cSJim Jagielski 818*b1cdbd2cSJim Jagielski #if defined(_MSC_VER) && (_MSC_VER >= 1400) 819*b1cdbd2cSJim Jagielski void DrawHatch( const PolyPolygon& rPolyPoly, const ::Hatch& rHatch ); 820*b1cdbd2cSJim Jagielski void AddHatchActions( const PolyPolygon& rPolyPoly, 821*b1cdbd2cSJim Jagielski const ::Hatch& rHatch, 822*b1cdbd2cSJim Jagielski GDIMetaFile& rMtf ); 823*b1cdbd2cSJim Jagielski #else 824*b1cdbd2cSJim Jagielski void DrawHatch( const PolyPolygon& rPolyPoly, const Hatch& rHatch ); 825*b1cdbd2cSJim Jagielski void AddHatchActions( const PolyPolygon& rPolyPoly, 826*b1cdbd2cSJim Jagielski const Hatch& rHatch, 827*b1cdbd2cSJim Jagielski GDIMetaFile& rMtf ); 828*b1cdbd2cSJim Jagielski #endif 829*b1cdbd2cSJim Jagielski 830*b1cdbd2cSJim Jagielski void DrawWallpaper( const Rectangle& rRect, const Wallpaper& rWallpaper ); 831*b1cdbd2cSJim Jagielski void DrawWaveLine( const Point& rStartPos, const Point& rEndPos, sal_uInt16 nStyle ); 832*b1cdbd2cSJim Jagielski void DrawGrid( const Rectangle& rRect, const Size& rDist, sal_uLong nFlags ); 833*b1cdbd2cSJim Jagielski 834*b1cdbd2cSJim Jagielski void DrawTransparent( const PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent ); 835*b1cdbd2cSJim Jagielski void DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly, double fTransparency); 836*b1cdbd2cSJim Jagielski void DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos, const Size& rSize, 837*b1cdbd2cSJim Jagielski const Gradient& rTransparenceGradient ); 838*b1cdbd2cSJim Jagielski 839*b1cdbd2cSJim Jagielski /** Added return value to see if EPS could be painted directly. 840*b1cdbd2cSJim Jagielski Theoreticaly, handing over a matrix would be needed to handle 841*b1cdbd2cSJim Jagielski painting rotated EPS files (e.g. contained in Metafiles). This 842*b1cdbd2cSJim Jagielski would then need to be supported for Mac and PS printers, but 843*b1cdbd2cSJim Jagielski that's too much for now, wrote #i107046# for this */ 844*b1cdbd2cSJim Jagielski bool DrawEPS( const Point& rPt, const Size& rSz, 845*b1cdbd2cSJim Jagielski const GfxLink& rGfxLink, GDIMetaFile* pSubst = NULL ); 846*b1cdbd2cSJim Jagielski 847*b1cdbd2cSJim Jagielski /// Fill the given rectangle with checkered rectangles of size nLen x nLen using the colors aStart and aEnd 848*b1cdbd2cSJim Jagielski void DrawCheckered( 849*b1cdbd2cSJim Jagielski const Point& rPos, 850*b1cdbd2cSJim Jagielski const Size& rSize, 851*b1cdbd2cSJim Jagielski sal_uInt32 nLen = 8, 852*b1cdbd2cSJim Jagielski Color aStart = Color(COL_WHITE), 853*b1cdbd2cSJim Jagielski Color aEnd = Color(COL_BLACK)); 854*b1cdbd2cSJim Jagielski 855*b1cdbd2cSJim Jagielski Color GetPixel( const Point& rPt ) const; 856*b1cdbd2cSJim Jagielski Color* GetPixel( const Polygon& rPts ) const; 857*b1cdbd2cSJim Jagielski 858*b1cdbd2cSJim Jagielski Bitmap GetBitmap( const Point& rSrcPt, const Size& rSize ) const; 859*b1cdbd2cSJim Jagielski 860*b1cdbd2cSJim Jagielski /** Query extended bitmap (with alpha channel, if available). 861*b1cdbd2cSJim Jagielski */ 862*b1cdbd2cSJim Jagielski BitmapEx GetBitmapEx( const Point& rSrcPt, const Size& rSize ) const; 863*b1cdbd2cSJim Jagielski 864*b1cdbd2cSJim Jagielski void EnableMapMode( sal_Bool bEnable = sal_True ); IsMapModeEnabled() const865*b1cdbd2cSJim Jagielski sal_Bool IsMapModeEnabled() const { return mbMap; } 866*b1cdbd2cSJim Jagielski 867*b1cdbd2cSJim Jagielski // Enabling/disabling RTL only makes sense for OutputDevices that use a mirroring SalGraphisLayout 868*b1cdbd2cSJim Jagielski void EnableRTL( sal_Bool bEnable = sal_True); IsRTLEnabled() const869*b1cdbd2cSJim Jagielski sal_Bool IsRTLEnabled() const { return mbEnableRTL; } 870*b1cdbd2cSJim Jagielski 871*b1cdbd2cSJim Jagielski void SetConnectMetaFile( GDIMetaFile* pMtf ); GetConnectMetaFile() const872*b1cdbd2cSJim Jagielski GDIMetaFile* GetConnectMetaFile() const { return mpMetaFile; } 873*b1cdbd2cSJim Jagielski 874*b1cdbd2cSJim Jagielski void EnableOutput( sal_Bool bEnable = sal_True ); IsOutputEnabled() const875*b1cdbd2cSJim Jagielski sal_Bool IsOutputEnabled() const { return mbOutput; } IsDeviceOutput() const876*b1cdbd2cSJim Jagielski sal_Bool IsDeviceOutput() const { return mbDevOutput; } IsDeviceOutputNecessary() const877*b1cdbd2cSJim Jagielski sal_Bool IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); } IsOutputNecessary() const878*b1cdbd2cSJim Jagielski sal_Bool IsOutputNecessary() const { return ((mbOutput && mbDevOutput) || (mpMetaFile != NULL)); } 879*b1cdbd2cSJim Jagielski 880*b1cdbd2cSJim Jagielski void SetClipRegion(); 881*b1cdbd2cSJim Jagielski void SetClipRegion( const Region& rRegion ); 882*b1cdbd2cSJim Jagielski Region GetClipRegion() const; IsClipRegion() const883*b1cdbd2cSJim Jagielski sal_Bool IsClipRegion() const { return mbClipRegion; } 884*b1cdbd2cSJim Jagielski Region GetActiveClipRegion() const; 885*b1cdbd2cSJim Jagielski 886*b1cdbd2cSJim Jagielski void MoveClipRegion( long nHorzMove, long nVertMove ); 887*b1cdbd2cSJim Jagielski void IntersectClipRegion( const Rectangle& rRect ); 888*b1cdbd2cSJim Jagielski void IntersectClipRegion( const Region& rRegion ); 889*b1cdbd2cSJim Jagielski 890*b1cdbd2cSJim Jagielski void SetAntialiasing( sal_uInt16 nMode = 0 ); GetAntialiasing() const891*b1cdbd2cSJim Jagielski sal_uInt16 GetAntialiasing() const { return mnAntialiasing; } 892*b1cdbd2cSJim Jagielski 893*b1cdbd2cSJim Jagielski void SetDrawMode( sal_uLong nDrawMode ); GetDrawMode() const894*b1cdbd2cSJim Jagielski sal_uLong GetDrawMode() const { return mnDrawMode; } 895*b1cdbd2cSJim Jagielski 896*b1cdbd2cSJim Jagielski void SetLayoutMode( sal_uLong nTextLayoutMode ); GetLayoutMode() const897*b1cdbd2cSJim Jagielski sal_uLong GetLayoutMode() const { return mnTextLayoutMode; } 898*b1cdbd2cSJim Jagielski 899*b1cdbd2cSJim Jagielski void SetDigitLanguage( LanguageType ); GetDigitLanguage() const900*b1cdbd2cSJim Jagielski LanguageType GetDigitLanguage() const { return meTextLanguage; } 901*b1cdbd2cSJim Jagielski 902*b1cdbd2cSJim Jagielski void SetRasterOp( RasterOp eRasterOp ); GetRasterOp() const903*b1cdbd2cSJim Jagielski RasterOp GetRasterOp() const { return meRasterOp; } 904*b1cdbd2cSJim Jagielski 905*b1cdbd2cSJim Jagielski /** 906*b1cdbd2cSJim Jagielski If this OutputDevice is used for displaying a Print Preview 907*b1cdbd2cSJim Jagielski the OutDevViewType should be set to 'OUTDEV_VIEWTYPE_PRINTPREVIEW'. 908*b1cdbd2cSJim Jagielski 909*b1cdbd2cSJim Jagielski A View than can make painting decisions dependent on this OutDevViewType. 910*b1cdbd2cSJim Jagielski E.g. text colors need to be handled different, dependent on wether it's a PrintPreview or not. (see #106611# for more) 911*b1cdbd2cSJim Jagielski */ SetOutDevViewType(OutDevViewType eOutDevViewType)912*b1cdbd2cSJim Jagielski void SetOutDevViewType( OutDevViewType eOutDevViewType ) { meOutDevViewType=eOutDevViewType; } GetOutDevViewType() const913*b1cdbd2cSJim Jagielski OutDevViewType GetOutDevViewType() const { return meOutDevViewType; } 914*b1cdbd2cSJim Jagielski 915*b1cdbd2cSJim Jagielski void SetLineColor(); 916*b1cdbd2cSJim Jagielski void SetLineColor( const Color& rColor ); GetLineColor() const917*b1cdbd2cSJim Jagielski const Color& GetLineColor() const { return maLineColor; } IsLineColor() const918*b1cdbd2cSJim Jagielski sal_Bool IsLineColor() const { return mbLineColor; } 919*b1cdbd2cSJim Jagielski 920*b1cdbd2cSJim Jagielski void SetFillColor(); 921*b1cdbd2cSJim Jagielski void SetFillColor( const Color& rColor ); GetFillColor() const922*b1cdbd2cSJim Jagielski const Color& GetFillColor() const { return maFillColor; } IsFillColor() const923*b1cdbd2cSJim Jagielski sal_Bool IsFillColor() const { return mbFillColor; } 924*b1cdbd2cSJim Jagielski 925*b1cdbd2cSJim Jagielski void SetBackground(); 926*b1cdbd2cSJim Jagielski void SetBackground( const Wallpaper& rBackground ); 927*b1cdbd2cSJim Jagielski GetBackground() const928*b1cdbd2cSJim Jagielski const Wallpaper& GetBackground() const { return maBackground; } IsBackground() const929*b1cdbd2cSJim Jagielski sal_Bool IsBackground() const { return mbBackground; } 930*b1cdbd2cSJim Jagielski 931*b1cdbd2cSJim Jagielski void SetFont( const Font& rNewFont ); GetFont() const932*b1cdbd2cSJim Jagielski const Font& GetFont() const { return maFont; } 933*b1cdbd2cSJim Jagielski 934*b1cdbd2cSJim Jagielski SystemFontData GetSysFontData( int nFallbacklevel ) const; 935*b1cdbd2cSJim Jagielski SystemTextLayoutData GetSysTextLayoutData( const Point& rStartPt, const XubString& rStr, 936*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN, 937*b1cdbd2cSJim Jagielski const sal_Int32* pDXAry = NULL ) const; 938*b1cdbd2cSJim Jagielski 939*b1cdbd2cSJim Jagielski void SetTextColor( const Color& rColor ); GetTextColor() const940*b1cdbd2cSJim Jagielski const Color& GetTextColor() const { return maTextColor; } 941*b1cdbd2cSJim Jagielski void SetTextFillColor(); 942*b1cdbd2cSJim Jagielski void SetTextFillColor( const Color& rColor ); 943*b1cdbd2cSJim Jagielski 944*b1cdbd2cSJim Jagielski Color GetTextFillColor() const; IsTextFillColor() const945*b1cdbd2cSJim Jagielski sal_Bool IsTextFillColor() const { return !maFont.IsTransparent(); } 946*b1cdbd2cSJim Jagielski void SetTextLineColor(); 947*b1cdbd2cSJim Jagielski void SetTextLineColor( const Color& rColor ); GetTextLineColor() const948*b1cdbd2cSJim Jagielski const Color& GetTextLineColor() const { return maTextLineColor; } IsTextLineColor() const949*b1cdbd2cSJim Jagielski sal_Bool IsTextLineColor() const { return (maTextLineColor.GetTransparency() == 0); } 950*b1cdbd2cSJim Jagielski void SetOverlineColor(); 951*b1cdbd2cSJim Jagielski void SetOverlineColor( const Color& rColor ); GetOverlineColor() const952*b1cdbd2cSJim Jagielski const Color& GetOverlineColor() const { return maOverlineColor; } IsOverlineColor() const953*b1cdbd2cSJim Jagielski sal_Bool IsOverlineColor() const { return (maOverlineColor.GetTransparency() == 0); } 954*b1cdbd2cSJim Jagielski void SetTextAlign( TextAlign eAlign ); GetTextAlign() const955*b1cdbd2cSJim Jagielski TextAlign GetTextAlign() const { return maFont.GetAlign(); } 956*b1cdbd2cSJim Jagielski 957*b1cdbd2cSJim Jagielski virtual void SetSettings( const AllSettings& rSettings ); GetSettings() const958*b1cdbd2cSJim Jagielski const AllSettings& GetSettings() const { return maSettings; } 959*b1cdbd2cSJim Jagielski 960*b1cdbd2cSJim Jagielski SystemGraphicsData GetSystemGfxData() const; 961*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any GetSystemGfxDataAny() const; 962*b1cdbd2cSJim Jagielski 963*b1cdbd2cSJim Jagielski virtual void SetMapMode(); 964*b1cdbd2cSJim Jagielski virtual void SetMapMode( const MapMode& rNewMapMode ); 965*b1cdbd2cSJim Jagielski virtual void SetRelativeMapMode( const MapMode& rNewMapMode ); GetMapMode() const966*b1cdbd2cSJim Jagielski const MapMode& GetMapMode() const { return maMapMode; } IsMapMode() const967*b1cdbd2cSJim Jagielski sal_Bool IsMapMode() const { return mbMap; } 968*b1cdbd2cSJim Jagielski 969*b1cdbd2cSJim Jagielski void SetRefPoint(); 970*b1cdbd2cSJim Jagielski void SetRefPoint( const Point& rRefPoint ); GetRefPoint() const971*b1cdbd2cSJim Jagielski const Point& GetRefPoint() const { return maRefPoint; } IsRefPoint() const972*b1cdbd2cSJim Jagielski sal_Bool IsRefPoint() const { return mbRefPoint; } 973*b1cdbd2cSJim Jagielski 974*b1cdbd2cSJim Jagielski // #i75163# 975*b1cdbd2cSJim Jagielski basegfx::B2DHomMatrix GetViewTransformation() const; 976*b1cdbd2cSJim Jagielski basegfx::B2DHomMatrix GetInverseViewTransformation() const; 977*b1cdbd2cSJim Jagielski 978*b1cdbd2cSJim Jagielski basegfx::B2DHomMatrix GetViewTransformation( const MapMode& rMapMode ) const; 979*b1cdbd2cSJim Jagielski basegfx::B2DHomMatrix GetInverseViewTransformation( const MapMode& rMapMode ) const; 980*b1cdbd2cSJim Jagielski 981*b1cdbd2cSJim Jagielski 982*b1cdbd2cSJim Jagielski /** Set an offset in pixel 983*b1cdbd2cSJim Jagielski 984*b1cdbd2cSJim Jagielski This method offsets every drawing operation that converts its 985*b1cdbd2cSJim Jagielski coordinates to pixel by the given value. Normally, the effect 986*b1cdbd2cSJim Jagielski can be achieved by setting a MapMode with a different 987*b1cdbd2cSJim Jagielski origin. Unfortunately, this origin is in logical coordinates 988*b1cdbd2cSJim Jagielski and can lead to rounding errors (see #102532# for details). 989*b1cdbd2cSJim Jagielski 990*b1cdbd2cSJim Jagielski @attention This offset is only applied when converting to 991*b1cdbd2cSJim Jagielski pixel, i.e. some output modes such as metafile recordings 992*b1cdbd2cSJim Jagielski might be completely unaffected by this method! Use with 993*b1cdbd2cSJim Jagielski care. Furthermore, if the OutputDevice's MapMode is the 994*b1cdbd2cSJim Jagielski default (that's MAP_PIXEL), then, too, any pixel offset set is 995*b1cdbd2cSJim Jagielski ignored. This might be unintuitive for cases, but would have 996*b1cdbd2cSJim Jagielski been far more fragile to implement. What's more, the reason 997*b1cdbd2cSJim Jagielski why the pixel offset was introduced (avoiding rounding errors) 998*b1cdbd2cSJim Jagielski does not apply for MAP_PIXEL, because one can always use the 999*b1cdbd2cSJim Jagielski MapMode origin then. 1000*b1cdbd2cSJim Jagielski 1001*b1cdbd2cSJim Jagielski @param rOffset 1002*b1cdbd2cSJim Jagielski The offset in pixel 1003*b1cdbd2cSJim Jagielski */ 1004*b1cdbd2cSJim Jagielski void SetPixelOffset( const Size& rOffset ); 1005*b1cdbd2cSJim Jagielski 1006*b1cdbd2cSJim Jagielski /** Get the offset in pixel 1007*b1cdbd2cSJim Jagielski 1008*b1cdbd2cSJim Jagielski @see OutputDevice::SetPixelOffset for details 1009*b1cdbd2cSJim Jagielski 1010*b1cdbd2cSJim Jagielski @return the current offset in pixel 1011*b1cdbd2cSJim Jagielski */ 1012*b1cdbd2cSJim Jagielski Size GetPixelOffset() const; 1013*b1cdbd2cSJim Jagielski 1014*b1cdbd2cSJim Jagielski Point LogicToPixel( const Point& rLogicPt ) const; 1015*b1cdbd2cSJim Jagielski Size LogicToPixel( const Size& rLogicSize ) const; 1016*b1cdbd2cSJim Jagielski Rectangle LogicToPixel( const Rectangle& rLogicRect ) const; 1017*b1cdbd2cSJim Jagielski Polygon LogicToPixel( const Polygon& rLogicPoly ) const; 1018*b1cdbd2cSJim Jagielski basegfx::B2DPolygon LogicToPixel( const basegfx::B2DPolygon& rLogicPolyPoly ) const; 1019*b1cdbd2cSJim Jagielski PolyPolygon LogicToPixel( const PolyPolygon& rLogicPolyPoly ) const; 1020*b1cdbd2cSJim Jagielski basegfx::B2DPolyPolygon LogicToPixel( const basegfx::B2DPolyPolygon& rLogicPolyPoly ) const; 1021*b1cdbd2cSJim Jagielski Region LogicToPixel( const Region& rLogicRegion )const; 1022*b1cdbd2cSJim Jagielski Point LogicToPixel( const Point& rLogicPt, 1023*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1024*b1cdbd2cSJim Jagielski Size LogicToPixel( const Size& rLogicSize, 1025*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1026*b1cdbd2cSJim Jagielski Rectangle LogicToPixel( const Rectangle& rLogicRect, 1027*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1028*b1cdbd2cSJim Jagielski Polygon LogicToPixel( const Polygon& rLogicPoly, 1029*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1030*b1cdbd2cSJim Jagielski basegfx::B2DPolygon LogicToPixel( const basegfx::B2DPolygon& rLogicPoly, 1031*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1032*b1cdbd2cSJim Jagielski PolyPolygon LogicToPixel( const PolyPolygon& rLogicPolyPoly, 1033*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1034*b1cdbd2cSJim Jagielski basegfx::B2DPolyPolygon LogicToPixel( const basegfx::B2DPolyPolygon& rLogicPolyPoly, 1035*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1036*b1cdbd2cSJim Jagielski Region LogicToPixel( const Region& rLogicRegion, 1037*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1038*b1cdbd2cSJim Jagielski Point PixelToLogic( const Point& rDevicePt ) const; 1039*b1cdbd2cSJim Jagielski Size PixelToLogic( const Size& rDeviceSize ) const; 1040*b1cdbd2cSJim Jagielski Rectangle PixelToLogic( const Rectangle& rDeviceRect ) const; 1041*b1cdbd2cSJim Jagielski Polygon PixelToLogic( const Polygon& rDevicePoly ) const; 1042*b1cdbd2cSJim Jagielski basegfx::B2DPolygon PixelToLogic( const basegfx::B2DPolygon& rDevicePoly ) const; 1043*b1cdbd2cSJim Jagielski PolyPolygon PixelToLogic( const PolyPolygon& rDevicePolyPoly ) const; 1044*b1cdbd2cSJim Jagielski basegfx::B2DPolyPolygon PixelToLogic( const basegfx::B2DPolyPolygon& rDevicePolyPoly ) const; 1045*b1cdbd2cSJim Jagielski Region PixelToLogic( const Region& rDeviceRegion ) const; 1046*b1cdbd2cSJim Jagielski Point PixelToLogic( const Point& rDevicePt, 1047*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1048*b1cdbd2cSJim Jagielski Size PixelToLogic( const Size& rDeviceSize, 1049*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1050*b1cdbd2cSJim Jagielski Rectangle PixelToLogic( const Rectangle& rDeviceRect, 1051*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1052*b1cdbd2cSJim Jagielski Polygon PixelToLogic( const Polygon& rDevicePoly, 1053*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1054*b1cdbd2cSJim Jagielski basegfx::B2DPolygon PixelToLogic( const basegfx::B2DPolygon& rDevicePoly, 1055*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1056*b1cdbd2cSJim Jagielski PolyPolygon PixelToLogic( const PolyPolygon& rDevicePolyPoly, 1057*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1058*b1cdbd2cSJim Jagielski basegfx::B2DPolyPolygon PixelToLogic( const basegfx::B2DPolyPolygon& rDevicePolyPoly, 1059*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1060*b1cdbd2cSJim Jagielski Region PixelToLogic( const Region& rDeviceRegion, 1061*b1cdbd2cSJim Jagielski const MapMode& rMapMode ) const; 1062*b1cdbd2cSJim Jagielski 1063*b1cdbd2cSJim Jagielski Point LogicToLogic( const Point& rPtSource, 1064*b1cdbd2cSJim Jagielski const MapMode* pMapModeSource, 1065*b1cdbd2cSJim Jagielski const MapMode* pMapModeDest ) const; 1066*b1cdbd2cSJim Jagielski Size LogicToLogic( const Size& rSzSource, 1067*b1cdbd2cSJim Jagielski const MapMode* pMapModeSource, 1068*b1cdbd2cSJim Jagielski const MapMode* pMapModeDest ) const; 1069*b1cdbd2cSJim Jagielski Rectangle LogicToLogic( const Rectangle& rRectSource, 1070*b1cdbd2cSJim Jagielski const MapMode* pMapModeSource, 1071*b1cdbd2cSJim Jagielski const MapMode* pMapModeDest ) const; 1072*b1cdbd2cSJim Jagielski long* LogicToLogic( long* pX, 1073*b1cdbd2cSJim Jagielski sal_uInt16 nCount, 1074*b1cdbd2cSJim Jagielski const MapMode* pMapModeSource, 1075*b1cdbd2cSJim Jagielski const MapMode* pMapModeDest ) const; 1076*b1cdbd2cSJim Jagielski static Point LogicToLogic( const Point& rPtSource, 1077*b1cdbd2cSJim Jagielski const MapMode& rMapModeSource, 1078*b1cdbd2cSJim Jagielski const MapMode& rMapModeDest ); 1079*b1cdbd2cSJim Jagielski static Size LogicToLogic( const Size& rSzSource, 1080*b1cdbd2cSJim Jagielski const MapMode& rMapModeSource, 1081*b1cdbd2cSJim Jagielski const MapMode& rMapModeDest ); 1082*b1cdbd2cSJim Jagielski static Rectangle LogicToLogic( const Rectangle& rRectSource, 1083*b1cdbd2cSJim Jagielski const MapMode& rMapModeSource, 1084*b1cdbd2cSJim Jagielski const MapMode& rMapModeDest ); 1085*b1cdbd2cSJim Jagielski static long LogicToLogic( long nLongSource, 1086*b1cdbd2cSJim Jagielski MapUnit eUnitSource, 1087*b1cdbd2cSJim Jagielski MapUnit eUnitDest ); 1088*b1cdbd2cSJim Jagielski 1089*b1cdbd2cSJim Jagielski static basegfx::B2DPolygon LogicToLogic( const basegfx::B2DPolygon& rPoly, 1090*b1cdbd2cSJim Jagielski const MapMode& rMapModeSource, 1091*b1cdbd2cSJim Jagielski const MapMode& rMapModeDest ); 1092*b1cdbd2cSJim Jagielski static basegfx::B2DPolyPolygon LogicToLogic( const basegfx::B2DPolyPolygon& rPolyPoly, 1093*b1cdbd2cSJim Jagielski const MapMode& rMapModeSource, 1094*b1cdbd2cSJim Jagielski const MapMode& rMapModeDest ); 1095*b1cdbd2cSJim Jagielski 1096*b1cdbd2cSJim Jagielski // create a mapping transformation from rMapModeSource to rMapModeDest (the above methods 1097*b1cdbd2cSJim Jagielski // for B2DPoly/Polygons use this internally anyways to transform the B2DPolygon) 1098*b1cdbd2cSJim Jagielski static basegfx::B2DHomMatrix LogicToLogic(const MapMode& rMapModeSource, const MapMode& rMapModeDest); 1099*b1cdbd2cSJim Jagielski GetOutputSizePixel() const1100*b1cdbd2cSJim Jagielski Size GetOutputSizePixel() const 1101*b1cdbd2cSJim Jagielski { return Size( mnOutWidth, mnOutHeight ); } GetOutputWidthPixel() const1102*b1cdbd2cSJim Jagielski long GetOutputWidthPixel() const { return mnOutWidth; } GetOutputHeightPixel() const1103*b1cdbd2cSJim Jagielski long GetOutputHeightPixel() const { return mnOutHeight; } GetOutOffXPixel() const1104*b1cdbd2cSJim Jagielski long GetOutOffXPixel() const { return mnOutOffX; } GetOutOffYPixel() const1105*b1cdbd2cSJim Jagielski long GetOutOffYPixel() const { return mnOutOffY; } 1106*b1cdbd2cSJim Jagielski GetOutputSize() const1107*b1cdbd2cSJim Jagielski Size GetOutputSize() const 1108*b1cdbd2cSJim Jagielski { return PixelToLogic( GetOutputSizePixel() ); } 1109*b1cdbd2cSJim Jagielski 1110*b1cdbd2cSJim Jagielski void Erase(); Erase(const Rectangle & rRect)1111*b1cdbd2cSJim Jagielski void Erase( const Rectangle& rRect ) { DrawWallpaper( rRect, GetBackground() ); } 1112*b1cdbd2cSJim Jagielski 1113*b1cdbd2cSJim Jagielski sal_Bool AddTempDevFont( const String& rFileURL, const String& rFontName ); 1114*b1cdbd2cSJim Jagielski int GetDevFontCount() const; 1115*b1cdbd2cSJim Jagielski FontInfo GetDevFont( int nDevFontIndex ) const; 1116*b1cdbd2cSJim Jagielski int GetDevFontSizeCount( const Font& ) const; 1117*b1cdbd2cSJim Jagielski Size GetDevFontSize( const Font& rFont, int nSizeIndex ) const; 1118*b1cdbd2cSJim Jagielski sal_Bool IsFontAvailable( const String& rFontName ) const; 1119*b1cdbd2cSJim Jagielski 1120*b1cdbd2cSJim Jagielski FontMetric GetFontMetric() const; 1121*b1cdbd2cSJim Jagielski FontMetric GetFontMetric( const Font& rFont ) const; 1122*b1cdbd2cSJim Jagielski sal_Bool GetFontCharMap( FontCharMap& rFontCharMap ) const; 1123*b1cdbd2cSJim Jagielski 1124*b1cdbd2cSJim Jagielski xub_StrLen HasGlyphs( const Font& rFont, const String& rStr, 1125*b1cdbd2cSJim Jagielski xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN ) const; 1126*b1cdbd2cSJim Jagielski 1127*b1cdbd2cSJim Jagielski long GetMinKashida() const; 1128*b1cdbd2cSJim Jagielski long GetMinKashida( const Font& rFont ) const; 1129*b1cdbd2cSJim Jagielski 1130*b1cdbd2cSJim Jagielski // i60594 1131*b1cdbd2cSJim Jagielski // validate kashida positions against the current font 1132*b1cdbd2cSJim Jagielski // returns count of invalid kashida positions 1133*b1cdbd2cSJim Jagielski xub_StrLen ValidateKashidas ( const String& rTxt, 1134*b1cdbd2cSJim Jagielski xub_StrLen nIdx, xub_StrLen nLen, 1135*b1cdbd2cSJim Jagielski xub_StrLen nKashCount, // number of suggested kashida positions (in) 1136*b1cdbd2cSJim Jagielski const xub_StrLen* pKashidaPos, // suggested kashida positions (in) 1137*b1cdbd2cSJim Jagielski xub_StrLen* pKashidaPosDropped // invalid kashida positions (out) 1138*b1cdbd2cSJim Jagielski ) const; 1139*b1cdbd2cSJim Jagielski 1140*b1cdbd2cSJim Jagielski sal_uInt16 GetBitCount() const; 1141*b1cdbd2cSJim Jagielski 1142*b1cdbd2cSJim Jagielski sal_Bool GetTextIsRTL( const String&, xub_StrLen nIndex, 1143*b1cdbd2cSJim Jagielski xub_StrLen nLen ) const; 1144*b1cdbd2cSJim Jagielski 1145*b1cdbd2cSJim Jagielski /** Query the existence and depth of the alpha channel 1146*b1cdbd2cSJim Jagielski 1147*b1cdbd2cSJim Jagielski @return 0, if no alpha channel available, and the bit depth of 1148*b1cdbd2cSJim Jagielski the alpha channel otherwise. 1149*b1cdbd2cSJim Jagielski */ 1150*b1cdbd2cSJim Jagielski sal_uInt16 GetAlphaBitCount() const; 1151*b1cdbd2cSJim Jagielski sal_uLong GetColorCount() const; 1152*b1cdbd2cSJim Jagielski 1153*b1cdbd2cSJim Jagielski void Push( sal_uInt16 nFlags = PUSH_ALL ); 1154*b1cdbd2cSJim Jagielski void Pop(); 1155*b1cdbd2cSJim Jagielski // returns the curren stack depth; that is the number of Push() calls minus the number of Pop() calls 1156*b1cdbd2cSJim Jagielski // this should not normally be used since Push and Pop must always be used symmetrically 1157*b1cdbd2cSJim Jagielski // however this may be e.g. a help when debugging code in which this somehow is not the case 1158*b1cdbd2cSJim Jagielski sal_uInt32 GetGCStackDepth() const; 1159*b1cdbd2cSJim Jagielski 1160*b1cdbd2cSJim Jagielski /** Query availability of alpha channel 1161*b1cdbd2cSJim Jagielski 1162*b1cdbd2cSJim Jagielski @return sal_True, if this device has an alpha channel. 1163*b1cdbd2cSJim Jagielski */ 1164*b1cdbd2cSJim Jagielski sal_Bool HasAlpha(); 1165*b1cdbd2cSJim Jagielski 1166*b1cdbd2cSJim Jagielski /// request XCanvas render interface for this OutputDevice 1167*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 1168*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XCanvas > GetCanvas() const; 1169*b1cdbd2cSJim Jagielski 1170*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > CreateUnoGraphics(); GetUnoGraphicsList() const1171*b1cdbd2cSJim Jagielski List* GetUnoGraphicsList() const { return mpUnoGraphicsList; } CreateUnoGraphicsList()1172*b1cdbd2cSJim Jagielski List* CreateUnoGraphicsList() { mpUnoGraphicsList = new List; return mpUnoGraphicsList; } 1173*b1cdbd2cSJim Jagielski 1174*b1cdbd2cSJim Jagielski static void BeginFontSubstitution(); 1175*b1cdbd2cSJim Jagielski static void EndFontSubstitution(); 1176*b1cdbd2cSJim Jagielski static void AddFontSubstitute( const XubString& rFontName, 1177*b1cdbd2cSJim Jagielski const XubString& rReplaceFontName, 1178*b1cdbd2cSJim Jagielski sal_uInt16 nFlags = 0 ); 1179*b1cdbd2cSJim Jagielski static void RemoveFontSubstitute( sal_uInt16 n ); 1180*b1cdbd2cSJim Jagielski static sal_uInt16 GetFontSubstituteCount(); 1181*b1cdbd2cSJim Jagielski static void GetFontSubstitute( sal_uInt16 n, 1182*b1cdbd2cSJim Jagielski XubString& rFontName, 1183*b1cdbd2cSJim Jagielski XubString& rReplaceFontName, 1184*b1cdbd2cSJim Jagielski sal_uInt16& rFlags ); 1185*b1cdbd2cSJim Jagielski 1186*b1cdbd2cSJim Jagielski static Font GetDefaultFont( sal_uInt16 nType, 1187*b1cdbd2cSJim Jagielski LanguageType eLang, 1188*b1cdbd2cSJim Jagielski sal_uLong nFlags, 1189*b1cdbd2cSJim Jagielski const OutputDevice* pOutDev = NULL ); 1190*b1cdbd2cSJim Jagielski 1191*b1cdbd2cSJim Jagielski /** helper method removing transparencies from a metafile (e.g. for printing) 1192*b1cdbd2cSJim Jagielski 1193*b1cdbd2cSJim Jagielski @returns 1194*b1cdbd2cSJim Jagielski true: transparencies were removed 1195*b1cdbd2cSJim Jagielski false: output metafile is unchanged input metafile 1196*b1cdbd2cSJim Jagielski 1197*b1cdbd2cSJim Jagielski @attention this is a member method, so current state can influence the result ! 1198*b1cdbd2cSJim Jagielski @attention the output metafile is prepared in pixel mode for the currentOutputDevice 1199*b1cdbd2cSJim Jagielski state. It can not be moved or rotated reliably anymore. 1200*b1cdbd2cSJim Jagielski */ 1201*b1cdbd2cSJim Jagielski bool RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, GDIMetaFile& rOutMtf, 1202*b1cdbd2cSJim Jagielski long nMaxBmpDPIX, long nMaxBmpDPIY, 1203*b1cdbd2cSJim Jagielski bool bReduceTransparency, 1204*b1cdbd2cSJim Jagielski bool bTransparencyAutoMode, 1205*b1cdbd2cSJim Jagielski bool bDownsampleBitmaps, 1206*b1cdbd2cSJim Jagielski const Color& rBackground = Color( COL_TRANSPARENT ) 1207*b1cdbd2cSJim Jagielski ); 1208*b1cdbd2cSJim Jagielski /** Retrieve downsampled and cropped bitmap 1209*b1cdbd2cSJim Jagielski 1210*b1cdbd2cSJim Jagielski @attention This method ignores negative rDstSz values, thus 1211*b1cdbd2cSJim Jagielski mirroring must happen outside this method (e.g. in DrawBitmap) 1212*b1cdbd2cSJim Jagielski */ 1213*b1cdbd2cSJim Jagielski Bitmap GetDownsampledBitmap( const Size& rDstSz, 1214*b1cdbd2cSJim Jagielski const Point& rSrcPt, const Size& rSrcSz, 1215*b1cdbd2cSJim Jagielski const Bitmap& rBmp, long nMaxBmpDPIX, long nMaxBmpDPIY ); 1216*b1cdbd2cSJim Jagielski /** Retrieve downsampled and cropped bitmapEx 1217*b1cdbd2cSJim Jagielski 1218*b1cdbd2cSJim Jagielski @attention This method ignores negative rDstSz values, thus 1219*b1cdbd2cSJim Jagielski mirroring must happen outside this method (e.g. in DrawBitmapEx) 1220*b1cdbd2cSJim Jagielski */ 1221*b1cdbd2cSJim Jagielski BitmapEx GetDownsampledBitmapEx( const Size& rDstSz, 1222*b1cdbd2cSJim Jagielski const Point& rSrcPt, const Size& rSrcSz, 1223*b1cdbd2cSJim Jagielski const BitmapEx& rBmpEx, long nMaxBmpDPIX, long nMaxBmpDPIY ); 1224*b1cdbd2cSJim Jagielski 1225*b1cdbd2cSJim Jagielski //------------------------------------- 1226*b1cdbd2cSJim Jagielski // Native Widget Rendering functions 1227*b1cdbd2cSJim Jagielski //------------------------------------- 1228*b1cdbd2cSJim Jagielski 1229*b1cdbd2cSJim Jagielski // These all just call through to the private mpGraphics functions of the same name. 1230*b1cdbd2cSJim Jagielski 1231*b1cdbd2cSJim Jagielski // Query the platform layer for control support 1232*b1cdbd2cSJim Jagielski sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart ); 1233*b1cdbd2cSJim Jagielski 1234*b1cdbd2cSJim Jagielski // Query the native control to determine if it was acted upon 1235*b1cdbd2cSJim Jagielski sal_Bool HitTestNativeControl( ControlType nType, 1236*b1cdbd2cSJim Jagielski ControlPart nPart, 1237*b1cdbd2cSJim Jagielski const Rectangle& rControlRegion, 1238*b1cdbd2cSJim Jagielski const Point& aPos, 1239*b1cdbd2cSJim Jagielski sal_Bool& rIsInside ); 1240*b1cdbd2cSJim Jagielski 1241*b1cdbd2cSJim Jagielski // Request rendering of a particular control and/or part 1242*b1cdbd2cSJim Jagielski sal_Bool DrawNativeControl( ControlType nType, 1243*b1cdbd2cSJim Jagielski ControlPart nPart, 1244*b1cdbd2cSJim Jagielski const Rectangle& rControlRegion, 1245*b1cdbd2cSJim Jagielski ControlState nState, 1246*b1cdbd2cSJim Jagielski const ImplControlValue& aValue, 1247*b1cdbd2cSJim Jagielski ::rtl::OUString aCaption ); 1248*b1cdbd2cSJim Jagielski 1249*b1cdbd2cSJim Jagielski // Request rendering of a caption string for a control 1250*b1cdbd2cSJim Jagielski sal_Bool DrawNativeControlText( ControlType nType, 1251*b1cdbd2cSJim Jagielski ControlPart nPart, 1252*b1cdbd2cSJim Jagielski const Rectangle& rControlRegion, 1253*b1cdbd2cSJim Jagielski ControlState nState, 1254*b1cdbd2cSJim Jagielski const ImplControlValue& aValue, 1255*b1cdbd2cSJim Jagielski ::rtl::OUString aCaption ); 1256*b1cdbd2cSJim Jagielski 1257*b1cdbd2cSJim Jagielski // Query the native control's actual drawing region (including adornment) 1258*b1cdbd2cSJim Jagielski sal_Bool GetNativeControlRegion( ControlType nType, 1259*b1cdbd2cSJim Jagielski ControlPart nPart, 1260*b1cdbd2cSJim Jagielski const Rectangle& rControlRegion, 1261*b1cdbd2cSJim Jagielski ControlState nState, 1262*b1cdbd2cSJim Jagielski const ImplControlValue& aValue, 1263*b1cdbd2cSJim Jagielski ::rtl::OUString aCaption, 1264*b1cdbd2cSJim Jagielski Rectangle &rNativeBoundingRegion, 1265*b1cdbd2cSJim Jagielski Rectangle &rNativeContentRegion ); 1266*b1cdbd2cSJim Jagielski 1267*b1cdbd2cSJim Jagielski }; 1268*b1cdbd2cSJim Jagielski 1269*b1cdbd2cSJim Jagielski #endif // _SV_OUTDEV_HXX 1270