/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_filter.hxx" #include #include using namespace ::com::sun::star; // --------------------------------------------------------------- CGMOutAct::CGMOutAct( CGM& rCGM ) { mpCGM = &rCGM; mnCurrentPage = 0; mnGroupActCount = mnGroupLevel = 0; mpGroupLevel = new sal_uInt32[ CGM_OUTACT_MAX_GROUP_LEVEL ]; mpPoints = (Point*)new sal_Int8[ 0x2000 * sizeof( Point ) ]; mpFlags = new sal_uInt8[ 0x2000 ]; mnIndex = 0; mpGradient = NULL; }; // --------------------------------------------------------------- CGMOutAct::~CGMOutAct() { delete[] (sal_Int8*) mpPoints; delete[] mpFlags; delete[] mpGroupLevel; if ( mpGradient ) delete mpGradient; }; // --------------------------------------------------------------- void CGMOutAct::BeginFigure() { if ( mnIndex ) EndFigure(); BeginGroup(); mnIndex = 0; } // --------------------------------------------------------------- void CGMOutAct::CloseRegion() { if ( mnIndex > 2 ) { NewRegion(); DrawPolyPolygon( maPolyPolygon ); maPolyPolygon.Clear(); } } // --------------------------------------------------------------- void CGMOutAct::NewRegion() { if ( mnIndex > 2 ) { Polygon aPolygon( mnIndex, mpPoints, mpFlags ); maPolyPolygon.Insert( aPolygon ); } mnIndex = 0; } // --------------------------------------------------------------- void CGMOutAct::EndFigure() { NewRegion(); DrawPolyPolygon( maPolyPolygon ); maPolyPolygon.Clear(); EndGroup(); mnIndex = 0; } // --------------------------------------------------------------- void CGMOutAct::RegPolyLine( Polygon& rPolygon, sal_Bool bReverse ) { sal_uInt16 nPoints = rPolygon.GetSize(); if ( nPoints ) { if ( bReverse ) { for ( sal_uInt16 i = 0; i < nPoints; i++ ) { mpPoints[ mnIndex + i ] = rPolygon.GetPoint( nPoints - i - 1 ); mpFlags[ mnIndex + i ] = (sal_Int8)rPolygon.GetFlags( nPoints - i - 1 ); } } else { for ( sal_uInt16 i = 0; i < nPoints; i++ ) { mpPoints[ mnIndex + i ] = rPolygon.GetPoint( i ); mpFlags[ mnIndex + i ] = (sal_Int8)rPolygon.GetFlags( i ); } } mnIndex = mnIndex + nPoints; } } // --------------------------------------------------------------- void CGMOutAct::SetGradientOffset( long nHorzOfs, long nVertOfs, sal_uInt32 /*nType*/ ) { if ( !mpGradient ) mpGradient = new awt::Gradient; mpGradient->XOffset = ( (sal_uInt16)nHorzOfs & 0x7f ); mpGradient->YOffset = ( (sal_uInt16)nVertOfs & 0x7f ); } // --------------------------------------------------------------- void CGMOutAct::SetGradientAngle( long nAngle ) { if ( !mpGradient ) mpGradient = new awt::Gradient; mpGradient->Angle = sal::static_int_cast< sal_Int16 >(nAngle); } // --------------------------------------------------------------- void CGMOutAct::SetGradientDescriptor( sal_uInt32 nColorFrom, sal_uInt32 nColorTo ) { if ( !mpGradient ) mpGradient = new awt::Gradient; mpGradient->StartColor = nColorFrom; mpGradient->EndColor = nColorTo; } // --------------------------------------------------------------- void CGMOutAct::SetGradientStyle( sal_uInt32 nStyle, double /*fRatio*/ ) { if ( !mpGradient ) mpGradient = new awt::Gradient; switch ( nStyle ) { case 0xff : { mpGradient->Style = awt::GradientStyle_AXIAL; } break; case 4 : { mpGradient->Style = awt::GradientStyle_RADIAL; // CONICAL } break; case 3 : { mpGradient->Style = awt::GradientStyle_RECT; } break; case 2 : { mpGradient->Style = awt::GradientStyle_ELLIPTICAL; } break; default : { mpGradient->Style = awt::GradientStyle_LINEAR; } } }