DFBResult IScreen_Real__GetScreenSize( CoreScreen *obj, DFBDimension *ret_size ) { D_DEBUG_AT( DirectFB_CoreScreen, "%s()\n", __FUNCTION__ ); D_ASSERT( ret_size != NULL ); return dfb_screen_get_screen_size( obj, &ret_size->w, &ret_size->h ); }
static DFBResult sh_du_init_layer( CoreLayer *layer, void *driver_data, void *layer_data, DFBDisplayLayerDescription *description, DFBDisplayLayerConfig *config, DFBColorAdjustment *adjustment ) { DFBResult ret; D_DEBUG_AT( SH_DU_LAYER, "%s()\n", __FUNCTION__ ); D_UNUSED_P( driver_data ); D_UNUSED_P( layer_data ); D_UNUSED_P( adjustment ); ret = dfb_screen_get_screen_size( dfb_layer_screen( layer ), &config->width, &config->height ); if (ret) goto out; config->pixelformat = DSPF_RGB16; config->colorspace = DSCS_RGB; config->buffermode = DLBM_BACKVIDEO; config->options = DLOP_ALPHACHANNEL; config->flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT | DLCONF_COLORSPACE | DLCONF_BUFFERMODE | DLCONF_OPTIONS; description->type = DLTF_GRAPHICS; description->caps = DLCAPS_SURFACE | DLCAPS_OPACITY | DLCAPS_ALPHACHANNEL | DLCAPS_SRC_COLORKEY | DLCAPS_LEVELS | DLCAPS_SCREEN_POSITION | DLCAPS_SCREEN_SIZE; description->level = -1; description->regions = 1; description->sources = 0; description->clip_regions = 0; description->surface_caps = DSCAPS_VIDEOONLY | // DSCAPS_DOUBLE | DSCAPS_SHARED; snprintf( description->name, DFB_DISPLAY_LAYER_DESC_NAME_LENGTH, "SH DU Layer" ); out: return ret; }
static DFBResult sh_du_test_region( CoreLayer *layer, void *driver_data, void *layer_data, CoreLayerRegionConfig *config, CoreLayerRegionConfigFlags *failed ) { CoreLayerRegionConfigFlags fail; DFBResult result; int w, h; D_DEBUG_AT( SH_DU_LAYER, "%s( %u )\n", __FUNCTION__, dfb_layer_id( layer ) ); D_UNUSED_P( driver_data ); D_UNUSED_P( layer_data ); result = dfb_screen_get_screen_size( dfb_layer_screen( layer ), &w, &h ); if (result) return result; fail = CLRCF_NONE; if ((config->width < 0) || (config->width > w)) fail |= CLRCF_WIDTH; if ((config->height < 0) || (config->height > h)) fail |= CLRCF_HEIGHT; switch (config->format) { case DSPF_RGB16: case DSPF_ARGB1555: case DSPF_LUT8: break; default: fail |= CLRCF_FORMAT; break; } switch (config->buffermode) { case DLBM_FRONTONLY: case DLBM_BACKVIDEO: break; default: fail |= CLRCF_BUFFERMODE; break; } if (D_FLAGS_INVALID( config->options, DLOP_ALPHACHANNEL | DLOP_SRC_COLORKEY | DLOP_OPACITY )) fail |= CLRCF_OPTIONS; if (D_FLAGS_ARE_SET( config->options, DLOP_ALPHACHANNEL | DLOP_OPACITY )) fail |= CLRCF_OPTIONS; if ((config->source.x < 0) || (config->source.y < 0) || (config->source.w < 0) || (config->source.h < 0) || ((config->source.x + config->source.w) > config->width) || ((config->source.y + config->source.h) > config->height)) fail |= CLRCF_SOURCE; if ((config->dest.w != config->source.w) || (config->dest.h != config->source.h)) fail |= CLRCF_DEST; if (config->colorspace != DSCS_RGB) fail |= CLRCF_COLORSPACE; if (config->num_clips > 0) fail |= CLRCF_CLIPS; if (failed) *failed = fail; return (fail == CLRCF_NONE) ? DFB_OK : DFB_UNSUPPORTED; }