1)初始化:
dfb_wm_core_initialize( coredfb *core,
dfbwmcore *data,
dfbwmcoreshared *shared )
%%%b /* %%%b表示注釋開始,%%%e結束/
由dfb_core_part_initialize呼叫
if (core_part->size_local)
local = d_calloc( 1, core_part->size_local );//本地資料system mem
if (core_part->size_shared)
shared = shcalloc( pool, 1, core_part->size_shared );//共享資料shared mem
ret = core_part->initialize( core, local, shared );
其中:/* allocate local core structure. */
core 是dfb_core_create( coredfb **ret_core )中的
core = d_calloc( 1, sizeof(coredfb) );
pool是dfb_core_arena_initialize函式中建立的pool
ret = fusion_shm_pool_create( core->world, "directfb main pool", 0x400000,
fusion_config->debugshm, &pool ); */
/* allocate shared structure in the new pool. */
shared = shcalloc( pool, 1, sizeof(coredfbshared) );
if (!shared) {
fusion_shm_pool_destroy( core->world, pool );
return d_ooshm();
core->shared = shared;
core->master = true;
shared->shmpool = pool;
需要注意下巨集:dfb_window_manager( default )
%%%e
dfb_wm_core_initialize初始化過程:
%%% 給wm的各個指標賦值
data->core = core;
data->shared = shared;
wm_local = data; /* fixme */
wm_shared = shared; /* fixme */
%%% wm_shared->shmpool指向pool
wm_shared->shmpool = dfb_core_shmpool( core );
%%%b
載入libdirectfbwm_default.so (分為:default 和 unique,預設為default)
%%%e
/* load the module. */
ret = load_module( dfb_config->wm );
%%%呼叫default.c中的函式wm_get_info
/* query module information. */
wm_local->funcs->getwminfo( &wm_shared->info );
/* store module name in shared memory. */
wm_shared->name = shstrdup( wm_shared->shmpool, wm_local->module->name );
if (!wm_shared->name) {
d_ooshm();
goto error;
/* allocate shared window manager data. */
if (wm_shared->info.wm_shared_size) {
wm_shared->data = shcalloc( wm_shared->shmpool, 1, wm_shared->info.wm_shared_size );
if (!wm_shared->data) {
d_ooshm();
goto error;
ret = dfb_nosystemmemory;
/* allocate local window manager data. */
if (wm_shared->info.wm_data_size) {
wm_local->data = d_calloc( 1, wm_shared->info.wm_data_size );
if (!wm_local->data) {
d_oom();
goto error;
%%% 呼叫default中的初始化函式 即 default.c中的wm_initialize
/* initialize window manager. */
ret = wm_local->funcs->initialize( core, wm_local->data, wm_shared->data );
if (ret) {
d_derror( ret, "directfb/core/wm: could not initialize window manager!/n" );
goto error;
d_magic_set( data, dfbwmcore );
d_magic_set( shared, dfbwmcoreshared );
return dfb_ok;
dfbresult
dfb_wm_init_stack( corewindowstack *stack )
dfbresult
idirectfb_construct( idirectfb *thiz, coredfb *core )
-》dfb_layer_get_primary_context-》dfb_layer_create_context-》dfb_layer_context_init-》
dfb_windowstack_create-》dfb_wm_init_stack
%%%b
corelayercontext *
dfb_core_create_layer_context( coredfb *core )
coredfbshared *shared;
d_assume( core != null );
if (!core)
core = core_dfb;
d_magic_assert( core, coredfb );
shared = core->shared;
d_magic_assert( shared, coredfbshared );
d_assert( shared->layer_context_pool != null );
return (corelayercontext*) fusion_object_create( shared->layer_context_pool, core->world );
static dfbresult
dfb_core_initialize( coredfb *core )
shared->layer_context_pool = dfb_layer_context_pool_create( core->world );
shared->layer_region_pool = dfb_layer_region_pool_create( core->world );
shared->palette_pool = dfb_palette_pool_create( core->world );
shared->su***ce_pool = dfb_su***ce_pool_create( core->world );
shared->window_pool = dfb_window_pool_create( core->world );
corewindowstack*
dfb_windowstack_create( corelayercontext *context )
/* allocate window stack data (completely shared) */
stack = (corewindowstack*) shcalloc( context->shmpool, 1, sizeof(corewindowstack) );
if (!stack) {
d_ooshm();
return null;
stack->shmpool = context->shmpool;
%%%e
#define max_update_regions 8
DirectFB 原始碼解讀之雙快取實現
及作者郵箱 wyw1976 gmail.com 雙快取是畫圖時乙個常用的技術,它的基本原理是在其中乙個快取中作圖,完成後提交顯示,同時在另一塊快取中繼續作圖,這樣兩塊快取交替畫圖 顯示,實現了兩者的同步進行,提高了效率。在directfb中,乙個快取實際就是一塊記憶體。dfb支援兩種快取分配方式 1...
Android GWES之視窗管理之基本構架原理
android 的視窗管理是 c s模式的。android 中的window 是表示top level 等頂級視窗的概念。decorview 是window 的top level view 這個view 我稱之為主 view decorview 會預設的 attach 到activity 的主視窗中...
Qt之布局管理 停靠視窗
qdockwidget類繼承與qwidget類,用於停靠視窗的管理。在主視窗中,先設定中心控制項,然後例項化qdockwidget物件,通過setfeatures 設定停靠視窗的窗體特性,通過 setallowedareas 設定窗體可停靠的區域。具體如下 voidsetfeatures dockw...