summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-11-12 22:43:15 +0000
committerCaolán McNamara <caolanm@redhat.com>2011-11-14 07:35:58 +0000
commitf163867ff49526f39bb329c698b74899c4b5c0e3 (patch)
tree01ca9589832cf16bb08f6fd42320c39b15739153 /vcl
parent93c5ac9ff1033492bec1aefcda94c1507cafcccd (diff)
Link with libXrender instead of dynamically open it
Let's not mess around dlopening it and leaving gaps in the support whereby we currently require it to exist either linked or "dlopenable+display supports it" with dlopenable + display doesn't support it leaves a crashing gap where there are no appropiate checks for that case.
Diffstat (limited to 'vcl')
-rw-r--r--vcl/Library_vclplug_gen.mk5
-rw-r--r--vcl/unx/generic/gdi/xrender_peer.cxx126
-rw-r--r--vcl/unx/generic/gdi/xrender_peer.hxx111
3 files changed, 6 insertions, 236 deletions
diff --git a/vcl/Library_vclplug_gen.mk b/vcl/Library_vclplug_gen.mk
index a0b1531336cb..9e885aaf6601 100644
--- a/vcl/Library_vclplug_gen.mk
+++ b/vcl/Library_vclplug_gen.mk
@@ -172,14 +172,9 @@ endif
endif
## handle Render linking
-ifeq ($(XRENDER_LINK),YES)
-$(eval $(call gb_Library_add_defs,vclplug_gen,\
- -DXRENDER_LINK \
-))
$(eval $(call gb_Library_add_libs,vclplug_gen,\
$(shell pkg-config --libs xrender) \
))
-endif
ifeq ($(OS),LINUX)
$(eval $(call gb_Library_add_linked_libs,vclplug_gen,\
diff --git a/vcl/unx/generic/gdi/xrender_peer.cxx b/vcl/unx/generic/gdi/xrender_peer.cxx
index 52611e7afac2..185cc305c0ee 100644
--- a/vcl/unx/generic/gdi/xrender_peer.cxx
+++ b/vcl/unx/generic/gdi/xrender_peer.cxx
@@ -47,27 +47,15 @@ using namespace rtl;
// ---------------------------------------------------------------------------
XRenderPeer::XRenderPeer()
-: mpDisplay( GetGenericData()->GetSalDisplay()->GetDisplay() ),
- mpStandardFormatA8( NULL ),
- mnRenderVersion( 0 ),
- mpRenderLib( NULL )
-#ifndef XRENDER_LINK
-, mpXRenderCompositeTrapezoids( NULL )
-, mpXRenderAddTraps( NULL )
-#endif // XRENDER_LINK
+ : mpDisplay( GetGenericData()->GetSalDisplay()->GetDisplay() )
+ , mpStandardFormatA8( NULL )
+ , mnRenderVersion( 0 )
{
InitRenderLib();
}
// ---------------------------------------------------------------------------
-XRenderPeer::~XRenderPeer()
-{
- osl_unloadModule( mpRenderLib );
-}
-
-// ---------------------------------------------------------------------------
-
XRenderPeer& XRenderPeer::GetInstance()
{
static XRenderPeer aPeer;
@@ -79,117 +67,11 @@ XRenderPeer& XRenderPeer::GetInstance()
void XRenderPeer::InitRenderLib()
{
int nDummy;
- if( !XQueryExtension( mpDisplay, "RENDER", &nDummy, &nDummy, &nDummy ) )
- return;
-
-#ifndef XRENDER_LINK
- // we don't know if we are running on a system with xrender library
- // we don't want to install system libraries ourselves
- // => load them dynamically when they are there
- const OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( "libXrender.so.1" ));
- mpRenderLib = osl_loadModule( aLibName.pData, SAL_LOADMODULE_DEFAULT );
- if( !mpRenderLib ) {
-#ifdef DEBUG
- fprintf( stderr, "Display can do XRender, but no %s installed.\n"
- "Please install for improved display performance\n", OUStringToOString( aLibName.getStr(),
- osl_getThreadTextEncoding() ).getStr() );
-#endif
- return;
- }
-
- oslGenericFunction pFunc;
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderQueryExtension" );
- if( !pFunc ) return;
- mpXRenderQueryExtension = (Bool(*)(Display*,int*,int*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderQueryVersion" );
- if( !pFunc ) return;
- mpXRenderQueryVersion = (void(*)(Display*,int*,int*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFindVisualFormat" );
- if( !pFunc ) return;
- mpXRenderFindVisualFormat = (XRenderPictFormat*(*)(Display*,Visual*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFindStandardFormat" );
- if( !pFunc ) return;
- mpXRenderFindStandardFormat = (XRenderPictFormat*(*)(Display*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFindFormat" );
- if( !pFunc ) return;
- mpXRenderFindFormat = (XRenderPictFormat*(*)(Display*,unsigned long,
- const XRenderPictFormat*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderCreateGlyphSet" );
- if( !pFunc ) return;
- mpXRenderCreateGlyphSet = (GlyphSet(*)(Display*,const XRenderPictFormat*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFreeGlyphSet" );
- if( !pFunc ) return;
- mpXRenderFreeGlyphSet = (void(*)(Display*,GlyphSet))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderAddGlyphs" );
- if( !pFunc ) return;
- mpXRenderAddGlyphs = (void(*)(Display*,GlyphSet,Glyph*,const XGlyphInfo*,
- int,const char*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFreeGlyphs" );
- if( !pFunc ) return;
- mpXRenderFreeGlyphs = (void(*)(Display*,GlyphSet,Glyph*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderCompositeString32" );
- if( !pFunc ) return;
- mpXRenderCompositeString32 = (void(*)(Display*,int,Picture,Picture,
- const XRenderPictFormat*,GlyphSet,int,int,int,int,const unsigned*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderCreatePicture" );
- if( !pFunc ) return;
- mpXRenderCreatePicture = (Picture(*)(Display*,Drawable,const XRenderPictFormat*,
- unsigned long,const XRenderPictureAttributes*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderChangePicture" );
- if( !pFunc ) return;
- mpXRenderChangePicture = (void(*)(Display*,Picture,unsigned long,const XRenderPictureAttributes*))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderSetPictureClipRegion" );
- if( !pFunc ) return;
- mpXRenderSetPictureClipRegion = (void(*)(Display*,Picture,XLIB_Region))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFreePicture" );
- if( !pFunc ) return;
- mpXRenderFreePicture = (void(*)(Display*,Picture))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderComposite" );
- if( !pFunc ) return;
- mpXRenderComposite = (void(*)(Display*,int,Picture,Picture,Picture,
- int,int,int,int,int,int,unsigned,unsigned))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderFillRectangle" );
- if( !pFunc ) return;
- mpXRenderFillRectangle = (void(*)(Display*,int,Picture,const XRenderColor*,
- int,int,unsigned int,unsigned int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderCompositeTrapezoids" );
- mpXRenderCompositeTrapezoids = (void(*)(Display*,int,Picture,Picture,
- const XRenderPictFormat*,int,int,const XTrapezoid*,int))pFunc;
-
- pFunc = osl_getAsciiFunctionSymbol( mpRenderLib, "XRenderAddTraps" );
- mpXRenderAddTraps = (void(*)(Display*,Picture,int,int,const _XTrap*,int))pFunc;
-
-#endif // XRENDER_LINK
-
- // needed to initialize libXrender internals, we already know its there
-#ifdef XRENDER_LINK
+ // needed to initialize libXrender internals
XRenderQueryExtension( mpDisplay, &nDummy, &nDummy );
-#else
- (*mpXRenderQueryExtension)( mpDisplay, &nDummy, &nDummy );
-#endif
int nMajor, nMinor;
-#ifdef XRENDER_LINK
XRenderQueryVersion( mpDisplay, &nMajor, &nMinor );
-#else
- (*mpXRenderQueryVersion)( mpDisplay, &nMajor, &nMinor );
-#endif
mnRenderVersion = 16*nMajor + nMinor;
// the 8bit alpha mask format must be there
diff --git a/vcl/unx/generic/gdi/xrender_peer.hxx b/vcl/unx/generic/gdi/xrender_peer.hxx
index f9417bb2be95..be45feebbf6e 100644
--- a/vcl/unx/generic/gdi/xrender_peer.hxx
+++ b/vcl/unx/generic/gdi/xrender_peer.hxx
@@ -47,13 +47,11 @@ public:
protected:
XRenderPeer();
- ~XRenderPeer();
void InitRenderLib();
Display* mpDisplay;
XRenderPictFormat* mpStandardFormatA8;
int mnRenderVersion;
- oslModule mpRenderLib;
public:
XRenderPictFormat* GetStandardFormatA8() const;
@@ -85,45 +83,8 @@ public:
void CompositeTrapezoids( int nOp, Picture aSrc, Picture aDst,
const XRenderPictFormat*, int nXSrc, int nYSrc,
const XTrapezoid*, int nCount ) const;
- bool AddTraps( Picture aDst, int nXOfs, int nYOfs,
+ void AddTraps( Picture aDst, int nXOfs, int nYOfs,
const _XTrap*, int nCount ) const;
-
- bool AreTrapezoidsSupported() const
-#ifdef XRENDER_LINK
- { return true; }
-#else
- { return mpXRenderCompositeTrapezoids!=NULL; }
-
-private:
- XRenderPictFormat* (*mpXRenderFindFormat)(Display*,unsigned long,
- const XRenderPictFormat*,int);
- XRenderPictFormat* (*mpXRenderFindVisualFormat)(Display*,Visual*);
- XRenderPictFormat* (*mpXRenderFindStandardFormat)(Display*,int);
- Bool (*mpXRenderQueryExtension)(Display*,int*,int*);
- void (*mpXRenderQueryVersion)(Display*,int*,int*);
-
- Picture (*mpXRenderCreatePicture)(Display*,Drawable, const XRenderPictFormat*,
- unsigned long,const XRenderPictureAttributes*);
- void (*mpXRenderChangePicture)(Display*,Picture,
- unsigned long,const XRenderPictureAttributes*);
- void (*mpXRenderSetPictureClipRegion)(Display*,Picture,XLIB_Region);
- void (*mpXRenderFreePicture)(Display*,Picture);
- void (*mpXRenderComposite)(Display*,int,Picture,Picture,Picture,
- int,int,int,int,int,int,unsigned,unsigned);
-
- GlyphSet (*mpXRenderCreateGlyphSet)(Display*, const XRenderPictFormat*);
- void (*mpXRenderFreeGlyphSet)(Display*,GlyphSet);
- void (*mpXRenderAddGlyphs)(Display*,GlyphSet,Glyph*,
- const XGlyphInfo*,int,const char*,int);
- void (*mpXRenderFreeGlyphs)(Display*,GlyphSet,Glyph*,int);
- void (*mpXRenderCompositeString32)(Display*,int,Picture,Picture,
- const XRenderPictFormat*,GlyphSet,int,int,int,int,const unsigned*,int);
- void (*mpXRenderFillRectangle)(Display*,int,Picture,
- const XRenderColor*,int,int,unsigned int,unsigned int);
- void (*mpXRenderCompositeTrapezoids)(Display*,int,Picture,Picture,
- const XRenderPictFormat*,int,int,const XTrapezoid*,int);
- void (*mpXRenderAddTraps)(Display*,Picture,int,int,const _XTrap*,int);
-#endif // XRENDER_LINK
};
//=====================================================================
@@ -158,63 +119,38 @@ inline XRenderPictFormat* XRenderPeer::GetStandardFormatA8() const
inline XRenderPictFormat* XRenderPeer::FindStandardFormat(int nFormat) const
{
-#ifdef XRENDER_LINK
return XRenderFindStandardFormat(mpDisplay, nFormat);
-#else
- return (*mpXRenderFindStandardFormat)(mpDisplay, nFormat);
-#endif
}
inline XRenderPictFormat* XRenderPeer::FindVisualFormat( Visual* pVisual ) const
{
-#ifdef XRENDER_LINK
return XRenderFindVisualFormat ( mpDisplay, pVisual );
-#else
- return (*mpXRenderFindVisualFormat)( mpDisplay, pVisual );
-#endif
}
inline XRenderPictFormat* XRenderPeer::FindPictureFormat( unsigned long nFormatMask,
const XRenderPictFormat& rFormatAttr ) const
{
-#ifdef XRENDER_LINK
return XRenderFindFormat( mpDisplay, nFormatMask, &rFormatAttr, 0 );
-#else
- return (*mpXRenderFindFormat)( mpDisplay, nFormatMask, &rFormatAttr, 0 );
-#endif
}
inline Picture XRenderPeer::CreatePicture( Drawable aDrawable,
const XRenderPictFormat* pVisFormat, unsigned long nValueMask,
const XRenderPictureAttributes* pRenderAttr ) const
{
-#ifdef XRENDER_LINK
return XRenderCreatePicture( mpDisplay, aDrawable, pVisFormat,
nValueMask, pRenderAttr );
-#else
- return (*mpXRenderCreatePicture)( mpDisplay, aDrawable, pVisFormat,
- nValueMask, pRenderAttr );
-#endif
}
inline void XRenderPeer::ChangePicture( Picture aPicture,
unsigned long nValueMask, const XRenderPictureAttributes* pRenderAttr ) const
{
-#ifdef XRENDER_LINK
XRenderChangePicture( mpDisplay, aPicture, nValueMask, pRenderAttr );
-#else
- (*mpXRenderChangePicture)( mpDisplay, aPicture, nValueMask, pRenderAttr );
-#endif
}
inline void XRenderPeer::SetPictureClipRegion( Picture aPicture,
XLIB_Region aXlibRegion ) const
{
-#ifdef XRENDER_LINK
XRenderSetPictureClipRegion( mpDisplay, aPicture, aXlibRegion );
-#else
- (*mpXRenderSetPictureClipRegion)( mpDisplay, aPicture, aXlibRegion );
-#endif
}
inline void XRenderPeer::CompositePicture( int nXRenderOp,
@@ -222,52 +158,30 @@ inline void XRenderPeer::CompositePicture( int nXRenderOp,
int nSrcX, int nSrcY, int nMaskX, int nMaskY, int nDstX, int nDstY,
unsigned nWidth, unsigned nHeight ) const
{
-#ifdef XRENDER_LINK
XRenderComposite( mpDisplay, nXRenderOp, aSrcPic, aMaskPic, aDstPic,
nSrcX, nSrcY, nMaskX, nMaskY, nDstX, nDstY, nWidth, nHeight );
-#else
- (*mpXRenderComposite)( mpDisplay, nXRenderOp, aSrcPic, aMaskPic, aDstPic,
- nSrcX, nSrcY, nMaskX, nMaskY, nDstX, nDstY, nWidth, nHeight );
-#endif
}
inline void XRenderPeer::FreePicture( Picture aPicture ) const
{
-#ifdef XRENDER_LINK
XRenderFreePicture( mpDisplay, aPicture );
-#else
- (*mpXRenderFreePicture)( mpDisplay, aPicture );
-#endif
}
inline GlyphSet XRenderPeer::CreateGlyphSet() const
{
-#ifdef XRENDER_LINK
return XRenderCreateGlyphSet( mpDisplay, mpStandardFormatA8 );
-#else
- return (*mpXRenderCreateGlyphSet)( mpDisplay, mpStandardFormatA8 );
-#endif
}
inline void XRenderPeer::FreeGlyphSet( GlyphSet aGS ) const
{
-#ifdef XRENDER_LINK
XRenderFreeGlyphSet( mpDisplay, aGS );
-#else
- (*mpXRenderFreeGlyphSet)( mpDisplay, aGS );
-#endif
}
inline void XRenderPeer::AddGlyph( GlyphSet aGS, Glyph nGlyphId,
const XGlyphInfo& rGI, const char* pBuffer, int nBufSize ) const
{
-#ifdef XRENDER_LINK
XRenderAddGlyphs( mpDisplay, aGS, &nGlyphId, &rGI, 1,
const_cast<char*>(pBuffer), nBufSize );
-#else
- (*mpXRenderAddGlyphs)( mpDisplay, aGS, &nGlyphId, &rGI, 1,
- const_cast<char*>(pBuffer), nBufSize );
-#endif
}
inline void XRenderPeer::FreeGlyph( GlyphSet aGS, Glyph nGlyphId ) const
@@ -284,23 +198,14 @@ inline void XRenderPeer::CompositeString32( Picture aSrc, Picture aDst,
GlyphSet aGlyphSet, int nDstX, int nDstY,
const unsigned* pText, int nTextLen ) const
{
-#ifdef XRENDER_LINK
XRenderCompositeString32( mpDisplay, PictOpOver, aSrc, aDst, NULL,
aGlyphSet, 0, 0, nDstX, nDstY, pText, nTextLen );
-#else
- (*mpXRenderCompositeString32)( mpDisplay, PictOpOver, aSrc, aDst, NULL,
- aGlyphSet, 0, 0, nDstX, nDstY, pText, nTextLen );
-#endif
}
inline void XRenderPeer::FillRectangle( int a, Picture b, const XRenderColor* c,
int d, int e, unsigned int f, unsigned int g) const
{
-#ifdef XRENDER_LINK
XRenderFillRectangle( mpDisplay, a, b, c, d, e, f, g );
-#else
- (*mpXRenderFillRectangle)( mpDisplay, a, b, c, d, e, f, g );
-#endif
}
@@ -308,26 +213,14 @@ inline void XRenderPeer::CompositeTrapezoids( int nOp,
Picture aSrc, Picture aDst, const XRenderPictFormat* pXRPF,
int nXSrc, int nYSrc, const XTrapezoid* pXT, int nCount ) const
{
-#ifdef XRENDER_LINK
XRenderCompositeTrapezoids( mpDisplay, nOp, aSrc, aDst, pXRPF,
nXSrc, nYSrc, pXT, nCount );
-#else
- (*mpXRenderCompositeTrapezoids)( mpDisplay, nOp, aSrc, aDst, pXRPF,
- nXSrc, nYSrc, pXT, nCount );
-#endif
}
-inline bool XRenderPeer::AddTraps( Picture aDst, int nXOfs, int nYOfs,
+inline void XRenderPeer::AddTraps( Picture aDst, int nXOfs, int nYOfs,
const _XTrap* pTraps, int nCount ) const
{
-#ifdef XRENDER_LINK
XRenderAddTraps( mpDisplay, aDst, nXOfs, nYOfs, pTraps, nCount );
-#else
- if( !mpXRenderAddTraps )
- return false;
- (*mpXRenderAddTraps)( mpDisplay, aDst, nXOfs, nYOfs, pTraps, nCount );
-#endif
- return true;
}
//=====================================================================