386 | | * ... (this summary will be continued) |
| 386 | * SceneElement - base interface |
| 387 | * extended by interfaces |
| 388 | * ImageSceneElement |
| 389 | * ShapeSceneElement |
| 390 | * ContourSceneElement |
| 391 | * AudioSceneElement |
| 392 | * VideoSceneElement |
| 393 | * CompositeSceneElement |
| 394 | * SwingSceneElement |
| 395 | * maybe other |
| 396 | * in most cases this element is visible |
| 397 | * scene - just a tree (in some cases - directed acyclic graph) |
| 398 | * root element with properties and children, which also have children... |
| 399 | * scene elements have no parent link |
| 400 | * all coordinates in scenes are floating point numbers |
| 401 | * example: page with two frames, one of them is an ImageFrame, with image, padding and border |
| 402 | * in outline mode we have also margin bounds, padding bounds, middle of the border; margin is always invisible |
| 403 | * we need thes in cases of transparent images |
| 404 | * scene tree |
| 405 | * first level: node for all frames and node for the page background (not the whole page) |
| 406 | * each frame is ancestor of the frames node |
| 407 | * each frame has the following children: |
| 408 | * background |
| 409 | * content |
| 410 | * border |
| 411 | * in outline mode - some other elements (ContourSceneElement) |
| 412 | * the order of the children is important! It will determine the z-order - first the background is drawn, then the content, finally the border |
| 413 | * properties: |
| 414 | * subElements - not only for CompositeSceneElement; for example, ImageSceneElement has subelements... |
| 415 | * space - transformation matrix |
| 416 | * for most elements this will be the identity |
| 417 | * for zoom - detect the root level and change its space, for instance scale with 0.5; only there, that's enough |
| 418 | * from the root to the leaves the matrices are multiplied... |
| 419 | * the coordinates are similar to CSS - (0,0) is the left-upper corner of the content; if we have a border, part of it will have negative coordinates |
| 420 | * color |
| 421 | * ImmColor - floating point Alpha-RGB; default - 1,1,1,1 (white) |
| 422 | * can be fill color for a shape, can be color of contour, etc. |
| 423 | * effects |
| 424 | * for example - shadows |
| 425 | * currently there are no effects |
| 426 | * controller - not discussed, will be changed, for interaction? |
| 427 | * clip() - for example, we have a big image element and we want to show only part of it; define clipping shape |
| 428 | * scene elements has no names |
| 429 | * ImageSceneElement has a reference to ImmImage |
| 430 | * scene element implementation: override some methods: |
| 431 | * setupElements() { subElements().clear(); add.... } |
| 432 | * setupStatic() - for example - color |
| 433 | * setupDynamic() - things that you expect to change; for example, color().set(isSelected ? HALF_BLUE : WHITE) |
| 434 | * This is just a convention, but it is a good idea to separate things into different setup methods |
| 435 | * currently there is one implementation - main.scene.simple |
| 436 | * SceneVisualElement |
| 437 | * SimpleSceneVisual |
| 438 | * quite short implementation |
| 439 | * implementation helpers - base.scene.model |
| 440 | * visible area != responce area |
| 441 | |
| 442 | * changes (discussion in Bulgarian) |
| 443 | * r2 = r1.getSpace().getRevision(13) - returns a new resource with new id, parent=null? |
| 444 | * currently redo=register, but that's not good |
| 445 | * History |
| 446 | * Change |
| 447 | * skip changes... |
| 448 | * ChangeServer, LocalChangeServer |
| 449 | * UndoManager |
| 450 | * undo(resource) |
| 451 | * redo |
| 452 | * getUndoDescription |
| 453 | * getRedoDescription |