summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorThomas Arnhold <thomas@arnhold.org>2014-04-15 01:22:08 +0200
committerThomas Arnhold <thomas@arnhold.org>2014-04-15 01:26:16 +0200
commit88718a876e0d4467eaaccfc3c1873df2b53bf1d3 (patch)
treec3963545524c640a6820437be83be14ad893390a /starmath
parent6bb7fa8df523d3ae7b9945009fb1034f28cb0a0a (diff)
starmath: remove duplicate SmTmpDevice
Change-Id: Ib1733ece03ad0a5ffad5157a622546d0cbac0a35
Diffstat (limited to 'starmath')
-rw-r--r--starmath/Library_sm.mk1
-rw-r--r--starmath/source/node.cxx115
-rw-r--r--starmath/source/tmpdevice.cxx76
-rw-r--r--starmath/source/tmpdevice.hxx48
-rw-r--r--starmath/source/visitors.cxx84
5 files changed, 151 insertions, 173 deletions
diff --git a/starmath/Library_sm.mk b/starmath/Library_sm.mk
index 3abafb78a61f..fc1d1e1a9077 100644
--- a/starmath/Library_sm.mk
+++ b/starmath/Library_sm.mk
@@ -78,6 +78,7 @@ $(eval $(call gb_Library_add_exception_objects,sm,\
starmath/source/smmod \
starmath/source/symbol \
starmath/source/toolbox \
+ starmath/source/tmpdevice \
starmath/source/typemap \
starmath/source/unodoc \
starmath/source/unomodel \
diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx
index 24319df243f6..d8bde2a1980d 100644
--- a/starmath/source/node.cxx
+++ b/starmath/source/node.cxx
@@ -25,98 +25,19 @@
#include "document.hxx"
#include "view.hxx"
#include "mathtype.hxx"
+#include "tmpdevice.hxx"
#include "visitors.hxx"
-#include <boost/noncopyable.hpp>
-#include <comphelper/string.hxx>
-#include <tools/gen.hxx>
-#include <tools/fract.hxx>
-#include <rtl/math.hxx>
#include <tools/color.hxx>
-#include <vcl/metric.hxx>
-#include <vcl/lineinfo.hxx>
+#include <tools/fract.hxx>
+#include <tools/gen.hxx>
#include <vcl/outdev.hxx>
-#include <sfx2/module.hxx>
#include <math.h>
#include <float.h>
-// SmTmpDevice
-// Allows for font and color changes. The original settings will be restored
-// in the destructor.
-// It's main purpose is to allow for the "const" in the 'OutputDevice'
-// argument in the 'Arrange' functions and restore changes made in the 'Draw'
-// functions.
-// Usually a MapMode of 1/100th mm will be used.
-
-
-class SmTmpDevice: private boost::noncopyable
-{
- OutputDevice &rOutDev;
-
- Color Impl_GetColor( const Color& rColor );
-
-public:
- SmTmpDevice(OutputDevice &rTheDev, bool bUseMap100th_mm);
- ~SmTmpDevice() { rOutDev.Pop(); }
-
- void SetFont(const Font &rNewFont);
-
- operator OutputDevice & () { return rOutDev; }
-};
-
-
-SmTmpDevice::SmTmpDevice(OutputDevice &rTheDev, bool bUseMap100th_mm) :
- rOutDev(rTheDev)
-{
- rOutDev.Push( PUSH_FONT | PUSH_MAPMODE |
- PUSH_LINECOLOR | PUSH_FILLCOLOR | PUSH_TEXTCOLOR );
- if (bUseMap100th_mm && MAP_100TH_MM != rOutDev.GetMapMode().GetMapUnit())
- {
- SAL_WARN("starmath", "incorrect MapMode?");
- rOutDev.SetMapMode( MAP_100TH_MM ); //Immer fuer 100% fomatieren
- }
-}
-
-
-Color SmTmpDevice::Impl_GetColor( const Color& rColor )
-{
- ColorData nNewCol = rColor.GetColor();
- if (COL_AUTO == nNewCol)
- {
- if (OUTDEV_PRINTER == rOutDev.GetOutDevType())
- nNewCol = COL_BLACK;
- else
- {
- Color aBgCol( rOutDev.GetBackground().GetColor() );
- if (OUTDEV_WINDOW == rOutDev.GetOutDevType())
- aBgCol = ((Window &) rOutDev).GetDisplayBackground().GetColor();
-
- nNewCol = SM_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor;
-
- Color aTmpColor( nNewCol );
- if (aBgCol.IsDark() && aTmpColor.IsDark())
- nNewCol = COL_WHITE;
- else if (aBgCol.IsBright() && aTmpColor.IsBright())
- nNewCol = COL_BLACK;
- }
- }
- return Color( nNewCol );
-}
-
-
-void SmTmpDevice::SetFont(const Font &rNewFont)
-{
- rOutDev.SetFont( rNewFont );
- rOutDev.SetTextColor( Impl_GetColor( rNewFont.GetColor() ) );
-}
-
-
-
-
-
SmNode::SmNode(SmNodeType eNodeType, const SmToken &rNodeToken)
: aNodeToken( rNodeToken )
, eType( eNodeType )
@@ -862,7 +783,7 @@ void SmTableNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
nFormulaBaseline = GetBaseline();
else
{
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect aRect = (SmRect(aTmpDev, &rFormat, OUString("a"),
@@ -914,7 +835,7 @@ void SmLineNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
if (NULL != (pNode = GetSubNode(i)))
pNode->Arrange(rDev, rFormat);
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
if (nSize < 1)
@@ -1485,7 +1406,7 @@ void SmBinDiagonalNode::Arrange(const OutputDevice &rDev, const SmFormat &rForma
//! some routines being called extract some info from the OutputDevice's
//! font (eg the space to be used for borders OR the font name(!!)).
//! Thus the font should reflect the needs and has to be set!
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
pLeft->Arrange(aTmpDev, rFormat);
@@ -1905,7 +1826,7 @@ void SmVerticalBraceNode::Arrange(const OutputDevice &rDev, const SmFormat &rFor
OSL_ENSURE(pBrace, "Sm: NULL pointer!");
OSL_ENSURE(pScript, "Sm: NULL pointer!");
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
pBody->Arrange(aTmpDev, rFormat);
@@ -2288,7 +2209,7 @@ void SmPolyLineNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
//! some routines being called extract some info from the OutputDevice's
//! font (eg the space to be used for borders OR the font name(!!)).
//! Thus the font should reflect the needs and has to be set!
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
long nBorderwidth = GetFont().GetBorderWidth();
@@ -2381,7 +2302,7 @@ void SmRectangleNode::Arrange(const OutputDevice &rDev, const SmFormat &/*rForma
if (nWidth == 0)
nWidth = nFontHeight / 3;
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
// add some borderspace
@@ -2447,7 +2368,7 @@ void SmTextNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
SIZ_FUNCTION : SIZ_TEXT;
GetFont() *= Fraction (rFormat.GetRelSize(nSizeDesc), 100);
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect::operator = (SmRect(aTmpDev, &rFormat, aText, GetFont().GetBorderWidth()));
@@ -2729,7 +2650,7 @@ void SmMathSymbolNode::AdaptToX(const OutputDevice &rDev, sal_uLong nWidth)
aFntSize.Width() = nWidth;
GetFont().SetSize(aFntSize);
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
// get denominator of error factor for width
@@ -2765,7 +2686,7 @@ void SmMathSymbolNode::AdaptToY(const OutputDevice &rDev, sal_uLong nHeight)
aFntSize.Height() = nHeight;
GetFont().SetSize(aFntSize);
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
// get denominator of error factor for height
@@ -2809,7 +2730,7 @@ void SmMathSymbolNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat
GetFont() *= Fraction (rFormat.GetRelSize(SIZ_TEXT), 100);
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect::operator = (SmRect(aTmpDev, &rFormat, rText, GetFont().GetBorderWidth()));
@@ -3031,7 +2952,7 @@ void SmSpecialNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
{
PrepareAttributes();
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(), GetFont().GetBorderWidth()));
@@ -3044,7 +2965,7 @@ void SmGlyphSpecialNode::Arrange(const OutputDevice &rDev, const SmFormat &rForm
{
PrepareAttributes();
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(),
@@ -3068,7 +2989,7 @@ void SmPlaceNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
{
PrepareAttributes();
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(), GetFont().GetBorderWidth()));
@@ -3092,7 +3013,7 @@ void SmErrorNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
{
PrepareAttributes();
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
const OUString &rText = GetText();
@@ -3129,7 +3050,7 @@ void SmBlankNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell)
void SmBlankNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat)
{
- SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
+ SmTmpDevice aTmpDev ((OutputDevice &) rDev, true);
aTmpDev.SetFont(GetFont());
// make distance depend on the font height
diff --git a/starmath/source/tmpdevice.cxx b/starmath/source/tmpdevice.cxx
new file mode 100644
index 000000000000..dc2af56972db
--- /dev/null
+++ b/starmath/source/tmpdevice.cxx
@@ -0,0 +1,76 @@
+/* -*- 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 .
+ */
+
+#include "smmod.hxx"
+#include "tmpdevice.hxx"
+
+// SmTmpDevice
+// Allows for font and color changes. The original settings will be restored
+// in the destructor.
+// It's main purpose is to allow for the "const" in the 'OutputDevice'
+// argument in the 'Arrange' functions and restore changes made in the 'Draw'
+// functions.
+// Usually a MapMode of 1/100th mm will be used.
+
+SmTmpDevice::SmTmpDevice(OutputDevice &rTheDev, bool bUseMap100th_mm) :
+ rOutDev(rTheDev)
+{
+ rOutDev.Push( PUSH_FONT | PUSH_MAPMODE |
+ PUSH_LINECOLOR | PUSH_FILLCOLOR | PUSH_TEXTCOLOR );
+ if (bUseMap100th_mm && MAP_100TH_MM != rOutDev.GetMapMode().GetMapUnit())
+ {
+ SAL_WARN("starmath", "incorrect MapMode?");
+ rOutDev.SetMapMode( MAP_100TH_MM ); //format for 100% always
+ }
+}
+
+
+Color SmTmpDevice::Impl_GetColor( const Color& rColor )
+{
+ ColorData nNewCol = rColor.GetColor();
+ if (COL_AUTO == nNewCol)
+ {
+ if (OUTDEV_PRINTER == rOutDev.GetOutDevType())
+ nNewCol = COL_BLACK;
+ else
+ {
+ Color aBgCol( rOutDev.GetBackground().GetColor() );
+ if (OUTDEV_WINDOW == rOutDev.GetOutDevType())
+ aBgCol = ((Window &) rOutDev).GetDisplayBackground().GetColor();
+
+ nNewCol = SM_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor;
+
+ Color aTmpColor( nNewCol );
+ if (aBgCol.IsDark() && aTmpColor.IsDark())
+ nNewCol = COL_WHITE;
+ else if (aBgCol.IsBright() && aTmpColor.IsBright())
+ nNewCol = COL_BLACK;
+ }
+ }
+ return Color( nNewCol );
+}
+
+
+void SmTmpDevice::SetFont(const Font &rNewFont)
+{
+ rOutDev.SetFont( rNewFont );
+ rOutDev.SetTextColor( Impl_GetColor( rNewFont.GetColor() ) );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/source/tmpdevice.hxx b/starmath/source/tmpdevice.hxx
new file mode 100644
index 000000000000..f80a32bd170d
--- /dev/null
+++ b/starmath/source/tmpdevice.hxx
@@ -0,0 +1,48 @@
+/* -*- 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_STARMATH_SOURCE_TMPDEVICE_HXX
+#define INCLUDED_STARMATH_SOURCE_TMPDEVICE_HXX
+
+#include <boost/noncopyable.hpp>
+#include <tools/color.hxx>
+#include <vcl/lineinfo.hxx>
+#include <vcl/outdev.hxx>
+
+class SmTmpDevice: private boost::noncopyable
+{
+ OutputDevice &rOutDev;
+
+ Color Impl_GetColor( const Color& rColor );
+
+public:
+ SmTmpDevice(OutputDevice &rTheDev, bool bUseMap100th_mm);
+ ~SmTmpDevice() { rOutDev.Pop(); }
+
+ void SetFont(const Font &rNewFont);
+
+ void SetLineColor( const Color& rColor ) { rOutDev.SetLineColor( Impl_GetColor(rColor) ); }
+ void SetFillColor( const Color& rColor ) { rOutDev.SetFillColor( Impl_GetColor(rColor) ); }
+
+ operator OutputDevice & () { return rOutDev; }
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/source/visitors.cxx b/starmath/source/visitors.cxx
index bb8588906ab2..7c64241e7172 100644
--- a/starmath/source/visitors.cxx
+++ b/starmath/source/visitors.cxx
@@ -6,7 +6,11 @@
* 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/.
*/
+
+#include <tools/gen.hxx>
+#include <vcl/lineinfo.hxx>
#include "visitors.hxx"
+#include "tmpdevice.hxx"
#include "cursor.hxx"
// SmVisitorTest
@@ -456,78 +460,6 @@ void SmCaretPos2LineVisitor::DefaultVisit( SmNode* pNode )
line = SmCaretLine( p1.X( ), p1.Y( ), pNode->GetHeight( ) );
}
-// Nasty temporary device!!!
-
-#include <boost/noncopyable.hpp>
-#include <tools/gen.hxx>
-#include <tools/fract.hxx>
-#include <rtl/math.hxx>
-#include <tools/color.hxx>
-#include <vcl/metric.hxx>
-#include <vcl/lineinfo.hxx>
-#include <vcl/outdev.hxx>
-#include <sfx2/module.hxx>
-#include "symbol.hxx"
-#include "smmod.hxx"
-
-class SmTmpDevice2: private boost::noncopyable
-{
- OutputDevice &rOutDev;
-
- Color Impl_GetColor( const Color& rColor );
-
-public:
- SmTmpDevice2( OutputDevice &rTheDev, bool bUseMap100th_mm );
- ~SmTmpDevice2( ) { rOutDev.Pop( ); }
-
- void SetFont( const Font &rNewFont );
-
- void SetLineColor( const Color& rColor ) { rOutDev.SetLineColor( Impl_GetColor( rColor ) ); }
- void SetFillColor( const Color& rColor ) { rOutDev.SetFillColor( Impl_GetColor( rColor ) ); }
-};
-
-SmTmpDevice2::SmTmpDevice2( OutputDevice &rTheDev, bool bUseMap100th_mm ) :
- rOutDev( rTheDev )
-{
- rOutDev.Push( PUSH_FONT | PUSH_MAPMODE |
- PUSH_LINECOLOR | PUSH_FILLCOLOR | PUSH_TEXTCOLOR );
- if ( bUseMap100th_mm && MAP_100TH_MM != rOutDev.GetMapMode( ).GetMapUnit( ) )
- {
- SAL_WARN("starmath", "incorrect MapMode?");
- rOutDev.SetMapMode( MAP_100TH_MM ); //format for 100% always
- }
-}
-
-Color SmTmpDevice2::Impl_GetColor( const Color& rColor )
-{
- ColorData nNewCol = rColor.GetColor( );
- if ( COL_AUTO == nNewCol )
- {
- if ( OUTDEV_PRINTER == rOutDev.GetOutDevType( ) )
- nNewCol = COL_BLACK;
- else
- {
- Color aBgCol( rOutDev.GetBackground( ).GetColor( ) );
- if ( OUTDEV_WINDOW == rOutDev.GetOutDevType( ) )
- aBgCol = ( ( Window & ) rOutDev ).GetDisplayBackground( ).GetColor( );
-
- nNewCol = SM_MOD( )->GetColorConfig( ).GetColorValue( svtools::FONTCOLOR ).nColor;
-
- Color aTmpColor( nNewCol );
- if ( aBgCol.IsDark( ) && aTmpColor.IsDark( ) )
- nNewCol = COL_WHITE;
- else if ( aBgCol.IsBright( ) && aTmpColor.IsBright( ) )
- nNewCol = COL_BLACK;
- }
- }
- return Color( nNewCol );
-}
-
-void SmTmpDevice2::SetFont( const Font &rNewFont )
-{
- rOutDev.SetFont( rNewFont );
- rOutDev.SetTextColor( Impl_GetColor( rNewFont.GetColor( ) ) );
-}
// SmDrawingVisitor
@@ -664,7 +596,7 @@ void SmDrawingVisitor::Visit( SmRootSymbolNode* pNode )
// draw root-sign itself
DrawSpecialNode( pNode );
- SmTmpDevice2 aTmpDev( ( OutputDevice & ) rDev, true );
+ SmTmpDevice aTmpDev( ( OutputDevice & ) rDev, true );
aTmpDev.SetFillColor( pNode->GetFont( ).GetColor( ) );
rDev.SetLineColor( );
aTmpDev.SetFont( pNode->GetFont( ) );
@@ -720,7 +652,7 @@ void SmDrawingVisitor::Visit( SmPolyLineNode* pNode )
aPos ( Position + aOffset );
pNode->GetPolygon( ).Move( aPos.X( ), aPos.Y( ) ); //Works because Polygon wraps a pointer
- SmTmpDevice2 aTmpDev ( ( OutputDevice & ) rDev, false );
+ SmTmpDevice aTmpDev ( ( OutputDevice & ) rDev, false );
aTmpDev.SetLineColor( pNode->GetFont( ).GetColor( ) );
rDev.DrawPolyLine( pNode->GetPolygon( ), aInfo );
@@ -731,7 +663,7 @@ void SmDrawingVisitor::Visit( SmRectangleNode* pNode )
if ( pNode->IsPhantom( ) )
return;
- SmTmpDevice2 aTmpDev ( ( OutputDevice & ) rDev, false );
+ SmTmpDevice aTmpDev ( ( OutputDevice & ) rDev, false );
aTmpDev.SetFillColor( pNode->GetFont( ).GetColor( ) );
rDev.SetLineColor( );
aTmpDev.SetFont( pNode->GetFont( ) );
@@ -763,7 +695,7 @@ void SmDrawingVisitor::DrawTextNode( SmTextNode* pNode )
if ( pNode->IsPhantom() || pNode->GetText().isEmpty() || pNode->GetText()[0] == '\0' )
return;
- SmTmpDevice2 aTmpDev ( ( OutputDevice & ) rDev, false );
+ SmTmpDevice aTmpDev ( ( OutputDevice & ) rDev, false );
aTmpDev.SetFont( pNode->GetFont( ) );
Point aPos ( Position );