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

163 lines
5.2 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 _FNTCACHE_HXX
#define _FNTCACHE_HXX
#include <vcl/font.hxx>
#include <tools/mempool.hxx>
#include "swtypes.hxx"
#include "swcache.hxx"
class Printer;
class OutputDevice;
class FontMetric;
class SwFntObj;
class SwDrawTextInfo; // DrawText
class ViewShell;
2001-02-13 07:56:40 +00:00
class SwSubFont;
class MapMode;
2000-09-18 23:08:29 +00:00
/*************************************************************************
* class SwFntCache
*************************************************************************/
class SwFntCache : public SwCache
{
public:
inline SwFntCache() : SwCache(50
#ifdef DBG_UTIL
, rtl::OString(RTL_CONSTASCII_STRINGPARAM("Global Font-Cache pFntCache"))
2000-09-18 23:08:29 +00:00
#endif
) {}
inline SwFntObj *First( ) { return (SwFntObj *)SwCache::First(); }
inline SwFntObj *Next( SwFntObj *pFntObj)
{ return (SwFntObj *)SwCache::Next( (SwCacheObj *)pFntObj ); }
void Flush();
};
// Font-Cache, globale Variable, in txtinit.Cxx angelegt/zerstoert
extern SwFntCache *pFntCache;
extern SwFntObj *pLastFont;
extern sal_uInt8 *pMagicNo;
2000-09-18 23:08:29 +00:00
extern Color *pWaveCol;
/*************************************************************************
* class SwFntObj
*************************************************************************/
class SwFntObj : public SwCacheObj
{
friend class SwFntAccess;
friend void _InitCore();
friend void _FinitCore();
2001-02-13 07:56:40 +00:00
Font aFont;
2000-09-18 23:08:29 +00:00
Font *pScrFont;
2001-02-13 07:56:40 +00:00
Font *pPrtFont;
OutputDevice* pPrinter;
sal_uInt16 nGuessedLeading;
sal_uInt16 nExtLeading;
sal_uInt16 nScrAscent;
sal_uInt16 nPrtAscent;
sal_uInt16 nScrHeight;
sal_uInt16 nPrtHeight;
sal_uInt16 nPropWidth;
sal_uInt16 nZoom;
sal_Bool bSymbol : 1;
sal_Bool bPaintBlank : 1;
2000-09-18 23:08:29 +00:00
static long nPixWidth;
static MapMode *pPixMap;
static OutputDevice *pPixOut;
// SMARTTAGS
void calcLinePos(SwDrawTextInfo& rInf, Point& aStart, Point& aEnd, xub_StrLen nStart,
xub_StrLen nWrLen, xub_StrLen nCnt, const sal_Bool bSwitchH2V, const sal_Bool bSwitchL2R,
long nHalfSpace, long* pKernArray, const sal_Bool bBidiPor);
2000-09-18 23:08:29 +00:00
public:
DECL_FIXEDMEMPOOL_NEWDEL(SwFntObj)
2001-02-13 07:56:40 +00:00
SwFntObj( const SwSubFont &rFont, const void* pOwner,
2000-09-18 23:08:29 +00:00
ViewShell *pSh );
virtual ~SwFntObj();
inline Font *GetScrFont() { return pScrFont; }
inline Font *GetFont() { return &aFont; }
inline const Font *GetFont() const { return &aFont; }
inline sal_uInt16 GetGuessedLeading() const { return nGuessedLeading; }
inline sal_uInt16 GetExtLeading() const { return nExtLeading; }
2000-09-18 23:08:29 +00:00
sal_uInt16 GetFontAscent( const ViewShell *pSh, const OutputDevice& rOut );
sal_uInt16 GetFontHeight( const ViewShell *pSh, const OutputDevice& rOut );
sal_uInt16 GetFontLeading( const ViewShell *pSh, const OutputDevice& rOut );
2000-09-18 23:08:29 +00:00
void GuessLeading( const ViewShell& rSh, const FontMetric& rMet );
void SetDevFont( const ViewShell *pSh, OutputDevice& rOut );
inline OutputDevice* GetPrt() const { return pPrinter; }
inline sal_uInt16 GetZoom() const { return nZoom; }
inline sal_uInt16 GetPropWidth() const { return nPropWidth; }
inline sal_Bool IsSymbol() const { return bSymbol; }
2000-09-18 23:08:29 +00:00
void DrawText( SwDrawTextInfo &rInf );
2001-04-09 09:44:17 +00:00
Size GetTextSize( SwDrawTextInfo &rInf );
xub_StrLen GetCrsrOfst( SwDrawTextInfo &rInf );
2001-02-13 07:56:40 +00:00
void CreateScrFont( const ViewShell& rSh, const OutputDevice& rOut );
void CreatePrtFont( const OutputDevice& rOut );
2000-09-18 23:08:29 +00:00
};
/*************************************************************************
* class SwFntAccess
*************************************************************************/
class SwFntAccess : public SwCacheAccess
{
ViewShell *pShell;
protected:
virtual SwCacheObj *NewObj( );
public:
SwFntAccess( const void * &rMagic, sal_uInt16 &rIndex, const void *pOwner,
2000-09-18 23:08:29 +00:00
ViewShell *pShell,
sal_Bool bCheck = sal_False );
inline SwFntObj* Get() { return (SwFntObj*) SwCacheAccess::Get(); };
2000-09-18 23:08:29 +00:00
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */