Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.
Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
42 lines
884 B
C++
42 lines
884 B
C++
#ifndef RAGNAROK_SOURCE_RENDER_TEXT_FONTCACHE_H
|
|
#define RAGNAROK_SOURCE_RENDER_TEXT_FONTCACHE_H
|
|
|
|
#include <algorithm>
|
|
#include <vector>
|
|
#include <windows.h>
|
|
|
|
namespace Gdiplus {
|
|
using std::max;
|
|
using std::min;
|
|
}
|
|
|
|
struct FontEntry {
|
|
int family;
|
|
int height;
|
|
unsigned charset;
|
|
unsigned char bold;
|
|
unsigned char italic;
|
|
HFONT font;
|
|
int privateResources;
|
|
};
|
|
|
|
class FontCache {
|
|
public:
|
|
FontCache();
|
|
~FontCache();
|
|
HFONT Get(int family, int height, unsigned charset, unsigned char bold, unsigned char italic);
|
|
|
|
private:
|
|
std::vector<FontEntry> m_fonts;
|
|
ULONG_PTR m_gdiplus;
|
|
static void CreateSystemFont(FontEntry& entry);
|
|
static bool CreatePrivateFont(FontEntry& entry);
|
|
FontCache(const FontCache&) = delete;
|
|
FontCache& operator=(const FontCache&) = delete;
|
|
};
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(FontEntry) == 24);
|
|
#endif
|
|
|
|
#endif
|