Files
libreoffice/sw/source/core/inc/drawfont.hxx
Michael Meeks caaeb0a046 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.
2012-11-30 10:10:38 +00:00

618 lines
12 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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 .
*/
#ifndef _DRAWFONT_HXX
#define _DRAWFONT_HXX
#include <tools/solar.h>
#include <tools/string.hxx>
class SwTxtFrm;
class OutputDevice;
class ViewShell;
class SwScriptInfo;
class Point;
class SwWrongList;
class Size;
class SwFont;
class Font;
class SwUnderlineFont;
// encapsulates information for drawing text
class SwDrawTextInfo
{
const SwTxtFrm* pFrm;
OutputDevice* pOut;
ViewShell* pSh;
const SwScriptInfo* pScriptInfo;
const Point* pPos;
const XubString* pText;
const SwWrongList* pWrong;
const SwWrongList* pGrammarCheck;
const SwWrongList* pSmartTags;
const Size* pSize;
SwFont *pFnt;
SwUnderlineFont* pUnderFnt;
xub_StrLen* pHyphPos;
long nLeft;
long nRight;
long nKanaDiff;
xub_StrLen nIdx;
xub_StrLen nLen;
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;
SwDrawTextInfo(); // prohibited
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;
#endif
SwDrawTextInfo( ViewShell *pS, OutputDevice &rO, const SwScriptInfo* pSI,
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;
#endif
}
const SwTxtFrm* GetFrm() const
{
return pFrm;
}
void SetFrm( const SwTxtFrm* pNewFrm )
{
pFrm = pNewFrm;
}
ViewShell *GetShell() const
{
return pSh;
}
OutputDevice& GetOut() const
{
return *pOut;
}
OutputDevice *GetpOut() const
{
return pOut;
}
const SwScriptInfo* GetScriptInfo() const
{
return pScriptInfo;
}
const Point &GetPos() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bPos, "DrawTextInfo: Undefined Position" );
#endif
return *pPos;
}
xub_StrLen *GetHyphPos() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bHyph, "DrawTextInfo: Undefined Hyph Position" );
#endif
return pHyphPos;
}
const XubString &GetText() const
{
return *pText;
}
const SwWrongList* GetWrong() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bWrong, "DrawTextInfo: Undefined WrongList" );
#endif
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
return *pSize;
}
SwFont* GetFont() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bFnt, "DrawTextInfo: Undefined Font" );
#endif
return pFnt;
}
SwUnderlineFont* GetUnderFnt() const
{
return pUnderFnt;
}
xub_StrLen GetIdx() const
{
return nIdx;
}
xub_StrLen GetLen() const
{
return nLen;
}
xub_StrLen GetOfst() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bOfst, "DrawTextInfo: Undefined Offset" );
#endif
return nOfst;
}
xub_StrLen GetEnd() const
{
return nIdx + nLen;
}
long GetLeft() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bLeft, "DrawTextInfo: Undefined left range" );
#endif
return nLeft;
}
long GetRight() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bRight, "DrawTextInfo: Undefined right range" );
#endif
return nRight;
}
long GetKanaDiff() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bKana, "DrawTextInfo: Undefined kana difference" );
#endif
return nKanaDiff;
}
sal_uInt16 GetWidth() const
{
return nWidth;
}
sal_uInt16 GetAscent() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bAscent, "DrawTextInfo: Undefined Ascent" );
#endif
return nAscent;
}
sal_uInt16 GetKanaComp() const
{
return nCompress;
}
long GetSperren() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bSperr, "DrawTextInfo: Undefined >Sperren<" );
#endif
return nSperren;
}
long GetKern() const
{
return nKern;
}
long GetSpace() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bSpace, "DrawTextInfo: Undefined Spacing" );
#endif
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
{
return bBullet;
}
sal_Bool GetUpper() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bUppr, "DrawTextInfo: Undefined Upperflag" );
#endif
return bUpper;
}
sal_Bool GetDrawSpace() const
{
#ifdef DBG_UTIL
OSL_ENSURE( m_bDrawSp, "DrawTextInfo: Undefined DrawSpaceflag" );
#endif
return bDrawSpace;
}
sal_Bool GetGreyWave() const
{
return bGreyWave;
}
sal_Bool IsSpaceStop() const
{
return bSpaceStop;
}
sal_Bool SnapToGrid() const
{
return bSnapToGrid;
}
sal_Bool IsIgnoreFrmRTL() const
{
return bIgnoreFrmRTL;
}
sal_Bool IsPosMatchesBounds() const
{
return bPosMatchesBounds;
}
void SetOut( OutputDevice &rNew )
{
pOut = &rNew;
}
void SetPos( const Point &rNew )
{
pPos = &rNew;
#ifdef DBG_UTIL
m_bPos = true;
#endif
}
void SetHyphPos( xub_StrLen *pNew )
{
pHyphPos = pNew;
#ifdef DBG_UTIL
m_bHyph = true;
#endif
}
void SetText( const XubString &rNew )
{
pText = &rNew;
}
void SetWrong( const SwWrongList* pNew )
{
pWrong = pNew;
#ifdef DBG_UTIL
m_bWrong = true;
#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;
#endif
}
void SetFont( SwFont* pNew )
{
pFnt = pNew;
#ifdef DBG_UTIL
m_bFnt = sal_True;
#endif
}
void SetIdx( xub_StrLen nNew )
{
nIdx = nNew;
}
void SetLen( xub_StrLen nNew )
{
nLen = nNew;
}
void SetOfst( xub_StrLen nNew )
{
nOfst = nNew;
#ifdef DBG_UTIL
m_bOfst = true;
#endif
}
void SetLeft( long nNew )
{
nLeft = nNew;
#ifdef DBG_UTIL
m_bLeft = true;
#endif
}
void SetRight( long nNew )
{
nRight = nNew;
#ifdef DBG_UTIL
m_bRight = true;
#endif
}
void SetKanaDiff( long nNew )
{
nKanaDiff = nNew;
#ifdef DBG_UTIL
m_bKana = true;
#endif
}
void SetWidth( sal_uInt16 nNew )
{
nWidth = nNew;
}
void SetAscent( sal_uInt16 nNew )
{
nAscent = nNew;
#ifdef DBG_UTIL
m_bAscent = true;
#endif
}
void SetKern( long nNew )
{
nKern = nNew;
}
void SetSpace( long nNew )
{
if( nNew < 0 )
{
nSperren = -nNew;
nSpace = 0;
}
else
{
nSpace = nNew;
nSperren = 0;
}
#ifdef DBG_UTIL
m_bSpace = true;
m_bSperr = true;
#endif
}
void SetNumberOfBlanks( xub_StrLen nNew )
{
#ifdef DBG_UTIL
m_bNumberOfBlanks = true;
#endif
nNumberOfBlanks = nNew;
}
void SetCursorBidiLevel( sal_uInt8 nNew )
{
nCursorBidiLevel = nNew;
}
void SetKanaComp( short nNew )
{
nCompress = nNew;
}
void SetBullet( sal_Bool bNew )
{
bBullet = bNew;
}
void SetUnderFnt( SwUnderlineFont* pULFnt )
{
pUnderFnt = pULFnt;
}
void SetUpper( sal_Bool bNew )
{
bUpper = bNew;
#ifdef DBG_UTIL
m_bUppr = true;
#endif
}
void SetDrawSpace( sal_Bool bNew )
{
bDrawSpace = bNew;
#ifdef DBG_UTIL
m_bDrawSp = true;
#endif
}
void SetGreyWave( sal_Bool bNew )
{
bGreyWave = bNew;
}
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;
}
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 );
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */