mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-17 18:59:09 +00:00
Remove unused plWinFontCache & plDynSurfaceWriter.
This commit is contained in:
@ -135,7 +135,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "pfAnimation/plAnimDebugList.h"
|
#include "pfAnimation/plAnimDebugList.h"
|
||||||
#include "pfGameGUIMgr/pfGUICtrlGenerator.h"
|
#include "pfGameGUIMgr/pfGUICtrlGenerator.h"
|
||||||
|
|
||||||
#include "plGImage/plWinFontCache.h"
|
|
||||||
#include "plGImage/plFontCache.h"
|
#include "plGImage/plFontCache.h"
|
||||||
|
|
||||||
#include "pfJournalBook/pfJournalBook.h"
|
#include "pfJournalBook/pfJournalBook.h"
|
||||||
@ -2202,7 +2201,6 @@ void plClient::IOnAsyncInitComplete () {
|
|||||||
|
|
||||||
// Load our custom fonts from our current dat directory
|
// Load our custom fonts from our current dat directory
|
||||||
fFontCache->LoadCustomFonts("dat");
|
fFontCache->LoadCustomFonts("dat");
|
||||||
plWinFontCache::GetInstance().LoadCustomFonts("dat");
|
|
||||||
|
|
||||||
// We'd like to do a SetHoldLoadRequests here, but the GUI stuff doesn't draw right
|
// We'd like to do a SetHoldLoadRequests here, but the GUI stuff doesn't draw right
|
||||||
// if you try to delay the loading for it. To work around that, we allocate a
|
// if you try to delay the loading for it. To work around that, we allocate a
|
||||||
|
@ -15,7 +15,6 @@ set(plGImage_SOURCES
|
|||||||
plBumpMapGen.cpp
|
plBumpMapGen.cpp
|
||||||
plCubicEnvironmap.cpp
|
plCubicEnvironmap.cpp
|
||||||
plDynamicTextMap.cpp
|
plDynamicTextMap.cpp
|
||||||
plDynSurfaceWriter.cpp
|
|
||||||
plFont.cpp
|
plFont.cpp
|
||||||
plFontCache.cpp
|
plFontCache.cpp
|
||||||
plJPEG.cpp
|
plJPEG.cpp
|
||||||
@ -23,7 +22,6 @@ set(plGImage_SOURCES
|
|||||||
plMipmap.cpp
|
plMipmap.cpp
|
||||||
plPNG.cpp
|
plPNG.cpp
|
||||||
plTGAWriter.cpp
|
plTGAWriter.cpp
|
||||||
plWinFontCache.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set(plGImage_HEADERS
|
set(plGImage_HEADERS
|
||||||
@ -35,7 +33,6 @@ set(plGImage_HEADERS
|
|||||||
plBumpMapGen.h
|
plBumpMapGen.h
|
||||||
plCubicEnvironmap.h
|
plCubicEnvironmap.h
|
||||||
plDynamicTextMap.h
|
plDynamicTextMap.h
|
||||||
plDynSurfaceWriter.h
|
|
||||||
plFont.h
|
plFont.h
|
||||||
plFontCache.h
|
plFontCache.h
|
||||||
plGImageCreatable.h
|
plGImageCreatable.h
|
||||||
@ -44,7 +41,6 @@ set(plGImage_HEADERS
|
|||||||
plMipmap.h
|
plMipmap.h
|
||||||
plPNG.h
|
plPNG.h
|
||||||
plTGAWriter.h
|
plTGAWriter.h
|
||||||
plWinFontCache.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(plGImage STATIC ${plGImage_SOURCES} ${plGImage_HEADERS})
|
add_library(plGImage STATIC ${plGImage_SOURCES} ${plGImage_HEADERS})
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,221 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program 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 General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// plDynSurfaceWriter Class Header //
|
|
||||||
// Abstract class wrapping around Windows GDI functionality for writing to //
|
|
||||||
// a generic RGBA surface. Allows us to create one writer per DTMap or a //
|
|
||||||
// single shared writer to conserve OS resources on 98/ME. //
|
|
||||||
// //
|
|
||||||
// Cyan, Inc. //
|
|
||||||
// //
|
|
||||||
//// Version History //////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// 10.28.2002 mcn - Created. //
|
|
||||||
// //
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef _plDynSurfaceWriter_h
|
|
||||||
#define _plDynSurfaceWriter_h
|
|
||||||
|
|
||||||
#include "hsColorRGBA.h"
|
|
||||||
#include "hsWindows.h" // FIXME: windows :(
|
|
||||||
|
|
||||||
struct hsMatrix44;
|
|
||||||
|
|
||||||
class plDynamicTextMap;
|
|
||||||
|
|
||||||
//// Class Definition /////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class plDynSurfaceWriter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//// Public Flags ////
|
|
||||||
enum Justify
|
|
||||||
{
|
|
||||||
kLeftJustify = 0,
|
|
||||||
kCenter,
|
|
||||||
kRightJustify
|
|
||||||
};
|
|
||||||
|
|
||||||
enum Flags
|
|
||||||
{
|
|
||||||
kSupportAlpha = 0x00000001,
|
|
||||||
|
|
||||||
kFontBold = 0x00000002,
|
|
||||||
kFontItalic = 0x00000004,
|
|
||||||
kFontShadowed = 0x00000008,
|
|
||||||
kFontMask = 0x0000000e,
|
|
||||||
|
|
||||||
kDiscardOnFlush = 0x00000010
|
|
||||||
};
|
|
||||||
|
|
||||||
//// Public Data /////
|
|
||||||
|
|
||||||
|
|
||||||
//// Public Members ////
|
|
||||||
|
|
||||||
|
|
||||||
plDynSurfaceWriter();
|
|
||||||
plDynSurfaceWriter( plDynamicTextMap *target, uint32_t flags = 0 );
|
|
||||||
virtual ~plDynSurfaceWriter();
|
|
||||||
|
|
||||||
|
|
||||||
/// Operations to perform on the text block
|
|
||||||
|
|
||||||
void ClearToColor( hsColorRGBA &color );
|
|
||||||
void SetFont( const char *face, uint16_t size, uint8_t fontFlags = 0, bool antiAliasRGB = true );
|
|
||||||
void SetTextColor( hsColorRGBA &color, bool blockRGB = false );
|
|
||||||
void SetJustify( Justify j );
|
|
||||||
|
|
||||||
void DrawString( uint16_t x, uint16_t y, const char *text );
|
|
||||||
void DrawClippedString( int16_t x, int16_t y, const char *text, uint16_t width, uint16_t height );
|
|
||||||
void DrawClippedString( int16_t x, int16_t y, const char *text, uint16_t clipX, uint16_t clipY, uint16_t width, uint16_t height );
|
|
||||||
void DrawWrappedString( uint16_t x, uint16_t y, const char *text, uint16_t width, uint16_t height );
|
|
||||||
uint16_t CalcStringWidth( const char *text, uint16_t *height = nil );
|
|
||||||
void CalcWrappedStringSize( const char *text, uint16_t *width, uint16_t *height );
|
|
||||||
void FillRect( uint16_t x, uint16_t y, uint16_t width, uint16_t height, hsColorRGBA &color );
|
|
||||||
void FrameRect( uint16_t x, uint16_t y, uint16_t width, uint16_t height, hsColorRGBA &color );
|
|
||||||
|
|
||||||
// void DrawImage( uint16_t x, uint16_t y, plMipmap *image, bool respectAlpha = false );
|
|
||||||
// void DrawClippedImage( uint16_t x, uint16_t y, plMipmap *image, uint16_t srcClipX, uint16_t srcClipY,
|
|
||||||
// uint16_t srcClipWidth, uint16_t srcClipHeight, bool respectAlpha = false );
|
|
||||||
|
|
||||||
// Copy the raw data from the given buffer.
|
|
||||||
// void SetBitsFromBuffer( uint32_t *clearBuffer, uint16_t width, uint16_t height )
|
|
||||||
|
|
||||||
/// Target switching operations
|
|
||||||
|
|
||||||
// Flushes all ops to the target.
|
|
||||||
void FlushToTarget( void );
|
|
||||||
|
|
||||||
// Switches targets. Will flush to old target before switching. Also, if kDiscard isn't specified, will copy contents of new target to working surface
|
|
||||||
void SwitchTarget( plDynamicTextMap *target ); // Will force a flush
|
|
||||||
|
|
||||||
// Clears and resets everything. Does NOT flush.
|
|
||||||
void Reset( void );
|
|
||||||
|
|
||||||
bool IsValid( void ) const;
|
|
||||||
|
|
||||||
static bool CanHandleLotsOfThem( void );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
//// Protected Members ////
|
|
||||||
|
|
||||||
void IInit( void );
|
|
||||||
void IEnsureSurfaceUpdated( void );
|
|
||||||
void IRefreshOSJustify( void );
|
|
||||||
void ISetTextColor( hsColorRGBA &color, bool blockRGB );
|
|
||||||
|
|
||||||
void ISetFont( const plString &face, uint16_t size, uint8_t fontFlags = 0, bool antiAliasRGB = true );
|
|
||||||
|
|
||||||
plDynamicTextMap *fCurrTarget;
|
|
||||||
uint32_t fFlags;
|
|
||||||
Justify fJustify;
|
|
||||||
bool fFlushed;
|
|
||||||
|
|
||||||
plString fFontFace;
|
|
||||||
uint16_t fFontSize;
|
|
||||||
uint8_t fFontFlags;
|
|
||||||
bool fFontAntiAliasRGB;
|
|
||||||
bool fFontBlockedRGB;
|
|
||||||
|
|
||||||
static bool fForceSharedSurfaces;
|
|
||||||
static bool fOSDetected;
|
|
||||||
static bool fOSCanShareSurfaces;
|
|
||||||
|
|
||||||
#if HS_BUILD_FOR_WIN32
|
|
||||||
class plWinSurface
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
void *fBits;
|
|
||||||
|
|
||||||
virtual uint8_t IBitsPerPixel( void ) const = 0;
|
|
||||||
|
|
||||||
public:
|
|
||||||
HDC fDC;
|
|
||||||
HBITMAP fBitmap;
|
|
||||||
HFONT fFont;
|
|
||||||
COLORREF fTextColor;
|
|
||||||
int fSaveNum;
|
|
||||||
|
|
||||||
uint16_t fWidth, fHeight;
|
|
||||||
|
|
||||||
plString fFontFace;
|
|
||||||
uint16_t fFontSize;
|
|
||||||
uint8_t fFontFlags;
|
|
||||||
bool fFontAntiAliasRGB, fFontBlockedRGB;
|
|
||||||
|
|
||||||
plWinSurface();
|
|
||||||
~plWinSurface();
|
|
||||||
|
|
||||||
void Allocate( uint16_t w, uint16_t h );
|
|
||||||
void Release( void );
|
|
||||||
|
|
||||||
bool WillFit( uint16_t w, uint16_t h );
|
|
||||||
bool FontMatches( const plString &face, uint16_t size, uint8_t flags, bool aaRGB );
|
|
||||||
void SetFont( const plString &face, uint16_t size, uint8_t flags, bool aaRGB );
|
|
||||||
};
|
|
||||||
|
|
||||||
class plWinRGBSurface : public plWinSurface
|
|
||||||
{
|
|
||||||
virtual uint8_t IBitsPerPixel( void ) const { return 32; }
|
|
||||||
public:
|
|
||||||
uint32_t *GetBits( void ) const { return (uint32_t *)fBits; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class plWinAlphaSurface : public plWinSurface
|
|
||||||
{
|
|
||||||
virtual uint8_t IBitsPerPixel( void ) const { return 8; }
|
|
||||||
public:
|
|
||||||
uint8_t *GetBits( void ) const { return (uint8_t *)fBits; }
|
|
||||||
};
|
|
||||||
|
|
||||||
plWinRGBSurface fRGBSurface;
|
|
||||||
plWinAlphaSurface fAlphaSurface;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _plDynSurfaceWriter_h
|
|
@ -1,293 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program 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 General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// plWinFontCache Class Header //
|
|
||||||
// I've stopped keeping track, there are far too many reasons already to //
|
|
||||||
// hate Microsoft. Anyway, this class keeps track of various Win32 fonts we //
|
|
||||||
// allocate because Win98/ME seems to have problems re-allocating the exact //
|
|
||||||
// same freaking goddamn font over and over again. I mean, you'd think //
|
|
||||||
// there'd be a rule somewhere about deterministic behavior when calling //
|
|
||||||
// the exact same function with the exact same parameters over and over... //
|
|
||||||
// Oh, wait... //
|
|
||||||
// //
|
|
||||||
// Cyan, Inc. //
|
|
||||||
// //
|
|
||||||
//// Version History //////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// 11.25.2002 mcn - Created. //
|
|
||||||
// //
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "HeadSpin.h"
|
|
||||||
|
|
||||||
#include "plWinFontCache.h"
|
|
||||||
|
|
||||||
#include "plStatusLog/plStatusLog.h"
|
|
||||||
#include "plGImage/plDynSurfaceWriter.h"
|
|
||||||
|
|
||||||
#if HS_BUILD_FOR_WIN32
|
|
||||||
|
|
||||||
#include <wingdi.h>
|
|
||||||
|
|
||||||
|
|
||||||
const char* plWinFontCache::kCustFontExtension = ".prf";
|
|
||||||
|
|
||||||
|
|
||||||
plWinFontCache::plWinFontCache()
|
|
||||||
{
|
|
||||||
fInShutdown = false;
|
|
||||||
fCustFontDir = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
plWinFontCache::~plWinFontCache()
|
|
||||||
{
|
|
||||||
fInShutdown = true;
|
|
||||||
Clear();
|
|
||||||
delete [] fCustFontDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
plWinFontCache &plWinFontCache::GetInstance( void )
|
|
||||||
{
|
|
||||||
static plWinFontCache cache;
|
|
||||||
return cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
HFONT plWinFontCache::IFindFont( const plString &face, int height, int weight, bool italic, uint32_t quality )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
|
|
||||||
for( i = 0; i < fFontCache.GetCount(); i++ )
|
|
||||||
{
|
|
||||||
// Do other tests first, since they're cheaper
|
|
||||||
if( fFontCache[ i ].fHeight == height &&
|
|
||||||
fFontCache[ i ].fWeight == weight &&
|
|
||||||
fFontCache[ i ].fItalic == italic &&
|
|
||||||
fFontCache[ i ].fQuality == quality )
|
|
||||||
{
|
|
||||||
if (fFontCache[i].fFace == face)
|
|
||||||
return fFontCache[ i ].fFont;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
HFONT plWinFontCache::IMakeFont( const plString &face, int height, int weight, bool italic, uint32_t quality )
|
|
||||||
{
|
|
||||||
plFontRecord myRec;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
|
|
||||||
// Find a cached name for us
|
|
||||||
for( i = 0; i < fFontNameCache.GetCount(); i++ )
|
|
||||||
{
|
|
||||||
if (face == fFontNameCache[i])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( i == fFontNameCache.GetCount() )
|
|
||||||
fFontNameCache.Append(face);
|
|
||||||
|
|
||||||
myRec.fFace = fFontNameCache[ i ];
|
|
||||||
myRec.fHeight = height;
|
|
||||||
myRec.fWeight = weight;
|
|
||||||
myRec.fItalic = italic;
|
|
||||||
myRec.fQuality = quality;
|
|
||||||
|
|
||||||
myRec.fFont = CreateFontW( height, 0, 0, 0, weight, italic ? TRUE : FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
|
||||||
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, face.ToWchar().GetData() );
|
|
||||||
|
|
||||||
if( myRec.fFont != nil )
|
|
||||||
{
|
|
||||||
//#ifdef HS_DEBUGGING
|
|
||||||
#if 1
|
|
||||||
LOGFONT fontInfo;
|
|
||||||
|
|
||||||
if( GetObject( myRec.fFont, sizeof( fontInfo ), &fontInfo ) )
|
|
||||||
{
|
|
||||||
const char *err = nil;
|
|
||||||
|
|
||||||
if( fontInfo.lfQuality != quality )
|
|
||||||
err = "Quality of created font does not match";
|
|
||||||
if( fontInfo.lfHeight != height )
|
|
||||||
err = "Height of created font does not match";
|
|
||||||
if( fontInfo.lfWeight != weight )
|
|
||||||
err = "Weight of created font does not match";
|
|
||||||
if( static_cast<bool>(fontInfo.lfItalic) != italic )
|
|
||||||
err = "Italic-ness of created font does not match";
|
|
||||||
if( face.CompareI(fontInfo.lfFaceName) != 0 )
|
|
||||||
err = "Face of created font does not match";
|
|
||||||
|
|
||||||
if( err != nil )
|
|
||||||
{
|
|
||||||
static bool triedClearing = false;
|
|
||||||
|
|
||||||
if( fontInfo.lfQuality != quality )
|
|
||||||
{
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "ERROR: CreateFont() failed to return proper font (%s). Using what was given...", err );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "ERROR: CreateFont() failed to return proper font (%s). %s", err, triedClearing ? "" : "Clearing cache and retrying..." );
|
|
||||||
if( !triedClearing )
|
|
||||||
{
|
|
||||||
triedClearing = true;
|
|
||||||
|
|
||||||
// Didn't work, so get rid of it
|
|
||||||
DeleteObject( myRec.fFont );
|
|
||||||
|
|
||||||
// Clear all fonts and try again
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
// Make sure we reload our custom fonts tho
|
|
||||||
ILoadCustomFonts();
|
|
||||||
|
|
||||||
// Try again
|
|
||||||
HFONT font = IMakeFont( face, height, weight, italic, quality );
|
|
||||||
|
|
||||||
triedClearing = false;
|
|
||||||
|
|
||||||
return font;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fFontCache.Append( myRec );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "ERROR: CreateFont() call FAILED (face: %s, size: %d %s %s)",
|
|
||||||
face.c_str(), -height, weight == FW_BOLD ? "bold" : "", italic ? "italic" : "" );
|
|
||||||
}
|
|
||||||
|
|
||||||
return myRec.fFont;
|
|
||||||
}
|
|
||||||
|
|
||||||
HFONT plWinFontCache::GetMeAFont( const plString &face, int height, int weight, bool italic, uint32_t quality )
|
|
||||||
{
|
|
||||||
HFONT font = IFindFont( face, height, weight, italic, quality );
|
|
||||||
if( font == nil )
|
|
||||||
font = IMakeFont( face, height, weight, italic, quality );
|
|
||||||
|
|
||||||
return font;
|
|
||||||
}
|
|
||||||
|
|
||||||
void plWinFontCache::Clear( void )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
|
|
||||||
if( !fInShutdown )
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "** Clearing Win32 font cache **" );
|
|
||||||
|
|
||||||
for( i = 0; i < fFontCache.GetCount(); i++ )
|
|
||||||
DeleteObject( fFontCache[ i ].fFont );
|
|
||||||
fFontCache.Reset();
|
|
||||||
|
|
||||||
fFontNameCache.Reset();
|
|
||||||
|
|
||||||
for( i = 0; i < fCustFonts.GetCount(); i++ )
|
|
||||||
{
|
|
||||||
#if (_WIN32_WINNT >= 0x0500)
|
|
||||||
if (plDynSurfaceWriter::CanHandleLotsOfThem())
|
|
||||||
RemoveFontResourceExW(fCustFonts[i]->fFilename.AsString().ToWchar(), FR_PRIVATE, 0);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
if (RemoveFontResourceW(fCustFonts[i]->fFilename.AsString().ToWchar()) == 0)
|
|
||||||
{
|
|
||||||
int q= 0;
|
|
||||||
DWORD e = GetLastError();
|
|
||||||
}
|
|
||||||
delete fCustFonts[ i ];
|
|
||||||
}
|
|
||||||
fCustFonts.Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void plWinFontCache::FreeFont( HFONT font )
|
|
||||||
{
|
|
||||||
// Currently a no-op, but should do some sort of ref-counting
|
|
||||||
}
|
|
||||||
|
|
||||||
void plWinFontCache::LoadCustomFonts( const char *dir )
|
|
||||||
{
|
|
||||||
delete [] fCustFontDir;
|
|
||||||
fCustFontDir = ( dir != nil ) ? hsStrcpy( dir ) : nil;
|
|
||||||
|
|
||||||
ILoadCustomFonts();
|
|
||||||
}
|
|
||||||
|
|
||||||
void plWinFontCache::ILoadCustomFonts( void )
|
|
||||||
{
|
|
||||||
if( fCustFontDir == nil )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Iterate through all the custom fonts in our dir
|
|
||||||
int numAdded;
|
|
||||||
|
|
||||||
std::vector<plFileName> fonts = plFileSystem::ListDir(fCustFontDir, kCustFontExtension);
|
|
||||||
for (auto iter = fonts.begin(); iter != fonts.end(); ++iter)
|
|
||||||
{
|
|
||||||
// Note that this call can be translated as "does my OS suck?"
|
|
||||||
#if (_WIN32_WINNT >= 0x0500)
|
|
||||||
if( plDynSurfaceWriter::CanHandleLotsOfThem() )
|
|
||||||
numAdded = AddFontResourceExW(iter->AsString().ToWchar(), FR_PRIVATE, 0);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
numAdded = AddFontResourceW(iter->AsString().ToWchar());
|
|
||||||
|
|
||||||
if( numAdded > 0 )
|
|
||||||
{
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "WinFontCache: Added custom font %s, %d fonts", iter->GetFileName().c_str(), numAdded );
|
|
||||||
fCustFonts.Append(new plCustFont(*iter));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plStatusLog::AddLineS( "pipeline.log", "WinFontCache: Unable to load custom font %s", iter->GetFileName().c_str() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,130 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program 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 General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// plWinFontCache Class Header //
|
|
||||||
// I've stopped keeping track, there are far too many reasons already to //
|
|
||||||
// hate Microsoft. Anyway, this class keeps track of various Win32 fonts we //
|
|
||||||
// allocate because Win98/ME seems to have problems re-allocating the exact //
|
|
||||||
// same freaking goddamn font over and over again. I mean, you'd think //
|
|
||||||
// there'd be a rule somewhere about deterministic behavior when calling //
|
|
||||||
// the exact same function with the exact same parameters over and over... //
|
|
||||||
// Oh, wait... //
|
|
||||||
// //
|
|
||||||
// Cyan, Inc. //
|
|
||||||
// //
|
|
||||||
//// Version History //////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// 11.25.2002 mcn - Created. //
|
|
||||||
// //
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef _plWinFontCache_h
|
|
||||||
#define _plWinFontCache_h
|
|
||||||
|
|
||||||
|
|
||||||
#include "hsColorRGBA.h"
|
|
||||||
#include "hsTemplates.h"
|
|
||||||
#include "hsWindows.h" // FIXME: Windows header level include :(
|
|
||||||
|
|
||||||
#if HS_BUILD_FOR_WIN32
|
|
||||||
|
|
||||||
|
|
||||||
//// Class Definition /////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class plWinFontCache
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
class plFontRecord
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
HFONT fFont;
|
|
||||||
|
|
||||||
plString fFace;
|
|
||||||
int fHeight;
|
|
||||||
int fWeight;
|
|
||||||
bool fItalic;
|
|
||||||
uint32_t fQuality;
|
|
||||||
};
|
|
||||||
|
|
||||||
class plCustFont
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
plFileName fFilename;
|
|
||||||
|
|
||||||
plCustFont(const plFileName &c) { fFilename = c; }
|
|
||||||
};
|
|
||||||
|
|
||||||
bool fInShutdown;
|
|
||||||
|
|
||||||
hsTArray<plFontRecord> fFontCache;
|
|
||||||
hsTArray<plString> fFontNameCache;
|
|
||||||
|
|
||||||
char *fCustFontDir;
|
|
||||||
hsTArray<plCustFont *> fCustFonts;
|
|
||||||
|
|
||||||
plWinFontCache();
|
|
||||||
|
|
||||||
HFONT IFindFont( const plString &face, int height, int weight, bool italic, uint32_t quality );
|
|
||||||
HFONT IMakeFont( const plString &face, int height, int weight, bool italic, uint32_t quality );
|
|
||||||
|
|
||||||
void ILoadCustomFonts( void );
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual ~plWinFontCache();
|
|
||||||
static plWinFontCache &GetInstance( void );
|
|
||||||
|
|
||||||
HFONT GetMeAFont( const plString &face, int height, int weight, bool italic, uint32_t quality );
|
|
||||||
void FreeFont( HFONT font );
|
|
||||||
void Clear( void );
|
|
||||||
|
|
||||||
void LoadCustomFonts( const char *dir );
|
|
||||||
|
|
||||||
// Our custom font extension
|
|
||||||
static const char* kCustFontExtension;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // HS_BUILD_FOR_WIN32
|
|
||||||
#endif // _plWinFontCache_h
|
|
Reference in New Issue
Block a user