I expect layer->SetOpacity() works like window->SetOpacity(), but seems not, 
when I change opacity for any window, content opacity in window changes exactly 
as I expected, when I change layer's opacity, I hope all content in the layer 
(background image or window content) will change their opacity after calling 
layer->SetOpacity(), what I got was a black screen.
 
I tried tools "dfblayer", the pixformat is ARGB, when I use -o to change 
opacity, nothing happend.
 
Can any one tell what's wrong from following code?
 
Thanks,
Victor
 
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <directfb.h>
#define DFBCHECK(x...) \     {                                                  
              \          err = x;                                               
     \          if (err != DFB_OK) {                                        \   
            fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \            
   DirectFBErrorFatal( #x, err );                         \          }          
                                                 \     }
#define LAYER_OPACITY
int main( int argc, char **argv ){    IDirectFB    *dfb;    
IDirectFBDisplayLayer *layer;    DFBDisplayLayerConfig layer_config;    
IDirectFBWindow    *window;    DFBWindowDescription wdesc;    IDirectFBSurface 
*surface, *bg_surface;    IDirectFBImageProvider *provider, *bg_provider;    
const char *bg_file = "bg.png";    const char *png_file = "win.png";    int    
delay = 5, err, show = 0;
    DFBCHECK(DirectFBInit( &argc, &argv ));    DFBCHECK(DirectFBCreate( &dfb ));
    DFBCHECK(dfb->GetDisplayLayer( dfb, DLID_PRIMARY, &layer ));    
DFBCHECK(layer->GetConfiguration( layer, &layer_config ));
    DFBCHECK(layer->GetSurface( layer, &bg_surface ));    
DFBCHECK(dfb->CreateImageProvider( dfb, bg_file, &bg_provider ));    
DFBCHECK(bg_provider->RenderTo( bg_provider, bg_surface, NULL ));    
DFBCHECK(bg_provider->Release( bg_provider ));    DFBCHECK(bg_surface->Flip( 
bg_surface, NULL, 0 ));
    wdesc.flags  = ( DWDESC_POSX | DWDESC_POSY |              DWDESC_WIDTH | 
DWDESC_HEIGHT | DWDESC_CAPS );    wdesc.posx   = 100;    wdesc.posy   = 100;    
wdesc.width  = layer_config.width-200;    wdesc.height = 
layer_config.height-200;    wdesc.caps   = DWCAPS_ALPHACHANNEL;
    DFBCHECK(layer->CreateWindow( layer, &wdesc, &window ));    
DFBCHECK(window->GetSurface( window, &surface ));    
DFBCHECK(dfb->CreateImageProvider( dfb, png_file, &provider ));    
DFBCHECK(provider->RenderTo( provider, surface, NULL ));    
DFBCHECK(provider->Release( provider ));        DFBCHECK(window->SetOpacity( 
window, 0xff ));    DFBCHECK(surface->Flip( surface, NULL, 0 ));
    while ( delay ){        sleep( 1 );        if ( show == 0 ){#ifdef 
LAYER_OPACITY            DFBCHECK(layer->SetCooperativeLevel( layer, 
DLSCL_EXCLUSIVE));            DFBCHECK(layer->SetOpacity( layer, 0x80 ));       
     DFBCHECK(layer->SetCooperativeLevel( layer, DLSCL_SHARED));#else           
 DFBCHECK(window->SetOpacity( window, 0x80 ));#endif            show = 1;       
 } else {#ifdef LAYER_OPACITY            DFBCHECK(layer->SetCooperativeLevel( 
layer, DLSCL_EXCLUSIVE));            DFBCHECK(layer->SetOpacity( layer, 0xff 
));            DFBCHECK(layer->SetCooperativeLevel( layer, DLSCL_SHARED));#else 
           DFBCHECK(window->SetOpacity( window, 0xff ));#endif            show 
= 0;        }        delay --;    }    DFBCHECK(window->Release( window ));    
DFBCHECK(layer->Release( layer ));    DFBCHECK(dfb->Release( dfb ));
    return 0;}
 
 
_________________________________________________________________
Helping your favorite cause is as easy as instant messaging. You IM, we give.
http://im.live.com/Messenger/IM/Home/?source=text_hotmail_join
_______________________________________________
directfb-users mailing list
directfb-users@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to