/Users/ericb/Desktop/SRC680_m247/starmath/source/format.cxx

Go to the documentation of this file.
00001 /*************************************************************************
00002  *
00003  *  OpenOffice.org - a multi-platform office productivity suite
00004  *
00005  *  $RCSfile: format.cxx,v $
00006  *
00007  *  $Revision: 1.13 $
00008  *
00009  *  last change: $Author: vg $ $Date: 2007/05/25 12:12:59 $
00010  *
00011  *  The Contents of this file are made available subject to
00012  *  the terms of GNU Lesser General Public License Version 2.1.
00013  *
00014  *
00015  *    GNU Lesser General Public License Version 2.1
00016  *    =============================================
00017  *    Copyright 2005 by Sun Microsystems, Inc.
00018  *    901 San Antonio Road, Palo Alto, CA 94303, USA
00019  *
00020  *    This library is free software; you can redistribute it and/or
00021  *    modify it under the terms of the GNU Lesser General Public
00022  *    License version 2.1, as published by the Free Software Foundation.
00023  *
00024  *    This library is distributed in the hope that it will be useful,
00025  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00026  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00027  *    Lesser General Public License for more details.
00028  *
00029  *    You should have received a copy of the GNU Lesser General Public
00030  *    License along with this library; if not, write to the Free Software
00031  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
00032  *    MA  02111-1307  USA
00033  *
00034  ************************************************************************/
00035 
00036 // MARKER(update_precomp.py): autogen include statement, do not remove
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 // Latin default-fonts
00057 static const USHORT aLatinDefFnts[FNT_END] =
00058 {
00059     DEFAULTFONT_SERIF,  // FNT_VARIABLE
00060     DEFAULTFONT_SERIF,  // FNT_FUNCTION
00061     DEFAULTFONT_SERIF,  // FNT_NUMBER
00062     DEFAULTFONT_SERIF,  // FNT_TEXT
00063     DEFAULTFONT_SERIF,  // FNT_SERIF
00064     DEFAULTFONT_SANS,   // FNT_SANS
00065     DEFAULTFONT_FIXED   // FNT_FIXED
00066     //StarSymbol,    // FNT_MATH
00067 };
00068 
00069 // CJK default-fonts
00073 static const USHORT aCJKDefFnts[FNT_END] =
00074 {
00075     DEFAULTFONT_SERIF,          // FNT_VARIABLE
00076     DEFAULTFONT_SERIF,          // FNT_FUNCTION
00077     DEFAULTFONT_SERIF,          // FNT_NUMBER
00078     DEFAULTFONT_CJK_TEXT,       // FNT_TEXT
00079     DEFAULTFONT_CJK_TEXT,       // FNT_SERIF
00080     DEFAULTFONT_CJK_DISPLAY,    // FNT_SANS
00081     DEFAULTFONT_CJK_TEXT        // FNT_FIXED
00082     //StarSymbol,    // FNT_MATH
00083 };
00084 
00085 // CTL default-fonts
00086 static const USHORT aCTLDefFnts[FNT_END] =
00087 {
00088     DEFAULTFONT_CTL_TEXT,    // FNT_VARIABLE
00089     DEFAULTFONT_CTL_TEXT,    // FNT_FUNCTION
00090     DEFAULTFONT_CTL_TEXT,    // FNT_NUMBER
00091     DEFAULTFONT_CTL_TEXT,    // FNT_TEXT
00092     DEFAULTFONT_CTL_TEXT,    // FNT_SERIF
00093     DEFAULTFONT_CTL_TEXT,    // FNT_SANS
00094     DEFAULTFONT_CTL_TEXT     // FNT_FIXED
00095     //StarSymbol,    // FNT_MATH
00096 };
00097 
00098 
00099 String GetDefaultFontName( LanguageType nLang, USHORT nIdent )
00100 {
00101     DBG_ASSERT( /*FNT_BEGIN <= nIdent  &&*/  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 

Generated on Wed Feb 20 17:21:56 2008 for maths by  doxygen 1.5.1