From 447b3a5eafa902ad40f7ccd82f9eb2e4cb9d0e7b Mon Sep 17 00:00:00 2001 From: Kurt Zenker Date: Mon, 30 Jun 2008 11:59:53 +0000 Subject: [PATCH] #i10000# take version form canvas05 (thb) --- canvas/source/cairo/cairo_quartz_cairo.cxx | 383 ++++++++++----- canvas/source/cairo/cairo_win32_cairo.cxx | 316 +++++++----- canvas/source/cairo/cairo_xlib_cairo.cxx | 533 +++++++++++---------- canvas/source/cairo/postx.h | 40 +- canvas/source/cairo/prex.h | 40 +- 5 files changed, 796 insertions(+), 516 deletions(-) diff --git a/canvas/source/cairo/cairo_quartz_cairo.cxx b/canvas/source/cairo/cairo_quartz_cairo.cxx index 2649b6354360..2575c206f294 100644 --- a/canvas/source/cairo/cairo_quartz_cairo.cxx +++ b/canvas/source/cairo/cairo_quartz_cairo.cxx @@ -7,8 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: cairo_quartz_cairo.cxx,v $ - * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * * This file is part of OpenOffice.org. * @@ -29,11 +28,9 @@ * ************************************************************************/ - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_canvas.hxx" - #ifdef QUARTZ /************************************************************************ * Mac OS X/Quartz surface backend for OpenOffice.org Cairo Canvas * @@ -45,154 +42,302 @@ #if defined CAIRO_HAS_QUARTZ_SURFACE -// premac.h/postmac.h needed because cairo-quartz.h includes Carbon/Carbon.h -#include "premac.h" -#include -#include "postmac.h" +#include "cairo_quartz_cairo.hxx" namespace cairo { - /** - * Surface::Surface: Create generic Canvas surface using given Cairo Surface - * - * @param pSurface Cairo Surface - * - * This constructor only stores data, it does no processing. - * It is used with e.g. cairo_image_surface_create_for_data() - * and Surface::getSimilar() - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( cairo_surface_t* pSurface ) - : mnRefCount( 1 ), - mpSurface( pSurface ) + bool IsCairoWorking( OutputDevice* ) { - // Necessary, context is lost otherwise - CGContextRetain( cairo_quartz_surface_get_cg_context(pSurface) ); // == NULL for non-native surfaces + // trivially true for Mac + return true; } - /** - * Surface::Surface: Create Canvas surface from Window reference. - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) - * @param x horizontal location of the new surface - * @param y vertical location of the new surface - * @param width width of the new surface - * @param height height of the new surface - * - * pSysData contains the platform native Window reference. - * pSysData is used to create a surface on the Window - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* pSysData, int x, int y, int width, int height ) - : mnRefCount( 1 ), - mpSurface( NULL ) + /** + * QuartzSurface::Surface: Create generic Canvas surface using given Cairo Surface + * + * @param pSurface Cairo Surface + * + * This constructor only stores data, it does no processing. + * It is used with e.g. cairo_image_surface_create_for_data() + * and QuartzSurface::getSimilar() + * + * Set the mpSurface to the new surface or NULL + **/ + QuartzSurface::QuartzSurface( const CairoSurfaceSharedPtr& pSurface ) : + mpView(NULL), + mpSurface( pSurface ) { - OSL_TRACE("Canvas::cairo::Surface(const void*, x:%d, y:%d, w:%d, h:%d): New Surface for window", x, y, width, height); - - // on Mac OS X / Quartz we are not drawing directly to the screen, but via regular CGContextRef. - // The actual drawing to NSView (i.e. screen) is done in Surface::flush() - - // HACK: currently initial size for windowsurface is 0x0, which is not possible for us. - if (width == 0 || height == 0) { - NSView* mpView = (NSView *) pSysData->pView; - width = [mpView bounds].size.width; - height = [mpView bounds].size.height; - OSL_TRACE("Canvas::cairo::Surface(): BUG!! size is ZERO! fixing to %d x %d...", width, height); - } - - // create a generic surface. Although View/Window is ARGB32, we however do all drawing => RGB24 - mpSurface = cairo_quartz_surface_create(CAIRO_FORMAT_ARGB32, width, height); - cairo_surface_set_device_offset( mpSurface, x, y ); + // Necessary, context is lost otherwise + CGContextRetain( getCGContext() ); // == NULL for non-native surfaces } - /** - * Surface::Surface: Create platfrom native Canvas surface from BitmapSystemData - * @param pSysData (not used) - * @param pBmpData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) - * @param width width of the new surface - * @param height height of the new surface - * - * Create a surface based on image data on pBmpData - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* /* pSysData */, const BitmapSystemData* pBmpData, int width, int height ) - : mnRefCount( 1 ), - mpSurface( NULL ) + /** + * QuartzSurface::Surface: Create Canvas surface from Window reference. + * @param NSView + * @param x horizontal location of the new surface + * @param y vertical location of the new surface + * @param width width of the new surface + * @param height height of the new surface + * + * pSysData contains the platform native Window reference. + * pSysData is used to create a surface on the Window + * + * Set the mpSurface to the new surface or NULL + **/ + QuartzSurface::QuartzSurface( NSView* pView, int x, int y, int width, int height ) : + mpView(pView), + mpSurface() { - OSL_TRACE("Canvas::cairo::Surface(pBmpData: %p, w:%d, h:%d): New native image surface.", pBmpData, width, height); + OSL_TRACE("Canvas::cairo::Surface(NSView*, x:%d, y:%d, w:%d, h:%d): New Surface for window", x, y, width, height); - OSL_ASSERT (pBmpData->mnWidth == width && pBmpData->mnHeight == height); - CGContextRef rContext = (CGContextRef) pBmpData->rImageContext; - // ensure kCGBitmapByteOrder32Host flag, otherwise Cairo breaks - OSL_ASSERT ((CGBitmapContextGetBitmapInfo(rContext) & kCGBitmapByteOrderMask) == kCGBitmapByteOrder32Host); + // on Mac OS X / Quartz we are not drawing directly to the screen, but via regular CGContextRef. + // The actual drawing to NSView (i.e. screen) is done in QuartzSurface::flush() - // create image surface based on CGContext - mpSurface = cairo_quartz_surface_create_for_cg_context( rContext, width, height); + // HACK: currently initial size for windowsurface is 0x0, which is not possible for us. + if (width == 0 || height == 0) { + width = [mpView bounds].size.width; + height = [mpView bounds].size.height; + OSL_TRACE("Canvas::cairo::Surface(): BUG!! size is ZERO! fixing to %d x %d...", width, height); + } - // Necessary, context is lost otherwise - CGContextRetain(rContext); + // create a generic surface, NSView/Window is ARGB32. + mpSurface.reset( + cairo_quartz_surface_create(CAIRO_FORMAT_ARGB32, width, height), + &cairo_surface_destroy); + + cairo_surface_set_device_offset( mpSurface.get(), x, y ); + } + + /** + * QuartzSurface::Surface: Create Canvas surface from CGContextRef. + * @param CGContext Native graphics context + * @param x horizontal location of the new surface + * @param y vertical location of the new surface + * @param width width of the new surface + * @param height height of the new surface + * + * Set the mpSurface to the new surface or NULL + **/ + QuartzSurface::QuartzSurface( CGContextRef rContext, int x, int y, int width, int height ) : + mpView(NULL), + mpSurface() + { + OSL_TRACE("Canvas::cairo::Surface(CGContext:%p, x:%d, y:%d, w:%d, h:%d): New Surface.", rContext, x, y, width, height); + // create surface based on CGContext + + // ensure kCGBitmapByteOrder32Host flag, otherwise Cairo breaks (we are practically always using CGBitmapContext) + OSL_ASSERT ((CGBitmapContextGetBitsPerPixel(rContext) != 32) || + (CGBitmapContextGetBitmapInfo(rContext) & kCGBitmapByteOrderMask) == kCGBitmapByteOrder32Host); + + mpSurface.reset(cairo_quartz_surface_create_for_cg_context(rContext, width, height), + &cairo_surface_destroy); + + cairo_surface_set_device_offset( mpSurface.get(), x, y ); + + // Necessary, context is lost otherwise + CGContextRetain(rContext); } - /** - * Surface::getDepth: Get the color depth of the Canvas surface. - * - * @return color depth - **/ - int - Surface::getDepth() + /** + * QuartzSurface::getCairo: Create Cairo (drawing object) for the Canvas surface + * + * @return new Cairo or NULL + **/ + CairoSharedPtr QuartzSurface::getCairo() const { - if (mpSurface) { - switch (cairo_surface_get_content (mpSurface)) { + if (mpSurface.get()){ + return CairoSharedPtr( cairo_create(mpSurface.get()), + &cairo_destroy ); + } else { + return CairoSharedPtr(); + } + } + + /** + * QuartzSurface::getSimilar: Create new similar Canvas surface + * @param aContent format of the new surface (cairo_content_t from cairo/src/cairo.h) + * @param width width of the new surface + * @param height height of the new surface + * + * Creates a new Canvas surface. This normally creates platform native surface, even though + * generic function is used. + * + * Cairo surface from aContent (cairo_content_t) + * + * @return new surface or NULL + **/ + SurfaceSharedPtr QuartzSurface::getSimilar( Content aContent, int width, int height ) const + { + return SurfaceSharedPtr( + new QuartzSurface( + CairoSurfaceSharedPtr( + cairo_surface_create_similar( mpSurface.get(), aContent, width, height ), + &cairo_surface_destroy ))); + } + + /** + * QuartzSurface::Resize: Resizes the Canvas surface. + * @param width new width of the surface + * @param height new height of the surface + * + * Only used on X11. + * + * @return The new surface or NULL + **/ + void QuartzSurface::Resize( int width, int height ) + { + OSL_ENSURE(false,"not supposed to be called!"); + } + + + /** + * QuartzSurface::flush: Draw the data to screen + **/ + void QuartzSurface::flush() const + { + // can only flush surfaces with NSView + if( !mpView ) return; + + OSL_TRACE("Canvas::cairo::QuartzSurface::flush(): flush to NSView"); + + CGContextRef mrContext = getCGContext(); + + if (!mrContext) return; + + [mpView lockFocus]; + + /** + * This code is using same screen update code as in VCL (esp. AquaSalGraphics::UpdateWindow() ) + */ + CGContextRef rViewContext = reinterpret_cast([[NSGraphicsContext currentContext] graphicsPort]); + CGImageRef xImage = CGBitmapContextCreateImage(mrContext); + CGContextDrawImage(rViewContext, + CGRectMake( 0, 0, + CGImageGetWidth(xImage), + CGImageGetHeight(xImage)), + xImage); + CGImageRelease( xImage ); + CGContextFlush( rViewContext ); + + [mpView unlockFocus]; + } + + /** + * QuartzSurface::getDepth: Get the color depth of the Canvas surface. + * + * @return color depth + **/ + int QuartzSurface::getDepth() const + { + if (mpSurface.get()) { + switch (cairo_surface_get_content (mpSurface.get())) { case CAIRO_CONTENT_ALPHA: return 8; break; case CAIRO_CONTENT_COLOR: return 24; break; case CAIRO_CONTENT_COLOR_ALPHA: return 32; break; } } - OSL_TRACE("Canvas::cairo::%s(): ERROR - depth unspecified!",__func__); + OSL_TRACE("Canvas::cairo::QuartzSurface::getDepth(): ERROR - depth unspecified!"); return -1; } - /** - * Surface::fillSystemGraphicsData: Fill SystemGraphicsData with native surface data - * @param aSystemGraphicsData Platform native system graphics data (struct SystemGraphicsData in vcl/inc/sysdata.hxx) - * - */ - void Surface::fillSystemGraphicsData( SystemGraphicsData& aSystemGraphicsData) + /** + * QuartzSurface::getCGContext: Get the native CGContextRef of the Canvas's cairo surface + * + * @return graphics context + **/ + CGContextRef QuartzSurface::getCGContext() const { - aSystemGraphicsData.rCGContext = cairo_quartz_surface_get_cg_context( mpSurface ); + if (mpSurface.get()) + return cairo_quartz_surface_get_cg_context(mpSurface.get()); + else + return NULL; } - /** Surface::flush Flush the platform native window - * - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/vcl/sysdata.hxx) - * - **/ - void Surface::flush(const SystemEnvData* pSysData) + /** + * cairo::createVirtualDevice: Create a VCL virtual device for the CGContext in the cairo Surface + * + * @return The new virtual device + **/ + boost::shared_ptr QuartzSurface::createVirtualDevice() const { - - OSL_TRACE("Canvas::cairo::%s(): flush to NSView",__func__); - - CGContextRef mrContext = cairo_quartz_surface_get_cg_context(mpSurface); - - // write to the NSView in pSysData - NSView* mpView = (NSView *) pSysData->pView; - - [mpView lockFocus]; + SystemGraphicsData aSystemGraphicsData; + aSystemGraphicsData.nSize = sizeof(SystemGraphicsData); + aSystemGraphicsData.rCGContext = getCGContext(); + return boost::shared_ptr( + new VirtualDevice( &aSystemGraphicsData, getDepth() )); + } /** - * This code is using same screen update code as in VCL (esp. AquaSalGraphics::UpdateWindow() ) - */ - CGContextRef rViewContext = reinterpret_cast([[NSGraphicsContext currentContext] graphicsPort]); - CGImageRef xImage = CGBitmapContextCreateImage (mrContext); - CGContextDrawImage(rViewContext, CGRectMake( 0, 0, CGImageGetWidth(xImage), CGImageGetHeight(xImage)), xImage); - CGImageRelease( xImage ); - CGContextFlush( rViewContext ); + * cairo::createSurface: Create generic Canvas surface using given Cairo Surface + * + * @param rSurface Cairo Surface + * + * @return new Surface + */ + SurfaceSharedPtr createSurface( const CairoSurfaceSharedPtr& rSurface ) + { + return SurfaceSharedPtr(new QuartzSurface(rSurface)); + } - [mpView unlockFocus]; + /** + * cairo::createSurface: Create Canvas surface using given VCL Window or Virtualdevice + * + * @param rSurface Cairo Surface + * + * For VCL Window, use platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * For VCL Virtualdevice, use platform native system graphics data (struct SystemGraphicsData in vcl/inc/sysdata.hxx) + * + * @return new Surface + */ + SurfaceSharedPtr createSurface( const OutputDevice& rRefDevice, + int x, int y, int width, int height ) + { + SurfaceSharedPtr surf; + + if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) + { + const Window &rWindow = (const Window &) rRefDevice; + const SystemEnvData* pSysData = GetSysData(&rWindow); + if (pSysData) + surf = SurfaceSharedPtr(new QuartzSurface(pSysData->pView, x, y, width, height)); + } + else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + { + SystemGraphicsData aSysData = ((const VirtualDevice&) rRefDevice).GetSystemGfxData(); + + if (aSysData.rCGContext) + surf = SurfaceSharedPtr(new QuartzSurface(aSysData.rCGContext, x, y, width, height)); + } + return surf; + } + + /** + * cairo::createBitmapSurface: Create platfrom native Canvas surface from BitmapSystemData + * @param OutputDevice (not used) + * @param rData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) + * @param rSize width and height of the new surface + * + * Create a surface based on image data on rData + * + * @return new surface or empty surface + **/ + SurfaceSharedPtr createBitmapSurface( const OutputDevice& /* rRefDevice */, + const BitmapSystemData& rData, + const Size& rSize ) + { + OSL_TRACE( "requested size: %d x %d available size: %d x %d", + rSize.Width(), rSize.Height(), rData.mnWidth, rData.mnHeight ); + + if ( rData.mnWidth == rSize.Width() && rData.mnHeight == rSize.Height() ) + { + CGContextRef rContext = (CGContextRef)rData.rImageContext; + OSL_TRACE("Canvas::cairo::createBitmapSurface(): New native image surface, context = %p.", rData.rImageContext); + + return SurfaceSharedPtr(new QuartzSurface(rContext, 0, 0, rData.mnWidth, rData.mnHeight)); + } + return SurfaceSharedPtr(); } } // namespace cairo diff --git a/canvas/source/cairo/cairo_win32_cairo.cxx b/canvas/source/cairo/cairo_win32_cairo.cxx index e1c0621419b0..56edf089b4cb 100644 --- a/canvas/source/cairo/cairo_win32_cairo.cxx +++ b/canvas/source/cairo/cairo_win32_cairo.cxx @@ -7,8 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: cairo_win32_cairo.cxx,v $ - * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * * This file is part of OpenOffice.org. * @@ -29,11 +28,9 @@ * ************************************************************************/ - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_canvas.hxx" - #ifdef WNT /************************************************************************ * Win32 surface backend for OpenOffice.org Cairo Canvas * @@ -44,134 +41,155 @@ #include #include +#include +#include +#include -#include "cairo_cairo.hxx" +#include "cairo_win32_cairo.hxx" #ifdef CAIRO_HAS_WIN32_SURFACE -#include - namespace cairo { - /** - * Surface::Surface: Create generic Canvas surface using given Cairo Surface - * - * @param pSurface Cairo Surface - * - * This constructor only stores data, it does no processing. - * It is used with e.g. cairo_image_surface_create_for_data() - * and Surface::getSimilar() - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( cairo_surface_t* pSurface ) - : mnRefCount( 1 ), - mpSurface( pSurface ) + +#include + + bool IsCairoWorking( OutputDevice* ) { + // trivially true for Windows + return true; } + /** + * Surface::Surface: Create generic Canvas surface using given Cairo Surface + * + * @param pSurface Cairo Surface + * + * This constructor only stores data, it does no processing. + * It is used with e.g. cairo_image_surface_create_for_data() + * and Surface::getSimilar() + * + * Set the mpSurface to the new surface or NULL + **/ + Win32Surface::Win32Surface( const CairoSurfaceSharedPtr& pSurface ) : + mpSurface( pSurface ) + {} - /** - * Surface::Surface: Create Canvas surface from Window reference. - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) - * @param x horizontal location of the new surface - * @param y vertical location of the new surface - * @param width width of the new surface - * @param height height of the new surface - * - * pSysData contains the platform native Window reference. - * pSysData is used to create a surface on the Window - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* pSysData, int x, int y, int /* width */, int /* height */ ) - : mnRefCount( 1 ), - mpSurface( NULL ) + /** + * Surface::Surface: Create Canvas surface from Window reference. + * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * @param x horizontal location of the new surface + * @param y vertical location of the new surface + * + * pSysData contains the platform native Window reference. + * pSysData is used to create a surface on the Window + * + * Set the mpSurface to the new surface or NULL + **/ + Win32Surface::Win32Surface( HDC hDC, int x, int y) : + mpSurface( + cairo_win32_surface_create(hDC), + &cairo_surface_destroy) { - HDC hDC; - - hDC = GetDC( pSysData->hWnd ); - mpSurface = cairo_win32_surface_create( hDC ); - cairo_surface_set_device_offset( mpSurface, x, y ); + cairo_surface_set_device_offset( mpSurface.get(), x, y ); } - - /** - * Surface::Surface: Create platfrom native Canvas surface from BitmapSystemData - * @param pSysData (not used) - * @param pBmpData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) - * @param width width of the new surface - * @param height height of the new surface - * - * Create a surface based on image data on pBmpData - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* /* pSysData */, const BitmapSystemData* pBmpData, int width, int height ) - : mnRefCount( 1 ), - mpSurface( NULL ) + /** + * Surface::Surface: Create platfrom native Canvas surface from BitmapSystemData + * @param pBmpData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) + * + * Create a surface based on image data on pBmpData + * + * Set the mpSurface to the new surface or NULL + **/ + Win32Surface::Win32Surface( const BitmapSystemData& rBmpData ) : + mpSurface() { - OSL_ASSERT (pBmpData->mnWidth == width && pBmpData->mnHeight == height); + OSL_ASSERT(rBmpData.pDIB == NULL); - // NOTE: width and height are not used in win32 - OSL_ASSERT (pBmpData->pDIB == NULL); - - // FIXME: could we use - // cairo_win32_surface_create_with_ddb (HDC hdc, cairo_format_t format, int width, int height); - // and - // cairo_win32_surface_create_with_dib (cairo_format_t format, int width, int height); - // instead? - // - - if (pBmpData->pDIB != NULL) { -#if 0 - // This code will not work anyway, as most (?) DIBs that - // come here will be in bottom-down order (upside-down) - // and in any case have a different order of colour - // channels compared to what cairo expects. - PBITMAPINFOHEADER pBIH = (PBITMAPINFOHEADER) GlobalLock ((HANDLE) p_BmpData->pDIB); - cairo_format_t fmt; - OSL_ASSERT (pBIH->biBitCount == 24 && pBIH->biCompression == BI_RGB); - mhDIB = p_BmpData->pDIB; - if (pBIH->biBitCount == 24 && pBIH->biCompression == BI_RGB) - { - mpSurface = cairo_image_surface_create_for_data (((unsigned char *) pBIH) + pBIH->biSize, - CAIRO_FORMAT_RGB24, - pBIH->biWidth, pBIH->biHeight, - 4*((3*pBIH->biWidth-1)/4+1)); - } -#else + if(rBmpData.pDIB != NULL) { // So just leave mpSurface to NULL, little else we can do at // this stage. Hopefully the Win32 patch to // cairocanvas::DeviceHelper::getSurface(BitmapSystemData&, // const Size&) will catch the cases where this // constructor would be called with a DIB bitmap, and we // will never get here. At least it worked for Ballmer.ppt. -#endif - } else { - HDC hDC; - void* hOrigBitmap; - hDC = CreateCompatibleDC( NULL ); - OSL_TRACE ("::cairo::cairo::Surface::Surface(): Selecting bitmap %p into DC %p", pBmpData->pDDB, hDC); - hOrigBitmap = SelectObject( hDC, (HANDLE) pBmpData->pDDB ); - if (hOrigBitmap == NULL) - OSL_TRACE ("SelectObject failed: %d", GetLastError ()); - mpSurface = cairo_win32_surface_create( hDC ); } - + else + { + HDC hDC = CreateCompatibleDC(NULL); + void* hOrigBitmap; + OSL_TRACE ("Surface::Surface(): Selecting bitmap %p into DC %p", rBmpData.pDDB, hDC); + hOrigBitmap = SelectObject( hDC, (HANDLE)rBmpData.pDDB ); + if(hOrigBitmap == NULL) + OSL_TRACE ("SelectObject failed: %d", GetLastError ()); + mpSurface.reset( + cairo_win32_surface_create(hDC), + &cairo_surface_destroy); + } } + /** + * Surface::getCairo: Create Cairo (drawing object) for the Canvas surface + * + * @return new Cairo or NULL + **/ + CairoSharedPtr Win32Surface::getCairo() const + { + return CairoSharedPtr( cairo_create(mpSurface.get()), + &cairo_destroy ); + } - /** - * Surface::getDepth: Get the color depth of the Canvas surface. - * - * @return color depth - **/ - int - Surface::getDepth() + /** + * Surface::getSimilar: Create new similar Canvas surface + * @param aContent format of the new surface (cairo_content_t from cairo/src/cairo.h) + * @param width width of the new surface + * @param height height of the new surface + * + * Creates a new Canvas surface. This normally creates platform native surface, even though + * generic function is used. + * + * Cairo surface from aContent (cairo_content_t) + * + * @return new surface or NULL + **/ + SurfaceSharedPtr Win32Surface::getSimilar( Content aContent, int width, int height ) const + { + return SurfaceSharedPtr( + new Win32Surface( + CairoSurfaceSharedPtr( + cairo_surface_create_similar( mpSurface.get(), aContent, width, height ), + &cairo_surface_destroy ))); + } + + /** + * Surface::Resize: Resizes the Canvas surface. + * @param width new width of the surface + * @param height new height of the surface + * + * Only used on X11. + * + * @return The new surface or NULL + **/ + void Win32Surface::Resize( int /*width*/, int /*height*/ ) + { + OSL_ENSURE(false,"not supposed to be called!"); + } + + void Win32Surface::flush() const + { + GdiFlush(); + } + + /** + * Surface::getDepth: Get the color depth of the Canvas surface. + * + * @return color depth + **/ + int Win32Surface::getDepth() const { if (mpSurface) { - switch (cairo_surface_get_content (mpSurface)) { + switch (cairo_surface_get_content (mpSurface.get())) { case CAIRO_CONTENT_ALPHA: return 8; break; case CAIRO_CONTENT_COLOR: return 24; break; case CAIRO_CONTENT_COLOR_ALPHA: return 32; break; @@ -182,14 +200,88 @@ namespace cairo } - /** - * Surface::fillSystemGraphicsData: Fill SystemGraphicsData with native surface data - * @param aSystemGraphicsData Platform native system graphics data (struct SystemGraphicsData in vcl/inc/sysdata.hxx) - * - */ - void Surface::fillSystemGraphicsData( SystemGraphicsData& aSystemGraphicsData) + /** + * cairo::createVirtualDevice: Create a VCL virtual device for the CGContext in the cairo Surface + * + * @return The new virtual device + **/ + boost::shared_ptr Win32Surface::createVirtualDevice() const { - aSystemGraphicsData.hDC = cairo_win32_surface_get_dc( mpSurface ); + SystemGraphicsData aSystemGraphicsData; + aSystemGraphicsData.nSize = sizeof(SystemGraphicsData); + aSystemGraphicsData.hDC = cairo_win32_surface_get_dc( mpSurface.get() ); + + return boost::shared_ptr( + new VirtualDevice( &aSystemGraphicsData, sal::static_int_cast(getDepth()) )); + } + + + /** + * cairo::createSurface: Create generic Canvas surface using given Cairo Surface + * + * @param rSurface Cairo Surface + * + * @return new Surface + */ + SurfaceSharedPtr createSurface( const CairoSurfaceSharedPtr& rSurface ) + { + return SurfaceSharedPtr(new Win32Surface(rSurface)); + } + + + /** + * cairo::createSurface: Create Canvas surface using given VCL Window or Virtualdevice + * + * @param rSurface Cairo Surface + * + * For VCL Window, use platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * For VCL Virtualdevice, use platform native system graphics data (struct SystemGraphicsData in vcl/inc/sysdata.hxx) + * + * @return new Surface + */ + SurfaceSharedPtr createSurface( const OutputDevice& rRefDevice, + int x, int y, int /* width */, int /* height */) + { + SurfaceSharedPtr surf; + + if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) + { + const Window &rWindow = (const Window &) rRefDevice; + const SystemEnvData* pSysData = GetSysData(&rWindow); + if (pSysData && pSysData->hWnd) + surf = SurfaceSharedPtr(new Win32Surface(GetDC((HWND) pSysData->hWnd), x, y)); + } + else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + { + SystemGraphicsData aSysData = ((const VirtualDevice&) rRefDevice).GetSystemGfxData(); + if (aSysData.hDC) + surf = SurfaceSharedPtr(new Win32Surface((HDC) aSysData.hDC, x, y)); + } + return surf; + } + + + /** + * cairo::createBitmapSurface: Create platfrom native Canvas surface from BitmapSystemData + * @param OutputDevice (not used) + * @param rData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) + * @param rSize width and height of the new surface + * + * Create a surface based on image data on rData + * + * @return new surface or empty surface + **/ + SurfaceSharedPtr createBitmapSurface( const OutputDevice& /* rRefDevice */, + const BitmapSystemData& rData, + const Size& rSize ) + { + OSL_TRACE( "requested size: %d x %d available size: %d x %d", + rSize.Width(), rSize.Height(), rData.mnWidth, rData.mnHeight ); + + if ( rData.mnWidth == rSize.Width() && rData.mnHeight == rSize.Height() ) + return SurfaceSharedPtr(new Win32Surface( rData )); + else + return SurfaceSharedPtr(); } } // namespace cairo diff --git a/canvas/source/cairo/cairo_xlib_cairo.cxx b/canvas/source/cairo/cairo_xlib_cairo.cxx index 927654bf0e0e..0dba5c2b44ce 100644 --- a/canvas/source/cairo/cairo_xlib_cairo.cxx +++ b/canvas/source/cairo/cairo_xlib_cairo.cxx @@ -7,8 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: cairo_xlib_cairo.cxx,v $ - * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * * This file is part of OpenOffice.org. * @@ -29,292 +28,328 @@ * ************************************************************************/ - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_canvas.hxx" -// NOTE: (when needed) #if defined QUARTZ has to be before UNX. -// since Mac OS X can have both X11 and QUARTZ versions -// of cairo libraries at the same time. -#if defined (UNX) && !defined (QUARTZ) - -/************************************************************************ - * XLib/Xrender surface backend for OpenOffice.org Cairo Canvas * - ************************************************************************/ - #include #include #include #include -#include +#include "cairo_xlib_cairo.hxx" -#include "cairo_cairo.hxx" - -#ifdef CAIRO_HAS_XLIB_SURFACE - -#ifdef USE_CAIRO10_APIS -#include "cairo_xlib_helper.hxx" -#endif - -#include -#include +#include +#include +#include +#include namespace cairo { -bool HasXRender( const void* pSysData ) -{ - Display *pDisplay = (Display*) ((const SystemEnvData*) pSysData)->pDisplay; - int nDummy; - return XQueryExtension( pDisplay, "RENDER", &nDummy, &nDummy, &nDummy ); -} +#include +#include + // TODO(F3): svp headless case! -#ifdef USE_CAIRO10_APIS - Surface::Surface( const void* pSysData, void* pDisplay, long hDrawable, void* pRenderFormat, cairo_surface_t* pSurface ) - : mnRefCount( 1 ), - mpSysData( pSysData ), - mpDisplay( pDisplay ), - mhDrawable( hDrawable ), - mpRenderFormat( pRenderFormat ), - mbFreePixmap( true ), - mpSurface( pSurface ) + bool IsCairoWorking( OutputDevice* pOutDev ) { + if( !pOutDev ) + return false; + + Display* pDisplay = (Display*)pOutDev->GetSystemGfxData().pDisplay; + int nDummy; + return XQueryExtension( pDisplay, "RENDER", &nDummy, &nDummy, &nDummy ); } -#endif + X11SysData::X11SysData() : + pDisplay(NULL), + hDrawable(0), + pVisual(NULL), + nScreen(0), + nDepth(-1), + aColormap(-1), + pRenderFormat(NULL) + {} + X11SysData::X11SysData( const SystemGraphicsData* pSysDat ) : + pDisplay(pSysDat->pDisplay), + hDrawable(pSysDat->hDrawable), + pVisual(pSysDat->pVisual), + nScreen(pSysDat->nScreen), + nDepth(pSysDat->nDepth), + aColormap(pSysDat->aColormap), + pRenderFormat(pSysDat->pRenderFormat) + {} - /** - * Surface::Surface: Create generic Canvas surface using given Cairo Surface - * - * @param pSurface Cairo Surface - * - * This constructor only stores data, it does no processing. - * It is used with e.g. cairo_image_surface_create_for_data() - * and Surface::getSimilar() - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( cairo_surface_t* pSurface ) - : mnRefCount( 1 ), -#ifdef USE_CAIRO10_APIS - mpSysData( NULL ), - mpDisplay( NULL ), - mhDrawable( 0 ), - mpRenderFormat( NULL ), - mbFreePixmap( false ), -#endif - mpSurface( pSurface ) + X11SysData::X11SysData( const SystemEnvData* pSysDat ) : + pDisplay(pSysDat->pDisplay), + hDrawable(pSysDat->aWindow), + pVisual(pSysDat->pVisual), + nScreen(pSysDat->nScreen), + nDepth(pSysDat->nDepth), + aColormap(pSysDat->aColormap), + pRenderFormat(NULL) + {} + + X11Pixmap::~X11Pixmap() + { + if( mpDisplay && mhDrawable ) + XFreePixmap( (Display*)mpDisplay, mhDrawable ); + } + + /** + * Surface::Surface: Create Canvas surface with existing data + * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * @param pSurface Cairo surface + * + * pSysData contains the platform native Drawable reference + * This constructor only stores data, it does no processing. + * It is used by e.g. Surface::getSimilar() + * + * Set the mpSurface as pSurface + **/ + X11Surface::X11Surface( const X11SysData& rSysData, + const X11PixmapSharedPtr& rPixmap, + const CairoSurfaceSharedPtr& pSurface ) : + maSysData(rSysData), + mpPixmap(rPixmap), + mpSurface(pSurface) + {} + + /** + * Surface::Surface: Create generic Canvas surface using given Cairo Surface + * + * @param pSurface Cairo Surface + * + * This constructor only stores data, it does no processing. + * It is used with e.g. cairo_image_surface_create_for_data() + * Unlike other constructors, mpSysData is set to NULL + * + * Set the mpSurface as pSurface + **/ + X11Surface::X11Surface( const CairoSurfaceSharedPtr& pSurface ) : + maSysData(), + mpPixmap(), + mpSurface(pSurface) + {} + + /** + * Surface::Surface: Create Canvas surface from Window reference. + * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * @param x horizontal location of the new surface + * @param y vertical location of the new surface + * @param width width of the new surface + * @param height height of the new surface + * + * pSysData contains the platform native Window reference. + * + * pSysData is used to create a surface on the Window + * + * Set the mpSurface to the new surface or NULL + **/ + X11Surface::X11Surface( const X11SysData& rSysData, int x, int y, int width, int height ) : + maSysData(rSysData), + mpPixmap(), + mpSurface( + cairo_xlib_surface_create( (Display*)rSysData.pDisplay, + rSysData.hDrawable, + (Visual*)rSysData.pVisual, + width + x, height + y ), + &cairo_surface_destroy) + { + cairo_surface_set_device_offset(mpSurface.get(), x, y ); + } + + /** + * Surface::Surface: Create platfrom native Canvas surface from BitmapSystemData + * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) + * @param pBmpData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) + * @param width width of the new surface + * @param height height of the new surface + * + * The pBmpData provides the imagedata that the created surface should contain. + * + * Set the mpSurface to the new surface or NULL + **/ + X11Surface::X11Surface( const X11SysData& rSysData, + const BitmapSystemData& rData ) : + maSysData( rSysData ), + mpPixmap(), + mpSurface( + cairo_xlib_surface_create( (Display*)rSysData.pDisplay, + (Drawable)rData.aPixmap, + (Visual*) rSysData.pVisual, + rData.mnWidth, rData.mnHeight ), + &cairo_surface_destroy) { } - - - /** - * Surface::Surface: Create Canvas surface from Window reference. - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) - * @param x horizontal location of the new surface - * @param y vertical location of the new surface - * @param width width of the new surface - * @param height height of the new surface - * - * pSysData contains the platform native Window reference. - * pSysData is used to create a surface on the Window - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* pSysData, int x, int y, int width, int height ) - : mnRefCount( 1 ), -#ifdef USE_CAIRO10_APIS - mpSysData( pSysData ), - mpDisplay( NULL ), - mhDrawable( 0 ), - mpRenderFormat( NULL ), - mbFreePixmap( false ), -#endif - mpSurface( NULL ) + /** + * Surface::getCairo: Create Cairo (drawing object) for the Canvas surface + * + * @return new Cairo or NULL + **/ + CairoSharedPtr X11Surface::getCairo() const { -#ifdef USE_CAIRO10_APIS - mpSurface = (cairo_surface_t*) cairoHelperGetSurface( pSysData, x, y, width, height ); - mpDisplay = (Display*) cairoHelperGetDisplay( pSysData ); - mhDrawable = cairoHelperGetWindow( pSysData ); -#else - mpSurface = cairo_xlib_surface_create( (Display*) pSysData->pDisplay, - pSysData->aWindow, - (Visual*) pSysData->pVisual, - width + x, height + y ); - cairo_surface_set_device_offset( mpSurface, x, y ); - // XSynchronize( (Display*) pSysData->pDisplay, TRUE ); -#endif + return CairoSharedPtr( cairo_create(mpSurface.get()), + &cairo_destroy ); } - - /** - * Surface::Surface: Create platfrom native Canvas surface from BitmapSystemData - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) - * @param pBmpData Platform native image data (struct BitmapSystemData in vcl/inc/bitmap.hxx) - * @param width width of the new surface - * @param height height of the new surface - * - * Create a surface based on image data on pBmpData - * - * Set the mpSurface to the new surface or NULL - **/ - Surface::Surface( const SystemEnvData* pSysData, const BitmapSystemData* pBmpData, int width, int height ) - : mnRefCount( 1 ), -#ifdef USE_CAIRO10_APIS - mpSysData( pSysData ), - mpDisplay( NULL ), - mhDrawable( 0 ), - mpRenderFormat( NULL ), - mbFreePixmap( false ), -#endif - mpSurface( NULL ) - { -#ifdef USE_CAIRO10_APIS - mpSurface = (cairo_surface_t*) cairoHelperGetSurface( pSysData, pBmpData, width, height ); - mpDisplay = (Display*) cairoHelperGetDisplay( pSysData ); - mhDrawable = cairoHelperGetWindow( pSysData ); -#else - OSL_ASSERT (pBmpData->mnWidth == width && pBmpData->mnHeight == height); - - mpSurface = cairo_xlib_surface_create( (Display*) pSysData->pDisplay, - (Drawable) pBmpData->aPixmap, - (Visual*) pSysData->pVisual, - width, height ); -#endif - } - -#if defined USE_CAIRO10_APIS - /** - * Surface::~Surface: Destroy the Canvas surface - * - * Also free any image data and other references related to the Canvas. - * - **/ - Surface::~Surface() - { - if( mpSurface ) - { - cairo_surface_destroy( mpSurface ); - mpSurface = NULL; - } - mpSysData = NULL; - -// In cairo API < 1.2, explicit freeing is needed - if( mbFreePixmap && mhDrawable ) - XFreePixmap( (Display*) mpDisplay, mhDrawable ); - } -#endif - - - /** - * Surface::Resize: Resizes the Canvas surface. - * @param width new width of the surface - * @param height new height of the surface - * - * Only used on X11. - * - * @return The new surface or NULL - **/ - void - Surface::Resize( int width, int height ) - { - cairo_xlib_surface_set_size( mpSurface, width, height ); - } - - - /** - * Surface::getDepth: Get the color depth of the Canvas surface. - * - * @return color depth - **/ - int - Surface::getDepth() - { -#ifdef USE_CAIRO10_APIS - if( mpRenderFormat ) - return ( ( XRenderPictFormat * ) mpRenderFormat )->depth; -#else - // TODO: verify that this works correctly - return cairo_xlib_surface_get_depth( mpSurface ); -#endif - return -1; - } - -#ifdef USE_CAIRO10_APIS -// This function is platform dependent on Cairo < 1.2 API only. - Surface* Surface::getSimilar( Content aContent, int width, int height ) + /** + * Surface::getSimilar: Create new similar Canvas surface + * @param aContent format of the new surface (cairo_content_t from cairo/src/cairo.h) + * @param width width of the new surface + * @param height height of the new surface + * + * Creates a new Canvas surface. This normally creates platform native surface, even though + * generic function is used. + * + * Cairo surface from aContent (cairo_content_t) + * + * @return new surface or NULL + **/ + SurfaceSharedPtr X11Surface::getSimilar( Content aContent, int width, int height ) const { Pixmap hPixmap; - if( mpSysData && mpDisplay && mhDrawable ) { - XRenderPictFormat *pFormat; + if( maSysData.pDisplay && maSysData.hDrawable ) + { + XRenderPictFormat* pFormat; + int nFormat; - pFormat = XRenderFindStandardFormat( (Display*) mpDisplay, getXFormat(aContent) ); - hPixmap = XCreatePixmap( (Display*) mpDisplay, cairoHelperGetWindow( mpSysData ), + switch (aContent) + { + case CAIRO_CONTENT_ALPHA: + nFormat = PictStandardA8; + break; + case CAIRO_CONTENT_COLOR: + nFormat = PictStandardRGB24; + break; + case CAIRO_CONTENT_COLOR_ALPHA: + default: + nFormat = PictStandardARGB32; + break; + } + + pFormat = XRenderFindStandardFormat( (Display*)maSysData.pDisplay, nFormat ); + hPixmap = XCreatePixmap( (Display*)maSysData.pDisplay, maSysData.hDrawable, width > 0 ? width : 1, height > 0 ? height : 1, pFormat->depth ); - return new Surface( mpSysData, mpDisplay, (long) hPixmap, pFormat, - cairo_xlib_surface_create_with_xrender_format( (Display*) mpDisplay, hPixmap, - DefaultScreenOfDisplay( (Display *) mpDisplay ), - pFormat, width, height ) ); - } else - return new Surface( mpSysData, mpDisplay, 0, NULL, cairo_surface_create_similar( mpSurface, aContent, width, height ) ); - } -#endif // USE_CAIRO10_APIS - - /** - * Surface::fillSystemGraphicsData: Fill SystemGraphicsData with native surface data - * @param aSystemGraphicsData Platform native system graphics data (struct SystemGraphicsData in vcl/inc/sysdata.hxx) - * - */ - void Surface::fillSystemGraphicsData( SystemGraphicsData& aSystemGraphicsData) - { - #ifdef USE_CAIRO10_APIS - // Backward compatibility for Cairo 1.0 - aSystemGraphicsData.hDrawable = mhDrawable; - aSystemGraphicsData.pRenderFormat = mpRenderFormat; - #else - aSystemGraphicsData.hDrawable = cairo_xlib_surface_get_drawable( mpSurface ); - aSystemGraphicsData.pRenderFormat = XRenderFindStandardFormat( cairo_xlib_surface_get_display (mpSurface), - getXFormat(cairo_surface_get_content(mpSurface)) ); - #endif //USE_CAIRO10_APIS - } - - - int Surface::getXFormat(Content aContent) - { - switch(aContent) - { - case CAIRO_CONTENT_ALPHA: return PictStandardA8; break; - case CAIRO_CONTENT_COLOR: return PictStandardRGB24; break; - case CAIRO_CONTENT_COLOR_ALPHA: - default: return PictStandardARGB32; break; + X11SysData aSysData(maSysData); + aSysData.pRenderFormat = pFormat; + return SurfaceSharedPtr( + new X11Surface( aSysData, + X11PixmapSharedPtr( + new X11Pixmap(hPixmap, maSysData.pDisplay)), + CairoSurfaceSharedPtr( + cairo_xlib_surface_create_with_xrender_format( + (Display*)maSysData.pDisplay, + hPixmap, + ScreenOfDisplay((Display *)maSysData.pDisplay, maSysData.nScreen), + pFormat, width, height ), + &cairo_surface_destroy) )); } + else + return SurfaceSharedPtr( + new X11Surface( maSysData, + X11PixmapSharedPtr(), + CairoSurfaceSharedPtr( + cairo_surface_create_similar( mpSurface.get(), aContent, width, height ), + &cairo_surface_destroy ))); } - - /** Surface::flush Flush the platform native window - * - * @param pSysData Platform native system environment data (struct SystemEnvData in vcl/inc/sysdata.hxx) - * - **/ - void Surface::flush(const SystemEnvData* pSysData) + boost::shared_ptr X11Surface::createVirtualDevice() const { -#ifdef USE_CAIRO10_APIS - cairoHelperFlush( pSysData ); -#else - XSync( (Display*) pSysData->pDisplay, false ); -#endif + SystemGraphicsData aSystemGraphicsData; + + aSystemGraphicsData.nSize = sizeof(SystemGraphicsData); + aSystemGraphicsData.hDrawable = getDrawable(); + aSystemGraphicsData.pRenderFormat = getRenderFormat(); + + return boost::shared_ptr( + new VirtualDevice( &aSystemGraphicsData, getDepth() )); } + /** + * Surface::Resize: Resizes the Canvas surface. + * @param width new width of the surface + * @param height new height of the surface + * + * Only used on X11. + * + * @return The new surface or NULL + **/ + void X11Surface::Resize( int width, int height ) + { + cairo_xlib_surface_set_size( mpSurface.get(), width, height ); + } -} // namespace cairo + void X11Surface::flush() const + { + XSync( (Display*)maSysData.pDisplay, false ); + } -#endif // CAIRO_HAS_XLIB_SURFACE + /** + * Surface::getDepth: Get the color depth of the Canvas surface. + * + * @return color depth + **/ + int X11Surface::getDepth() const + { + if( maSysData.pRenderFormat ) + return ((XRenderPictFormat*) maSysData.pRenderFormat)->depth; -#endif // defined (UNX) && !defined (QUARTZ) + return -1; + } + + SurfaceSharedPtr createSurface( const CairoSurfaceSharedPtr& rSurface ) + { + return SurfaceSharedPtr(new X11Surface(rSurface)); + } + + static X11SysData getSysData( const Window& rWindow ) + { + const SystemEnvData* pSysData = GetSysData(&rWindow); + + if( !pSysData ) + return X11SysData(); + else + return X11SysData(pSysData); + } + + static X11SysData getSysData( const VirtualDevice& rVirDev ) + { + return X11SysData( &rVirDev.GetSystemGfxData() ); + } + + SurfaceSharedPtr createSurface( const OutputDevice& rRefDevice, + int x, int y, int width, int height ) + { + if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) + return SurfaceSharedPtr(new X11Surface(getSysData((const Window&)rRefDevice), + x,y,width,height)); + else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + return SurfaceSharedPtr(new X11Surface(getSysData((const VirtualDevice&)rRefDevice), + x,y,width,height)); + else + return SurfaceSharedPtr(); + } + + SurfaceSharedPtr createBitmapSurface( const OutputDevice& rRefDevice, + const BitmapSystemData& rData, + const Size& rSize ) + { + OSL_TRACE( "requested size: %d x %d available size: %d x %d", + rSize.Width(), rSize.Height(), rData.mnWidth, rData.mnHeight ); + if ( rData.mnWidth == rSize.Width() && rData.mnHeight == rSize.Height() ) + { + if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) + return SurfaceSharedPtr(new X11Surface(getSysData((const Window&)rRefDevice), rData )); + else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + return SurfaceSharedPtr(new X11Surface(getSysData((const VirtualDevice&)rRefDevice), rData )); + } + + return SurfaceSharedPtr(); + } +} diff --git a/canvas/source/cairo/postx.h b/canvas/source/cairo/postx.h index bdef604bd1b3..ca8f610f78ec 100644 --- a/canvas/source/cairo/postx.h +++ b/canvas/source/cairo/postx.h @@ -1,31 +1,35 @@ /************************************************************************* * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * OpenOffice.org - a multi-platform office productivity suite * - * Copyright 2008 by Sun Microsystems, Inc. + * $RCSfile: postx.h,v $ * - * OpenOffice.org - a multi-platform office productivity suite + * $Revision: 1.4 $ * - * $RCSfile: postx.h,v $ + * last change: $Author: kz $ $Date: 2008-06-30 12:59:14 $ * - * $Revision: 1.3 $ + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. * - * 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. + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA * - * 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). + * 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. * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. + * 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 * ************************************************************************/ diff --git a/canvas/source/cairo/prex.h b/canvas/source/cairo/prex.h index 88ecf72bb5c8..6f1289fe9e5e 100644 --- a/canvas/source/cairo/prex.h +++ b/canvas/source/cairo/prex.h @@ -1,31 +1,35 @@ /************************************************************************* * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * OpenOffice.org - a multi-platform office productivity suite * - * Copyright 2008 by Sun Microsystems, Inc. + * $RCSfile: prex.h,v $ * - * OpenOffice.org - a multi-platform office productivity suite + * $Revision: 1.4 $ * - * $RCSfile: prex.h,v $ + * last change: $Author: kz $ $Date: 2008-06-30 12:58:44 $ * - * $Revision: 1.3 $ + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. * - * 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. + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA * - * 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). + * 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. * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. + * 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 * ************************************************************************/