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

618 lines
12 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
re-base on ALv2 code. Includes: Patches contributed by Oliver-Rainer Wittmann sw34bf06: #i117783# - Writer's implementation of XPagePrintable - apply print settings to new printing routines http://svn.apache.org/viewvc?view=revision&revision=1172115 sw34bf06: #o12311627# use <rtl_random> methods to create unique ids for list styles and list ids http://svn.apache.org/viewvc?view=revision&revision=1172112 sw34bf06 #i114725#,#i115828# - method <SwDoc::ClearDoc()> - clear list structures completely http://svn.apache.org/viewvc?view=revision&revision=1172122 i#118572 - remove ui string and help content regarding usage of Java Mail in Writer's Mail Merge as Java Mail is not used. http://svn.apache.org/viewvc?view=revision&revision=1197035 Patches contributed by Mathias Bauer cws mba34issues01: #i117718#: provide filter name in case storage of medium does not allow to detect one http://svn.apache.org/viewvc?view=revision&revision=1172350 cws mba34issues01: #i117721#: directly provide parameters retrieved from SfxMedium http://svn.apache.org/viewvc?view=revision&revision=1172353 gnumake4 work variously http://svn.apache.org/viewvc?view=revision&revision=1394707 http://svn.apache.org/viewvc?view=revision&revision=1394326 http://svn.apache.org/viewvc?view=revision&revision=1396797 http://svn.apache.org/viewvc?view=revision&revision=1397315 cws mba34issues01: #i117723#: convert assertion into trace http://svn.apache.org/viewvc?view=revision&revision=1172355 cws mba34issues01: #i117699#: keep layout alive until swdoc dies http://svn.apache.org/viewvc?view=revision&revision=1172362 cws mba34issues01: #i117943#: missing color attributes in RTF clipboard http://svn.apache.org/viewvc?view=revision&revision=1172363 Patch contributed by Henning Brinkmann imported patch i#103878 http://svn.apache.org/viewvc?view=revision&revision=1172109 Patches contributed by Michael Stahl sw34bf06: #i117955#: WW8 export: disable storing of section breaks in endnotes http://svn.apache.org/viewvc?view=revision&revision=1172119 Patch contributed by imacat Fixed the Asian language work count. http://svn.apache.org/viewvc?view=revision&revision=1241345 Patch contributed by Pedro Giffuni i#20878 - Add comment with BZ issue for reference. http://svn.apache.org/viewvc?view=revision&revision=1244517 Patch contributed by Andre Fischer Do not add targets for junit tests when junit is disabled. http://svn.apache.org/viewvc?view=revision&revision=1241508 add writerperfect dependency.
2011-03-31 10:05:04 +02:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
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;
// encapsulates information for drawing text
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;
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; // for small caps: upper case flag
sal_Bool bDrawSpace : 1; // for small caps: underline/ line through
sal_Bool bGreyWave : 1; // grey wave line for extended text input
// For underlining we need to know, if a section is right in front of a
// whole block or a fix margin section.
sal_Bool bSpaceStop : 1;
sal_Bool bSnapToGrid : 1; // Does paragraph snap to grid?
// Paint text as if text has LTR direction, used for line numbering
sal_Bool bIgnoreFrmRTL : 1;
// GetCrsrOfst should not return the next position if screen position is
// inside second half of bound rect, used for Accessibility
sal_Bool bPosMatchesBounds :1;
2002-06-20 11:38:34 +00:00
SwDrawTextInfo(); // prohibited
2000-09-18 23:08:29 +00:00
public:
#ifdef DBG_UTIL
// These flags should control that the appropriate Set-function has been
// called before calling the Get-function of a member
bool m_bPos : 1;
bool m_bWrong : 1;
bool m_bGrammarCheck : 1;
bool m_bSize : 1;
bool m_bFnt : 1;
bool m_bHyph : 1;
bool m_bLeft : 1;
bool m_bRight : 1;
bool m_bKana : 1;
bool m_bOfst : 1;
bool m_bAscent: 1;
bool m_bSperr : 1;
bool m_bSpace : 1;
bool m_bNumberOfBlanks : 1;
bool m_bUppr : 1;
bool m_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 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;
#ifdef DBG_UTIL
// 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:
m_bPos = m_bWrong = m_bGrammarCheck = m_bSize = m_bFnt = m_bAscent =
m_bSpace = m_bNumberOfBlanks = m_bUppr =
m_bDrawSp = m_bLeft = m_bRight = m_bKana = m_bOfst = m_bHyph =
m_bSperr = 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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bPos, "DrawTextInfo: Undefined Position" );
#endif
2000-09-18 23:08:29 +00:00
return *pPos;
}
xub_StrLen *GetHyphPos() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bWrong, "DrawTextInfo: Undefined WrongList" );
#endif
2000-09-18 23:08:29 +00:00
return pWrong;
}
const SwWrongList* GetGrammarCheck() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bGrammarCheck, "DrawTextInfo: Undefined GrammarCheck List" );
#endif
return pGrammarCheck;
}
const SwWrongList* GetSmartTags() const
{
return pSmartTags;
}
const Size &GetSize() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bSize, "DrawTextInfo: Undefined Size" );
#endif
2000-09-18 23:08:29 +00:00
return *pSize;
}
SwFont* GetFont() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bLeft, "DrawTextInfo: Undefined left range" );
#endif
2000-09-18 23:08:29 +00:00
return nLeft;
}
long GetRight() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bRight, "DrawTextInfo: Undefined right range" );
#endif
2000-09-18 23:08:29 +00:00
return nRight;
}
long GetKanaDiff() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bSpace, "DrawTextInfo: Undefined Spacing" );
#endif
2000-09-18 23:08:29 +00:00
return nSpace;
}
xub_StrLen GetNumberOfBlanks() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bUppr, "DrawTextInfo: Undefined Upperflag" );
#endif
2000-09-18 23:08:29 +00:00
return bUpper;
}
sal_Bool GetDrawSpace() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_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;
#ifdef DBG_UTIL
m_bPos = true;
2001-04-09 09:44:17 +00:00
#endif
}
void SetHyphPos( xub_StrLen *pNew )
{
pHyphPos = pNew;
#ifdef DBG_UTIL
m_bHyph = 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;
#ifdef DBG_UTIL
m_bWrong = true;
2000-09-18 23:08:29 +00:00
#endif
}
void SetGrammarCheck( const SwWrongList* pNew )
{
pGrammarCheck = pNew;
#ifdef DBG_UTIL
m_bGrammarCheck = true;
#endif
}
void SetSmartTags( const SwWrongList* pNew )
{
pSmartTags = pNew;
}
void SetSize( const Size &rNew )
{
pSize = &rNew;
#ifdef DBG_UTIL
m_bSize = true;
2000-09-18 23:08:29 +00:00
#endif
}
void SetFont( SwFont* pNew )
{
pFnt = pNew;
#ifdef DBG_UTIL
m_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;
#ifdef DBG_UTIL
m_bOfst = true;
2000-09-18 23:08:29 +00:00
#endif
}
void SetLeft( long nNew )
{
nLeft = nNew;
#ifdef DBG_UTIL
m_bLeft = true;
2000-09-18 23:08:29 +00:00
#endif
}
void SetRight( long nNew )
{
nRight = nNew;
#ifdef DBG_UTIL
m_bRight = true;
2001-04-09 09:44:17 +00:00
#endif
}
void SetKanaDiff( long nNew )
{
nKanaDiff = nNew;
#ifdef DBG_UTIL
m_bKana = 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;
#ifdef DBG_UTIL
m_bAscent = 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
}
#ifdef DBG_UTIL
m_bSpace = true;
m_bSperr = true;
#endif
}
void SetNumberOfBlanks( xub_StrLen nNew )
{
#ifdef DBG_UTIL
m_bNumberOfBlanks = 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;
#ifdef DBG_UTIL
m_bUppr = true;
2000-09-18 23:08:29 +00:00
#endif
}
void SetDrawSpace( sal_Bool bNew )
{
bDrawSpace = bNew;
#ifdef DBG_UTIL
m_bDrawSp = 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: */