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 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 27 // include --------------------------------------------------------------- 28 29 #include <svx/paraprev.hxx> 30 31 // STATIC DATA ----------------------------------------------------------- 32 33 #define FOUR_POINTS 80 34 35 // class SvxParaPrevWindow ----------------------------------------------- 36 37 SvxParaPrevWindow::SvxParaPrevWindow( Window* pParent, const ResId& rId ) : 38 39 Window( pParent, rId ), 40 41 nLeftMargin ( 0 ), 42 nRightMargin ( 0 ), 43 nFirstLineOfst ( 0 ), 44 nUpper ( 0 ), 45 nLower ( 0 ), 46 eAdjust ( SVX_ADJUST_LEFT ), 47 eLastLine ( SVX_ADJUST_LEFT ), 48 eLine ( SVX_PREV_LINESPACE_1 ), 49 nLineVal ( 0 ) 50 51 { 52 // defaultmaessing in Twips rechnen 53 SetMapMode( MapMode( MAP_TWIP ) ); 54 aWinSize = GetOutputSizePixel(); 55 aWinSize = PixelToLogic( aWinSize ); 56 Size aTmp(1, 1); 57 aTmp = PixelToLogic(aTmp); 58 aWinSize.Width() -= aTmp.Width() /2; 59 aWinSize.Height() -= aTmp.Height() /2; 60 61 aSize = Size( 11905, 16837 ); 62 63 SetBorderStyle( WINDOW_BORDER_MONO ); 64 } 65 66 // ----------------------------------------------------------------------- 67 68 void SvxParaPrevWindow::Paint( const Rectangle& ) 69 { 70 DrawParagraph( sal_True ); 71 } 72 73 // ----------------------------------------------------------------------- 74 75 #define DEF_MARGIN 120 76 77 void SvxParaPrevWindow::DrawParagraph( sal_Bool bAll ) 78 { 79 const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 80 const Color& rWinColor = rStyleSettings.GetWindowColor(); 81 Color aGrayColor(COL_LIGHTGRAY); 82 83 SetFillColor( Color( rWinColor ) ); 84 if( bAll ) 85 DrawRect( Rectangle( Point(), aWinSize ) ); 86 87 SetLineColor(); 88 89 long nH = aWinSize.Height() / 19; 90 Size aLineSiz( aWinSize.Width() - DEF_MARGIN, nH ), 91 aSiz = aLineSiz; 92 Point aPnt; 93 aPnt.X() = DEF_MARGIN / 2; 94 SetFillColor( aGrayColor ); 95 96 for ( sal_uInt16 i = 0; i < 9; ++i ) 97 { 98 if ( 3 == i ) 99 { 100 SetFillColor( Color( COL_GRAY ) ); 101 long nTop = nUpper * aLineSiz.Height() / aSize.Height(); 102 aPnt.Y() += nTop * 2; 103 } 104 105 if ( 6 == i ) 106 SetFillColor( aGrayColor ); 107 108 if ( 3 <= i && 6 > i ) 109 { 110 long nLeft = nLeftMargin * aLineSiz.Width() / aSize.Width(); 111 long nFirst = nFirstLineOfst * aLineSiz.Width() / aSize.Width(); 112 long nTmp = nLeft + nFirst; 113 114 if ( 3 == i ) 115 { 116 aPnt.X() += nTmp; 117 aSiz.Width() -= nTmp; 118 } 119 else 120 { 121 aPnt.X() += nLeft; 122 aSiz.Width() -= nLeft; 123 } 124 long nRight = nRightMargin * aLineSiz.Width() / aSize.Width(); 125 aSiz.Width() -= nRight; 126 } 127 128 if ( 4 == i || 5 == i || 6 == i ) 129 { 130 switch ( eLine ) 131 { 132 case SVX_PREV_LINESPACE_1: break; 133 case SVX_PREV_LINESPACE_15: aPnt.Y() += nH / 2; break; 134 case SVX_PREV_LINESPACE_2: aPnt.Y() += nH; break; 135 136 case SVX_PREV_LINESPACE_PROP: 137 case SVX_PREV_LINESPACE_MIN: 138 case SVX_PREV_LINESPACE_DURCH: break; 139 } 140 } 141 142 aPnt.Y() += nH; 143 144 if ( (3 <= i) && (5 >= i) ) 145 { 146 long nLW; 147 switch( i ) 148 { 149 default: 150 case 3: nLW = aLineSiz.Width() * 8 / 10; break; 151 case 4: nLW = aLineSiz.Width() * 9 / 10; break; 152 case 5: nLW = aLineSiz.Width() / 2; break; 153 } 154 155 if ( nLW > aSiz.Width() ) 156 nLW = aSiz.Width(); 157 158 switch ( eAdjust ) 159 { 160 case SVX_ADJUST_LEFT: 161 break; 162 case SVX_ADJUST_RIGHT: 163 aPnt.X() += ( aSiz.Width() - nLW ); 164 break; 165 case SVX_ADJUST_CENTER: 166 aPnt.X() += ( aSiz.Width() - nLW ) / 2; 167 break; 168 default: ; //prevent warning 169 } 170 if( SVX_ADJUST_BLOCK == eAdjust ) 171 { 172 if( 5 == i ) 173 { 174 switch( eLastLine ) 175 { 176 case SVX_ADJUST_LEFT: 177 break; 178 case SVX_ADJUST_RIGHT: 179 aPnt.X() += ( aSiz.Width() - nLW ); 180 break; 181 case SVX_ADJUST_CENTER: 182 aPnt.X() += ( aSiz.Width() - nLW ) / 2; 183 break; 184 case SVX_ADJUST_BLOCK: 185 nLW = aSiz.Width(); 186 break; 187 default: ; //prevent warning 188 } 189 } 190 else 191 nLW = aSiz.Width(); 192 } 193 aSiz.Width() = nLW; 194 } 195 196 Rectangle aRect( aPnt, aSiz ); 197 198 if ( Lines[i] != aRect || bAll ) 199 { 200 if ( !bAll ) 201 { 202 Color aFillCol = GetFillColor(); 203 SetFillColor( rWinColor ); 204 DrawRect( Lines[i] ); 205 SetFillColor( aFillCol ); 206 } 207 DrawRect( aRect ); 208 Lines[i] = aRect; 209 } 210 211 if ( 5 == i ) 212 { 213 long nBottom = nLower * aLineSiz.Height() / aSize.Height(); 214 aPnt.Y() += nBottom * 2; 215 } 216 217 aPnt.Y() += nH; 218 // wieder zuruecksetzen, fuer jede Linie neu berechnen 219 aPnt.X() = DEF_MARGIN / 2; 220 aSiz = aLineSiz; 221 } 222 } 223 224 #undef DEF_MARGIN 225 226 // ----------------------------------------------------------------------- 227 228 void SvxParaPrevWindow::OutputSizeChanged() 229 { 230 aWinSize = GetOutputSizePixel(); 231 aWinSize = PixelToLogic( aWinSize ); 232 Invalidate(); 233 } 234 235