diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2007-11-01 17:00:52 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2007-11-01 17:00:52 +0000 |
commit | 2e36c98b672b7efe563a04b9f7380ae94f65df53 (patch) | |
tree | 3f05f2a028b8d204323fe4de6cd29868c12e11ef | |
parent | d034efa5dd0ce46482b815fb57b018217c9d37df (diff) |
INTEGRATION: CWS dxliberate01 (1.1.2); FILE ADDED
2007/07/23 12:05:09 thb 1.1.2.1: #i48454# dxcanvas is now part of OOo
-rwxr-xr-x | canvas/source/directx/dx_winstuff.hxx | 234 | ||||
-rw-r--r-- | canvas/source/directx/exports.dxp | 3 | ||||
-rw-r--r-- | canvas/source/directx/makefile.mk | 175 |
3 files changed, 412 insertions, 0 deletions
diff --git a/canvas/source/directx/dx_winstuff.hxx b/canvas/source/directx/dx_winstuff.hxx new file mode 100755 index 000000000000..f0b1e2bfa1d1 --- /dev/null +++ b/canvas/source/directx/dx_winstuff.hxx @@ -0,0 +1,234 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: dx_winstuff.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: hr $ $Date: 2007-11-01 18:00:27 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#ifndef _DXCANVAS_WINSTUFF_HXX +#define _DXCANVAS_WINSTUFF_HXX + +#include <algorithm> + +#include <boost/shared_ptr.hpp> + +#include <basegfx/numeric/ftools.hxx> + +#ifdef _WINDOWS_ +#error someone else included <windows.h> +#endif + +// Enabling Direct3D Debug Information Further more, with registry key +// \\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D\D3D9Debugging\\EnableCreationStack +// set to 1, sets a backtrace each time an object is created to the +// following global variable: LPCWSTR CreationCallStack +#if OSL_DEBUG_LEVEL > 0 +# define D3D_DEBUG_INFO +#endif + +#ifndef DIRECTX_VERSION +#error please define for which directx version we should compile +#endif + +#if defined _MSC_VER +#pragma warning(push,1) +#endif + + +#define BOOL win32BOOL +#define INT32 win32INT32 +#define UINT32 win32UINT32 +#define GradientStyle_RECT win32GradientStyle_RECT +#define Polygon win32Polygon +#define PolyPolygon win32PolyPolygon +#undef WB_LEFT +#undef WB_RIGHT + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> // TODO(Q1): extract minimal set of required headers for gdiplus + +#if DIRECTX_VERSION < 0x0900 + + #include <multimon.h> + + // Be compatible with directdraw 3.0. Lets see how far this takes us + #define DIRECTDRAW_VERSION 0x0300 + #include <ddraw.h> + + // Be compatible with direct3d 5.0. Lets see how far this takes us + #define DIRECT3D_VERSION 0x0500 + #define D3D_OVERLOADS + #include <d3d.h> + + typedef IDirectDrawSurface surface_type; + +#else + + #include <d3d9.h> + #include <d3dx9.h> + #include <dxerr9.h> + + typedef IDirect3DSurface9 surface_type; + +#endif + +#undef DrawText + +// Needed for #?$&/@ gdiplus header +#ifndef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#define __WORKAROUND_MAX_DEFINED__ +#endif + +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#define __WORKAROUND_MIN_DEFINED__ +#endif + +#include <gdiplus.h> + +#ifdef __WORKAROUND_MAX_DEFINED__ +#undef max +#endif + +#ifdef __WORKAROUND_MIN_DEFINED__ +#undef min +#endif + +namespace dxcanvas +{ + // some shared pointer typedefs to Gdiplus objects + typedef ::boost::shared_ptr< Gdiplus::Graphics > GraphicsSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::GraphicsPath > GraphicsPathSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::Bitmap > BitmapSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::CachedBitmap > CachedBitmapSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::Font > FontSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::Brush > BrushSharedPtr; + typedef ::boost::shared_ptr< Gdiplus::TextureBrush > TextureBrushSharedPtr; + + /** COM object RAII wrapper + + This template wraps a Windows COM object, transparently + handling lifetime issues the C++ way (i.e. releasing the + reference when the object is destroyed) + */ + template< typename T > class COMReference + { + public: + typedef T Wrappee; + + COMReference() : + mp( NULL ) + { + } + + /** Create from raw pointer + + @attention This constructor assumes the interface is + already acquired (unless p is NULL), no additional AddRef + is called here. + + This caters e.g. for all DirectX factory methods, which + return the created interfaces pre-acquired, into a raw + pointer. Simply pass the pointer to this class, but don't + call Release manually on it! + + @example IDirectDrawSurface* pSurface; + pDD->CreateSurface(&aSurfaceDesc, &pSurface, NULL); + mpSurface = COMReference< IDirectDrawSurface >(pSurface); + + */ + explicit COMReference( T* p ) : + mp( p ) + { + } + + COMReference( const COMReference& rNew ) : + mp( NULL ) + { + if( rNew.mp == NULL ) + return; + + rNew.mp->AddRef(); // do that _before_ assigning the + // pointer. Just in case... + mp = rNew.mp; + } + + COMReference& operator=( const COMReference& rRHS ) + { + COMReference aTmp(rRHS); + ::std::swap( mp, aTmp.mp ); + + return *this; + } + + ~COMReference() + { + reset(); + } + + int reset() + { + int refcount = 0; + if( mp ) + refcount = mp->Release(); + + mp = NULL; + return refcount; + } + + bool is() const { return mp != NULL; } + T* get() const { return mp; } + T* operator->() const { return mp; } + T& operator*() const { return *mp; } + + private: + T* mp; + }; + + // get_pointer() enables boost::mem_fn to recognize COMReference + template<class T> inline T * get_pointer(COMReference<T> const& p) + { + return p.get(); + } +} + +#if defined _MSC_VER +#pragma warning(pop) +#endif + +#undef DELETE +#undef BOOL +#undef INT32 +#undef UINT32 +#undef PolyPolygon + +#endif /* _DXCANVAS_WINSTUFF_HXX */ diff --git a/canvas/source/directx/exports.dxp b/canvas/source/directx/exports.dxp new file mode 100644 index 000000000000..9630d7e06768 --- /dev/null +++ b/canvas/source/directx/exports.dxp @@ -0,0 +1,3 @@ +component_getImplementationEnvironment +component_writeInfo +component_getFactory diff --git a/canvas/source/directx/makefile.mk b/canvas/source/directx/makefile.mk new file mode 100644 index 000000000000..5d4f0209770b --- /dev/null +++ b/canvas/source/directx/makefile.mk @@ -0,0 +1,175 @@ +#************************************************************************* +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.2 $ +# +# last change: $Author: hr $ $Date: 2007-11-01 18:00:52 $ +# +# The Contents of this file are made available subject to +# the terms of GNU Lesser General Public License Version 2.1. +# +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2005 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library 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 for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=canvas +TARGET=directxcanvas +TARGET2=directx9canvas +ENABLE_EXCEPTIONS=TRUE + + +# --- Settings ----------------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Nothing to do if we're compiling with --disable-directx ----------- +.IF "$(ENABLE_DIRECTX)" == "" +@all: + @echo "Building without DirectX support..." +.ENDIF + + +# --- Common ---------------------------------------------------------- + +.IF "$(verbose)"!="" || "$(VERBOSE)"!="" +CDEFS+= -DVERBOSE +.ENDIF + +.IF "$(dx_debug_images)"!="" || "$(DX_DEBUG_IMAGES)"!="" +CDEFS+= -DDX_DEBUG_IMAGES +.ENDIF + +CDEFS += -DDIRECTX_VERSION=0x0500 + +# --- This is Windows only! { ---------------------------------------------------------------- + +.IF "$(GUI)" == "WNT" + +SLOFILES = \ + $(SLO)$/dx_5rm.obj \ + $(SLO)$/dx_9rm.obj \ + $(SLO)$/dx_bitmap.obj \ + $(SLO)$/dx_canvasbitmap.obj \ + $(SLO)$/dx_canvascustomsprite.obj \ + $(SLO)$/dx_canvasfont.obj \ + $(SLO)$/dx_canvashelper.obj \ + $(SLO)$/dx_canvashelper_texturefill.obj \ + $(SLO)$/dx_config.obj \ + $(SLO)$/dx_devicehelper.obj \ + $(SLO)$/dx_gdiplususer.obj \ + $(SLO)$/dx_impltools.obj \ + $(SLO)$/dx_linepolypolygon.obj \ + $(SLO)$/dx_spritecanvas.obj \ + $(SLO)$/dx_spritecanvashelper.obj \ + $(SLO)$/dx_spritehelper.obj \ + $(SLO)$/dx_surfacegraphics.obj \ + $(SLO)$/dx_textlayout.obj \ + $(SLO)$/dx_vcltools.obj \ + $(SLO)$/dx_textlayout_drawhelper.obj \ + +######################################################## +# DX5 +######################################################## + +# Indicates the filename of the shared library. +SHL1TARGET=$(TARGET).uno + +# Links import libraries. +SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) + +# Specifies an import library to create. For Win32 only. +SHL1IMPLIB=i$(TARGET) + +# Specifies libraries from the same module to put into the shared library. +SHL1LIBS=$(SLB)$/$(TARGET).lib + + + +SHL1DEF=$(MISC)$/$(SHL1TARGET).def + +DEF1NAME=$(SHL1TARGET) +DEF1EXPORTFILE=exports.dxp + +SHL1STDLIBS += gdi32.lib +SHL1STDLIBS += ddraw.lib +SHL1STDLIBS += gdiplus.lib +.IF "$(CCNUMVER)" <= "001399999999" +SHL1STDLIBS += d3dx.lib +.ELSE +SHL1STDLIBS += d3dx10.lib # net 2005 +SHL1STDLIBS += dxguid.lib # net 2005 +.ENDIF + +.IF "$(dx_debug_images)"!="" || "$(DX_DEBUG_IMAGES)"!="" +SHL1STDLIBS += imdebug.lib +.ENDIF + +######################################################## +# DX9 +######################################################## + +SECOND_BUILD=DX9 +DX9_SLOFILES=$(SLOFILES) +DX9CDEFS+=-DDIRECTX_VERSION=0x0900 + +LIB1TARGET= $(SLB)$/$(TARGET)dx9.lib +LIB1OBJFILES = $(REAL_DX9_SLOFILES) + +# Indicates the filename of the shared library. +SHL2TARGET=$(TARGET2).uno + +# Links import libraries. +SHL2STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) + +# Specifies an import library to create. For Win32 only. +SHL2IMPLIB=$(TARGET)dx9.lib + +# Specifies libraries from the same module to put into the shared library. +SHL2LIBS=$(SLB)$/$(TARGET)dx9.lib +SHL2DEF=$(MISC)$/$(SHL2TARGET).def + +DEF2NAME=$(SHL2TARGET) +DEF2EXPORTFILE=exports.dxp + +SHL2STDLIBS += gdi32.lib +SHL2STDLIBS += d3d9.lib +SHL2STDLIBS += gdiplus.lib + +.IF "$(dx_debug_images)"!="" || "$(DX_DEBUG_IMAGES)"!="" +SHL2STDLIBS += imdebug.lib +.ENDIF + +.IF "$(dx_debug_images)"!="" || "$(DX_DEBUG_IMAGES)"!="" +SHL1STDLIBS += imdebug.lib +.ENDIF + +.ENDIF # IF "$(GUI)" == "WNT" + +# --- This is Windows only! } ---------------------------------------------------------------- + +# ========================================================================== + +.INCLUDE : target.mk |