#i10000# take version form canvas05 (thb)

This commit is contained in:
Kurt Zenker 2008-06-30 11:59:53 +00:00
parent a73452e618
commit 447b3a5eaf
5 changed files with 796 additions and 516 deletions

View file

@ -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 <cairo-quartz.h>
#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<CGContextRef>([[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<VirtualDevice> 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<VirtualDevice>(
new VirtualDevice( &aSystemGraphicsData, getDepth() ));
}
/**
* This code is using same screen update code as in VCL (esp. AquaSalGraphics::UpdateWindow() )
*/
CGContextRef rViewContext = reinterpret_cast<CGContextRef>([[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

View file

@ -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 <tools/postwin.h>
#include <osl/diagnose.h>
#include <vcl/bitmap.hxx>
#include <vcl/virdev.hxx>
#include <vcl/sysdata.hxx>
#include "cairo_cairo.hxx"
#include "cairo_win32_cairo.hxx"
#ifdef CAIRO_HAS_WIN32_SURFACE
#include <cairo-win32.h>
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 <cairo-win32.h>
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<VirtualDevice> 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<VirtualDevice>(
new VirtualDevice( &aSystemGraphicsData, sal::static_int_cast<USHORT>(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

View file

@ -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 <prex.h>
#include <X11/extensions/Xrender.h>
#include <X11/Xlib.h>
#include <postx.h>
#include <osl/diagnose.h>
#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 <cairo-xlib.h>
#include <cairo-xlib-xrender.h>
#include <vcl/sysdata.hxx>
#include <vcl/bitmap.hxx>
#include <vcl/virdev.hxx>
#include <basegfx/vector/b2isize.hxx>
namespace cairo
{
bool HasXRender( const void* pSysData )
{
Display *pDisplay = (Display*) ((const SystemEnvData*) pSysData)->pDisplay;
int nDummy;
return XQueryExtension( pDisplay, "RENDER", &nDummy, &nDummy, &nDummy );
}
#include <cairo-xlib.h>
#include <cairo-xlib-xrender.h>
// 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<VirtualDevice> 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<VirtualDevice>(
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();
}
}

View file

@ -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
* <http://www.openoffice.org/license.html>
* 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
*
************************************************************************/

View file

@ -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
* <http://www.openoffice.org/license.html>
* 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
*
************************************************************************/