1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _TXTPAINT_HXX 24 #define _TXTPAINT_HXX 25 #include <vcl/outdev.hxx> 26 27 class SwRect; // SwSaveClip 28 #include <txtfrm.hxx> 29 30 /************************************************************************* 31 * class SwSaveClip 32 *************************************************************************/ 33 34 class SwSaveClip 35 { 36 Region aClip; 37 const sal_Bool bOn; 38 sal_Bool bChg; 39 protected: 40 OutputDevice* pOut; 41 void _ChgClip( const SwRect &rRect, const SwTxtFrm* pFrm, 42 sal_Bool bEnlargeRect ); 43 public: 44 inline SwSaveClip( OutputDevice* pOut ); 45 inline ~SwSaveClip(); 46 inline void ChgClip( const SwRect &rRect, const SwTxtFrm* pFrm = 0, 47 sal_Bool bEnlargeRect = sal_False) 48 { if( pOut ) _ChgClip( rRect, pFrm, bEnlargeRect ); } 49 void Reset(); 50 inline sal_Bool IsOn() const { return bOn; } 51 inline sal_Bool IsChg() const { return bChg; } 52 inline sal_Bool IsOut() const { return 0 != pOut; } 53 inline OutputDevice *GetOut() { return pOut; } 54 }; 55 56 inline SwSaveClip::SwSaveClip( OutputDevice* pOutDev ) : 57 bOn( pOutDev && pOutDev->IsClipRegion() ), 58 bChg( sal_False ), 59 pOut(pOutDev) 60 {} 61 62 inline SwSaveClip::~SwSaveClip() 63 { 64 Reset(); 65 } 66 67 #ifdef DBG_UTIL 68 69 /************************************************************************* 70 * class SwDbgOut 71 *************************************************************************/ 72 73 class SwDbgOut 74 { 75 protected: 76 OutputDevice* pOut; 77 public: 78 inline SwDbgOut( OutputDevice* pOutDev, const sal_Bool bOn = sal_True ); 79 }; 80 81 /************************************************************************* 82 * class DbgColor 83 *************************************************************************/ 84 85 class DbgColor 86 { 87 Font *pFnt; 88 Color aColor; 89 public: 90 inline DbgColor( Font *pFont, const sal_Bool bOn = sal_True, 91 const ColorData eColor = COL_BLUE ); 92 inline ~DbgColor(); 93 }; 94 95 /************************************************************************* 96 * class DbgBrush 97 *************************************************************************/ 98 99 class DbgBackColor : public SwDbgOut 100 { 101 Color aOldFillColor; 102 public: 103 DbgBackColor( OutputDevice* pOut, const sal_Bool bOn = sal_True, 104 ColorData nColor = COL_YELLOW ); 105 ~DbgBackColor(); 106 }; 107 108 /************************************************************************* 109 * class DbgRect 110 *************************************************************************/ 111 112 class DbgRect : public SwDbgOut 113 { 114 public: 115 DbgRect( OutputDevice* pOut, const Rectangle &rRect, 116 const sal_Bool bOn = sal_True, 117 ColorData eColor = COL_LIGHTBLUE ); 118 }; 119 120 /************************************************************************* 121 * Inline-Implementierung 122 *************************************************************************/ 123 124 inline SwDbgOut::SwDbgOut( OutputDevice* pOutDev, const sal_Bool bOn ) 125 :pOut( bOn ? pOutDev : 0 ) 126 { } 127 128 129 inline DbgColor::DbgColor( Font *pFont, const sal_Bool bOn, 130 const ColorData eColor ) 131 :pFnt( bOn ? pFont : 0 ) 132 { 133 if( pFnt ) 134 { 135 aColor = pFnt->GetColor(); 136 pFnt->SetColor( Color( eColor ) ); 137 } 138 } 139 140 inline DbgColor::~DbgColor() 141 { 142 if( pFnt ) 143 pFnt->SetColor( aColor ); 144 } 145 146 inline DbgBackColor::DbgBackColor( OutputDevice* pOutDev, const sal_Bool bOn, 147 ColorData eColor ) 148 :SwDbgOut( pOutDev, bOn ) 149 { 150 if( pOut ) 151 { 152 aOldFillColor = pOut->GetFillColor(); 153 pOut->SetFillColor( Color(eColor) ); 154 } 155 } 156 157 inline DbgBackColor::~DbgBackColor() 158 { 159 if( pOut ) 160 { 161 pOut->SetFillColor( aOldFillColor ); 162 } 163 } 164 165 inline DbgRect::DbgRect( OutputDevice* pOutDev, const Rectangle &rRect, 166 const sal_Bool bOn, 167 ColorData eColor ) 168 : SwDbgOut( pOutDev, bOn ) 169 { 170 if( pOut ) 171 { 172 const Color aColor( eColor ); 173 Color aLineColor = pOut->GetLineColor(); 174 pOut->SetLineColor( aColor ); 175 Color aFillColor = pOut->GetFillColor(); 176 pOut->SetFillColor( Color(COL_TRANSPARENT) ); 177 pOut->DrawRect( rRect ); 178 pOut->SetLineColor( aLineColor ); 179 pOut->SetFillColor( aFillColor ); 180 } 181 } 182 183 #endif 184 185 186 187 #endif 188