/************************************************************** * * 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 _DRAWFONT_HXX #define _DRAWFONT_HXX #include #include #include class SwTxtFrm; class OutputDevice; class ViewShell; class SwScriptInfo; class Point; class SwWrongList; class Size; class SwFont; class Font; class SwUnderlineFont; /************************************************************************* * class SwDrawTextInfo * * 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; // SMARTTAGS 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; // 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 // 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 SwDrawTextInfo(); // nicht zulaessig public: #ifdef DBG_UTIL 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; #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, 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; #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: bPos = bWrong = bGrammarCheck = bSize = bFnt = bAscent = bSpace = bNumberOfBlanks = bUppr = bDrawSp = bLeft = bRight = bKana = bOfst = bHyph = bSperr = sal_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 { ASSERT( bPos, "DrawTextInfo: Undefined Position" ); return *pPos; } xub_StrLen *GetHyphPos() const { ASSERT( bHyph, "DrawTextInfo: Undefined Hyph Position" ); return pHyphPos; } const XubString &GetText() const { return *pText; } const SwWrongList* GetWrong() const { ASSERT( bWrong, "DrawTextInfo: Undefined WrongList" ); return pWrong; } const SwWrongList* GetGrammarCheck() const { ASSERT( bGrammarCheck, "DrawTextInfo: Undefined GrammarCheck List" ); return pGrammarCheck; } const SwWrongList* GetSmartTags() const { return pSmartTags; } const Size &GetSize() const { ASSERT( bSize, "DrawTextInfo: Undefined Size" ); return *pSize; } SwFont* GetFont() const { ASSERT( bFnt, "DrawTextInfo: Undefined Font" ); return pFnt; } SwUnderlineFont* GetUnderFnt() const { return pUnderFnt; } xub_StrLen GetIdx() const { return nIdx; } xub_StrLen GetLen() const { return nLen; } xub_StrLen GetOfst() const { ASSERT( bOfst, "DrawTextInfo: Undefined Offset" ); return nOfst; } xub_StrLen GetEnd() const { return nIdx + nLen; } long GetLeft() const { ASSERT( bLeft, "DrawTextInfo: Undefined left range" ); return nLeft; } long GetRight() const { ASSERT( bRight, "DrawTextInfo: Undefined right range" ); return nRight; } long GetKanaDiff() const { ASSERT( bKana, "DrawTextInfo: Undefined kana difference" ); return nKanaDiff; } sal_uInt16 GetWidth() const { return nWidth; } sal_uInt16 GetAscent() const { ASSERT( bAscent, "DrawTextInfo: Undefined Ascent" ); return nAscent; } sal_uInt16 GetKanaComp() const { return nCompress; } long GetSperren() const { ASSERT( bSperr, "DrawTextInfo: Undefined >Sperren<" ); return nSperren; } long GetKern() const { return nKern; } long GetSpace() const { ASSERT( bSpace, "DrawTextInfo: Undefined Spacing" ); return nSpace; } xub_StrLen GetNumberOfBlanks() const { ASSERT( bNumberOfBlanks, "DrawTextInfo::Undefined NumberOfBlanks" ); return nNumberOfBlanks; } sal_uInt8 GetCursorBidiLevel() const { return nCursorBidiLevel; } sal_Bool GetBullet() const { return bBullet; } sal_Bool GetUpper() const { ASSERT( bUppr, "DrawTextInfo: Undefined Upperflag" ); return bUpper; } sal_Bool GetDrawSpace() const { ASSERT( bDrawSp, "DrawTextInfo: Undefined DrawSpaceflag" ); 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 bPos = sal_True; #endif } void SetHyphPos( xub_StrLen *pNew ) { pHyphPos = pNew; #ifdef DBG_UTIL bHyph = sal_True; #endif } void SetText( const XubString &rNew ) { pText = &rNew; } void SetWrong( const SwWrongList* pNew ) { pWrong = pNew; #ifdef DBG_UTIL bWrong = sal_True; #endif } void SetGrammarCheck( const SwWrongList* pNew ) { pGrammarCheck = pNew; #ifdef DBG_UTIL bGrammarCheck = sal_True; #endif } void SetSmartTags( const SwWrongList* pNew ) { pSmartTags = pNew; } void SetSize( const Size &rNew ) { pSize = &rNew; #ifdef DBG_UTIL bSize = sal_True; #endif } void SetFont( SwFont* pNew ) { pFnt = pNew; #ifdef DBG_UTIL 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 bOfst = sal_True; #endif } void SetLeft( long nNew ) { nLeft = nNew; #ifdef DBG_UTIL bLeft = sal_True; #endif } void SetRight( long nNew ) { nRight = nNew; #ifdef DBG_UTIL bRight = sal_True; #endif } void SetKanaDiff( long nNew ) { nKanaDiff = nNew; #ifdef DBG_UTIL bKana = sal_True; #endif } void SetWidth( sal_uInt16 nNew ) { nWidth = nNew; } void SetAscent( sal_uInt16 nNew ) { nAscent = nNew; #ifdef DBG_UTIL bAscent = sal_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 bSpace = sal_True; bSperr = sal_True; #endif } void SetNumberOfBlanks( xub_StrLen nNew ) { #ifdef DBG_UTIL bNumberOfBlanks = sal_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 bUppr = sal_True; #endif } void SetDrawSpace( sal_Bool bNew ) { bDrawSpace = bNew; #ifdef DBG_UTIL bDrawSp = sal_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