LCOV - code coverage report
Current view: top level - starmath/source - format.cxx (source / functions) Hit Total Coverage
Test: commit 0e63ca4fde4e446f346e35849c756a30ca294aab Lines: 78 99 78.8 %
Date: 2014-04-11 Functions: 4 5 80.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       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/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      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 .
      18             :  */
      19             : 
      20             : #include <tools/stream.hxx>
      21             : #include <vcl/svapp.hxx>
      22             : #include <editeng/scripttypeitem.hxx>
      23             : #include "format.hxx"
      24             : 
      25             : 
      26             : 
      27             : // Latin default-fonts
      28             : static const sal_uInt16 aLatinDefFnts[FNT_END] =
      29             : {
      30             :     DEFAULTFONT_SERIF,  // FNT_VARIABLE
      31             :     DEFAULTFONT_SERIF,  // FNT_FUNCTION
      32             :     DEFAULTFONT_SERIF,  // FNT_NUMBER
      33             :     DEFAULTFONT_SERIF,  // FNT_TEXT
      34             :     DEFAULTFONT_SERIF,  // FNT_SERIF
      35             :     DEFAULTFONT_SANS,   // FNT_SANS
      36             :     DEFAULTFONT_FIXED   // FNT_FIXED
      37             :     //OpenSymbol,    // FNT_MATH
      38             : };
      39             : 
      40             : // CJK default-fonts
      41             : //! we use non-asian fonts for variables, functions and numbers since they
      42             : //! look better and even in asia only latin letters will be used for those.
      43             : //! At least that's what I was told...
      44             : static const sal_uInt16 aCJKDefFnts[FNT_END] =
      45             : {
      46             :     DEFAULTFONT_SERIF,          // FNT_VARIABLE
      47             :     DEFAULTFONT_SERIF,          // FNT_FUNCTION
      48             :     DEFAULTFONT_SERIF,          // FNT_NUMBER
      49             :     DEFAULTFONT_CJK_TEXT,       // FNT_TEXT
      50             :     DEFAULTFONT_CJK_TEXT,       // FNT_SERIF
      51             :     DEFAULTFONT_CJK_DISPLAY,    // FNT_SANS
      52             :     DEFAULTFONT_CJK_TEXT        // FNT_FIXED
      53             :     //OpenSymbol,    // FNT_MATH
      54             : };
      55             : 
      56             : // CTL default-fonts
      57             : static const sal_uInt16 aCTLDefFnts[FNT_END] =
      58             : {
      59             :     DEFAULTFONT_CTL_TEXT,    // FNT_VARIABLE
      60             :     DEFAULTFONT_CTL_TEXT,    // FNT_FUNCTION
      61             :     DEFAULTFONT_CTL_TEXT,    // FNT_NUMBER
      62             :     DEFAULTFONT_CTL_TEXT,    // FNT_TEXT
      63             :     DEFAULTFONT_CTL_TEXT,    // FNT_SERIF
      64             :     DEFAULTFONT_CTL_TEXT,    // FNT_SANS
      65             :     DEFAULTFONT_CTL_TEXT     // FNT_FIXED
      66             :     //OpenSymbol,    // FNT_MATH
      67             : };
      68             : 
      69             : 
      70          63 : OUString GetDefaultFontName( LanguageType nLang, sal_uInt16 nIdent )
      71             : {
      72             :     OSL_ENSURE( /*FNT_BEGIN <= nIdent  &&*/  nIdent <= FNT_END,
      73             :             "index out opd range" );
      74             : 
      75          63 :     if (FNT_MATH == nIdent)
      76           0 :         return OUString(FNTNAME_MATH);
      77             :     else
      78             :     {
      79             :         const sal_uInt16 *pTable;
      80          63 :         switch ( SvtLanguageOptions::GetScriptTypeOfLanguage( nLang ) )
      81             :         {
      82          63 :             case SCRIPTTYPE_LATIN :     pTable = aLatinDefFnts; break;
      83           0 :             case SCRIPTTYPE_ASIAN :     pTable = aCJKDefFnts; break;
      84           0 :             case SCRIPTTYPE_COMPLEX :   pTable = aCTLDefFnts; break;
      85             :             default :
      86           0 :                 pTable = aLatinDefFnts;
      87             :                 SAL_WARN("starmath", "unknown script-type");
      88             :         }
      89             : 
      90          63 :         return Application::GetDefaultDevice()->GetDefaultFont(
      91          63 :                         pTable[ nIdent ], nLang,
      92         126 :                         DEFAULTFONT_FLAGS_ONLYONE ).GetName();
      93             :     }
      94             : }
      95             : 
      96             : 
      97             : 
      98         359 : SmFormat::SmFormat()
      99         359 : :   aBaseSize(0, SmPtsTo100th_mm(12))
     100             : {
     101         359 :     nVersion    = SM_FMT_VERSION_NOW;
     102             : 
     103         359 :     eHorAlign       = AlignCenter;
     104         359 :     nGreekCharStyle = 0;
     105         359 :     bIsTextmode     = bScaleNormalBrackets = false;
     106             : 
     107         359 :     vSize[SIZ_TEXT]     = 100;
     108         359 :     vSize[SIZ_INDEX]    = 60;
     109             :     vSize[SIZ_FUNCTION] =
     110         359 :     vSize[SIZ_OPERATOR] = 100;
     111         359 :     vSize[SIZ_LIMITS]   = 60;
     112             : 
     113         359 :     vDist[DIS_HORIZONTAL]           = 10;
     114         359 :     vDist[DIS_VERTICAL]             = 5;
     115         359 :     vDist[DIS_ROOT]                 = 0;
     116             :     vDist[DIS_SUPERSCRIPT]          =
     117         359 :     vDist[DIS_SUBSCRIPT]            = 20;
     118             :     vDist[DIS_NUMERATOR]            =
     119         359 :     vDist[DIS_DENOMINATOR]          = 0;
     120         359 :     vDist[DIS_FRACTION]             = 10;
     121         359 :     vDist[DIS_STROKEWIDTH]          = 5;
     122             :     vDist[DIS_UPPERLIMIT]           =
     123         359 :     vDist[DIS_LOWERLIMIT]           = 0;
     124             :     vDist[DIS_BRACKETSIZE]          =
     125         359 :     vDist[DIS_BRACKETSPACE]         = 5;
     126         359 :     vDist[DIS_MATRIXROW]            = 3;
     127         359 :     vDist[DIS_MATRIXCOL]            = 30;
     128             :     vDist[DIS_ORNAMENTSIZE]         =
     129         359 :     vDist[DIS_ORNAMENTSPACE]        = 0;
     130         359 :     vDist[DIS_OPERATORSIZE]         = 50;
     131         359 :     vDist[DIS_OPERATORSPACE]        = 20;
     132             :     vDist[DIS_LEFTSPACE]            =
     133         359 :     vDist[DIS_RIGHTSPACE]           = 100;
     134             :     vDist[DIS_TOPSPACE]             =
     135         359 :     vDist[DIS_BOTTOMSPACE]          =
     136         718 :     vDist[DIS_NORMALBRACKETSIZE]    = 0;
     137             : 
     138         359 :     vFont[FNT_VARIABLE] =
     139         359 :     vFont[FNT_FUNCTION] =
     140         359 :     vFont[FNT_NUMBER]   =
     141         359 :     vFont[FNT_TEXT]     =
     142         718 :     vFont[FNT_SERIF]    = SmFace(OUString(FNTNAME_TIMES), aBaseSize);
     143         359 :     vFont[FNT_SANS]     = SmFace(OUString(FNTNAME_HELV),  aBaseSize);
     144         359 :     vFont[FNT_FIXED]    = SmFace(OUString(FNTNAME_COUR),  aBaseSize);
     145         359 :     vFont[FNT_MATH]     = SmFace(OUString(FNTNAME_MATH),  aBaseSize);
     146             : 
     147         359 :     vFont[FNT_MATH].SetCharSet( RTL_TEXTENCODING_UNICODE );
     148             : 
     149         359 :     vFont[FNT_VARIABLE].SetItalic(ITALIC_NORMAL);
     150         359 :     vFont[FNT_FUNCTION].SetItalic(ITALIC_NONE);
     151         359 :     vFont[FNT_NUMBER]  .SetItalic(ITALIC_NONE);
     152         359 :     vFont[FNT_TEXT]    .SetItalic(ITALIC_NONE);
     153         359 :     vFont[FNT_SERIF]   .SetItalic(ITALIC_NONE);
     154         359 :     vFont[FNT_SANS]    .SetItalic(ITALIC_NONE);
     155         359 :     vFont[FNT_FIXED]   .SetItalic(ITALIC_NONE);
     156             : 
     157        3231 :     for ( sal_uInt16 i = FNT_BEGIN;  i <= FNT_END;  i++ )
     158             :     {
     159        2872 :         SmFace &rFace = vFont[i];
     160        2872 :         rFace.SetTransparent( true );
     161        2872 :         rFace.SetAlign( ALIGN_BASELINE );
     162        2872 :         rFace.SetColor( COL_AUTO );
     163        2872 :         bDefaultFont[i] = false;
     164             :     }
     165         359 : }
     166             : 
     167             : 
     168        5624 : void SmFormat::SetFont(sal_uInt16 nIdent, const SmFace &rFont, bool bDefault )
     169             : {
     170        5624 :     vFont[nIdent] = rFont;
     171        5624 :     vFont[nIdent].SetTransparent( true );
     172        5624 :     vFont[nIdent].SetAlign( ALIGN_BASELINE );
     173             : 
     174        5624 :     bDefaultFont[nIdent] = bDefault;
     175        5624 : }
     176             : 
     177         689 : SmFormat & SmFormat::operator = (const SmFormat &rFormat)
     178             : {
     179         689 :     SetBaseSize(rFormat.GetBaseSize());
     180         689 :     SetVersion (rFormat.GetVersion());
     181         689 :     SetHorAlign(rFormat.GetHorAlign());
     182         689 :     SetTextmode(rFormat.IsTextmode());
     183         689 :     SetGreekCharStyle(rFormat.GetGreekCharStyle());
     184         689 :     SetScaleNormalBrackets(rFormat.IsScaleNormalBrackets());
     185             : 
     186             :     sal_uInt16  i;
     187        6201 :     for (i = FNT_BEGIN;  i <= FNT_END;  i++)
     188             :     {
     189        5512 :         SetFont(i, rFormat.GetFont(i));
     190        5512 :         SetDefaultFont(i, rFormat.IsDefaultFont(i));
     191             :     }
     192        4134 :     for (i = SIZ_BEGIN;  i <= SIZ_END;  i++)
     193        3445 :         SetRelSize(i, rFormat.GetRelSize(i));
     194       17225 :     for (i = DIS_BEGIN;  i <= DIS_END;  i++)
     195       16536 :         SetDistance(i, rFormat.GetDistance(i));
     196             : 
     197         689 :     return *this;
     198             : }
     199             : 
     200             : 
     201           0 : bool SmFormat::operator == (const SmFormat &rFormat) const
     202             : {
     203           0 :     bool bRes = aBaseSize == rFormat.aBaseSize  &&
     204           0 :                 eHorAlign == rFormat.eHorAlign  &&
     205           0 :                 nGreekCharStyle == rFormat.nGreekCharStyle &&
     206           0 :                 bIsTextmode == rFormat.bIsTextmode  &&
     207           0 :                 bScaleNormalBrackets  == rFormat.bScaleNormalBrackets;
     208             : 
     209             :     sal_uInt16 i;
     210           0 :     for (i = 0;  i <= SIZ_END && bRes;  ++i)
     211             :     {
     212           0 :         if (vSize[i] != rFormat.vSize[i])
     213           0 :             bRes = false;
     214             :     }
     215           0 :     for (i = 0;  i <= DIS_END && bRes;  ++i)
     216             :     {
     217           0 :         if (vDist[i] != rFormat.vDist[i])
     218           0 :             bRes = false;
     219             :     }
     220           0 :     for (i = 0;  i <= FNT_END && bRes;  ++i)
     221             :     {
     222           0 :         if (vFont[i] != rFormat.vFont[i]  ||
     223           0 :             bDefaultFont[i] != rFormat.bDefaultFont[i])
     224           0 :             bRes = false;
     225             :     }
     226             : 
     227           0 :     return bRes;
     228             : }
     229             : 
     230             : 
     231             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10