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