1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <svl/languageoptions.hxx>
21 #include <vcl/svapp.hxx>
22 #include <editeng/scripttypeitem.hxx>
26 // Latin default-fonts
27 static const DefaultFontType aLatinDefFnts
[FNT_END
] =
29 DefaultFontType::SERIF
, // FNT_VARIABLE
30 DefaultFontType::SERIF
, // FNT_FUNCTION
31 DefaultFontType::SERIF
, // FNT_NUMBER
32 DefaultFontType::SERIF
, // FNT_TEXT
33 DefaultFontType::SERIF
, // FNT_SERIF
34 DefaultFontType::SANS
, // FNT_SANS
35 DefaultFontType::FIXED
// FNT_FIXED
36 //OpenSymbol, // FNT_MATH
40 //! we use non-asian fonts for variables, functions and numbers since they
41 //! look better and even in asia only latin letters will be used for those.
42 //! At least that's what I was told...
43 static const DefaultFontType aCJKDefFnts
[FNT_END
] =
45 DefaultFontType::SERIF
, // FNT_VARIABLE
46 DefaultFontType::SERIF
, // FNT_FUNCTION
47 DefaultFontType::SERIF
, // FNT_NUMBER
48 DefaultFontType::CJK_TEXT
, // FNT_TEXT
49 DefaultFontType::CJK_TEXT
, // FNT_SERIF
50 DefaultFontType::CJK_DISPLAY
, // FNT_SANS
51 DefaultFontType::CJK_TEXT
// FNT_FIXED
52 //OpenSymbol, // FNT_MATH
56 static const DefaultFontType aCTLDefFnts
[FNT_END
] =
58 DefaultFontType::CTL_TEXT
, // FNT_VARIABLE
59 DefaultFontType::CTL_TEXT
, // FNT_FUNCTION
60 DefaultFontType::CTL_TEXT
, // FNT_NUMBER
61 DefaultFontType::CTL_TEXT
, // FNT_TEXT
62 DefaultFontType::CTL_TEXT
, // FNT_SERIF
63 DefaultFontType::CTL_TEXT
, // FNT_SANS
64 DefaultFontType::CTL_TEXT
// FNT_FIXED
65 //OpenSymbol, // FNT_MATH
69 OUString
GetDefaultFontName( LanguageType nLang
, sal_uInt16 nIdent
)
71 OSL_ENSURE( /*FNT_BEGIN <= nIdent &&*/ nIdent
<= FNT_END
,
72 "index out opd range" );
74 if (FNT_MATH
== nIdent
)
75 return OUString(FNTNAME_MATH
);
78 const DefaultFontType
*pTable
;
79 switch ( SvtLanguageOptions::GetScriptTypeOfLanguage( nLang
) )
81 case SvtScriptType::LATIN
: pTable
= aLatinDefFnts
; break;
82 case SvtScriptType::ASIAN
: pTable
= aCJKDefFnts
; break;
83 case SvtScriptType::COMPLEX
: pTable
= aCTLDefFnts
; break;
85 pTable
= aLatinDefFnts
;
86 SAL_WARN("starmath", "unknown script-type");
89 return OutputDevice::GetDefaultFont(
90 pTable
[ nIdent
], nLang
,
91 GetDefaultFontFlags::OnlyOne
).GetFamilyName();
97 : aBaseSize(0, SmPtsTo100th_mm(12))
99 eHorAlign
= AlignCenter
;
101 bIsTextmode
= bScaleNormalBrackets
= false;
103 vSize
[SIZ_TEXT
] = 100;
104 vSize
[SIZ_INDEX
] = 60;
105 vSize
[SIZ_FUNCTION
] =
106 vSize
[SIZ_OPERATOR
] = 100;
107 vSize
[SIZ_LIMITS
] = 60;
109 vDist
[DIS_HORIZONTAL
] = 10;
110 vDist
[DIS_VERTICAL
] = 5;
112 vDist
[DIS_SUPERSCRIPT
] =
113 vDist
[DIS_SUBSCRIPT
] = 20;
114 vDist
[DIS_NUMERATOR
] =
115 vDist
[DIS_DENOMINATOR
] = 0;
116 vDist
[DIS_FRACTION
] = 10;
117 vDist
[DIS_STROKEWIDTH
] = 5;
118 vDist
[DIS_UPPERLIMIT
] =
119 vDist
[DIS_LOWERLIMIT
] = 0;
120 vDist
[DIS_BRACKETSIZE
] =
121 vDist
[DIS_BRACKETSPACE
] = 5;
122 vDist
[DIS_MATRIXROW
] = 3;
123 vDist
[DIS_MATRIXCOL
] = 30;
124 vDist
[DIS_ORNAMENTSIZE
] =
125 vDist
[DIS_ORNAMENTSPACE
] = 0;
126 vDist
[DIS_OPERATORSIZE
] = 50;
127 vDist
[DIS_OPERATORSPACE
] = 20;
128 vDist
[DIS_LEFTSPACE
] =
129 vDist
[DIS_RIGHTSPACE
] = 100;
130 vDist
[DIS_TOPSPACE
] =
131 vDist
[DIS_BOTTOMSPACE
] =
132 vDist
[DIS_NORMALBRACKETSIZE
] = 0;
134 vFont
[FNT_VARIABLE
] =
135 vFont
[FNT_FUNCTION
] =
138 vFont
[FNT_SERIF
] = SmFace(OUString(FNTNAME_TIMES
), aBaseSize
);
139 vFont
[FNT_SANS
] = SmFace(OUString(FNTNAME_HELV
), aBaseSize
);
140 vFont
[FNT_FIXED
] = SmFace(OUString(FNTNAME_COUR
), aBaseSize
);
141 vFont
[FNT_MATH
] = SmFace(OUString(FNTNAME_MATH
), aBaseSize
);
143 vFont
[FNT_MATH
].SetCharSet( RTL_TEXTENCODING_UNICODE
);
145 vFont
[FNT_VARIABLE
].SetItalic(ITALIC_NORMAL
);
146 vFont
[FNT_FUNCTION
].SetItalic(ITALIC_NONE
);
147 vFont
[FNT_NUMBER
] .SetItalic(ITALIC_NONE
);
148 vFont
[FNT_TEXT
] .SetItalic(ITALIC_NONE
);
149 vFont
[FNT_SERIF
] .SetItalic(ITALIC_NONE
);
150 vFont
[FNT_SANS
] .SetItalic(ITALIC_NONE
);
151 vFont
[FNT_FIXED
] .SetItalic(ITALIC_NONE
);
153 for ( sal_uInt16 i
= FNT_BEGIN
; i
<= FNT_END
; i
++ )
155 SmFace
&rFace
= vFont
[i
];
156 rFace
.SetTransparent( true );
157 rFace
.SetAlignment( ALIGN_BASELINE
);
158 rFace
.SetColor( COL_AUTO
);
159 bDefaultFont
[i
] = false;
164 void SmFormat::SetFont(sal_uInt16 nIdent
, const SmFace
&rFont
, bool bDefault
)
166 vFont
[nIdent
] = rFont
;
167 vFont
[nIdent
].SetTransparent( true );
168 vFont
[nIdent
].SetAlignment( ALIGN_BASELINE
);
170 bDefaultFont
[nIdent
] = bDefault
;
173 SmFormat
& SmFormat::operator = (const SmFormat
&rFormat
)
175 SetBaseSize(rFormat
.GetBaseSize());
176 SetHorAlign(rFormat
.GetHorAlign());
177 SetTextmode(rFormat
.IsTextmode());
178 SetGreekCharStyle(rFormat
.GetGreekCharStyle());
179 SetScaleNormalBrackets(rFormat
.IsScaleNormalBrackets());
182 for (i
= FNT_BEGIN
; i
<= FNT_END
; i
++)
184 SetFont(i
, rFormat
.GetFont(i
));
185 SetDefaultFont(i
, rFormat
.IsDefaultFont(i
));
187 for (i
= SIZ_BEGIN
; i
<= SIZ_END
; i
++)
188 SetRelSize(i
, rFormat
.GetRelSize(i
));
189 for (i
= DIS_BEGIN
; i
<= DIS_END
; i
++)
190 SetDistance(i
, rFormat
.GetDistance(i
));
196 bool SmFormat::operator == (const SmFormat
&rFormat
) const
198 bool bRes
= aBaseSize
== rFormat
.aBaseSize
&&
199 eHorAlign
== rFormat
.eHorAlign
&&
200 nGreekCharStyle
== rFormat
.nGreekCharStyle
&&
201 bIsTextmode
== rFormat
.bIsTextmode
&&
202 bScaleNormalBrackets
== rFormat
.bScaleNormalBrackets
;
205 for (i
= 0; i
<= SIZ_END
&& bRes
; ++i
)
207 if (vSize
[i
] != rFormat
.vSize
[i
])
210 for (i
= 0; i
<= DIS_END
&& bRes
; ++i
)
212 if (vDist
[i
] != rFormat
.vDist
[i
])
215 for (i
= 0; i
<= FNT_END
&& bRes
; ++i
)
217 if (vFont
[i
] != rFormat
.vFont
[i
] ||
218 bDefaultFont
[i
] != rFormat
.bDefaultFont
[i
])
226 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */