static DFBResult IDirectFBWindow_SetColorKey( IDirectFBWindow *thiz, u8 r, u8 g, u8 b ) { u32 key; CoreSurface *surface; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (data->window->caps & DWCAPS_INPUTONLY) return DFB_UNSUPPORTED; surface = data->window->surface; if (DFB_PIXELFORMAT_IS_INDEXED( surface->config.format )) key = dfb_palette_search( surface->palette, r, g, b, 0x80 ); else key = dfb_color_to_pixel( surface->config.format, r, g, b ); return dfb_window_set_colorkey( data->window, key ); }
static void sdlSetState( void *drv, void *dev, GraphicsDeviceFuncs *funcs, CardState *state, DFBAccelerationMask accel ) { SDLDeviceData *sdev = (SDLDeviceData*) dev; sdev->dest = state->dst.handle; sdev->source = state->src.handle; if (state->mod_hw & (SMF_SOURCE | SMF_BLITTING_FLAGS | SMF_SRC_COLORKEY)) sdev->key_valid = false; if (state->mod_hw & (SMF_DESTINATION | SMF_COLOR)) sdev->color_valid = false; switch (accel) { case DFXL_FILLRECTANGLE: if (!sdev->color_valid) { switch (state->destination->config.format) { case DSPF_RGB16: case DSPF_RGB32: sdev->color = dfb_color_to_pixel( state->destination->config.format, state->color.r, state->color.g, state->color.b ); break; default: D_BUG( "unexpected format" ); } sdev->color_valid = true; } state->set |= SDL_DRAWING_FUNCTIONS; break; case DFXL_BLIT: if (!sdev->key_valid) { SDL_SetColorKey( sdev->source, (state->blittingflags & DSBLIT_SRC_COLORKEY) ? SDL_SRCCOLORKEY : 0, state->src_colorkey | 0xff000000 ); sdev->key_valid = true; } state->set |= SDL_BLITTING_FUNCTIONS; break; default: D_BUG("unexpected acceleration" ); break; } state->mod_hw = 0; }
static DFBResult osdSetRegion( CoreLayer *layer, void *driver_data, void *layer_data, void *region_data, CoreLayerRegionConfig *config, CoreLayerRegionConfigFlags updated, CoreSurface *surface, CorePalette *palette, CoreSurfaceBufferLock *lock ) { int ret; DavinciDriverData *ddrv = driver_data; DavinciDeviceData *ddev = ddrv->ddev; DavinciOSDLayerData *dosd = layer_data; D_DEBUG_AT( Davinci_OSD, "%s()\n", __FUNCTION__ ); D_ASSERT( ddrv != NULL ); D_ASSERT( ddev != NULL ); D_ASSERT( dosd != NULL ); ret = ioctl( ddrv->fb[OSD0].fd, FBIO_ENABLE_DISABLE_WIN, 0 ); if (ret) D_OSDERROR( "Davinci/OSD: FBIO_ENABLE_DISABLE_WIN (fb%d - %d)!\n", OSD0, 0 ); ret = ioctl( ddrv->fb[OSD1].fd, FBIO_ENABLE_DISABLE_WIN, 0 ); if (ret) D_OSDERROR( "Davinci/OSD: FBIO_ENABLE_DISABLE_WIN (fb%d - %d)!\n", OSD1, 0 ); ioctl( ddrv->fb[OSD0].fd, FBIO_WAITFORVSYNC ); /* Update blend parameters? */ if (updated & (CLRCF_OPTIONS | CLRCF_OPACITY | CLRCF_SRCKEY | CLRCF_FORMAT)) { vpbe_blink_option_t blink = {0}; vpbe_bitmap_blend_params_t blend = {0}; D_DEBUG_AT( Davinci_OSD, " -> %s\n", dfb_pixelformat_name( config->format ) ); if (config->options & DLOP_SRC_COLORKEY) { blend.enable_colorkeying = 1; blend.colorkey = dfb_color_to_pixel( DSPF_RGB16, config->src_key.r, config->src_key.g, config->src_key.b ); D_DEBUG_AT( Davinci_OSD, " -> color key 0x%02x (%02x %02x %02x)\n", blend.colorkey, config->src_key.r, config->src_key.g, config->src_key.b ); } else if (config->options & DLOP_OPACITY) { blend.bf = config->opacity >> 5; D_DEBUG_AT( Davinci_OSD, " -> opacity %d/7\n", blend.bf ); }