コード例 #1
0
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 );
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}