blob: f3d30082e1784ee9210528b9d9d9f6f08062181d [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
// include ---------------------------------------------------------------
#include <svx/paraprev.hxx>
// STATIC DATA -----------------------------------------------------------
#define FOUR_POINTS 80
// class SvxParaPrevWindow -----------------------------------------------
SvxParaPrevWindow::SvxParaPrevWindow( Window* pParent, const ResId& rId ) :
Window( pParent, rId ),
nLeftMargin ( 0 ),
nRightMargin ( 0 ),
nFirstLineOfst ( 0 ),
nUpper ( 0 ),
nLower ( 0 ),
eAdjust ( SVX_ADJUST_LEFT ),
eLastLine ( SVX_ADJUST_LEFT ),
eLine ( SVX_PREV_LINESPACE_1 ),
nLineVal ( 0 )
{
// defaultmaessing in Twips rechnen
SetMapMode( MapMode( MAP_TWIP ) );
aWinSize = GetOutputSizePixel();
aWinSize = PixelToLogic( aWinSize );
Size aTmp(1, 1);
aTmp = PixelToLogic(aTmp);
aWinSize.Width() -= aTmp.Width() /2;
aWinSize.Height() -= aTmp.Height() /2;
aSize = Size( 11905, 16837 );
SetBorderStyle( WINDOW_BORDER_MONO );
}
// -----------------------------------------------------------------------
void SvxParaPrevWindow::Paint( const Rectangle& )
{
DrawParagraph( sal_True );
}
// -----------------------------------------------------------------------
#define DEF_MARGIN 120
void SvxParaPrevWindow::DrawParagraph( sal_Bool bAll )
{
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
const Color& rWinColor = rStyleSettings.GetWindowColor();
Color aGrayColor(COL_LIGHTGRAY);
SetFillColor( Color( rWinColor ) );
if( bAll )
DrawRect( Rectangle( Point(), aWinSize ) );
SetLineColor();
long nH = aWinSize.Height() / 19;
Size aLineSiz( aWinSize.Width() - DEF_MARGIN, nH ),
aSiz = aLineSiz;
Point aPnt;
aPnt.X() = DEF_MARGIN / 2;
SetFillColor( aGrayColor );
for ( sal_uInt16 i = 0; i < 9; ++i )
{
if ( 3 == i )
{
SetFillColor( Color( COL_GRAY ) );
long nTop = nUpper * aLineSiz.Height() / aSize.Height();
aPnt.Y() += nTop * 2;
}
if ( 6 == i )
SetFillColor( aGrayColor );
if ( 3 <= i && 6 > i )
{
long nLeft = nLeftMargin * aLineSiz.Width() / aSize.Width();
long nFirst = nFirstLineOfst * aLineSiz.Width() / aSize.Width();
long nTmp = nLeft + nFirst;
if ( 3 == i )
{
aPnt.X() += nTmp;
aSiz.Width() -= nTmp;
}
else
{
aPnt.X() += nLeft;
aSiz.Width() -= nLeft;
}
long nRight = nRightMargin * aLineSiz.Width() / aSize.Width();
aSiz.Width() -= nRight;
}
if ( 4 == i || 5 == i || 6 == i )
{
switch ( eLine )
{
case SVX_PREV_LINESPACE_1: break;
case SVX_PREV_LINESPACE_15: aPnt.Y() += nH / 2; break;
case SVX_PREV_LINESPACE_2: aPnt.Y() += nH; break;
case SVX_PREV_LINESPACE_PROP:
case SVX_PREV_LINESPACE_MIN:
case SVX_PREV_LINESPACE_DURCH: break;
}
}
aPnt.Y() += nH;
if ( (3 <= i) && (5 >= i) )
{
long nLW;
switch( i )
{
default:
case 3: nLW = aLineSiz.Width() * 8 / 10; break;
case 4: nLW = aLineSiz.Width() * 9 / 10; break;
case 5: nLW = aLineSiz.Width() / 2; break;
}
if ( nLW > aSiz.Width() )
nLW = aSiz.Width();
switch ( eAdjust )
{
case SVX_ADJUST_LEFT:
break;
case SVX_ADJUST_RIGHT:
aPnt.X() += ( aSiz.Width() - nLW );
break;
case SVX_ADJUST_CENTER:
aPnt.X() += ( aSiz.Width() - nLW ) / 2;
break;
default: ; //prevent warning
}
if( SVX_ADJUST_BLOCK == eAdjust )
{
if( 5 == i )
{
switch( eLastLine )
{
case SVX_ADJUST_LEFT:
break;
case SVX_ADJUST_RIGHT:
aPnt.X() += ( aSiz.Width() - nLW );
break;
case SVX_ADJUST_CENTER:
aPnt.X() += ( aSiz.Width() - nLW ) / 2;
break;
case SVX_ADJUST_BLOCK:
nLW = aSiz.Width();
break;
default: ; //prevent warning
}
}
else
nLW = aSiz.Width();
}
aSiz.Width() = nLW;
}
Rectangle aRect( aPnt, aSiz );
if ( Lines[i] != aRect || bAll )
{
if ( !bAll )
{
Color aFillCol = GetFillColor();
SetFillColor( rWinColor );
DrawRect( Lines[i] );
SetFillColor( aFillCol );
}
DrawRect( aRect );
Lines[i] = aRect;
}
if ( 5 == i )
{
long nBottom = nLower * aLineSiz.Height() / aSize.Height();
aPnt.Y() += nBottom * 2;
}
aPnt.Y() += nH;
// wieder zuruecksetzen, fuer jede Linie neu berechnen
aPnt.X() = DEF_MARGIN / 2;
aSiz = aLineSiz;
}
}
#undef DEF_MARGIN
// -----------------------------------------------------------------------
void SvxParaPrevWindow::OutputSizeChanged()
{
aWinSize = GetOutputSizePixel();
aWinSize = PixelToLogic( aWinSize );
Invalidate();
}