Files
libreoffice/sw/source/core/inc/drawfont.hxx

629 lines
13 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2000-09-18 23:08:29 +00:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2000-09-18 23:08:29 +00:00
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
2000-09-18 23:08:29 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 23:08:29 +00:00
*
* This file is part of OpenOffice.org.
2000-09-18 23:08:29 +00:00
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
2000-09-18 23:08:29 +00:00
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
2000-09-18 23:08:29 +00:00
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
2000-09-18 23:08:29 +00:00
*
************************************************************************/
#ifndef _DRAWFONT_HXX
#define _DRAWFONT_HXX
#include <tools/solar.h>
#include <tools/string.hxx>
class SwTxtFrm;
2000-09-18 23:08:29 +00:00
class OutputDevice;
class ViewShell;
class SwScriptInfo;
2000-09-18 23:08:29 +00:00
class Point;
class SwWrongList;
class Size;
class SwFont;
class Font;
class SwUnderlineFont;
2001-04-09 09:44:17 +00:00
/*************************************************************************
* class SwDrawTextInfo
*
* encapsulates information for drawing text
2001-04-09 09:44:17 +00:00
*************************************************************************/
2000-09-18 23:08:29 +00:00
class SwDrawTextInfo
{
2001-08-31 05:22:48 +00:00
const SwTxtFrm* pFrm;
2000-09-18 23:08:29 +00:00
OutputDevice* pOut;
ViewShell* pSh;
2001-04-09 09:44:17 +00:00
const SwScriptInfo* pScriptInfo;
2000-09-18 23:08:29 +00:00
const Point* pPos;
const XubString* pText;
const SwWrongList* pWrong;
const SwWrongList* pGrammarCheck;
const SwWrongList* pSmartTags; // SMARTTAGS
2000-09-18 23:08:29 +00:00
const Size* pSize;
SwFont *pFnt;
SwUnderlineFont* pUnderFnt;
2001-04-09 09:44:17 +00:00
xub_StrLen* pHyphPos;
2000-09-18 23:08:29 +00:00
long nLeft;
long nRight;
2001-04-09 09:44:17 +00:00
long nKanaDiff;
2000-09-18 23:08:29 +00:00
xub_StrLen nIdx;
xub_StrLen nLen;
2001-04-09 09:44:17 +00:00
xub_StrLen nOfst;
sal_uInt16 nWidth;
sal_uInt16 nAscent;
sal_uInt16 nCompress;
long nSperren;
long nSpace;
long nKern;
xub_StrLen nNumberOfBlanks;
sal_uInt8 nCursorBidiLevel;
sal_Bool bBullet : 1;
sal_Bool bUpper : 1; // Fuer Kapitaelchen: Grossbuchstaben-Flag
sal_Bool bDrawSpace : 1; // Fuer Kapitaelchen: Unter/Durchstreichung
sal_Bool bGreyWave : 1; // Graue Wellenlinie beim extended TextInput
sal_Bool bSpaceStop : 1; // For underlining we need to know, if a portion
// is right in front of a hole portion or a
// fix margin portion.
sal_Bool bSnapToGrid : 1; // Does paragraph snap to grid?
sal_Bool bIgnoreFrmRTL : 1; // Paint text as if text has LTR direction, used for
2002-06-20 11:38:34 +00:00
// line numbering
sal_Bool bPosMatchesBounds :1; // GetCrsrOfst should not return the next
// position if screen position is inside second
// half of bound rect, used for Accessibility
2002-06-20 11:38:34 +00:00
2000-09-18 23:08:29 +00:00
SwDrawTextInfo(); // nicht zulaessig
public:
#if OSL_DEBUG_LEVEL > 1
sal_Bool bPos : 1; // These flags should control, that the appropriate
sal_Bool bWrong : 1; // Set-function has been called before calling
sal_Bool bGrammarCheck : 1; // the Get-function of a member
sal_Bool bSize : 1;
sal_Bool bFnt : 1;
sal_Bool bHyph : 1;
sal_Bool bLeft : 1;
sal_Bool bRight : 1;
sal_Bool bKana : 1;
sal_Bool bOfst : 1;
sal_Bool bAscent: 1;
sal_Bool bSperr : 1;
sal_Bool bSpace : 1;
sal_Bool bNumberOfBlanks : 1;
sal_Bool bUppr : 1;
sal_Bool bDrawSp: 1;
2000-09-18 23:08:29 +00:00
#endif
2001-04-09 09:44:17 +00:00
SwDrawTextInfo( ViewShell *pS, OutputDevice &rO, const SwScriptInfo* pSI,
2000-09-18 23:08:29 +00:00
const XubString &rSt, xub_StrLen nI, xub_StrLen nL,
sal_uInt16 nW = 0, sal_Bool bB = sal_False )
{
pFrm = NULL;
pSh = pS;
pOut = &rO;
pScriptInfo = pSI;
pText = &rSt;
nIdx = nI;
nLen = nL;
nKern = 0;
nCompress = 0;
nWidth = nW;
nNumberOfBlanks = 0;
nCursorBidiLevel = 0;
bBullet = bB;
pUnderFnt = 0;
bGreyWave = sal_False;
bSpaceStop = sal_False;
bSnapToGrid = sal_False;
bIgnoreFrmRTL = sal_False;
bPosMatchesBounds = sal_False;
// These values are initialized but, they have to be
// set explicitly via their Set-function before they may
// be accessed by their Get-function:
pPos = 0;
pWrong = 0;
pGrammarCheck = 0;
pSmartTags = 0;
pSize = 0;
pFnt = 0;
pHyphPos = 0;
nLeft = 0;
nRight = 0;
nKanaDiff = 0;
nOfst = 0;
nAscent = 0;
nSperren = 0;
nSpace = 0;
bUpper = sal_False;
bDrawSpace = sal_False;
#if OSL_DEBUG_LEVEL > 1
// these flags control, whether the matching member variables have
// been set by using the Set-function before they may be accessed
// by their Get-function:
bPos = bWrong = bGrammarCheck = bSize = bFnt = bAscent = bSpace = bNumberOfBlanks = bUppr =
bDrawSp = bLeft = bRight = bKana = bOfst = bHyph = bSperr = sal_False;
2000-09-18 23:08:29 +00:00
#endif
}
2001-08-31 05:22:48 +00:00
const SwTxtFrm* GetFrm() const
{
return pFrm;
}
void SetFrm( const SwTxtFrm* pNewFrm )
{
pFrm = pNewFrm;
}
ViewShell *GetShell() const
{
return pSh;
}
2001-08-31 05:22:48 +00:00
OutputDevice& GetOut() const
{
2000-09-18 23:08:29 +00:00
return *pOut;
}
OutputDevice *GetpOut() const
{
2000-09-18 23:08:29 +00:00
return pOut;
}
const SwScriptInfo* GetScriptInfo() const
{
2001-04-09 09:44:17 +00:00
return pScriptInfo;
}
const Point &GetPos() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bPos, "DrawTextInfo: Undefined Position" );
#endif
2000-09-18 23:08:29 +00:00
return *pPos;
}
xub_StrLen *GetHyphPos() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bHyph, "DrawTextInfo: Undefined Hyph Position" );
#endif
2001-04-09 09:44:17 +00:00
return pHyphPos;
}
const XubString &GetText() const
{
2000-09-18 23:08:29 +00:00
return *pText;
}
const SwWrongList* GetWrong() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bWrong, "DrawTextInfo: Undefined WrongList" );
#endif
2000-09-18 23:08:29 +00:00
return pWrong;
}
const SwWrongList* GetGrammarCheck() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bGrammarCheck, "DrawTextInfo: Undefined GrammarCheck List" );
#endif
return pGrammarCheck;
}
const SwWrongList* GetSmartTags() const
{
return pSmartTags;
}
const Size &GetSize() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bSize, "DrawTextInfo: Undefined Size" );
#endif
2000-09-18 23:08:29 +00:00
return *pSize;
}
SwFont* GetFont() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bFnt, "DrawTextInfo: Undefined Font" );
#endif
2000-09-18 23:08:29 +00:00
return pFnt;
}
SwUnderlineFont* GetUnderFnt() const
{
return pUnderFnt;
}
xub_StrLen GetIdx() const
{
2000-09-18 23:08:29 +00:00
return nIdx;
}
xub_StrLen GetLen() const
{
2000-09-18 23:08:29 +00:00
return nLen;
}
xub_StrLen GetOfst() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bOfst, "DrawTextInfo: Undefined Offset" );
#endif
2001-04-09 09:44:17 +00:00
return nOfst;
}
xub_StrLen GetEnd() const
{
2000-09-18 23:08:29 +00:00
return nIdx + nLen;
}
long GetLeft() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bLeft, "DrawTextInfo: Undefined left range" );
#endif
2000-09-18 23:08:29 +00:00
return nLeft;
}
long GetRight() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bRight, "DrawTextInfo: Undefined right range" );
#endif
2000-09-18 23:08:29 +00:00
return nRight;
}
long GetKanaDiff() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bKana, "DrawTextInfo: Undefined kana difference" );
#endif
2001-04-09 09:44:17 +00:00
return nKanaDiff;
}
sal_uInt16 GetWidth() const
{
2000-09-18 23:08:29 +00:00
return nWidth;
}
sal_uInt16 GetAscent() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bAscent, "DrawTextInfo: Undefined Ascent" );
#endif
2000-09-18 23:08:29 +00:00
return nAscent;
}
sal_uInt16 GetKanaComp() const
{
2001-04-09 09:44:17 +00:00
return nCompress;
}
long GetSperren() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bSperr, "DrawTextInfo: Undefined >Sperren<" );
#endif
2000-09-18 23:08:29 +00:00
return nSperren;
}
long GetKern() const
{
2000-09-18 23:08:29 +00:00
return nKern;
}
long GetSpace() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bSpace, "DrawTextInfo: Undefined Spacing" );
#endif
2000-09-18 23:08:29 +00:00
return nSpace;
}
xub_StrLen GetNumberOfBlanks() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bNumberOfBlanks, "DrawTextInfo::Undefined NumberOfBlanks" );
#endif
return nNumberOfBlanks;
}
sal_uInt8 GetCursorBidiLevel() const
{
return nCursorBidiLevel;
}
sal_Bool GetBullet() const
{
2000-09-18 23:08:29 +00:00
return bBullet;
}
sal_Bool GetUpper() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bUppr, "DrawTextInfo: Undefined Upperflag" );
#endif
2000-09-18 23:08:29 +00:00
return bUpper;
}
sal_Bool GetDrawSpace() const
{
#if OSL_DEBUG_LEVEL > 1
OSL_ENSURE( bDrawSp, "DrawTextInfo: Undefined DrawSpaceflag" );
#endif
2000-09-18 23:08:29 +00:00
return bDrawSpace;
}
sal_Bool GetGreyWave() const
{
2000-09-18 23:08:29 +00:00
return bGreyWave;
}
sal_Bool IsSpaceStop() const
{
return bSpaceStop;
}
sal_Bool SnapToGrid() const
{
return bSnapToGrid;
}
2000-09-18 23:08:29 +00:00
sal_Bool IsIgnoreFrmRTL() const
{
2002-06-20 11:38:34 +00:00
return bIgnoreFrmRTL;
}
sal_Bool IsPosMatchesBounds() const
{
return bPosMatchesBounds;
}
void SetOut( OutputDevice &rNew )
{
pOut = &rNew;
2000-09-18 23:08:29 +00:00
}
void SetPos( const Point &rNew )
{
pPos = &rNew;
#if OSL_DEBUG_LEVEL > 1
bPos = sal_True;
2001-04-09 09:44:17 +00:00
#endif
}
void SetHyphPos( xub_StrLen *pNew )
{
pHyphPos = pNew;
#if OSL_DEBUG_LEVEL > 1
bHyph = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetText( const XubString &rNew )
{
pText = &rNew;
2000-09-18 23:08:29 +00:00
}
void SetWrong( const SwWrongList* pNew )
{
pWrong = pNew;
#if OSL_DEBUG_LEVEL > 1
bWrong = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetGrammarCheck( const SwWrongList* pNew )
{
pGrammarCheck = pNew;
#if OSL_DEBUG_LEVEL > 1
bGrammarCheck = sal_True;
#endif
}
void SetSmartTags( const SwWrongList* pNew )
{
pSmartTags = pNew;
}
void SetSize( const Size &rNew )
{
pSize = &rNew;
#if OSL_DEBUG_LEVEL > 1
bSize = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetFont( SwFont* pNew )
{
pFnt = pNew;
#if OSL_DEBUG_LEVEL > 1
bFnt = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetIdx( xub_StrLen nNew )
{
nIdx = nNew;
2000-09-18 23:08:29 +00:00
}
void SetLen( xub_StrLen nNew )
{
nLen = nNew;
2001-04-09 09:44:17 +00:00
}
void SetOfst( xub_StrLen nNew )
{
nOfst = nNew;
#if OSL_DEBUG_LEVEL > 1
bOfst = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetLeft( long nNew )
{
nLeft = nNew;
#if OSL_DEBUG_LEVEL > 1
bLeft = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetRight( long nNew )
{
nRight = nNew;
#if OSL_DEBUG_LEVEL > 1
bRight = sal_True;
2001-04-09 09:44:17 +00:00
#endif
}
void SetKanaDiff( long nNew )
{
nKanaDiff = nNew;
#if OSL_DEBUG_LEVEL > 1
bKana = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetWidth( sal_uInt16 nNew )
{
nWidth = nNew;
2000-09-18 23:08:29 +00:00
}
void SetAscent( sal_uInt16 nNew )
{
nAscent = nNew;
#if OSL_DEBUG_LEVEL > 1
bAscent = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetKern( long nNew )
{
nKern = nNew;
2000-09-18 23:08:29 +00:00
}
void SetSpace( long nNew )
{
2000-09-18 23:08:29 +00:00
if( nNew < 0 )
{
nSperren = -nNew;
2000-09-18 23:08:29 +00:00
nSpace = 0;
}
else
{
nSpace = nNew;
nSperren = 0;
2000-09-18 23:08:29 +00:00
}
#if OSL_DEBUG_LEVEL > 1
bSpace = sal_True;
bSperr = sal_True;
#endif
}
void SetNumberOfBlanks( xub_StrLen nNew )
{
#if OSL_DEBUG_LEVEL > 1
bNumberOfBlanks = sal_True;
2000-09-18 23:08:29 +00:00
#endif
nNumberOfBlanks = nNew;
2000-09-18 23:08:29 +00:00
}
void SetCursorBidiLevel( sal_uInt8 nNew )
{
nCursorBidiLevel = nNew;
}
void SetKanaComp( short nNew )
{
2001-04-09 09:44:17 +00:00
nCompress = nNew;
}
void SetBullet( sal_Bool bNew )
{
bBullet = bNew;
2000-09-18 23:08:29 +00:00
}
void SetUnderFnt( SwUnderlineFont* pULFnt )
{
pUnderFnt = pULFnt;
2000-09-18 23:08:29 +00:00
}
void SetUpper( sal_Bool bNew )
{
bUpper = bNew;
#if OSL_DEBUG_LEVEL > 1
bUppr = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetDrawSpace( sal_Bool bNew )
{
bDrawSpace = bNew;
#if OSL_DEBUG_LEVEL > 1
bDrawSp = sal_True;
2000-09-18 23:08:29 +00:00
#endif
}
void SetGreyWave( sal_Bool bNew )
{
bGreyWave = bNew;
2000-09-18 23:08:29 +00:00
}
void SetSpaceStop( sal_Bool bNew )
{
bSpaceStop = bNew;
}
void SetSnapToGrid( sal_Bool bNew )
{
bSnapToGrid = bNew;
}
void SetIgnoreFrmRTL( sal_Bool bNew )
{
bIgnoreFrmRTL = bNew;
}
void SetPosMatchesBounds( sal_Bool bNew )
{
bPosMatchesBounds = bNew;
}
2002-06-20 11:38:34 +00:00
void Shift( sal_uInt16 nDir );
// sets a new color at the output device if necessary
// if a font is passed as argument, the change if made to the font
// otherwise the font at the output device is changed
// returns if the font has been changed
sal_Bool ApplyAutoColor( Font* pFnt = 0 );
2000-09-18 23:08:29 +00:00
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */