blob: 82dd796eff21ce12b416a8d52ea007c4e9385ff8 [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.
*
*************************************************************/
#ifndef _TXTPAINT_HXX
#define _TXTPAINT_HXX
#include <vcl/outdev.hxx>
class SwRect; // SwSaveClip
#include <txtfrm.hxx>
/*************************************************************************
* class SwSaveClip
*************************************************************************/
class SwSaveClip
{
Region aClip;
const sal_Bool bOn;
sal_Bool bChg;
protected:
OutputDevice* pOut;
void _ChgClip( const SwRect &rRect, const SwTxtFrm* pFrm,
sal_Bool bEnlargeRect );
public:
inline SwSaveClip( OutputDevice* pOut );
inline ~SwSaveClip();
inline void ChgClip( const SwRect &rRect, const SwTxtFrm* pFrm = 0,
sal_Bool bEnlargeRect = sal_False)
{ if( pOut ) _ChgClip( rRect, pFrm, bEnlargeRect ); }
void Reset();
inline sal_Bool IsOn() const { return bOn; }
inline sal_Bool IsChg() const { return bChg; }
inline sal_Bool IsOut() const { return 0 != pOut; }
inline OutputDevice *GetOut() { return pOut; }
};
inline SwSaveClip::SwSaveClip( OutputDevice* pOutDev ) :
bOn( pOutDev && pOutDev->IsClipRegion() ),
bChg( sal_False ),
pOut(pOutDev)
{}
inline SwSaveClip::~SwSaveClip()
{
Reset();
}
#ifdef DBG_UTIL
/*************************************************************************
* class SwDbgOut
*************************************************************************/
class SwDbgOut
{
protected:
OutputDevice* pOut;
public:
inline SwDbgOut( OutputDevice* pOutDev, const sal_Bool bOn = sal_True );
};
/*************************************************************************
* class DbgColor
*************************************************************************/
class DbgColor
{
Font *pFnt;
Color aColor;
public:
inline DbgColor( Font *pFont, const sal_Bool bOn = sal_True,
const ColorData eColor = COL_BLUE );
inline ~DbgColor();
};
/*************************************************************************
* class DbgBrush
*************************************************************************/
class DbgBackColor : public SwDbgOut
{
Color aOldFillColor;
public:
DbgBackColor( OutputDevice* pOut, const sal_Bool bOn = sal_True,
ColorData nColor = COL_YELLOW );
~DbgBackColor();
};
/*************************************************************************
* class DbgRect
*************************************************************************/
class DbgRect : public SwDbgOut
{
public:
DbgRect( OutputDevice* pOut, const Rectangle &rRect,
const sal_Bool bOn = sal_True,
ColorData eColor = COL_LIGHTBLUE );
};
/*************************************************************************
* Inline-Implementierung
*************************************************************************/
inline SwDbgOut::SwDbgOut( OutputDevice* pOutDev, const sal_Bool bOn )
:pOut( bOn ? pOutDev : 0 )
{ }
inline DbgColor::DbgColor( Font *pFont, const sal_Bool bOn,
const ColorData eColor )
:pFnt( bOn ? pFont : 0 )
{
if( pFnt )
{
aColor = pFnt->GetColor();
pFnt->SetColor( Color( eColor ) );
}
}
inline DbgColor::~DbgColor()
{
if( pFnt )
pFnt->SetColor( aColor );
}
inline DbgBackColor::DbgBackColor( OutputDevice* pOutDev, const sal_Bool bOn,
ColorData eColor )
:SwDbgOut( pOutDev, bOn )
{
if( pOut )
{
aOldFillColor = pOut->GetFillColor();
pOut->SetFillColor( Color(eColor) );
}
}
inline DbgBackColor::~DbgBackColor()
{
if( pOut )
{
pOut->SetFillColor( aOldFillColor );
}
}
inline DbgRect::DbgRect( OutputDevice* pOutDev, const Rectangle &rRect,
const sal_Bool bOn,
ColorData eColor )
: SwDbgOut( pOutDev, bOn )
{
if( pOut )
{
const Color aColor( eColor );
Color aLineColor = pOut->GetLineColor();
pOut->SetLineColor( aColor );
Color aFillColor = pOut->GetFillColor();
pOut->SetFillColor( Color(COL_TRANSPARENT) );
pOut->DrawRect( rRect );
pOut->SetLineColor( aLineColor );
pOut->SetFillColor( aFillColor );
}
}
#endif
#endif