summaryrefslogtreecommitdiff
path: root/slideshow/manifest.txt
diff options
context:
space:
mode:
Diffstat (limited to 'slideshow/manifest.txt')
-rw-r--r--slideshow/manifest.txt95
1 files changed, 0 insertions, 95 deletions
diff --git a/slideshow/manifest.txt b/slideshow/manifest.txt
deleted file mode 100644
index 86cd2b959..000000000
--- a/slideshow/manifest.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-Slideshow module design & coding manifest
-=========================================
-
-Coding style:
--------------
-
- - modified BSD style:
- if( !test )
- {
- function( arg1,
- arg2,
- arg3 );
- }
-
- - members are always named maSomething
-
- - no tabs, indent four spaces
-
- - Class names (and type names in general) are UpperCamelCase, method
- names lowerCamelCase
-
- - all file names are lowercase, header files end in hxx, source files
- in cxx; one header per class, only one linkable class per cxx.
-
- - header guards follow this scheme: INCLUDED_SLIDESHOW_<CLASSNAME>_HXX
-
- - module-external headers, and system headers are included like this:
- #include <module/header.hxx> or #include <boost/shared_ptr.hpp>.
- module-internal headers are included like this:
- #include "header.hxx"
- No external header guards are used in cxx files
-
-
-Design
-------
-
- - currently, the slideshow module is basically
- single-threaded. Therefore, the XSlideShow interface must be called
- from the _main thread_ (this precondition is asserted). Other
- listener interfaces, which we could not impose this limitation upon
- (XSlideShowView's XMouseMotionListener, XMouseListener,
- XPaintListener and XModifyListener) will queue the events, and
- process them in the main thread. Therefore, XSlideShow::update()
- needs to be called frequently from the slideshow client.
-
- This design is necessitated by the fact that at least one XCanvas
- implementation (vclcanvas) must be called from the main thread
- only. Once the UNO threading framework is integrated, this can be
- changed.
-
- As of now, SlideView, SlideShowImpl, EventMultiplexerListener and
- DummyRenderer are exposed to calls from the outside world; of
- those, SlideView and EventMultiplexerListener serialize the calls
- by enqueuing events, SlideShowImpl imposes the hard constraint of
- being called from the main thread, and DummyRenderer is content
- with a simple object mutex. As a side effect, the global EventQueue
- must be thread-safe (as one of the few internal objects having an
- object mutex)
-
- - wherever possible, abstract interfaces and shared_ptr are used.
- * exception: global objects like EventQueue,
- and tightly collaborating classes, like Slide/LayerManager/Layer
-
- - since shared_ptr can lead to circular references (resulting in
- memory leaks), some care needs to be taken to avoid those. Where
- circular references are inevitable, or can happen by accident,
- classes implement the Disposable interface. The owner of the object
- then calls dispose() on its owned objects.
- Another way of avoiding circular references are weak_ptr, which are
- used in a few places.
- One of those places are the ViewEventHandlers, which are held weak
- on the EventMultiplexer. Otherwise, every class in need of view
- events would have to delegate listening to a dedicated child
- object, or burden their clients with the Disposable interface.
-
- - Pattern: Separate Listener
- To avoid circular shared_ptr references, classes in need to
- register a listener at EventMultiplexer often implement the
- corresponding listener interface in a separate object. This object
- is held via shared_ptr by the original class, and normally
- registered at the EventMultiplexer (and thus held by shared_ptr
- there, too). The separate listener object in turn holds the
- original object by plain reference. This is safe, if the original
- object removes the listener from the EventMultiplexer, before or
- within the destructor.
-
-
-Testing
-=======
-
-Before merging changes to HEAD, besides making sure the usual QA has
-been done, also run the unit and integration tests in the
-slideshow/test directory. Issuing a "dmake test" should run the unit
-tests, and generate a "demoshow" binary, that should also be run and
-checked to work properly.