diff options
author | Francois Tigeot <ftigeot@wolfpond.org> | 2011-04-16 09:19:08 +0200 |
---|---|---|
committer | Francois Tigeot <ftigeot@wolfpond.org> | 2011-04-18 16:28:05 +0200 |
commit | a760a7bc3913d6d10e7dcf86f3eb39a7178b517f (patch) | |
tree | ea4a22ceebd0196a053421765f4db086779edbcb /vcl/os2/source/gdi/salgdi.cxx | |
parent | Related: rhbz#691083 make sure this is thread-safe (diff) | |
download | core-a760a7bc3913d6d10e7dcf86f3eb39a7178b517f.tar.gz core-a760a7bc3913d6d10e7dcf86f3eb39a7178b517f.zip |
Remove OS/2-specific subdirectories.
Diffstat (limited to 'vcl/os2/source/gdi/salgdi.cxx')
-rw-r--r-- | vcl/os2/source/gdi/salgdi.cxx | 938 |
1 files changed, 0 insertions, 938 deletions
diff --git a/vcl/os2/source/gdi/salgdi.cxx b/vcl/os2/source/gdi/salgdi.cxx deleted file mode 100644 index efd913c251b2..000000000000 --- a/vcl/os2/source/gdi/salgdi.cxx +++ /dev/null @@ -1,938 +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. - * - ************************************************************************/ - -#include <string.h> -#include <svpm.h> - -#define _SV_SALGDI_CXX -#include <tools/debug.hxx> -#include <saldata.hxx> -#include <salgdi.h> -#include <tools/debug.hxx> -#include <salframe.h> -#include <tools/poly.hxx> -#include <rtl/strbuf.hxx> -#include "vcl/region.h" - -#ifndef __H_FT2LIB -#include <wingdi.h> -#include <ft2lib.h> -#endif - -// ----------- -// - Defines - -// ----------- - -// ClipRegions funktionieren immer noch nicht auf allen getesteten Druckern -#define SAL_PRINTER_CLIPPATH 1 -// #define SAL_PRINTER_POLYPATH 1 - -// ======================================================================= - -void ImplInitSalGDI() -{ -} - -// ----------------------------------------------------------------------- - -void ImplFreeSalGDI() -{ - SalData* pSalData = GetSalData(); - - // delete icon cache - SalIcon* pIcon = pSalData->mpFirstIcon; - while( pIcon ) - { - SalIcon* pTmp = pIcon->pNext; - WinDestroyPointer( pIcon->hIcon ); - delete pIcon; - pIcon = pTmp; - } - -} - -// ======================================================================= - -void ImplSalInitGraphics( Os2SalGraphics* pData ) -{ - GpiCreateLogColorTable( pData->mhPS, LCOL_RESET, LCOLF_RGB, 0, 0, NULL ); -} - -// ----------------------------------------------------------------------- - -void ImplSalDeInitGraphics( Os2SalGraphics* pData ) -{ -} - -// ======================================================================= - -Os2SalGraphics::Os2SalGraphics() -{ - for( int i = 0; i < MAX_FALLBACK; ++i ) - { - mhFonts[ i ] = 0; - mpOs2FontData[ i ] = NULL; - mpOs2FontEntry[ i ] = NULL; - } - - mfFontScale = 1.0; - - mhPS = 0; - mhDC = 0; - mbLine = FALSE; - mbFill = FALSE; - mbXORMode = FALSE; - mnFontMetricCount = 0; - mpFontMetrics = NULL; - mpClipRectlAry = NULL; - - mhDefFont = 0; - mpFontKernPairs = NULL; - mnFontKernPairCount = 0; - mbFontKernInit = FALSE; - -} - -// ----------------------------------------------------------------------- - -Os2SalGraphics::~Os2SalGraphics() -{ - Ft2DeleteSetId( mhPS, LCID_BASE); - - if ( mpFontMetrics ) - delete mpFontMetrics; - - if ( mpFontKernPairs ) - delete mpFontKernPairs; - -} - -// ----------------------------------------------------------------------- - -static SalColor ImplGetROPSalColor( SalROPColor nROPColor ) -{ - SalColor nSalColor; - - switch( nROPColor ) - { - case SAL_ROP_0: - nSalColor = MAKE_SALCOLOR( 0, 0, 0 ); - break; - - case SAL_ROP_1: - case SAL_ROP_INVERT: - nSalColor = MAKE_SALCOLOR( 255, 255, 255 ); - break; - } - - return nSalColor; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::GetResolution( long& rDPIX, long& rDPIY ) -{ - // since OOo asks for DPI, I will query FONT_RES, which seems to be - // more correct than _RESOLUTION fields (on my wide screen lcd) - // and does not require conversion - DevQueryCaps( mhDC, CAPS_HORIZONTAL_FONT_RES, 1, &rDPIX ); - DevQueryCaps( mhDC, CAPS_VERTICAL_FONT_RES, 1, &rDPIY ); -} - -// ----------------------------------------------------------------------- - -USHORT Os2SalGraphics::GetBitCount() const -{ - LONG nBitCount; - DevQueryCaps( mhDC, CAPS_COLOR_BITCOUNT, 1, &nBitCount ); - return (USHORT)nBitCount; -} - -// ----------------------------------------------------------------------- - -long Os2SalGraphics::GetGraphicsWidth() const -{ - if( mhWnd ) - { - Os2SalFrame* pFrame = (Os2SalFrame*)GetWindowPtr( mhWnd ); - if( pFrame ) - { - if( pFrame->maGeometry.nWidth ) - return pFrame->maGeometry.nWidth; - else - { - // TODO: perhaps not needed, maGeometry should always be up-to-date - RECTL aRect; - WinQueryWindowRect( mhWnd, &aRect ); - return aRect.xRight; - } - } - } - - return 0; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::ResetClipRegion() -{ -#ifdef SAL_PRINTER_CLIPPATH - if ( mbPrinter ) - GpiSetClipPath( mhPS, 0, SCP_RESET ); - else -#endif - { - HRGN hOldRegion; - - GpiSetClipRegion( mhPS, NULL, &hOldRegion ); - if ( hOldRegion ) - GpiDestroyRegion( mhPS, hOldRegion ); - } -} - -// ----------------------------------------------------------------------- - -bool Os2SalGraphics::setClipRegion( const Region& i_rClip ) -{ - ULONG nCount = i_rClip.GetRectCount(); - - mpClipRectlAry = new RECTL[ nCount ]; - mnClipElementCount = 0; - - ImplRegionInfo aInfo; - long nX, nY, nW, nH; - bool bRegionRect = i_rClip.ImplGetFirstRect(aInfo, nX, nY, nW, nH ); - while( bRegionRect ) - { - if ( nW && nH ) - { - RECTL* pClipRect = &mpClipRectlAry[ mnClipElementCount ]; - pClipRect->xLeft = nX; - pClipRect->yTop = mnHeight - nY; - pClipRect->xRight = nX + nW; - pClipRect->yBottom = mnHeight - (nY + nH); - mnClipElementCount++; - } - bRegionRect = i_rClip.ImplGetNextRect( aInfo, nX, nY, nW, nH ); - } -#ifdef SAL_PRINTER_CLIPPATH - if ( mbPrinter ) - { - GpiSetClipPath( mhPS, 0, SCP_RESET ); - GpiBeginPath( mhPS, 1L ); - - for( int i = 0; i < mnClipElementCount; i++ ) - { - POINTL aPt; - RECTL* pClipRect = &mpClipRectlAry[ i ]; - - aPt.x = pClipRect->xLeft; - aPt.y = pClipRect->yTop-1; - Ft2Move( mhPS, &aPt ); - - aPt.x = pClipRect->xRight-1; - aPt.y = pClipRect->yBottom; - - Ft2Box( mhPS, DRO_OUTLINE, &aPt, 0, 0 ); - } - - GpiEndPath( mhPS ); - GpiSetClipPath( mhPS, 1L, SCP_ALTERNATE | SCP_AND ); - } - else -#endif - { - HRGN hClipRegion = GpiCreateRegion( mhPS, - mnClipElementCount, - mpClipRectlAry ); - HRGN hOldRegion; - - GpiSetClipRegion( mhPS, hClipRegion, &hOldRegion ); - if( hOldRegion ) - GpiDestroyRegion( mhPS, hOldRegion ); - } - - delete [] mpClipRectlAry; - - return true; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetLineColor() -{ - // don't draw line! - mbLine = FALSE; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetLineColor( SalColor nSalColor ) -{ - LINEBUNDLE lb; - - // set color - lb.lColor = RGBCOLOR( SALCOLOR_RED( nSalColor ), - SALCOLOR_GREEN( nSalColor ), - SALCOLOR_BLUE( nSalColor ) ); - - Ft2SetAttrs( mhPS, - PRIM_LINE, - LBB_COLOR, - 0, - &lb ); - - // draw line! - mbLine = TRUE; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetFillColor() -{ - // don't fill area! - mbFill = FALSE; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetFillColor( SalColor nSalColor ) -{ - AREABUNDLE ab; - - // set color - ab.lColor = RGBCOLOR( SALCOLOR_RED( nSalColor ), - SALCOLOR_GREEN( nSalColor ), - SALCOLOR_BLUE( nSalColor ) ); - - Ft2SetAttrs( mhPS, - PRIM_AREA, - ABB_COLOR, - 0, - &ab ); - - // fill area! - mbFill = TRUE; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetXORMode( bool bSet, bool ) -{ - mbXORMode = bSet; - LONG nMixMode = bSet ? FM_XOR : FM_OVERPAINT; - - // set mix mode for lines - LINEBUNDLE lb; - lb.usMixMode = nMixMode; - Ft2SetAttrs( mhPS, - PRIM_LINE, - LBB_MIX_MODE, - 0, - &lb ); - - // set mix mode for areas - AREABUNDLE ab; - ab.usMixMode = nMixMode; - Ft2SetAttrs( mhPS, - PRIM_AREA, - ABB_MIX_MODE, - 0, - &ab ); - - // set mix mode for text - CHARBUNDLE cb; - cb.usMixMode = nMixMode; - Ft2SetAttrs( mhPS, - PRIM_CHAR, - CBB_MIX_MODE, - 0, - &cb ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetROPLineColor( SalROPColor nROPColor ) -{ - SetLineColor( ImplGetROPSalColor( nROPColor ) ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::SetROPFillColor( SalROPColor nROPColor ) -{ - SetFillColor( ImplGetROPSalColor( nROPColor ) ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawPixel( long nX, long nY ) -{ - POINTL aPt; - - aPt.x = nX; - aPt.y = TY( nY ); - - // set color - Ft2SetPel( mhPS, &aPt ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawPixel( long nX, long nY, SalColor nSalColor ) -{ - // save old color - LINEBUNDLE oldLb; - GpiQueryAttrs( mhPS, - PRIM_LINE, - LBB_COLOR, - &oldLb ); - - // set new color - LINEBUNDLE lb; - lb.lColor = RGBCOLOR( SALCOLOR_RED( nSalColor ), - SALCOLOR_GREEN( nSalColor ), - SALCOLOR_BLUE( nSalColor ) ); - Ft2SetAttrs( mhPS, - PRIM_LINE, - LBB_COLOR, - 0, - &lb ); - - // set color of pixel - POINTL aPt; - aPt.x = nX; - aPt.y = TY( nY ); - Ft2SetPel( mhPS, &aPt ); - - // restore old color - Ft2SetAttrs( mhPS, - PRIM_LINE, - LBB_COLOR, - 0, - &oldLb ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) -{ - // OS2 zeichnet den Endpunkt mit - POINTL aPt; - aPt.x = nX1; - aPt.y = TY( nY1 ); - Ft2Move( mhPS, &aPt ); - aPt.x = nX2; - aPt.y = TY( nY2 ); - GpiLine( mhPS, &aPt ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) -{ - POINTL aPt; - long lControl; - - if ( mbFill ) - { - if ( mbLine ) - lControl = DRO_OUTLINEFILL; - else - lControl = DRO_FILL; - } - else - { - if ( mbLine ) - lControl = DRO_OUTLINE; - else - return; - } - - aPt.x = nX; - aPt.y = TY( nY ); - Ft2Move( mhPS, &aPt ); - aPt.x = nX + nWidth - 1; - aPt.y = TY( nY + nHeight - 1 ); - Ft2Box( mhPS, lControl, &aPt, 0, 0 ); -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint* pPtAry ) -{ - // convert all points to sys orientation - POINTL* pOS2PtAry = new POINTL[ nPoints ]; - POINTL* pTempOS2PtAry = pOS2PtAry; - const SalPoint* pTempPtAry = pPtAry; - ULONG nTempPoints = nPoints; - long nHeight = mnHeight - 1; - - while( nTempPoints-- ) - { - (*pTempOS2PtAry).x = (*pTempPtAry).mnX; - (*pTempOS2PtAry).y = nHeight - (*pTempPtAry).mnY; - pTempOS2PtAry++; - pTempPtAry++; - } - - Ft2Move( mhPS, pOS2PtAry ); - GpiPolyLine( mhPS, nPoints, pOS2PtAry ); - delete [] pOS2PtAry; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawPolygon( ULONG nPoints, const SalPoint* pPtAry ) -{ - PM_POLYGON aPolygon; - - // create polygon - aPolygon.aPointl = new POINTL[ nPoints ]; - aPolygon.ulPoints = nPoints; - - // convert all points to sys orientation - POINTL* pTempOS2PtAry = aPolygon.aPointl; - const SalPoint* pTempPtAry = pPtAry; - ULONG nTempPoints = nPoints; - long nHeight = mnHeight - 1; - - while( nTempPoints-- ) - { - (*pTempOS2PtAry).x = (*pTempPtAry).mnX; - (*pTempOS2PtAry).y = nHeight - (*pTempPtAry).mnY; - pTempOS2PtAry++; - pTempPtAry++; - } - - // Innenleben zeichnen - if ( mbFill ) - { -#ifdef SAL_PRINTER_POLYPATH - if ( mbPrinter ) - { - Ft2BeginPath( mhPS, 1 ); - Ft2Move( mhPS, aPolygon.aPointl ); - Ft2PolyLine( mhPS, aPolygon.ulPoints, aPolygon.aPointl ); - Ft2EndPath( mhPS ); - Ft2FillPath( mhPS, 1, 0 ); - - if ( mbLine ) - { - Ft2Move( mhPS, aPolygon.aPointl ); - Ft2PolyLine( mhPS, aPolygon.ulPoints, aPolygon.aPointl ); - } - } - else -#endif - { - ULONG nOptions = POLYGON_ALTERNATE; - - if ( mbLine ) - nOptions |= POLYGON_BOUNDARY; - else - nOptions |= POLYGON_NOBOUNDARY; - - Ft2Move( mhPS, aPolygon.aPointl ); - GpiPolygons( mhPS, 1, &aPolygon, nOptions, POLYGON_EXCL ); - } - } - else - { - if ( mbLine ) - { - Ft2Move( mhPS, aPolygon.aPointl ); - GpiPolyLine( mhPS, nPoints, aPolygon.aPointl ); - } - } - - delete [] aPolygon.aPointl; -} - -// ----------------------------------------------------------------------- - -void Os2SalGraphics::drawPolyPolygon( ULONG nPoly, const ULONG* pPoints, - PCONSTSALPOINT* pPtAry ) -{ - ULONG i; - long nHeight = mnHeight - 1; - PM_POLYGON* aPolygonAry = new PM_POLYGON[ nPoly ]; - - for( i = 0; i < nPoly; i++ ) - { - const SalPoint * pTempPtAry = (const SalPoint*)pPtAry[ i ]; - - // create polygon - ULONG nTempPoints = pPoints[ i ]; - POINTL * pTempOS2PtAry = new POINTL[ nTempPoints ]; - - // convert all points to sys orientation - aPolygonAry[ i ].ulPoints = nTempPoints; - aPolygonAry[ i ].aPointl = pTempOS2PtAry; - - while( nTempPoints-- ) - { - (*pTempOS2PtAry).x = (*pTempPtAry).mnX; - (*pTempOS2PtAry).y = nHeight - (*pTempPtAry).mnY; - pTempOS2PtAry++; - pTempPtAry++; - } - } - - // Innenleben zeichnen - if ( mbFill ) - { -#ifdef SAL_PRINTER_POLYPATH - if ( mbPrinter ) - { - Ft2BeginPath( mhPS, 1 ); - for ( i = 0; i < nPoly; i++ ) - { - Ft2Move( mhPS, aPolygonAry[i].aPointl ); - Ft2PolyLine( mhPS, aPolygonAry[i].ulPoints, aPolygonAry[i].aPointl ); - } - Ft2EndPath( mhPS ); - Ft2FillPath( mhPS, 1, 0 ); - } - else -#endif - { - ULONG nOptions = POLYGON_ALTERNATE; - - if ( mbLine ) - nOptions |= POLYGON_BOUNDARY; - else - nOptions |= POLYGON_NOBOUNDARY; - - Ft2Move( mhPS, aPolygonAry[ 0 ].aPointl ); - GpiPolygons( mhPS, nPoly, aPolygonAry, nOptions, POLYGON_EXCL ); - } - } - else - { - if ( mbLine ) - { - for( i = 0; i < nPoly; i++ ) - { - Ft2Move( mhPS, aPolygonAry[ i ].aPointl ); - GpiPolyLine( mhPS, aPolygonAry[ i ].ulPoints, aPolygonAry[ i ].aPointl ); - } - } - } - - // cleanup - for( i = 0; i < nPoly; i++ ) - delete [] aPolygonAry[ i ].aPointl; - delete [] aPolygonAry; -} - -// ----------------------------------------------------------------------- - -bool Os2SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double /*fTransparency*/ ) -{ - // TODO: implement and advertise OutDevSupport_B2DDraw support - return false; -} - -// ----------------------------------------------------------------------- - -bool Os2SalGraphics::drawPolyLine( - const basegfx::B2DPolygon& /*rPolygon*/, - double /*fTransparency*/, - const basegfx::B2DVector& /*rLineWidths*/, - basegfx::B2DLineJoin /*eLineJoin*/) -{ - // TODO: implement - return false; -} - -// ----------------------------------------------------------------------- - -sal_Bool Os2SalGraphics::drawPolyLineBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry ) -{ - return sal_False; -} - -// ----------------------------------------------------------------------- - -sal_Bool Os2SalGraphics::drawPolygonBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry ) -{ - return sal_False; -} - -// ----------------------------------------------------------------------- - -sal_Bool Os2SalGraphics::drawPolyPolygonBezier( ULONG nPoly, const ULONG* pPoints, - const SalPoint* const* pPtAry, const BYTE* const* pFlgAry ) -{ - return sal_False; -} - -// ======================================================================= - -// MAXIMUM BUFSIZE EQ 0xFFFF -#define POSTSCRIPT_BUFSIZE 0x4000 -// we only try to get the BoundingBox in the first 4096 bytes -#define POSTSCRIPT_BOUNDINGSEARCH 0x1000 - -static BYTE* ImplSearchEntry( BYTE* pSource, BYTE* pDest, ULONG nComp, ULONG nSize ) -{ - while ( nComp-- >= nSize ) - { - ULONG i; - for ( i = 0; i < nSize; i++ ) - { - if ( ( pSource[i]&~0x20 ) != ( pDest[i]&~0x20 ) ) - break; - } - if ( i == nSize ) - return pSource; - pSource++; - } - return NULL; -} - - -static BOOL ImplGetBoundingBox( double* nNumb, BYTE* pSource, ULONG nSize ) -{ - BOOL bRetValue = FALSE; - BYTE* pDest = ImplSearchEntry( pSource, (BYTE*)"%%BoundingBox:", nSize, 14 ); - if ( pDest ) - { - nNumb[0] = nNumb[1] = nNumb[2] = nNumb[3] = 0; - pDest += 14; - - int nSizeLeft = nSize - ( pDest - pSource ); - if ( nSizeLeft > 100 ) - nSizeLeft = 100; // only 100 bytes following the bounding box will be checked - - int i; - for ( i = 0; ( i < 4 ) && nSizeLeft; i++ ) - { - int nDivision = 1; - BOOL bDivision = FALSE; - BOOL bNegative = FALSE; - BOOL bValid = TRUE; - - while ( ( --nSizeLeft ) && ( *pDest == ' ' ) || ( *pDest == 0x9 ) ) pDest++; - BYTE nByte = *pDest; - while ( nSizeLeft && ( nByte != ' ' ) && ( nByte != 0x9 ) && ( nByte != 0xd ) && ( nByte != 0xa ) ) - { - switch ( nByte ) - { - case '.' : - if ( bDivision ) - bValid = FALSE; - else - bDivision = TRUE; - break; - case '-' : - bNegative = TRUE; - break; - default : - if ( ( nByte < '0' ) || ( nByte > '9' ) ) - nSizeLeft = 1; // error parsing the bounding box values - else if ( bValid ) - { - if ( bDivision ) - nDivision*=10; - nNumb[i] *= 10; - nNumb[i] += nByte - '0'; - } - break; - } - nSizeLeft--; - nByte = *(++pDest); - } - if ( bNegative ) - nNumb[i] = -nNumb[i]; - if ( bDivision && ( nDivision != 1 ) ) - nNumb[i] /= nDivision; - } - if ( i == 4 ) - bRetValue = TRUE; - } - return bRetValue; -} - -inline void ImplWriteString( BYTE** pBuf, const char* sString ) -{ - strcpy( (char*)*pBuf, sString ); - *pBuf += strlen( sString ); -} - -BOOL Os2SalGraphics::drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, ULONG nSize ) -{ - if ( !mbPrinter ) - return FALSE; - - BOOL bRet = FALSE; - LONG nLong = 0; - if ( !(DevQueryCaps( mhDC, CAPS_TECHNOLOGY, 1, &nLong ) && - (CAPS_TECH_POSTSCRIPT == nLong)) ) - return FALSE; - - BYTE* pBuf = new BYTE[ POSTSCRIPT_BUFSIZE ]; - double nBoundingBox[4]; - - if ( pBuf && ImplGetBoundingBox( nBoundingBox, (BYTE*)pPtr, nSize ) ) - { - LONG pOS2DXAry[4]; // hack -> print always 2 white space - POINTL aPt; - aPt.x = 0; - aPt.y = 0; - PCH pStr = (PCH) " "; - for( long i = 0; i < 4; i++ ) - pOS2DXAry[i] = i; - Ft2CharStringPosAt( mhPS, &aPt, NULL, 0, 2, (PCH)pStr,(PLONG)&pOS2DXAry[0] ); - - OStringBuffer aBuf( POSTSCRIPT_BUFSIZE ); - - // reserve place for a USHORT - aBuf.append( "aa" ); - - // #107797# Write out EPS encapsulation header - // ---------------------------------------------------------------------------------- - - // directly taken from the PLRM 3.0, p. 726. Note: - // this will definitely cause problems when - // recursively creating and embedding PostScript files - // in OOo, since we use statically-named variables - // here (namely, b4_Inc_state_salWin, dict_count_salWin and - // op_count_salWin). Currently, I have no idea on how to - // work around that, except from scanning and - // interpreting the EPS for unused identifiers. - - // append the real text - aBuf.append( "\n\n/b4_Inc_state_salWin save def\n" - "/dict_count_salWin countdictstack def\n" - "/op_count_salWin count 1 sub def\n" - "userdict begin\n" - "/showpage {} def\n" - "0 setgray 0 setlinecap\n" - "1 setlinewidth 0 setlinejoin\n" - "10 setmiterlimit [] 0 setdash newpath\n" - "/languagelevel where\n" - "{\n" - " pop languagelevel\n" - " 1 ne\n" - " {\n" - " false setstrokeadjust false setoverprint\n" - " } if\n" - "} if\n\n" ); - - // #107797# Write out buffer - // ---------------------------------------------------------------------------------- - *((USHORT*)aBuf.getStr()) = (USHORT)( aBuf.getLength() - 2 ); - //Escape ( mhDC, nEscape, aBuf.getLength(), (LPTSTR)aBuf.getStr(), 0 ); - DevEscape( mhDC, DEVESC_RAWDATA, aBuf.getLength(), - (PBYTE)aBuf.getStr(), 0, NULL ); - - double dM11 = nWidth / ( nBoundingBox[2] - nBoundingBox[0] ); - double dM22 = - ( nHeight / (nBoundingBox[1] - nBoundingBox[3] ) ); - - // reserve a USHORT again - aBuf.setLength( 2 ); - aBuf.append( "\n\n[" ); - aBuf.append( dM11 ); - aBuf.append( " 0 0 " ); - aBuf.append( dM22 ); - aBuf.append( ' ' ); - aBuf.append( nX - ( dM11 * nBoundingBox[0] ) ); - aBuf.append( ' ' ); - aBuf.append( nY - ( dM22 * nBoundingBox[3] ) ); - aBuf.append( "] concat\n" - "%%BeginDocument:\n" ); - *((USHORT*)aBuf.getStr()) = (USHORT)( aBuf.getLength() - 2 ); - DevEscape( mhDC, DEVESC_RAWDATA, aBuf.getLength(), - (PBYTE)aBuf.getStr(), 0, NULL ); - { - UINT32 nToDo = nSize; - UINT32 nDoNow; - bRet = TRUE; - while( nToDo && bRet ) - { - nDoNow = 0x4000; - if ( nToDo < nDoNow ) - nDoNow = nToDo; - - if ( DevEscape( mhDC, DEVESC_RAWDATA, nDoNow, (PBYTE)pPtr + nSize - nToDo, - 0, NULL ) == -1 ) - bRet = FALSE; - nToDo -= nDoNow; - } - - if ( bRet ) - { - strcpy ( (char*)pBuf, "\nrestore\n" ); - if ( DevEscape( mhDC, DEVESC_RAWDATA, 9, (PBYTE)pBuf, - 0, NULL ) == DEV_OK ) bRet = TRUE; - } - - // #107797# Write out EPS encapsulation footer - // ---------------------------------------------------------------------------------- - // reserve a USHORT again - aBuf.setLength( 2 ); - aBuf.append( "%%EndDocument\n" - "count op_count_salWin sub {pop} repeat\n" - "countdictstack dict_count_salWin sub {end} repeat\n" - "b4_Inc_state_salWin restore\n\n" ); - *((USHORT*)aBuf.getStr()) = (USHORT)( aBuf.getLength() - 2 ); - DevEscape( mhDC, DEVESC_RAWDATA, aBuf.getLength(), - (PBYTE)aBuf.getStr(), 0, NULL ); - bRet = TRUE; - - } - } - delete [] pBuf; - return bRet; -} - -/* - * IsNativeControlSupported() - * - * Returns TRUE if the platform supports native - * drawing of the control defined by nPart - */ -BOOL Os2SalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) -{ - return( FALSE ); -} - -// ----------------------------------------------------------------------- - -SystemGraphicsData Os2SalGraphics::GetGraphicsData() const -{ - SystemGraphicsData aRes; - aRes.nSize = sizeof(aRes); - return aRes; -} - -// ----------------------------------------------------------------------- - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |