[Libreoffice-commits] .: 2 commits - vcl/unx
Thomas Arnhold
tarnhold at kemper.freedesktop.org
Mon Jan 30 13:52:41 PST 2012
vcl/unx/generic/app/saldisp.cxx | 62 +++++++++++++++++++++++++++++++++-------
1 file changed, 52 insertions(+), 10 deletions(-)
New commits:
commit 0e93d1e91f2b6994e509e16de6989afb8fdf3207
Author: Thomas Arnhold <thomas at arnhold.org>
Date: Mon Jan 30 22:52:19 2012 +0100
Revert "vcl: BestVisuals strip"
This reverts commit 9c1a107696d032ec4e5e5ac0526c643d3a666c06.
this is work is progress, not public...
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index 90cfe61..5269065 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -241,6 +241,13 @@ sal_Bool SalDisplay::BestVisual( Display *pDisplay,
XVisualInfo &rVI )
{
VisualID nDefVID = XVisualIDFromVisual( DefaultVisual( pDisplay, nScreen ) );
+ VisualID nVID = 0;
+ char *pVID = getenv( "SAL_VISUAL" );
+ if( pVID )
+ sscanf( pVID, "%li", &nVID );
+
+ if( nVID && sal_GetVisualInfo( pDisplay, nVID, rVI ) )
+ return rVI.visualid == nDefVID;
XVisualInfo aVI;
aVI.screen = nScreen;
@@ -248,9 +255,49 @@ sal_Bool SalDisplay::BestVisual( Display *pDisplay,
int nVisuals;
XVisualInfo* pVInfos = XGetVisualInfo( pDisplay, VisualScreenMask,
&aVI, &nVisuals );
+ // pVInfos should contain at least one visual, otherwise
+ // we're in trouble
+ int* pWeight = (int*)alloca( sizeof(int)*nVisuals );
+ int i;
+ for( i = 0; i < nVisuals; i++ )
+ {
+ sal_Bool bUsable = sal_False;
+ int nTrueColor = 1;
+
+ if ( pVInfos[i].screen != nScreen )
+ {
+ bUsable = sal_False;
+ }
+ else
+ if( pVInfos[i].c_class == TrueColor )
+ {
+ nTrueColor = 2048;
+ if( pVInfos[i].depth == 24 )
+ bUsable = sal_True;
+ }
+ else if( pVInfos[i].c_class == PseudoColor )
+ {
+ if( pVInfos[i].depth <= 8 )
+ bUsable = sal_True;
+ else if( pVInfos[i].depth == 12 )
+ bUsable = sal_True;
+ }
+ pWeight[ i ] = bUsable ? nTrueColor*pVInfos[i].depth : -1024;
+ pWeight[ i ] -= pVInfos[ i ].visualid;
+ }
+
+ int nBestVisual = 0;
+ int nBestWeight = -1024;
+ for( i = 0; i < nVisuals; i++ )
+ {
+ if( pWeight[ i ] > nBestWeight )
+ {
+ nBestWeight = pWeight[ i ];
+ nBestVisual = i;
+ }
+ }
- // HACK
- rVI = pVInfos[ 0 ];
+ rVI = pVInfos[ nBestVisual ];
XFree( pVInfos );
return rVI.visualid == nDefVID;
commit e11cfa9225b05415e12cf3b3cecc05103e62398a
Author: Thomas Arnhold <thomas at arnhold.org>
Date: Mon Jan 30 22:52:10 2012 +0100
Revert "vcl: stuff"
This reverts commit 3b90a3f1eaf9b98e52917d97b6991762d498c10d.
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index 4c10665..90cfe61 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -243,18 +243,14 @@ sal_Bool SalDisplay::BestVisual( Display *pDisplay,
VisualID nDefVID = XVisualIDFromVisual( DefaultVisual( pDisplay, nScreen ) );
XVisualInfo aVI;
-// aVI.visualid = nDefVID;
aVI.screen = nScreen;
// get all visuals
int nVisuals;
XVisualInfo* pVInfos = XGetVisualInfo( pDisplay, VisualScreenMask,
&aVI, &nVisuals );
- if (!pVInfos)
- return sal_False;
-
// HACK
- rVI = *pVInfos;
+ rVI = pVInfos[ 0 ];
XFree( pVInfos );
return rVI.visualid == nDefVID;
@@ -438,11 +434,10 @@ SalDisplay::initScreen( SalX11Screen nXScreen ) const
if( SalDisplay::BestVisual( pDisp_, nXScreen.getXScreen(), aVI ) ) // DefaultVisual
aColMap = DefaultColormap( pDisp_, nXScreen.getXScreen() );
else
- fprintf( stderr, "HACK: XCreateColormap would be called...\n" );
-// aColMap = XCreateColormap( pDisp_,
-// RootWindow( pDisp_, nXScreen.getXScreen() ),
-// aVI.visual,
-// AllocNone );
+ aColMap = XCreateColormap( pDisp_,
+ RootWindow( pDisp_, nXScreen.getXScreen() ),
+ aVI.visual,
+ AllocNone );
Screen* pScreen = ScreenOfDisplay( pDisp_, nXScreen.getXScreen() );
More information about the Libreoffice-commits
mailing list