docs: Update the HACKING.backends documentation

This commit is contained in:
Emmanuele Bassi 2011-02-08 18:03:43 +00:00
parent 224280be22
commit e9fa986ccc

View File

@ -1,5 +1,5 @@
IMPLEMENTING BACKENDS IMPLEMENTING BACKENDS
===================== ===============================================================================
Clutter supports multiple backends for handling windowing systems and Clutter supports multiple backends for handling windowing systems and
GL/GLES API on different platforms. GL/GLES API on different platforms.
@ -21,11 +21,16 @@ create a new sub-directory under clutter/clutter containing:
<backend>/clutter-stage-<backend>.h <backend>/clutter-stage-<backend>.h
<backend>/clutter-stage-<backend>.c <backend>/clutter-stage-<backend>.c
-- The implementation of the stage actor. -- The implementation of the stage window
<backend>/clutter-device-manager-<backend>.h
<backend>/clutter-device-manager-<backend>.c
-- The implementation of the input device manager
<backend>/clutter-event-<backend>.c <backend>/clutter-event-<backend>.c
-- The event handling code (optional). -- Event-specific code (optional)
<backend>/clutter-<backend>.h <backend>/clutter-<backend>.h
@ -35,7 +40,7 @@ create a new sub-directory under clutter/clutter containing:
Implementing ClutterBackend Implementing ClutterBackend
--------------------------- -------------------------------------------------------------------------------
Each backend must implement the Each backend must implement the
@ -108,12 +113,6 @@ can be overridden:
drawing surface or should unset the drawing surface from the drawing surface or should unset the drawing surface from the
drawing context. drawing context.
ClutterBackend::redraw
-- This function is used to draw the passed ClutterStage; the backend
must call clutter_actor_paint() on the ClutterStage that has been
passed as a parameter and then perform backend-specific tasks, like
waiting for vertical blanking and swapping the buffers.
ClutterBackend::create_stage ClutterBackend::create_stage
-- This function is used to create the stage implementation. It will -- This function is used to create the stage implementation. It will
receive as an argument the ClutterStage instance that is "wrapping" receive as an argument the ClutterStage instance that is "wrapping"
@ -121,8 +120,13 @@ can be overridden:
its stage implementation, initialise it and then return it; in case its stage implementation, initialise it and then return it; in case
of error, the backend must return NULL and set the passed GError. of error, the backend must return NULL and set the passed GError.
ClutterBackend::get_device_manager
-- This function is used to return the ClutterDeviceManager instance
that is going to be returned by clutter_device_manager_get_default()
and that should be used internally by input event translation.
Implementing the stage Implementing the stage
---------------------- -------------------------------------------------------------------------------
ClutterStage acts as a wrapper object relaying all the drawing operations ClutterStage acts as a wrapper object relaying all the drawing operations
to the actual implementation. The implementation of the stage can be any to the actual implementation. The implementation of the stage can be any
@ -139,6 +143,7 @@ The stage implementation actor must implement:
• ClutterStageWindow::show() and ::hide() • ClutterStageWindow::show() and ::hide()
• ClutterStageWindow::resize() • ClutterStageWindow::resize()
• ClutterStageWindow::get_geometry() • ClutterStageWindow::get_geometry()
• ClutterStageWindow::redraw()
The ::get_wrapper() implementation should return the pointer to the The ::get_wrapper() implementation should return the pointer to the
ClutterStage actor using the ClutterStageWindow implementation. ClutterStage actor using the ClutterStageWindow implementation.
@ -159,6 +164,10 @@ the native window handle created in ::realize().
The ::resize() virtual function implementation should cause an update The ::resize() virtual function implementation should cause an update
of the COGL viewport. of the COGL viewport.
The ::redraw() virtual function implementation should contain the platform
specific drawing logic, and call _clutter_stage_do_paint() on the ClutterStage
wrapper instance to cause the scene to be painted.
The stage implementation actor can optionally implement: The stage implementation actor can optionally implement:
• ClutterStageWindow::get_pending_swaps() • ClutterStageWindow::get_pending_swaps()
@ -167,9 +176,32 @@ The get_pending_swaps() implementation should return the number of swap
buffer requests pending completion. This is only relevent for backends buffer requests pending completion. This is only relevent for backends
that also support CLUTTER_FEATURE_SWAP_EVENTS. that also support CLUTTER_FEATURE_SWAP_EVENTS.
NOTES If the stage window is supposed to handle events, then it should also implement
===== the ClutterEventTranslator interface; this interface has a single virtual
function:
If the platform is using X11 you should probably subclass ClutterBackendX11 • ClutterEventTranslator::translate_event()
which gets passed a pointer to the native event data structure, and a pointer
to a newly-allocated, empty ClutterEvent. The EventTranslator implementation
should then decide between three options:
- translate the native event and return CLUTTER_TRANSLATE_QUEUE to
let Clutter queue it up in the events queue;
- return CLUTTER_TRANSLATE_CONTINUE to let other event translators handle
the event;
- return CLUTTER_TRANSLATE_REMOVE to ignore the event.
Implementing ClutterDeviceManager
-------------------------------------------------------------------------------
Backends with input devices should provide a ClutterDeviceManager
implementation to handle addition, removal and input device event translation
through the ClutterEventTranslator interface.
NOTES
===============================================================================
• If the platform is using X11 you should probably subclass ClutterBackendX11
and ClutterStageX11, which will provide you with a ready to use code and ClutterStageX11, which will provide you with a ready to use code
implementation for event handling and window management. implementation for event handling and window management.