diff --git a/doc/architecture/decisions/0002-implement-graphics-object-store.md b/doc/architecture/decisions/0002-implement-graphics-object-store.md index f29c3e2..c6154c7 100644 --- a/doc/architecture/decisions/0002-implement-graphics-object-store.md +++ b/doc/architecture/decisions/0002-implement-graphics-object-store.md @@ -43,7 +43,8 @@ the following fields: GromitDeviceData *selected; // NULL, or which user selected the item guint32 capabilities; // bit mask with capabilities (see below) BoundingBox extent; // the objects rectangular extent - void (*exec)(GfxObject *, action, void *); // object-specific methods + void (*exec)(GromitData *, GfxObjectBase *, + GfxAction, void *); // object-specific methods } GfxObjectBase; This basic set of fields is extended by object-specific fields, which @@ -104,10 +105,10 @@ implemented in the `do_action` function. move object can be moved - isotropic_scale object can be scaled isotropically + scale_isotropic object can be scaled isotropically - anisotropic_scale object can be scaled anisotropically,
+ scale_anisotropic object can be scaled anisotropically,
i.e. differently in X and Y direction isotropic_scale also must be set @@ -162,7 +163,7 @@ When calling `exec`, the `action` argument selects the task to be performed. - update_bbox update the bounding box of the base object;
+ update_bounding_box update the bounding box of the base object;
trigger recalculation of the bounding box @@ -197,12 +198,17 @@ Each object that is added or transformed receives a new unique Maintaining a per-user (i.e. per device) undo system is complicated by the fact that an object can be "taken over" by another user by manipulating it. This is necessary to enable a truly collaborative -workflow. At the same time, a user should only undo his/her own +workflow. At the same time, a user should only undo their own operations. To solve this conflict, I propose the following system: -- each device (i.e. user) contains an `GList` with `undo` and `redo` records. +- for each device, the `GdkSeat` is determined, since it links pointer + and keyboard devices that belong together. + +- for each `GdkSeat`, a `GromitSeat` which contains a `GList` of + `undo` and `redo` records. The `GromitSeat`s are stored in a hash + table in `GromitData` that associates the device with the seat. - `GromitData` is extended with an undo object store (`undo_objects`).