diff options
Diffstat (limited to 'svtools/source/filter/sgvmain.cxx')
-rw-r--r-- | svtools/source/filter/sgvmain.cxx | 1074 |
1 files changed, 0 insertions, 1074 deletions
diff --git a/svtools/source/filter/sgvmain.cxx b/svtools/source/filter/sgvmain.cxx deleted file mode 100644 index 4d58b165d9..0000000000 --- a/svtools/source/filter/sgvmain.cxx +++ /dev/null @@ -1,1074 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" - -#include <rtl/math.hxx> -#include <osl/endian.h> -#include <vcl/graph.hxx> -#include <tools/poly.hxx> -#include <svtools/filter.hxx> -#include "sgffilt.hxx" -#include "sgfbram.hxx" -#include "sgvmain.hxx" -#include "sgvspln.hxx" -#include <unotools/ucbstreamhelper.hxx> - -#define SWAPPOINT(p) { \ - p.x=SWAPSHORT(p.x); \ - p.y=SWAPSHORT(p.y); } - -#define SWAPPAGE(p) { \ - p.Next =SWAPLONG (p.Next ); \ - p.nList =SWAPLONG (p.nList ); \ - p.ListEnd=SWAPLONG (p.ListEnd); \ - p.Paper.Size.x=SWAPSHORT(p.Paper.Size.x); \ - p.Paper.Size.y=SWAPSHORT(p.Paper.Size.y); \ - p.Paper.RandL =SWAPSHORT(p.Paper.RandL ); \ - p.Paper.RandR =SWAPSHORT(p.Paper.RandR ); \ - p.Paper.RandO =SWAPSHORT(p.Paper.RandO ); \ - p.Paper.RandU =SWAPSHORT(p.Paper.RandU ); \ - SWAPPOINT(p.U); \ - sal_uInt16 iTemp; \ - for (iTemp=0;iTemp<20;iTemp++) { \ - rPage.HlpLnH[iTemp]=SWAPSHORT(rPage.HlpLnH[iTemp]); \ - rPage.HlpLnV[iTemp]=SWAPSHORT(rPage.HlpLnV[iTemp]); }} - -#define SWAPOBJK(o) { \ - o.Last =SWAPLONG (o.Last ); \ - o.Next =SWAPLONG (o.Next ); \ - o.MemSize =SWAPSHORT(o.MemSize ); \ - SWAPPOINT(o.ObjMin); \ - SWAPPOINT(o.ObjMax); } - -#define SWAPLINE(l) { \ - l.LMSize=SWAPSHORT(l.LMSize); \ - l.LDicke=SWAPSHORT(l.LDicke); } - -#define SWAPAREA(a) { \ - a.FDummy2=SWAPSHORT(a.FDummy2); \ - a.FMuster=SWAPSHORT(a.FMuster); } - -#define SWAPTEXT(t) { \ - SWAPLINE(t.L); \ - SWAPAREA(t.F); \ - t.FontLo =SWAPSHORT(t.FontLo ); \ - t.FontHi =SWAPSHORT(t.FontHi ); \ - t.Grad =SWAPSHORT(t.Grad ); \ - t.Breite =SWAPSHORT(t.Breite ); \ - t.Schnitt=SWAPSHORT(t.Schnitt); \ - t.LnFeed =SWAPSHORT(t.LnFeed ); \ - t.Slant =SWAPSHORT(t.Slant ); \ - SWAPLINE(t.ShdL); \ - SWAPAREA(t.ShdF); \ - SWAPPOINT(t.ShdVers); \ - SWAPAREA(t.BackF); } - - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Einschraenkungen: -// -// - Flaechenmuster werden den unter StarView verfuegbaren Mustern angenaehert. -// - Linienenden werden unter StarView immer rund dargestellt und gehen ueber -// den Endpunkt der Linie hinaus. -// - Linienmuster werden den unter StarView verfuegbaren Mustern angenaehert. -// Transparent/Opak wird zur Zeit noch nicht beruecksichtigt. -// - Keine gedrehten Ellipsen -// -// -// -// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Fuer Fontuebersetzung /////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -SgfFontLst* pSgfFonts = 0; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Fuer Kreisunterarten, Text und gedrehte Rechtecke /////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -void RotatePoint(PointType& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs) -{ - sal_Int16 dx,dy; - double x1,y1; - dx=P.x-cx; - dy=P.y-cy; - x1=dx*cs-dy*sn; - y1=dy*cs+dx*sn; - P.x=cx+sal_Int16(x1); - P.y=cy+sal_Int16(y1); -} - -void RotatePoint(Point& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs) -{ - sal_Int16 dx,dy; - double x1,y1; - dx=(sal_Int16)(P.X()-cx); - dy=(sal_Int16)(P.Y()-cy); - x1=dx*cs-dy*sn; - y1=dy*cs+dx*sn; - P=Point(cx+sal_Int16(x1),cy+sal_Int16(y1)); -} - -sal_Int16 iMulDiv(sal_Int16 a, sal_Int16 Mul, sal_Int16 Div) -{ - sal_Int32 Temp; - Temp=sal_Int32(a)*sal_Int32(Mul)/sal_Int32(Div); - return sal_Int16(Temp); -} - -sal_uInt16 MulDiv(sal_uInt16 a, sal_uInt16 Mul, sal_uInt16 Div) -{ - sal_uInt32 Temp; - Temp=sal_uInt32(a)*sal_uInt32(Mul)/sal_uInt32(Div); - return sal_uInt16(Temp); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// SgfFilterSDrw /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -SvStream& operator>>(SvStream& rIStream, DtHdType& rDtHd) -{ - rIStream.Read((char*)&rDtHd.Reserved[0],DtHdSize); - return rIStream; -} - -void DtHdOverSeek(SvStream& rInp) -{ - sal_uLong FPos=rInp.Tell(); - FPos+=(sal_uLong)DtHdSize; - rInp.Seek(FPos); -// rInp.seekg(rInp.tellg()+(sal_uLong)DtHdSize); -} - - -SvStream& operator>>(SvStream& rIStream, PageType& rPage) -{ - rIStream.Read((char*)&rPage.Next,PageSize); -#if defined OSL_BIGENDIAN - SWAPPAGE(rPage); -#endif - return rIStream; -} - -void ObjkOverSeek(SvStream& rInp, ObjkType& rObjk) -{ - sal_uLong Siz; - Siz=(sal_uLong)rObjk.MemSize+rObjk.Last; // ObjSize+ObjAnhSize - rInp.Seek(rInp.Tell()+Siz); -} - -SvStream& operator>>(SvStream& rInp, ObjkType& rObjk) -{ // Die Fileposition im Stream bleibt unveraendert! - sal_uLong nPos; - nPos=rInp.Tell(); - rInp.Read((char*)&rObjk.Last,ObjkSize); -#if defined OSL_BIGENDIAN - SWAPOBJK(rObjk); -#endif -#ifdef InArbeit - sal_uLong nPos1=rInp.Tell(); - if(nPos == nPos1) InfoBox( NULL, "tellg funkt nich" ).Execute(); -#endif - rInp.Seek(nPos); -#ifdef InArbeit - if (rInp.Tell() != nPos) InfoBox( NULL, "seekg funkt nich" ).Execute(); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, StrkType& rStrk) -{ - rInp.Read((char*)&rStrk.Last,StrkSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rStrk); - SWAPLINE (rStrk.L); - SWAPPOINT(rStrk.Pos1); - SWAPPOINT(rStrk.Pos2); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, RectType& rRect) -{ - rInp.Read((char*)&rRect.Last,RectSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rRect); - SWAPLINE (rRect.L); - SWAPAREA (rRect.F); - SWAPPOINT(rRect.Pos1); - SWAPPOINT(rRect.Pos2); - rRect.Radius =SWAPSHORT(rRect.Radius ); - rRect.DrehWink=SWAPSHORT(rRect.DrehWink); - rRect.Slant =SWAPSHORT(rRect.Slant ); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, PolyType& rPoly) -{ - rInp.Read((char*)&rPoly.Last,PolySize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rPoly); - SWAPLINE (rPoly.L); - SWAPAREA (rPoly.F); - // rPoly.EckP=SWAPLONG(rPoly.EckP); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, SplnType& rSpln) -{ - rInp.Read((char*)&rSpln.Last,SplnSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rSpln); - SWAPLINE (rSpln.L); - SWAPAREA (rSpln.F); - // rSpln.EckP=SWAPLONG(rSpln.EckP); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, CircType& rCirc) -{ - rInp.Read((char*)&rCirc.Last,CircSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rCirc); - SWAPLINE (rCirc.L); - SWAPAREA (rCirc.F); - SWAPPOINT(rCirc.Radius); - SWAPPOINT(rCirc.Center); - rCirc.DrehWink =SWAPSHORT(rCirc.DrehWink ); - rCirc.StartWink=SWAPSHORT(rCirc.StartWink); - rCirc.RelWink =SWAPSHORT(rCirc.RelWink ); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, TextType& rText) -{ - rInp.Read((char*)&rText.Last,TextSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rText); - SWAPTEXT (rText.T); - SWAPPOINT(rText.Pos1); - SWAPPOINT(rText.Pos2); - rText.TopOfs =SWAPSHORT(rText.TopOfs ); - rText.DrehWink=SWAPSHORT(rText.DrehWink); - rText.BoxSlant=SWAPSHORT(rText.BoxSlant); - rText.BufSize =SWAPSHORT(rText.BufSize ); - //rText.Buf =SWAPLONG (rText.Buf ); - //rText.Ext =SWAPLONG (rText.Ext ); - SWAPPOINT(rText.FitSize); - rText.FitBreit=SWAPSHORT(rText.FitBreit); -#endif - rText.Buffer=NULL; - return rInp; -} -SvStream& operator>>(SvStream& rInp, BmapType& rBmap) -{ - rInp.Read((char*)&rBmap.Last,BmapSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rBmap); - SWAPAREA (rBmap.F); - SWAPPOINT(rBmap.Pos1); - SWAPPOINT(rBmap.Pos2); - rBmap.DrehWink=SWAPSHORT(rBmap.DrehWink); - rBmap.Slant =SWAPSHORT(rBmap.Slant ); - SWAPPOINT(rBmap.PixSize); -#endif - return rInp; -} -SvStream& operator>>(SvStream& rInp, GrupType& rGrup) -{ - rInp.Read((char*)&rGrup.Last,GrupSize); -#if defined OSL_BIGENDIAN - SWAPOBJK (rGrup); - rGrup.SbLo =SWAPSHORT(rGrup.SbLo ); - rGrup.SbHi =SWAPSHORT(rGrup.SbHi ); - rGrup.UpLo =SWAPSHORT(rGrup.UpLo ); - rGrup.UpHi =SWAPSHORT(rGrup.UpHi ); - rGrup.ChartSize=SWAPSHORT(rGrup.ChartSize); - rGrup.ChartPtr =SWAPLONG (rGrup.ChartPtr ); -#endif - return rInp; -} - - - -/************************************************************************* -|* -|* Sgv2SvFarbe() -|* -*************************************************************************/ -Color Sgv2SvFarbe(sal_uInt8 nFrb1, sal_uInt8 nFrb2, sal_uInt8 nInts) -{ - sal_uInt16 r1=0,g1=0,b1=0,r2=0,g2=0,b2=0; - sal_uInt8 nInt2=100-nInts; - switch(nFrb1 & 0x07) { - case 0: r1=0xFF; g1=0xFF; b1=0xFF; break; - case 1: r1=0xFF; g1=0xFF; break; - case 2: g1=0xFF; b1=0xFF; break; - case 3: g1=0xFF; break; - case 4: r1=0xFF; b1=0xFF; break; - case 5: r1=0xFF; break; - case 6: b1=0xFF; break; - case 7: break; - } - switch(nFrb2 & 0x07) { - case 0: r2=0xFF; g2=0xFF; b2=0xFF; break; - case 1: r2=0xFF; g2=0xFF; break; - case 2: g2=0xFF; b2=0xFF; break; - case 3: g2=0xFF; break; - case 4: r2=0xFF; b2=0xFF; break; - case 5: r2=0xFF; break; - case 6: b2=0xFF; break; - case 7: break; - } - r1=(sal_uInt16)((sal_uInt32)r1*nInts/100+(sal_uInt32)r2*nInt2/100); - g1=(sal_uInt16)((sal_uInt32)g1*nInts/100+(sal_uInt32)g2*nInt2/100); - b1=(sal_uInt16)((sal_uInt32)b1*nInts/100+(sal_uInt32)b2*nInt2/100); - Color aColor( (sal_uInt8)r1, (sal_uInt8)g1, (sal_uInt8)b1 ); - return aColor; -} - -void SetLine(ObjLineType& rLine, OutputDevice& rOut) -{ -/* !!! - PenStyle aStyle=PEN_SOLID; - switch(rLine.LMuster & 0x07) { - case 0: aStyle=PEN_NULL; break; - case 1: aStyle=PEN_SOLID; break; - case 2: aStyle=PEN_DOT; break; // . . . . . . . . . . . . . . - case 3: aStyle=PEN_DASH; break; // __ __ __ __ __ __ __ __ __ - case 4: aStyle=PEN_DASH; break; // ___ ___ ___ ___ ___ ___ ___ - case 5: aStyle=PEN_DASHDOT; break; // __ . __ . __ . __ . __ . __ - case 6: aStyle=PEN_DASHDOT; break; // __ _ __ _ __ _ __ _ __ _ __ - case 7: aStyle=PEN_DASHDOT; break; // ___ _ _ ___ _ _ ___ _ _ ___ - } - Pen aPen(Sgv2SvFarbe(rLine.LFarbe,rLine.LBFarbe,rLine.LIntens),rLine.LDicke,aStyle); - SetPen(aPen,rOut); -*/ - if( 0 == ( rLine.LMuster & 0x07 ) ) - rOut.SetLineColor(); - else - rOut.SetLineColor( Sgv2SvFarbe(rLine.LFarbe,rLine.LBFarbe,rLine.LIntens) ); -} - -void SetArea(ObjAreaType& rArea, OutputDevice& rOut) -{ -/* - BrushStyle aStyle=BRUSH_SOLID; - switch(rArea.FMuster & 0x00FF) { - case 0: aStyle=BRUSH_NULL; break; - case 1: aStyle=BRUSH_SOLID; break; - case 2: case 4: case 6: case 8: - case 10: case 12: case 14: case 16: - case 43: case 45: aStyle=BRUSH_VERT; break; - case 3: case 5: case 7: case 9: - case 11: case 13: case 15: case 17: - case 42: case 44: aStyle=BRUSH_HORZ; break; - case 18: case 20: case 22: case 24: - case 26: case 28: case 30: case 32: - case 46: case 48: aStyle=BRUSH_UPDIAG; break; - case 19: case 21: case 23: case 25: - case 27: case 29: case 31: case 33: - case 47: case 49: aStyle=BRUSH_DOWNDIAG; break; - case 34: case 35: case 36: case 37: aStyle=BRUSH_CROSS; break; - case 38: case 39: case 40: case 41: aStyle=BRUSH_DIAGCROSS; break; - default: aStyle=BRUSH_DIAGCROSS; break; - } - Brush aBrush(Sgv2SvFarbe(rArea.FFarbe,rArea.FBFarbe,rArea.FIntens),aStyle); - aBrush.SetTransparent((rArea.FMuster & 0x80) !=0L); - SetBrush(aBrush,rOut); -*/ - if( 0 == ( rArea.FMuster & 0x00FF ) ) - rOut.SetFillColor(); - else - rOut.SetFillColor( Sgv2SvFarbe( rArea.FFarbe,rArea.FBFarbe,rArea.FIntens ) ); -} - -/************************************************************************* -|* -|* ObjkType::DrawObjekt() -|* -*************************************************************************/ -void ObjkType::Draw(OutputDevice&) -{ -// ShowSDObjk(*this); -} - -void Obj0Type::Draw(OutputDevice&) {} - -/************************************************************************* -|* -|* StrkType::DrawObjekt() -|* -*************************************************************************/ -void StrkType::Draw(OutputDevice& rOut) -{ - SetLine(L,rOut); - rOut.DrawLine(Point(Pos1.x,Pos1.y),Point(Pos2.x,Pos2.y)); // !!! -} - -/************************************************************************* -|* -|* RectType::DrawObjekt() -|* -*************************************************************************/ -void SgfAreaColorIntens(sal_uInt16 Muster, sal_uInt8 Col1, sal_uInt8 Col2, sal_uInt8 Int, OutputDevice& rOut) -{ - ObjAreaType F; - F.FMuster=Muster; - F.FFarbe=Col2; - F.FBFarbe=Col1; - F.FIntens=Int; - SetArea(F,rOut); -} - -void DrawSlideRect(sal_Int16 x1, sal_Int16 y1, sal_Int16 x2, sal_Int16 y2, ObjAreaType& F, OutputDevice& rOut) -{ - sal_Int16 i,i0,b,b0; - sal_Int16 Int1,Int2; - sal_Int16 Col1,Col2; - // ClipMerk: HgdClipRec; - sal_Int16 cx,cy; - sal_Int16 MaxR; - sal_Int32 dx,dy; - - rOut.SetLineColor(); - if (x1>x2) { i=x1; x1=x2; x2=i; } - if (y1>y2) { i=y1; y1=y2; y2=i; } - Col1=F.FBFarbe & 0x87; Col2=F.FFarbe & 0x87; - Int1=100-F.FIntens; Int2=F.FIntens; - if (Int1==Int2) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.DrawRect(Rectangle(x1,y1,x2,y2)); - } else { - b0=Int1; - switch (F.FBFarbe & 0x38) { - case 0x08: { // vertikal - i0=y1; - i=y1; - while (i<=y2) { - b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-y1) /(sal_Int32)(y2-y1+1)); - if (b!=b0) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - rOut.DrawRect(Rectangle(x1,i0,x2,i-1)); - i0=i; b0=b; - } - i++; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.DrawRect(Rectangle(x1,i0,x2,y2)); - } break; - case 0x28: { // horizontal - i0=x1; - i=x1; - while (i<=x2) { - b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-x1) /(sal_Int32)(x2-x1+1)); - if (b!=b0) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - rOut.DrawRect(Rectangle(i0,y1,i-1,y2)); - i0=i; b0=b; - } - i++; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.DrawRect(Rectangle(i0,y1,x2,y2)); - } break; - - case 0x18: case 0x38: { // Kreis - Region ClipMerk=rOut.GetClipRegion(); - double a; - - rOut.SetClipRegion(Region(Rectangle(x1,y1,x2,y2))); - cx=(x1+x2) /2; - cy=(y1+y2) /2; - dx=x2-x1+1; - dy=y2-y1+1; - a=sqrt((double)(dx*dx+dy*dy)); - MaxR=sal_Int16(a) /2 +1; - b0=Int2; - i0=MaxR; if (MaxR<1) MaxR=1; - i=MaxR; - while (i>=0) { - b=Int1+sal_Int16((sal_Int32(Int2-Int1)*sal_Int32(i)) /sal_Int32(MaxR)); - if (b!=b0) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - //if (i0>200 || (Col1 & $80)!=0 || (Col2 & $80)!=0) { - // then begin { Fallunterscheidung fuer etwas bessere Performance } - // s2:=i0-i+2; - // SetPenSize(s2); - // s2:=s2 div 2; - // Circle(cx,cy,i0-s2,i0-s2);{} - // else - rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0)); - i0=i; b0=b; - } - i--; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int1,rOut); - rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0)); - rOut.SetClipRegion(ClipMerk); - } break; // Kreis - } - } -} - - -void RectType::Draw(OutputDevice& rOut) -{ - if (L.LMuster!=0) L.LMuster=1; // keine Linienmuster hier, nur an oder aus - SetArea(F,rOut); - if (DrehWink==0) { - if ((F.FBFarbe & 0x38)==0 || Radius!=0) { - SetLine(L,rOut); - rOut.DrawRect(Rectangle(Pos1.x,Pos1.y,Pos2.x,Pos2.y),Radius,Radius); - } else { - DrawSlideRect(Pos1.x,Pos1.y,Pos2.x,Pos2.y,F,rOut); - if (L.LMuster!=0) { - SetLine(L,rOut); - rOut.SetFillColor(); - rOut.DrawRect(Rectangle(Pos1.x,Pos1.y,Pos2.x,Pos2.y)); - } - } - } else { - Point aPts[4]; - sal_uInt16 i; - double sn,cs; - sn=sin(double(DrehWink)*3.14159265359/18000); - cs=cos(double(DrehWink)*3.14159265359/18000); - aPts[0]=Point(Pos1.x,Pos1.y); - aPts[1]=Point(Pos2.x,Pos1.y); - aPts[2]=Point(Pos2.x,Pos2.y); - aPts[3]=Point(Pos1.x,Pos2.y); - for (i=0;i<4;i++) { - RotatePoint(aPts[i],Pos1.x,Pos1.y,sn,cs); - } - SetLine(L,rOut); - Polygon aPoly(4,aPts); - rOut.DrawPolygon(aPoly); - } -} - -/************************************************************************* -|* -|* PolyType::Draw() -|* -*************************************************************************/ -void PolyType::Draw(OutputDevice& rOut) -{ - if ((Flags & PolyClosBit) !=0) SetArea(F,rOut); - SetLine(L,rOut); - Polygon aPoly(nPoints); - sal_uInt16 i; - for(i=0;i<nPoints;i++) aPoly.SetPoint(Point(EckP[i].x,EckP[i].y),i); - if ((Flags & PolyClosBit) !=0) { - rOut.DrawPolygon(aPoly); - } else { - rOut.DrawPolyLine(aPoly); - } -} - -/************************************************************************* -|* -|* SplnType::Draw() -|* -*************************************************************************/ -void SplnType::Draw(OutputDevice& rOut) -{ - if ((Flags & PolyClosBit) !=0) SetArea(F,rOut); - SetLine(L,rOut); - Polygon aPoly(0); - Polygon aSpln(nPoints); - sal_uInt16 i; - for(i=0;i<nPoints;i++) aSpln.SetPoint(Point(EckP[i].x,EckP[i].y),i); - if ((Flags & PolyClosBit) !=0) { - Spline2Poly(aSpln,sal_True,aPoly); - if (aPoly.GetSize()>0) rOut.DrawPolygon(aPoly); - } else { - Spline2Poly(aSpln,sal_False,aPoly); - if (aPoly.GetSize()>0) rOut.DrawPolyLine(aPoly); - } -} - -/************************************************************************* -|* -|* CircType::Draw() -|* -*************************************************************************/ -void DrawSlideCirc(sal_Int16 cx, sal_Int16 cy, sal_Int16 rx, sal_Int16 ry, ObjAreaType& F, OutputDevice& rOut) -{ - sal_Int16 x1=cx-rx; - sal_Int16 y1=cy-ry; - sal_Int16 x2=cx+rx; - sal_Int16 y2=cy+ry; - - sal_Int16 i,i0,b,b0; - sal_Int16 Int1,Int2; - sal_Int16 Col1,Col2; - - rOut.SetLineColor(); - Col1=F.FBFarbe & 0x87; Col2=F.FFarbe & 0x87; - Int1=100-F.FIntens; Int2=F.FIntens; - if (Int1==Int2) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.DrawEllipse(Rectangle(x1,y1,x2,y2)); - } else { - b0=Int1; - switch (F.FBFarbe & 0x38) { - case 0x08: { // vertikal - Region ClipMerk=rOut.GetClipRegion(); - i0=y1; - i=y1; - while (i<=y2) { - b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-y1) /(sal_Int32)(y2-y1+1)); - if (b!=b0) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - rOut.SetClipRegion(Rectangle(x1,i0,x2,i-1)); - rOut.DrawEllipse(Rectangle(x1,y1,x2,y2)); - i0=i; b0=b; - } - i++; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.SetClipRegion(Rectangle(x1,i0,x2,y2)); - rOut.DrawEllipse(Rectangle(x1,y1,x2,y2)); - rOut.SetClipRegion(ClipMerk); - } break; - case 0x28: { // horizontal - Region ClipMerk=rOut.GetClipRegion(); - i0=x1; - i=x1; - while (i<=x2) { - b=Int1+sal_Int16((sal_Int32)(Int2-Int1)*(sal_Int32)(i-x1) /(sal_Int32)(x2-x1+1)); - if (b!=b0) { - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - rOut.SetClipRegion(Rectangle(i0,y1,i-1,y2)); - rOut.DrawEllipse(Rectangle(x1,y1,x2,y2)); - i0=i; b0=b; - } - i++; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int2,rOut); - rOut.SetClipRegion(Rectangle(i0,y1,x2,y2)); - rOut.DrawEllipse(Rectangle(x1,y1,x2,y2)); - rOut.SetClipRegion(ClipMerk); - } break; - - case 0x18: case 0x38: { // Kreis - sal_Int16 MaxR; - - if (rx<1) rx=1; - if (ry<1) ry=1; - MaxR=rx; - b0=Int2; - i0=MaxR; if (MaxR<1) MaxR=1; - i=MaxR; - while (i>=0) { - b=Int1+sal_Int16((sal_Int32(Int2-Int1)*sal_Int32(i)) /sal_Int32(MaxR)); - if (b!=b0) { - sal_Int32 temp=sal_Int32(i0)*sal_Int32(ry)/sal_Int32(rx); - sal_Int16 j0=sal_Int16(temp); - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)b0,rOut); - rOut.DrawEllipse(Rectangle(cx-i0,cy-j0,cx+i0,cy+j0)); - i0=i; b0=b; - } - i--; - } - SgfAreaColorIntens(F.FMuster,(sal_uInt8)Col1,(sal_uInt8)Col2,(sal_uInt8)Int1,rOut); - rOut.DrawEllipse(Rectangle(cx-i0,cy-i0,cx+i0,cy+i0)); - } break; // Kreis - } - } -} - - -void CircType::Draw(OutputDevice& rOut) -{ - Rectangle aRect(Center.x-Radius.x,Center.y-Radius.y,Center.x+Radius.x,Center.y+Radius.y); - - if (L.LMuster!=0) L.LMuster=1; // keine Linienmuster hier, nur an oder aus - SetArea(F,rOut); - if ((Flags & 0x03)==CircFull) { - if ((F.FBFarbe & 0x38)==0) { - SetLine(L,rOut); - rOut.DrawEllipse(aRect); - } else { - DrawSlideCirc(Center.x,Center.y,Radius.x,Radius.y,F,rOut); - if (L.LMuster!=0) { - SetLine(L,rOut); - rOut.SetFillColor(); - rOut.DrawEllipse(aRect); - } - } - } else { - PointType a,b; - Point aStrt,aEnde; - double sn,cs; - - a.x=Center.x+Radius.x; a.y=Center.y; b=a; - sn=sin(double(StartWink)*3.14159265359/18000); - cs=cos(double(StartWink)*3.14159265359/18000); - RotatePoint(a,Center.x,Center.y,sn,cs); - sn=sin(double(StartWink+RelWink)*3.14159265359/18000); - cs=cos(double(StartWink+RelWink)*3.14159265359/18000); - RotatePoint(b,Center.x,Center.y,sn,cs); - if (Radius.x!=Radius.y) { - if (Radius.x<1) Radius.x=1; - if (Radius.y<1) Radius.y=1; - a.y = a.y - Center.y; - b.y = b.y - Center.y; - a.y=iMulDiv(a.y,Radius.y,Radius.x); - b.y=iMulDiv(b.y,Radius.y,Radius.x); - a.y = a.y + Center.y; - b.y = b.y + Center.y; - } - aStrt=Point(a.x,a.y); - aEnde=Point(b.x,b.y); - SetLine(L,rOut); - switch (Flags & 0x03) { - case CircArc : rOut.DrawArc(aRect,aEnde,aStrt); break; - case CircSect: - case CircAbsn: rOut.DrawPie(aRect,aEnde,aStrt); break; - } - } -} - -/************************************************************************* -|* -|* BmapType::Draw() -|* -*************************************************************************/ - -void BmapType::Draw(OutputDevice& rOut) -{ - //ifstream aInp; - sal_uInt16 nVersion; - String aStr( - reinterpret_cast< char const * >(&Filename[ 1 ]), - (xub_StrLen)Filename[ 0 ], RTL_TEXTENCODING_UTF8 ); - INetURLObject aFNam( aStr ); - - SvStream* pInp = ::utl::UcbStreamHelper::CreateStream( aFNam.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ ); - if ( pInp ) - { - unsigned char nSgfTyp=CheckSgfTyp( *pInp,nVersion); - switch(nSgfTyp) { - case SGF_BITIMAGE: { - GraphicFilter aFlt; - Graphic aGrf; - aFlt.ImportGraphic(aGrf,aFNam); - aGrf.Draw(&rOut,Point(Pos1.x,Pos1.y),Size(Pos2.x-Pos1.x,Pos2.y-Pos1.y)); - } break; - case SGF_SIMPVECT: { - GDIMetaFile aMtf; - SgfVectXofs=Pos1.x; - SgfVectYofs=Pos1.y; - SgfVectXmul=Pos2.x-Pos1.x; - SgfVectYmul=Pos2.y-Pos1.y; - SgfVectXdiv=0; - SgfVectYdiv=0; - SgfVectScal=sal_True; - SgfVectFilter(*pInp,aMtf); - SgfVectXofs=0; - SgfVectYofs=0; - SgfVectXmul=0; - SgfVectYmul=0; - SgfVectXdiv=0; - SgfVectYdiv=0; - SgfVectScal=sal_False; - aMtf.Play(&rOut); - } break; - } - delete pInp; - } -} - - -/************************************************************************* -|* -|* GrupType::... -|* -*************************************************************************/ -sal_uInt32 GrupType::GetSubPtr() -{ - return sal_uInt32(SbLo)+0x00010000*sal_uInt32(SbHi); -} - -/************************************************************************* -|* -|* DrawObjkList() -|* -*************************************************************************/ -void DrawObjkList( SvStream& rInp, OutputDevice& rOut ) -{ - ObjkType aObjk; - sal_uInt16 nGrpCnt=0; - sal_Bool bEnde=sal_False; - do { - rInp>>aObjk; - if (!rInp.GetError()) { - switch(aObjk.Art) { - case ObjStrk: { StrkType aStrk; rInp>>aStrk; if (!rInp.GetError()) aStrk.Draw(rOut); } break; - case ObjRect: { RectType aRect; rInp>>aRect; if (!rInp.GetError()) aRect.Draw(rOut); } break; - case ObjCirc: { CircType aCirc; rInp>>aCirc; if (!rInp.GetError()) aCirc.Draw(rOut); } break; - case ObjText: { - TextType aText; - rInp>>aText; - if (!rInp.GetError()) { - aText.Buffer=new UCHAR[aText.BufSize+1]; // Ein mehr fuer LookAhead bei CK-Trennung - rInp.Read((char* )aText.Buffer,aText.BufSize); - if (!rInp.GetError()) aText.Draw(rOut); - delete[] aText.Buffer; - } - } break; - case ObjBmap: { - BmapType aBmap; - rInp>>aBmap; - if (!rInp.GetError()) { - aBmap.Draw(rOut); - } - } break; - case ObjPoly: { - PolyType aPoly; - rInp>>aPoly; - if (!rInp.GetError()) { - aPoly.EckP=new PointType[aPoly.nPoints]; - rInp.Read((char*)aPoly.EckP,4*aPoly.nPoints); -#if defined OSL_BIGENDIAN - for(short i=0;i<aPoly.nPoints;i++) SWAPPOINT(aPoly.EckP[i]); -#endif - if (!rInp.GetError()) aPoly.Draw(rOut); - delete[] aPoly.EckP; - } - } break; - case ObjSpln: { - SplnType aSpln; - rInp>>aSpln; - if (!rInp.GetError()) { - aSpln.EckP=new PointType[aSpln.nPoints]; - rInp.Read((char*)aSpln.EckP,4*aSpln.nPoints); -#if defined OSL_BIGENDIAN - for(short i=0;i<aSpln.nPoints;i++) SWAPPOINT(aSpln.EckP[i]); -#endif - if (!rInp.GetError()) aSpln.Draw(rOut); - delete[] aSpln.EckP; - } - } break; - case ObjGrup: { - GrupType aGrup; - rInp>>aGrup; - if (!rInp.GetError()) { - rInp.Seek(rInp.Tell()+aGrup.Last); // Obj-Anhaengsel - if(aGrup.GetSubPtr()!=0L) nGrpCnt++;// DrawObjkList(rInp,rOut ); - } - } break; - default: { - aObjk.Draw(rOut); // Objektbezeichnung auf 2. Screen - ObjkOverSeek(rInp,aObjk); // zum naechsten Objekt - } - } - } // if rInp - if (!rInp.GetError()) { - if (aObjk.Next==0L) { - if (nGrpCnt==0) bEnde=sal_True; - else nGrpCnt--; - } - } else { - bEnde=sal_True; // Lesefehler - } - } while (!bEnde); -} - -/************************************************************************* -|* -|* SkipObjkList() -|* -*************************************************************************/ -void SkipObjkList(SvStream& rInp) -{ - ObjkType aObjk; - do - { - rInp>>aObjk; - if(aObjk.Art==ObjGrup) { - GrupType aGrup; - rInp>>aGrup; - rInp.Seek(rInp.Tell()+aGrup.Last); // Obj-Anhaengsel - if(aGrup.GetSubPtr()!=0L) SkipObjkList(rInp); - } else { - ObjkOverSeek(rInp,aObjk); // zum naechsten Objekt - } - } while (aObjk.Next!=0L && !rInp.GetError()); -} - -/************************************************************************* -|* -|* SgfFilterSDrw() -|* -*************************************************************************/ -sal_Bool SgfFilterSDrw( SvStream& rInp, SgfHeader&, SgfEntry&, GDIMetaFile& rMtf ) -{ - sal_Bool bRet = sal_False; - PageType aPage; - VirtualDevice aOutDev; - OutputDevice* pOutDev; - sal_uLong nStdPos; - sal_uLong nZchPos; - sal_uInt16 Num; - - pOutDev=&aOutDev; - DtHdOverSeek(rInp); // DataHeader weglesen - - nStdPos=rInp.Tell(); - do { // Standardseiten weglesen - rInp>>aPage; - if (aPage.nList!=0) SkipObjkList(rInp); - } while (aPage.Next!=0L && !rInp.GetError()); - -// ShowMsg("Zeichnungseite(n)\n"); - nZchPos=rInp.Tell(); - rInp>>aPage; - - rMtf.Record(pOutDev); - Num=aPage.StdPg; - if (Num!=0) { - rInp.Seek(nStdPos); - while(Num>1 && aPage.Next!=0L && !rInp.GetError()) { // Standardseite suchen - rInp>>aPage; - if (aPage.nList!=0) SkipObjkList(rInp); - Num--; - } - rInp>>aPage; - if(Num==1 && aPage.nList!=0L) DrawObjkList( rInp,*pOutDev ); - rInp.Seek(nZchPos); - nZchPos=rInp.Tell(); - rInp>>aPage; - } - if (aPage.nList!=0L) DrawObjkList(rInp,*pOutDev ); - - rMtf.Stop(); - rMtf.WindStart(); - MapMode aMap(MAP_10TH_MM,Point(),Fraction(1,4),Fraction(1,4)); - rMtf.SetPrefMapMode(aMap); - rMtf.SetPrefSize(Size((sal_Int16)aPage.Paper.Size.x,(sal_Int16)aPage.Paper.Size.y)); - bRet=sal_True; - return bRet; -} - - - -/************************************************************************* -|* -|* SgfSDrwFilter() -|* -*************************************************************************/ -sal_Bool SgfSDrwFilter(SvStream& rInp, GDIMetaFile& rMtf, INetURLObject aIniPath ) -{ -#if OSL_DEBUG_LEVEL > 1 // Recordgroessen checken. Neuer Compiler hat vielleichte anderes Alignment! - if (sizeof(ObjTextType)!=ObjTextTypeSize) return sal_False; -#endif - - sal_uLong nFileStart; // Offset des SgfHeaders. Im allgemeinen 0. - SgfHeader aHead; - SgfEntry aEntr; - sal_uLong nNext; - sal_Bool bRdFlag=sal_False; // Grafikentry gelesen ? - sal_Bool bRet=sal_False; // Returncode - - aIniPath.Append( String::CreateFromAscii( "sgf.ini", 7 ) ); -// aIniPath.ToAbs(); - - pSgfFonts = new SgfFontLst; - - pSgfFonts->AssignFN( aIniPath.GetMainURL( INetURLObject::NO_DECODE ) ); - nFileStart=rInp.Tell(); - rInp>>aHead; - if (aHead.ChkMagic() && aHead.Typ==SgfStarDraw && aHead.Version==SGV_VERSION) { - nNext=aHead.GetOffset(); - while (nNext && !bRdFlag && !rInp.GetError()) { - rInp.Seek(nFileStart+nNext); - rInp>>aEntr; - nNext=aEntr.GetOffset(); - if (aEntr.Typ==aHead.Typ) { - bRet=SgfFilterSDrw( rInp,aHead,aEntr,rMtf ); - } - } // while(nNext) - if (bRdFlag) { - if (!rInp.GetError()) bRet=sal_True; // Scheinbar Ok - } - } - delete pSgfFonts; - return(bRet); -} - -/* -Bitmap Dither(sal_uInt8 Intens) -{ - Bitmap aBmp; - BmpInfoHeader Info; - - -const dmatrix: array[0..7,0..7] of byte = - (( 0, 48, 12, 60, 3, 51, 15, 63 ), - ( 32, 16, 44, 28, 35, 19, 47, 31 ), - ( 8, 56, 4, 52, 11, 59, 7, 55 ), - ( 40, 24, 36, 20, 43, 27, 39, 23 ), - ( 2, 50, 14, 62, 1, 49, 13, 61 ), - ( 34, 18, 46, 30, 33, 17, 45, 29 ), - ( 10, 58, 6, 54, 9, 57, 5, 53 ), - ( 42, 26, 38, 22, 41, 25, 37, 21 )); - - - cmatrix: array[0..7,0..7] of byte; - dmatrixn,dmatrixi: array[0..7] of byte; - - -procedure SetColorIntens(col0,col1,bal: integer); -var cmatrix0: array[0..63] of byte absolute cmatrix; - dmatrix0: array[0..63] of byte absolute dmatrix; - n,i: integer; - b,bit: byte; -begin -if col0=col1 then bal:=0; -if bal<=32 then - begin - plotcolor0:=col0 and $1F; plotcolor1:=col1 and $1F; - plotbal:=bal; - end -else - begin - plotcolor0:=col1 and $1F; plotcolor1:=col0 and $1F; - plotbal:=64-bal; - end; -for n:=0 to 63 do - if plotbal<=dmatrix0[n] then cmatrix0[n]:=col0 else cmatrix0[n]:=col1; -end; -*/ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |