blob: 226ddbeb4ecc004d6689b043f55dc9e7d21b408d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/* -*- 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 INCLUDED_VCL_INC_FONTATTRIBUTES_HXX
#define INCLUDED_VCL_INC_FONTATTRIBUTES_HXX
#include <rtl/ustring.hxx>
#include <i18nlangtag/languagetag.hxx>
#include <vcl/vclenum.hxx>
/* The following class is extraordinarily similar to ImplFont. */
class FontAttributes
{
public:
explicit FontAttributes();
FontAttributes( const FontAttributes& );
// device independent font functions
const OUString& GetFamilyName() const { return maFamilyName; }
FontFamily GetFamilyType() const { return meFamily; }
const OUString& GetStyleName() const { return maStyleName; }
FontWeight GetWeight() const { return meWeight; }
FontItalic GetItalic() const { return meItalic; }
FontPitch GetPitch() const { return mePitch; }
FontWidth GetWidthType() const { return meWidthType; }
TextAlign GetAlignment() const { return meAlign; }
rtl_TextEncoding GetCharSet() const { return meCharSet; }
bool IsSymbolFont() const { return mbSymbolFlag; }
void SetFamilyName(const OUString& sFamilyName) { maFamilyName = sFamilyName; }
void SetStyleName( const OUString& sStyleName) { maStyleName = sStyleName; }
void SetFamilyType(const FontFamily eFontFamily) { meFamily = eFontFamily; }
void SetPitch(const FontPitch ePitch ) { mePitch = ePitch; }
void SetItalic(const FontItalic eItalic ) { meItalic = eItalic; }
void SetWeight(const FontWeight eWeight ) { meWeight = eWeight; }
void SetWidthType(const FontWidth eWidthType) { meWidthType = eWidthType; }
void SetAlignment(const TextAlign eAlignment) { meAlign = eAlignment; }
void SetCharSet( const rtl_TextEncoding );
void SetSymbolFlag(const bool );
bool CompareDeviceIndependentFontAttributes(const FontAttributes& rOther) const;
// Device dependent functions
int GetQuality() const { return mnQuality; }
OUString GetMapNames() const { return maMapNames; }
bool IsBuiltInFont() const { return mbDevice; }
bool CanEmbed() const { return mbEmbeddable; }
bool CanSubset() const { return mbSubsettable; }
bool CanRotate() const { return mbOrientation; }
bool HasMapNames() const { return (maMapNames.getLength() > 0); }
void SetQuality( int nQuality ) { mnQuality = nQuality; }
void IncreaseQualityBy( int nQualityAmount ) { mnQuality += nQualityAmount; }
void DecreaseQualityBy( int nQualityAmount ) { mnQuality -= nQualityAmount; }
void SetMapNames( OUString const & aMapNames ) { maMapNames = aMapNames; }
void AddMapName( OUString const& );
void SetBuiltInFontFlag( bool bIsBuiltInFont ) { mbDevice = bIsBuiltInFont; }
void SetEmbeddableFlag ( bool bEmbeddable ) { mbEmbeddable = bEmbeddable; }
void SetSubsettableFlag( bool bSubsettable ) { mbSubsettable = bSubsettable; }
void SetOrientationFlag( bool bCanRotate ) { mbOrientation = bCanRotate; }
private:
// device independent variables
OUString maFamilyName; // Font Family Name
OUString maStyleName; // Font Style Name
FontWeight meWeight; // Weight Type
FontFamily meFamily; // Family Type
FontPitch mePitch; // Pitch Type
FontWidth meWidthType; // Width Type
FontItalic meItalic; // Slant Type
TextAlign meAlign; // Text alignment
rtl_TextEncoding meCharSet; // RTL_TEXTENCODING_SYMBOL or RTL_TEXTENCODING_UNICODE
bool mbSymbolFlag; // Is font a symbol?
// device dependent variables
OUString maMapNames; // List of family name aliases separated with ';'
int mnQuality; // Quality (used when similar fonts compete)
bool mbOrientation; // true: physical font can be rotated
bool mbDevice; // true: built in font
bool mbSubsettable; // true: a subset of the font can be created
bool mbEmbeddable; // true: the font can be embedded
};
inline void FontAttributes::SetSymbolFlag( const bool bSymbolFlag )
{
mbSymbolFlag = bSymbolFlag;
if ( bSymbolFlag )
{
meCharSet = RTL_TEXTENCODING_SYMBOL;
}
else
{
// if the symbol flag is unset, but it was a symbol font before then
// until the character set encoding is set via SetCharSet then we
// can't know what the characterset is!
if ( meCharSet == RTL_TEXTENCODING_SYMBOL )
{
meCharSet = RTL_TEXTENCODING_DONTKNOW;
}
}
}
inline void FontAttributes::SetCharSet( const rtl_TextEncoding aEncoding )
{
meCharSet = aEncoding;
mbSymbolFlag = meCharSet == RTL_TEXTENCODING_SYMBOL;
}
inline void FontAttributes::AddMapName( OUString const & aMapName )
{
if( maMapNames.getLength() > 0 )
{
maMapNames += ";";
}
if (aMapName.getLength() == 0)
{
SAL_WARN("vcl.fonts", "New map name is empty");
return;
}
maMapNames += aMapName;
}
#endif // INCLUDED_VCL_INC_FONTATTRIBUTES_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|