diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-11-12 22:43:15 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-11-14 07:35:58 +0000 |
commit | f163867ff49526f39bb329c698b74899c4b5c0e3 (patch) | |
tree | 01ca9589832cf16bb08f6fd42320c39b15739153 /vcl | |
parent | 93c5ac9ff1033492bec1aefcda94c1507cafcccd (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.mk | 5 | ||||
-rw-r--r-- | vcl/unx/generic/gdi/xrender_peer.cxx | 126 | ||||
-rw-r--r-- | vcl/unx/generic/gdi/xrender_peer.hxx | 111 |
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; } //===================================================================== |