[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