本文整理汇总了C++中IDirectFBSurface::Clear方法的典型用法代码示例。如果您正苦于以下问题:C++ IDirectFBSurface::Clear方法的具体用法?C++ IDirectFBSurface::Clear怎么用?C++ IDirectFBSurface::Clear使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDirectFBSurface
的用法示例。
在下文中一共展示了IDirectFBSurface::Clear方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
static void
app_update( App *app )
{
static const DFBColor colors[3] = {
{ 0xff, 0x30, 0xc0, 0xff },
{ 0xff, 0xff, 0xff, 0x30 },
{ 0xff, 0x30, 0xff, 0xc0 }
};
IDirectFBSurface *surface = app->surface;
surface->Clear( surface, 0xff, 0xff, 0xff, 0x20 );
surface->SetColor( surface, colors[app->index].r, colors[app->index].g, colors[app->index].b, colors[app->index].a );
surface->FillRectangle( surface, app->anim_x, app->anim_y, 40, 300 );
surface->Flip( surface, NULL, DSFLIP_WAITFORSYNC );
app->anim_x += app->anim_dirx;
if (app->anim_x >= app->resolution.w - 40)
app->anim_dirx = -5;
else if (app->anim_x <= 0)
app->anim_dirx = 5;
app->anim_y += app->anim_diry;
if (app->anim_y >= app->resolution.h - 300)
app->anim_diry = -5;
else if (app->anim_y <= 0)
app->anim_diry = 5;
}
示例2: releaseSurface
void DFBDeviceScreen::releaseSurface(void* sur) {
set<IDirectFBSurface*>::iterator i;
IDirectFBSurface* s;
s = (IDirectFBSurface*)sur;
pthread_mutex_lock(&surMutex);
if (surfacePool != NULL) {
i = surfacePool->find(s);
if (i != surfacePool->end()) {
surfacePool->erase(i);
pthread_mutex_unlock(&surMutex);
} else {
pthread_mutex_unlock(&surMutex);
}
} else {
pthread_mutex_unlock(&surMutex);
}
s->Clear(s, 0, 0, 0, 0);
s->Release(s);
s = NULL;
sur = NULL;
}
示例3: Render
/* render callback */
virtual void Render( IDirectFBSurface &surface ) {
int x = ((int) surface.GetWidth() - (int) m_image.GetWidth()) / 2;
int y = ((int) surface.GetHeight() - (int) m_image.GetHeight()) / 2;
surface.Clear();
m_image.PrepareTarget( surface );
surface.Blit( m_image, NULL, x, y );
}
示例4: surface_clear
static mrb_value surface_clear(mrb_state *mrb, mrb_value self)
{
IDirectFBSurface* surface = mrb_directfb_surface(mrb, self);
DFBResult ret = -1;
if (surface != NULL) {
mrb_int r, g, b, a;
mrb_get_args(mrb, "iiii", &r, &g, &b, &a);
ret = surface->Clear(surface, r, g, b, a);
}
return mrb_fixnum_value(ret);
}
示例5: Render
/* render callback */
virtual void Render( IDirectFBSurface &surface ) {
surface.Clear( 0, 0, 255, 255 );
surface.SetFont( font );
surface.SetColor( 0, 0, 0, 255 );
surface.SetSrcBlendFunction( DSBF_INVSRCALPHA );
surface.SetDstBlendFunction( DSBF_INVSRCALPHA );
surface.DrawString( "Test Text", -1, 10, 10, (DFBSurfaceTextFlags)(DSTF_TOPLEFT | DSTF_BLEND_FUNCS) );
}
示例6: PrepareDraw
int
DirectFB_RenderClear(SDL_Renderer * renderer)
{
DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata;
IDirectFBSurface *destsurf = data->target;
DirectFB_ActivateRenderer(renderer);
PrepareDraw(renderer);
destsurf->Clear(destsurf, renderer->r, renderer->g, renderer->b, renderer->a);
return 0;
}
示例7: l_new
static int l_new (lua_State* L)
{
Canvas* canvas = CHECKCANVAS(L);
IDirectFBSurface* sfc = NULL;
int type = lua_type(L, 2);
switch (type)
{
// IMAGE
// [ canvas | img_path ]
case LUA_TSTRING: {
Surface* _sfc =
ImagePlayer::renderImage((char*)luaL_checkstring(L, 2));
sfc = (IDirectFBSurface*)(_sfc->getContent());
_sfc->setContent(NULL);
delete _sfc;
break;
}
// NEW { w, h }
// [ canvas | w | h ]
case LUA_TNUMBER: {
DFBSurfaceDescription dsc;
dsc.width = luaL_checkint(L, 2);
dsc.height = luaL_checkint(L, 3);
dsc.flags = (DFBSurfaceDescriptionFlags)
(DSDESC_WIDTH | DSDESC_HEIGHT);
sfc = (IDirectFBSurface*)(
OutputManager::getInstance()->createSurface(&dsc));
DFBCHECK( sfc->Clear(sfc, canvas->color->getR(),
canvas->color->getG(), canvas->color->getB(),
canvas->color->getAlpha()) );
break;
}
default:
return luaL_argerror(L, 2, NULL);
}
return lua_createcanvas(L, sfc, 1); // [ ... | canvas ] -> canvas
}
示例8: show_usage
int
main( int argc, char *argv[] )
{
int i;
DFBResult ret;
DFBSurfaceDescription desc;
IDirectFB *dfb;
IDirectFBImageProvider *provider = NULL;
IDirectFBSurface *source = NULL;
IDirectFBSurface *dest = NULL;
IDirectFBSurface *dest2 = NULL;
const char *url = NULL;
/* Initialize DirectFB. */
ret = DirectFBInit( &argc, &argv );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: DirectFBInit() failed!\n" );
return ret;
}
/* Parse arguments. */
for (i=1; i<argc; i++) {
if (!strcmp( argv[i], "-h" ))
return show_usage( argv[0] );
else if (!url)
url = argv[i];
else
return show_usage( argv[0] );
}
/* Check if we got an URL. */
if (!url)
return show_usage( argv[0] );
/* Create super interface. */
ret = DirectFBCreate( &dfb );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: DirectFBCreate() failed!\n" );
return ret;
}
/* Create an image provider for the image to be loaded. */
ret = dfb->CreateImageProvider( dfb, url, &provider );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: IDirectFB::CreateImageProvider( '%s' ) failed!\n", url );
goto out;
}
/* Get the surface description. */
ret = provider->GetSurfaceDescription( provider, &desc );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: IDirectFBImageProvider::GetSurfaceDescription() failed!\n" );
goto out;
}
desc.pixelformat = DSPF_NV21;
D_INFO( "DFBTest/Scale: Source is %dx%d using %s\n",
desc.width, desc.height, dfb_pixelformat_name(desc.pixelformat) );
/* Create a surface for the image. */
ret = dfb->CreateSurface( dfb, &desc, &source );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: IDirectFB::CreateSurface() failed!\n" );
goto out;
}
ret = provider->RenderTo( provider, source, NULL );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: IDirectFBImageProvider::RenderTo() failed!\n" );
goto out;
}
desc.width = desc.width * 3 / 4;
desc.height = desc.height * 3 / 4;
D_INFO( "DFBTest/Scale: Destination is %dx%d using %s\n",
desc.width, desc.height, dfb_pixelformat_name(desc.pixelformat) );
/* Create a surface for the image. */
ret = dfb->CreateSurface( dfb, &desc, &dest );
if (ret) {
D_DERROR( ret, "DFBTest/Scale: IDirectFB::CreateSurface() failed!\n" );
goto out;
}
DFBRectangle srect = {
10, 10, 200, 200
};
DFBRectangle drect = {
10, 10, 300, 300
};
DFBRegion clip = {
40, 40, 199, 199
};
dest->Clear( dest, 0xff, 0xff, 0xff, 0xff );
//.........这里部分代码省略.........
示例9: print_usage
//.........这里部分代码省略.........
dest->GetPixelFormat( dest, &desc.pixelformat );
D_INFO( "DFBTest/PreAlloc: Destination is %dx%d using %s\n",
desc.width, desc.height, dfb_pixelformat_name(desc.pixelformat) );
/* Create a preallocated surface. */
desc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS | DSDESC_PREALLOCATED;
desc.width = 100;
desc.height = 100;
desc.pixelformat = DSPF_ARGB;
desc.caps = static_caps;
desc.preallocated[0].data = pixel_buffer;
desc.preallocated[0].pitch = 100 * 4;
ret = dfb->CreateSurface( dfb, &desc, &source );
if (ret) {
D_DERROR( ret, "DFBTest/PreAlloc: IDirectFB::CreateSurface() for the preallocated source failed!\n" );
goto out;
}
/* Before any other operation the pixel data can be written to without locking */
gen_pixels( pixel_buffer, 100 * 4, 100 );
while (!quit) {
void *ptr;
int pitch;
/* Lock source surface for writing before making updates to the pixel buffer */
source->Lock( source, DSLF_WRITE, &ptr, &pitch );
if (ptr == pixel_buffer)
D_INFO( "DFBTest/PreAlloc: Locking preallocated source gave original preallocated pixel buffer :-)\n" );
else {
if (static_caps)
D_INFO( "DFBTest/PreAlloc: Locking preallocated source gave different pixel buffer, ERROR with static alloc!\n" );
else
D_INFO( "DFBTest/PreAlloc: Locking preallocated source gave different pixel buffer, but OK (no static alloc)\n" );
}
update_pixels( ptr, pitch, 100 );
/* Unlock source surface after writing, before making further Blits,
to have the buffer be transfered to master again */
source->Unlock( source );
dest->Clear( dest, 0, 0, 0, 0xff );
/* First Blit from preallocated source, data will be transfered to master */
dest->Blit( dest, source, NULL, 50, 50 );
/* Second Blit from preallocated source, data is already master */
dest->Blit( dest, source, NULL, 150, 150 );
dest->Flip( dest, NULL, DSFLIP_NONE );
/* This will upload again the preallocated buffer to the master, where it is
modified and outdates the preallocated buffer. Now it depends on the static
alloc flag whether the next Lock will directly go into the shared memory
allocation or the preallocated buffer again (with a transfer back from master
to us). */
source->FillRectangle( source, 0, 0, 10, 10 );
/* Process keybuffer */
while (keybuffer->GetEvent( keybuffer, DFB_EVENT(&evt)) == DFB_OK)
{
if (evt.type == DIET_KEYPRESS) {
switch (DFB_LOWER_CASE(evt.key_symbol)) {
case DIKS_ESCAPE:
case DIKS_SMALL_Q:
case DIKS_BACK:
case DIKS_STOP:
case DIKS_EXIT:
/* Quit main loop & test thread */
quit = true;
break;
default:
break;
}
}
}
if (!quit)
sleep( 5 );
}
out:
if (source)
source->Release( source );
if (dest)
dest->Release( dest );
keybuffer->Release( keybuffer );
/* Shutdown DirectFB. */
dfb->Release( dfb );
return ret;
}
示例10: while
DFBResult
lite_theme_frame_load( LiteThemeFrame *frame,
const char **filenames )
{
int i, y;
int width = 0;
int height = 0;
DFBResult ret;
D_ASSERT( frame != NULL );
D_ASSERT( filenames != NULL );
for (i=0; i<_LITE_THEME_FRAME_PART_NUM; i++) {
D_ASSERT( filenames[i] != NULL );
ret = lite_util_load_image( filenames[i],
DSPF_UNKNOWN,
&frame->parts[i].source,
&frame->parts[i].rect.w,
&frame->parts[i].rect.h,
NULL );
if (ret) {
D_DERROR( ret, "Lite/ThemeFrame: Loading '%s' failed!\n", filenames[i] );
while (i--)
frame->parts[i].source->Release( frame->parts[i].source );
return ret;
}
if (width < frame->parts[i].rect.w)
width = frame->parts[i].rect.w;
height += frame->parts[i].rect.h;
}
IDirectFB *dfb;
IDirectFBSurface *compact;
DFBSurfaceDescription desc;
desc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
desc.width = width;
desc.height = height;
desc.pixelformat = DSPF_ARGB; //FIXME
DirectFBCreate( &dfb );
dfb->CreateSurface( dfb, &desc, &compact );
compact->Clear( compact, 0, 0, 0, 0 );
for (i=0, y=0; i<_LITE_THEME_FRAME_PART_NUM; i++) {
compact->Blit( compact, frame->parts[i].source, &frame->parts[i].rect, 0, y );
compact->AddRef( compact );
frame->parts[i].source->Release( frame->parts[i].source );
frame->parts[i].source = compact;
frame->parts[i].rect.x = 0;
frame->parts[i].rect.y = y;
y += frame->parts[i].rect.h;
}
compact->ReleaseSource( compact );
compact->Release( compact );
dfb->Release( dfb );
D_MAGIC_SET( frame, LiteThemeFrame );
return DFB_OK;
}
示例11: main
//.........这里部分代码省略.........
}
printf("Note: display modes with bpp < have been filtered out\n");
printf("*****************************************************\n");
goto Leave;
}
if (useFixedVideoMode)
{
int32_t bestVideoMode = getBestVideoMode(fixedVideoMode.width,
fixedVideoMode.height,
fixedVideoMode.bpp);
// validate the fixed mode
if ((bestVideoMode == -1) ||
((fixedVideoMode.width != videoModes[bestVideoMode].width) ||
(fixedVideoMode.height != videoModes[bestVideoMode].height) ||
(fixedVideoMode.bpp != videoModes[bestVideoMode].bpp)))
{
printf("Error: the specified fixed video mode is not available!\n");
exit(-1);
}
} else
{
initialVideoMode = getBestVideoMode(640, 480, 16);
if (initialVideoMode == -1)
{
printf("Error: initial video mode 640x480x16 is not available!\n");
exit(-1);
}
}
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY;
DFBCHECK(dfb->CreateSurface(dfb, &dsc, &surface));
DFBCHECK(surface->Clear(surface, 0, 0, 0, 0));
DFBCHECK(surface->GetSize(surface, &screen_width, &screen_height));
DFBCHECK(dfb->GetInputDevice(dfb, DIDID_KEYBOARD, &dfbKeyboard));
DFBCHECK(dfbKeyboard->CreateEventBuffer(dfbKeyboard, &dfbEventBuffer));
DFBCHECK(dfb->GetInputDevice(dfb, DIDID_MOUSE, &dfbMouse));
DFBCHECK(dfbMouse->AttachEventBuffer(dfbMouse, dfbEventBuffer));
if (useFixedVideoMode)
{
printf("Information: setting video mode to %ux%ux%u\n", fixedVideoMode.width,
fixedVideoMode.height, fixedVideoMode.bpp);
DFBCHECK(dfb->SetVideoMode(dfb, fixedVideoMode.width,
fixedVideoMode.height, fixedVideoMode.bpp));
} else
{
printf("Information: starting with default video mode %ux%ux%u\n",
videoModes[initialVideoMode].width, videoModes[initialVideoMode].height,
videoModes[initialVideoMode].bpp);
DFBCHECK(dfb->SetVideoMode(dfb, videoModes[initialVideoMode].width,
videoModes[initialVideoMode].height,
videoModes[initialVideoMode].bpp));
}
// register our framebuffer
frameBuffer = new VBoxDirectFB(dfb, surface);
display->SetFramebuffer(0, frameBuffer);
/**
* Start the VM execution thread
*/
console->PowerUp(NULL);
示例12: while
int
main( int argc, char *argv[] )
{
DFBResult ret;
bool quit = false;
int i;
IDirectFB dfb;
IDirectFBDisplayLayer layer;
IDirectFBSurface surface;
DFBDisplayLayerConfig config;
DFBDimension sizes[2] = { {400, 400}, {600, 600} };
size_t num_sizes = D_ARRAY_SIZE(sizes);
DFBInputEvent evt;
IDirectFBEventBuffer keybuffer;
/* Initialize DirectFB. */
DirectFB::Init( &argc, &argv );
/* Create super interface. */
dfb = DirectFB::Create();
layer = dfb.GetDisplayLayer( DLID_PRIMARY );
/* Create an input buffer for key events */
keybuffer = dfb.CreateInputEventBuffer( DICAPS_KEYS, DFB_TRUE );
layer.SetCooperativeLevel( DLSCL_EXCLUSIVE );
layer.GetConfiguration( &config );
config.width = sizes[0].w;
config.height = sizes[0].h;
layer.SetConfiguration( config );
surface = layer.GetSurface();
while (true) {
surface.Clear( 0, 0, 0, 0xff );
surface.SetColor( 0x00, 0xff, 0x00, 0xff );
surface.DrawRectangle( 0, 0, config.width, config.height );
surface.Flip( NULL, DSFLIP_NONE );
keybuffer.WaitForEventWithTimeout( 3, 0 );
/* Process keybuffer */
while (keybuffer.GetEvent( DFB_EVENT(&evt) )) {
if (evt.type == DIET_KEYPRESS) {
switch (DFB_LOWER_CASE(evt.key_symbol)) {
case DIKS_ESCAPE:
case DIKS_SMALL_Q:
case DIKS_BACK:
case DIKS_STOP:
case DIKS_EXIT:
/* Quit main loop & test thread */
quit = 1;
break;
case DIKS_SPACE:
case DIKS_OK:
i++;
config.width = sizes[i % num_sizes].w;
config.height = sizes[i % num_sizes].h;
layer.SetConfiguration( config );
break;
default:
break;
}
}
}
}
return 0;
}
示例13: CreateWindow
//---------------------------------------------------------------------------------
//--------------------------wael work----------------------
//---------------------------------------------------------------------------------
status_t ServerWindow::CreateWindow (IDirectFBDisplayLayer *layer){
DFBFontDescription font_dsc;
DFBWindowDescription wdsc;
IDirectFBSurface *wsurface = NULL;
DFBSurfaceDescription dsc;
// char *title;TODO: I need to convert the fTitle from BString to char *
char title[fTitle.CountChars()+1];
fTitle.CopyInto(title, 0, fTitle.CountChars());
DFBRectangle frame;
frame.x=(int)fFrame.LeftTop().x;
frame.y=(int)fFrame.LeftTop().y;
frame.w=(int)fFrame.IntegerWidth();
frame.h=(int)fFrame.IntegerHeight();
int width1, width2, width3;
int height1, height2, height3;
//create window inside the primary layer
wdsc.flags = (DFBWindowDescriptionFlags)(DWDESC_CAPS | DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_POSX | DWDESC_POSY | DWDESC_SURFACE_CAPS);
wdsc.caps = DWCAPS_ALPHACHANNEL;
wdsc.width = frame.w;
wdsc.height = frame.h;
wdsc.posx = frame.x;
wdsc.posy = frame.y;
wdsc.surface_caps = DSCAPS_FLIPPING;
DFBCHECK(layer->CreateWindow(layer, &wdsc, &window));
//Get the window surface and clear it
DFBCHECK(window->GetSurface(window, &wsurface));
DFBCHECK(wsurface->Clear (wsurface, 0x00, 0x00, 0x00, 0x00));
DFBCHECK(window->SetOpaqueRegion (window, 0, 0, frame.h, frame.w));
//Set the window options to be transparent
DFBWindowOptions options;
window->GetOptions (window, &options);
options = (DFBWindowOptions) ( options | DWOP_SHAPED );
DFBCHECK(window->SetOptions (window, options));
wsurface->SetSrcColorKey(wsurface, R, G, B);
wsurface->SetBlittingFlags(wsurface, DSBLIT_SRC_COLORKEY);
if (fType==B_FLOATING_WINDOW){
DFBCHECK (shead->GetSize(shead, &width1, &height1));
DFBCHECK (sok_button->GetSize(sok_button, &width2, &height2));
DFBCHECK (sclose_button->GetSize(sclose_button, &width3, &height3));
DFBRectangle rect;
rect.x = 0;
rect.y = 0;
rect.h = height1;
rect.w = frame.w-width2-width3;
DFBCHECK (wsurface->StretchBlit (wsurface, shead, NULL, &rect));
DFBCHECK (wsurface->Blit (wsurface, sok_button, NULL, rect.w, 0));
DFBCHECK (wsurface->Blit (wsurface, sclose_button, NULL, rect.w+width2, 0));
// Draw the window title
font_dsc.flags = DFDESC_HEIGHT;
font_dsc.height = 10;
font_dsc.width = 10;
DFBCHECK (app_server->dfb->CreateFont (app_server->dfb, "./decker.ttf", &font_dsc, &font));
DFBCHECK (wsurface->SetFont (wsurface, font));
DFBCHECK (wsurface->SetColor (wsurface, 0xff, 0x0, 0x0, 0xFF));
int size = 0;
DFBRectangle rect1;
DFBCHECK (font->GetStringExtents (font, title, -1, NULL, &rect1));
if (rect1.w > rect.w){
do{
size++;
DFBCHECK (font->GetStringExtents (font, title, size, NULL, &rect1));
}while (rect1.w < rect.w);
size--;
}
DFBCHECK (wsurface->DrawString (wsurface, title, size-1, 5, 2*height1/3, DSTF_LEFT));
rect.x = 0;
rect.y = height1;
rect.w = frame.w;
rect.h = frame.h-height1;
DFBCHECK (wsurface->StretchBlit (wsurface, body, NULL, &rect));
}
else if (fType==B_TITLED_WINDOW){
DFBCHECK (head->GetSize(head, &width1, &height1));
DFBCHECK (ok_button->GetSize(ok_button, &width2, &height2));
DFBCHECK (close_button->GetSize(close_button, &width3, &height3));
DFBRectangle rect;
rect.x = 0;
rect.y = 0;
rect.h = height1;
rect.w = frame.w-width2-width3;
DFBCHECK (wsurface->StretchBlit (wsurface, head, NULL, &rect));
DFBCHECK (wsurface->Blit (wsurface, ok_button, NULL, rect.w, 0));
DFBCHECK (wsurface->Blit (wsurface, close_button, NULL, rect.w+width2, 0));
// Draw the window title
//.........这里部分代码省略.........
示例14: main
int main (int argc,char *argv[])
{
int videofd1 = open("/dev/video0",O_RDWR);
int videofd2 = open("/dev/video0",O_RDWR);
IDirectFBSurface *SurfaceHandle;
IDirectFBSurface *SurfaceHandle2;
void *ptr,*ptr2;
int pitch,pitch2;
int colour_palette[256];
int colour_palette2_real[256]; /* random... */
int *colour_palette2 = colour_palette2_real;
int is_lut8;
is_lut8 = (argc > 1 && !strcmp (argv[1], "both"));
memset(&colour_palette,0x0,4*256);
//memset(&colour_palette[1],0xff,255*4);
colour_palette[0] = 0xff000000; // black
colour_palette[1] = 0xffff0000; // red
colour_palette[2] = 0xff00ff00; // green
colour_palette[3] = 0xff0000ff; // blue
colour_palette[4] = 0xffffffff; // white
colour_palette[5] = 0x80808000; // half-transp yellow
colour_palette[6] = 0x00000000; // transp black
if (videofd1 < 0)
perror("Couldn't open video device 1\n");
if (videofd2 < 0)
perror("Couldn't open video device 2\n");
v4l2_list_outputs (videofd1);
fb_make_transparent();
init_dfb(&SurfaceHandle,is_lut8);
init_dfb(&SurfaceHandle2,1);
v4l2_set_output_by_name (videofd1, "RGB1");
v4l2_set_output_by_name (videofd2, "RGB2");
init_v4l(videofd1,0,0,1280,720,is_lut8);
init_v4l(videofd2,0,0,1280,720,1);
printf("%s:%d\n",__FUNCTION__,__LINE__);
// memcpy (colour_palette, colour_palette2, sizeof (colour_palette));
colour_palette2 = colour_palette;
{
int coords = 60;
int size = 100;
// clear
if (!is_lut8) SurfaceHandle->Clear (SurfaceHandle, 0x00, 0x00, 0x00, 0x00);
else {
SurfaceHandle->SetColorIndex (SurfaceHandle, 0x6);
SurfaceHandle->FillRectangle (SurfaceHandle, 0, 0, 600, 600);
}
// White
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x4);
else SurfaceHandle->SetColor (SurfaceHandle, 0xff, 0xff, 0xff, 0xff);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
// Red
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x1);
else SurfaceHandle->SetColor (SurfaceHandle, 0xff, 0x00, 0x00, 0xff);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
// Green
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x2);
else SurfaceHandle->SetColor (SurfaceHandle, 0x00, 0xff, 0x00, 0xff);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
// Blue
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x3);
else SurfaceHandle->SetColor (SurfaceHandle, 0x00, 0x00, 0xff, 0xff);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
// half transp yellow
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x5);
else SurfaceHandle->SetColor (SurfaceHandle, 0x80, 0x80, 0x00, 0x80);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
// transp
if (is_lut8) SurfaceHandle->SetColorIndex (SurfaceHandle, 0x6);
else SurfaceHandle->SetColor (SurfaceHandle, 0x00, 0x00, 0x00, 0x00);
SurfaceHandle->FillRectangle (SurfaceHandle, coords, coords, size, size);
coords += size;
}
{
int xcoords = 60 + (100 * 6), ycoords = 60;
int size = 100;
// clear
SurfaceHandle2->SetColorIndex (SurfaceHandle2, 0x6);
SurfaceHandle2->FillRectangle (SurfaceHandle2, 220, 220, 440, 440);
// transp
//.........这里部分代码省略.........
示例15: if
int
main( int argc, char *argv[] )
{
DFBResult ret;
int i;
int x, y;
int dx, dy;
int sw3, sh3;
int opacity = 255;
int opacity_delta = -1;
IDirectFB *dfb;
IDirectFBDisplayLayer *layer;
IDirectFBSurface *surface;
DFBDisplayLayerConfig config;
DFBDimension size;
DFBInputEvent evt;
/* Initialize DirectFB. */
ret = DirectFBInit( &argc, &argv );
if (ret) {
D_DERROR( ret, "DFBTest/Layer: DirectFBInit() failed!\n" );
return ret;
}
/* Create super interface. */
ret = DirectFBCreate( &dfb );
if (ret) {
D_DERROR( ret, "DFBTest/Layer: DirectFBCreate() failed!\n" );
return ret;
}
dfb->GetDisplayLayer( dfb, DLID_PRIMARY, &layer );
/* Create an input buffer for key events */
dfb->CreateInputEventBuffer( dfb, DICAPS_KEYS,
DFB_TRUE, &keybuffer);
layer->SetCooperativeLevel( layer, DFSCL_EXCLUSIVE );
layer->GetConfiguration( layer, &config );
config.options = DLOP_OPACITY | DLOP_SRC_COLORKEY;
config.buffermode = DLBM_FRONTONLY;
layer->SetConfiguration( layer, &config );
layer->SetSrcColorKey( layer, 0x00, 0xff, 0x00 );
ret = layer->GetSurface( layer, &surface );
if (ret) {
D_DERROR( ret, "DFBTest/Layer: GetSurface() failed!\n" );
dfb->Release( dfb );
return ret;
}
surface->GetSize( surface, &size.w, &size.h );
sw3 = ((size.w / 3) + 1) & ~1;
sh3 = ((size.h / 3) + 1) & ~1;
surface->Clear( surface, 0, 0, 0, 0xff );
for (i=0; i<10; i++) {
surface->SetColor( surface, 0xff - i*16, 0xff - i*16, 0xff - i*16, 0xff );
surface->DrawRectangle( surface, i, i, size.w - i*2, size.h - i*2 );
}
surface->FillRectangle( surface, 10, size.h/2, size.w - 20, 1 );
surface->FillRectangle( surface, size.w/2, 10, 1, size.h - 20 );
surface->SetColor( surface, 0xff, 0x00, 0x00, 0xff );
surface->FillRectangle( surface, size.w/3, size.h/3, size.w/3, size.h/3 );
surface->SetColor( surface, 0x00, 0xff, 0x00, 0xff );
surface->FillRectangle( surface, size.w/3 + size.w/9, size.h/3 + size.h/9, size.w/9, size.h/9 );
surface->Flip( surface, NULL, DSFLIP_NONE );
#ifdef BUILD_AUTOMATION
sleep( 2 );
#else
sleep( 12 );
#endif
layer->SetSourceRectangle( layer, 0, 0, size.w - sw3, size.h - sh3 );
layer->SetScreenPosition( layer, 100, 100 );
layer->SetScreenRectangle( layer, 100, 100, size.w - sw3, size.h - sh3 );
sleep( 2 );
#ifdef BUILD_AUTOMATION
sleep( 20 );
quit = 1;
#endif
for (x=0, y=0, dx=1, dy=1; !quit ; x+=dx, y+=dy) {
layer->SetOpacity( layer, opacity );
//.........这里部分代码省略.........