00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "precompiled_starmath.hxx"
00038
00039
00040 #ifndef _STREAM_HXX
00041 #include <tools/stream.hxx>
00042 #endif
00043 #ifndef _SV_SVAPP_HXX
00044 #include <vcl/svapp.hxx>
00045 #endif
00046 #ifndef _SVX_SCRIPTTYPEITEM_HXX
00047 #include <svx/scripttypeitem.hxx>
00048 #endif
00049
00050 #ifndef FORMAT_HXX
00051 #include "format.hxx"
00052 #endif
00053
00055
00056
00057 static const USHORT aLatinDefFnts[FNT_END] =
00058 {
00059 DEFAULTFONT_SERIF,
00060 DEFAULTFONT_SERIF,
00061 DEFAULTFONT_SERIF,
00062 DEFAULTFONT_SERIF,
00063 DEFAULTFONT_SERIF,
00064 DEFAULTFONT_SANS,
00065 DEFAULTFONT_FIXED
00066
00067 };
00068
00069
00073 static const USHORT aCJKDefFnts[FNT_END] =
00074 {
00075 DEFAULTFONT_SERIF,
00076 DEFAULTFONT_SERIF,
00077 DEFAULTFONT_SERIF,
00078 DEFAULTFONT_CJK_TEXT,
00079 DEFAULTFONT_CJK_TEXT,
00080 DEFAULTFONT_CJK_DISPLAY,
00081 DEFAULTFONT_CJK_TEXT
00082
00083 };
00084
00085
00086 static const USHORT aCTLDefFnts[FNT_END] =
00087 {
00088 DEFAULTFONT_CTL_TEXT,
00089 DEFAULTFONT_CTL_TEXT,
00090 DEFAULTFONT_CTL_TEXT,
00091 DEFAULTFONT_CTL_TEXT,
00092 DEFAULTFONT_CTL_TEXT,
00093 DEFAULTFONT_CTL_TEXT,
00094 DEFAULTFONT_CTL_TEXT
00095
00096 };
00097
00098
00099 String GetDefaultFontName( LanguageType nLang, USHORT nIdent )
00100 {
00101 DBG_ASSERT( nIdent <= FNT_END,
00102 "index out opd range" );
00103
00104 if (FNT_MATH == nIdent)
00105 return String::CreateFromAscii( FNTNAME_MATH );
00106 else
00107 {
00108 const USHORT *pTable;
00109 switch ( SvtLanguageOptions::GetScriptTypeOfLanguage( nLang ) )
00110 {
00111 case SCRIPTTYPE_LATIN : pTable = aLatinDefFnts; break;
00112 case SCRIPTTYPE_ASIAN : pTable = aCJKDefFnts; break;
00113 case SCRIPTTYPE_COMPLEX : pTable = aCTLDefFnts; break;
00114 default :
00115 pTable = aLatinDefFnts;
00116 DBG_ERROR( "unknown script-type" );
00117 }
00118
00119 return Application::GetDefaultDevice()->GetDefaultFont(
00120 pTable[ nIdent ], nLang,
00121 DEFAULTFONT_FLAGS_ONLYONE ).GetName();
00122 }
00123 }
00124
00126
00127 SmFormat::SmFormat()
00128 : aBaseSize(0, SmPtsTo100th_mm(12))
00129 {
00130 nVersion = SM_FMT_VERSION_NOW;
00131
00132 eHorAlign = AlignCenter;
00133 bIsTextmode = bScaleNormalBrackets = FALSE;
00134
00135 vSize[SIZ_TEXT] = 100;
00136 vSize[SIZ_INDEX] = 60;
00137 vSize[SIZ_FUNCTION] =
00138 vSize[SIZ_OPERATOR] = 100;
00139 vSize[SIZ_LIMITS] = 60;
00140
00141 vDist[DIS_HORIZONTAL] = 10;
00142 vDist[DIS_VERTICAL] = 5;
00143 vDist[DIS_ROOT] = 0;
00144 vDist[DIS_SUPERSCRIPT] =
00145 vDist[DIS_SUBSCRIPT] = 20;
00146 vDist[DIS_NUMERATOR] =
00147 vDist[DIS_DENOMINATOR] = 0;
00148 vDist[DIS_FRACTION] = 10;
00149 vDist[DIS_STROKEWIDTH] = 5;
00150 vDist[DIS_UPPERLIMIT] =
00151 vDist[DIS_LOWERLIMIT] = 0;
00152 vDist[DIS_BRACKETSIZE] =
00153 vDist[DIS_BRACKETSPACE] = 5;
00154 vDist[DIS_MATRIXROW] = 3;
00155 vDist[DIS_MATRIXCOL] = 30;
00156 vDist[DIS_ORNAMENTSIZE] =
00157 vDist[DIS_ORNAMENTSPACE] = 0;
00158 vDist[DIS_OPERATORSIZE] = 50;
00159 vDist[DIS_OPERATORSPACE] = 20;
00160 vDist[DIS_LEFTSPACE] =
00161 vDist[DIS_RIGHTSPACE] = 100;
00162 vDist[DIS_TOPSPACE] =
00163 vDist[DIS_BOTTOMSPACE] =
00164 vDist[DIS_NORMALBRACKETSIZE] = 0;
00165
00166 vFont[FNT_VARIABLE] =
00167 vFont[FNT_FUNCTION] =
00168 vFont[FNT_NUMBER] =
00169 vFont[FNT_TEXT] =
00170 vFont[FNT_SERIF] = SmFace(C2S(FNTNAME_TIMES), aBaseSize);
00171 vFont[FNT_SANS] = SmFace(C2S(FNTNAME_HELV), aBaseSize);
00172 vFont[FNT_FIXED] = SmFace(C2S(FNTNAME_COUR), aBaseSize);
00173 vFont[FNT_MATH] = SmFace(C2S(FNTNAME_MATH), aBaseSize);
00174
00175 vFont[FNT_MATH].SetCharSet( RTL_TEXTENCODING_UNICODE );
00176
00177 vFont[FNT_VARIABLE].SetItalic(ITALIC_NORMAL);
00178 vFont[FNT_FUNCTION].SetItalic(ITALIC_NONE);
00179 vFont[FNT_NUMBER] .SetItalic(ITALIC_NONE);
00180 vFont[FNT_TEXT] .SetItalic(ITALIC_NONE);
00181 vFont[FNT_SERIF] .SetItalic(ITALIC_NONE);
00182 vFont[FNT_SANS] .SetItalic(ITALIC_NONE);
00183 vFont[FNT_FIXED] .SetItalic(ITALIC_NONE);
00184
00185 for ( USHORT i = FNT_BEGIN; i <= FNT_END; i++ )
00186 {
00187 SmFace &rFace = vFont[i];
00188 rFace.SetTransparent( TRUE );
00189 rFace.SetAlign( ALIGN_BASELINE );
00190 rFace.SetColor( COL_AUTO );
00191 bDefaultFont[i] = FALSE;
00192 }
00193 }
00194
00195
00196 void SmFormat::SetFont(USHORT nIdent, const SmFace &rFont, BOOL bDefault )
00197 {
00198 vFont[nIdent] = rFont;
00199 vFont[nIdent].SetTransparent( TRUE );
00200 vFont[nIdent].SetAlign( ALIGN_BASELINE );
00201
00202 bDefaultFont[nIdent] = bDefault;
00203 }
00204
00205 SmFormat & SmFormat::operator = (const SmFormat &rFormat)
00206 {
00207 SetBaseSize(rFormat.GetBaseSize());
00208 SetVersion (rFormat.GetVersion());
00209 SetHorAlign(rFormat.GetHorAlign());
00210 SetTextmode(rFormat.IsTextmode());
00211 SetScaleNormalBrackets(rFormat.IsScaleNormalBrackets());
00212
00213 USHORT i;
00214 for (i = FNT_BEGIN; i <= FNT_END; i++)
00215 {
00216 SetFont(i, rFormat.GetFont(i));
00217 SetDefaultFont(i, rFormat.IsDefaultFont(i));
00218 }
00219 for (i = SIZ_BEGIN; i <= SIZ_END; i++)
00220 SetRelSize(i, rFormat.GetRelSize(i));
00221 for (i = DIS_BEGIN; i <= DIS_END; i++)
00222 SetDistance(i, rFormat.GetDistance(i));
00223
00224 return *this;
00225 }
00226
00227
00228 BOOL SmFormat::operator == (const SmFormat &rFormat) const
00229 {
00230 BOOL bRes = aBaseSize == rFormat.aBaseSize &&
00231 eHorAlign == rFormat.eHorAlign &&
00232 bIsTextmode == rFormat.bIsTextmode &&
00233 bScaleNormalBrackets == rFormat.bScaleNormalBrackets;
00234
00235 USHORT i;
00236 for (i = 0; i <= SIZ_END && bRes; ++i)
00237 {
00238 if (vSize[i] != rFormat.vSize[i])
00239 bRes = FALSE;
00240 }
00241 for (i = 0; i <= DIS_END && bRes; ++i)
00242 {
00243 if (vDist[i] != rFormat.vDist[i])
00244 bRes = FALSE;
00245 }
00246 for (i = 0; i <= FNT_END && bRes; ++i)
00247 {
00248 if (vFont[i] != rFormat.vFont[i] ||
00249 bDefaultFont[i] != rFormat.bDefaultFont[i])
00250 bRes = FALSE;
00251 }
00252
00253 return bRes;
00254 }
00255
00256