diff --git a/src/compositor/README b/src/compositor/README index b6308f69f..93edf8dc9 100644 --- a/src/compositor/README +++ b/src/compositor/README @@ -1,7 +1,67 @@ Intro ===== -Fix me. +In general, the compositor splits the window from the contents of +the window from the shape of the window. In other words, a window +has contents, and the contents of the window have a shape. This is +represented by the actor hierarchy: + + +--------------------------------------+ + | MetaWindowActor | + | +----------------------------------+ | + | | MetaSurfaceActor | | + | | +------------------------------+ | | + | | | MetaShapedTexture | | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + | | +------------------------------+ | | + | +----------------------------------+ | + +--------------------------------------+ + +Surfaces may also contain subsurfaces. The MetaWindowActor and +MetaSurfaceActor subclasses that will be created depend on the client +type, and the display server type. + +## Subsurfaces + +Additionally, there is also the case of subsurfaces: surfaces that +are child of other surfaces. That is also represented in the actor +hierarchy by having one or many MetaSurfaceActors (the subsurfaces) +added as children of a parent MetaSurfaceActor. There are no limits +to how many subsurfaces a surface may have. With subsurfaces, the +actor hierarchy looks like this: + + MetaWindowActor + ↳ MetaSurfaceActor (surface) + ↳ MetaShapedTexture + ↳ MetaSurfaceActor (subsurface) + ↳ MetaShapedTexture + ↳ MetaSurfaceActor (sub-subsurface) + ↳ MetaShapedTexture + ↳ MetaSurfaceActor (subsurface) + ↳ MetaShapedTexture + +In this example, the main surface has 2 subsurfaces. One of these +subsurfaces contains a subsurface as well. + +All MetaWindowActors contain at least one MetaSurfaceActor, and all +MetaSurfaceActors contain a MetaShapedTexture. + +## Client and compositor + +MetaWindowActor and its subclasses represent the client window's +type. A X11 client will have a MetaWindowActorX11 representing it, +and a Wayland client will have a MetaWindowActorWayland. + +On the compositor side, the surface where the contents of the window +are drawn into are represented by MetaSurfaceActor subclasses. On a +Wayland session, windows are backed by a MetaSurfaceActorWayland +surface, whereas on X11 sessions, by MetaSurfaceActorX11. + +XWayland windows are X11 client windows (MetaWindowActorX11) backed +by Wayland surfaces (MetaWindowActorWayland). Env Vars