aboutsummaryrefslogtreecommitdiff
path: root/doc/dw-images-and-backgrounds.doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/dw-images-and-backgrounds.doc')
-rw-r--r--doc/dw-images-and-backgrounds.doc235
1 files changed, 0 insertions, 235 deletions
diff --git a/doc/dw-images-and-backgrounds.doc b/doc/dw-images-and-backgrounds.doc
deleted file mode 100644
index 8f07766a..00000000
--- a/doc/dw-images-and-backgrounds.doc
+++ /dev/null
@@ -1,235 +0,0 @@
-/** \page dw-images-and-backgrounds Images and Backgrounds in Dw
-
-Image Buffers
-=============
-
-Representation of the image data is done by dw::core::Imgbuf, see
-there for details. Drawing is done by dw::core::View
-(dw::core::View::drawImage).
-
-Since dw::core::Imgbuf provides memory management based on reference
-counting, there may be an 1-to-n relation from image renderers (image
-widgets or backgrounds, see below) and dw::core::Imgbuf. Since
-dw::core::Imgbuf does not know about renderers, but just provides
-rendering functionality, the caller must (typically after calling
-dw::core::Imgbuf::copyRow) notify all renderers connected to the
-buffer.
-
-
-Image Renderer
-==============
-
-Generally, there are no restrictions on how to manage
-dw::core::Imgbuf; but to handle image data from web resources, the
-interface dw::core::ImgRenderer should be implemented. It is again
-wrapped by DilloImage (to make access from the C part possible, since
-dw::core::ImgRenderer is written in C++), which is referenced by
-DilloWeb. There are two positions where retrieving image data is
-initiated:
-
-- Html_load_image: for embedded images (implemented by dw::Image,
- which implements dw::core::ImgRenderer);
-- StyleEngine::apply (search for "case
- CSS_PROPERTY_BACKGROUND_IMAGE"): for backgrond images; there are
- some implementations of dw::core::ImgRenderer within the context of
- dw::core::style::StyleImage.
-
-Both are described in detail below. Notice that the code is quite
-similar; only the implementation of dw::core::ImgRenderer differs.
-
-At this time, dw::core::ImgRenderer has got two methods (see more
-documentation there):
-
-- dw::core::ImgRenderer::setBuffer,
-- dw::core::ImgRenderer::drawRow,
-- dw::core::ImgRenderer::finish, and
-- dw::core::ImgRenderer::fatal.
-
-
-Images
-======
-
-This is the simplest renderer, displaying an image. For each row to be
-drawn,
-
-- first dw::core::Imgbuf::copyRow, and then
-- for each dw::Image, dw::Image::drawRow must be called, with the same
- argument (no scaling is necessary).
-
-dw::Image automatically scales the dw::core::Imgbuf, the root buffer
-should be passed to dw::Image::setBuffer.
-
-\see dw::Image for more details.
-
-
-Background Images
-=================
-
-Since background images are style resources, they are associated with
-dw::core::style::Style, as dw::core::style::StyleImage, which is
-handled in a similar way (reference counting etc.) as
-dw::core::style::Color and dw::core::style::Font, although it is
-concrete and not platform-dependant.
-
-The actual renderer (passed to Web) is an instance of
-dw::core::ImgRendererDist (distributes all calls to a set of other
-instances of dw::core::ImgRenderer), which contains two kinds of
-renderers:
-
-- one instance of dw::core::style::StyleImage::StyleImgRenderer, which
- does everything needed for dw::core::style::StyleImage, and
-- other renderers, used externally (widgets etc.), which are added by
- dw::core::style::StyleImage::putExternalImgRenderer (and removed by
- dw::core::style::StyleImage::removeExternalImgRenderer).
-
-This diagram gives an comprehensive overview:
-
-\dot
-digraph G {
- node [shape=record, fontname=Helvetica, fontsize=10];
- edge [arrowhead="open", dir="both", arrowtail="none",
- labelfontname=Helvetica, labelfontsize=10, color="#404040",
- labelfontcolor="#000080"];
- fontname=Helvetica; fontsize=10;
-
- subgraph cluster_dw_style {
- style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
-
- Style [URL="\ref dw::core::style::Style"];
- StyleImage [URL="\ref dw::core::style::StyleImage"];
- Imgbuf [URL="\ref dw::core::Imgbuf", color="#a0a0a0"];
- StyleImgRenderer
- [URL="\ref dw::core::style::StyleImage::StyleImgRenderer"];
- ImgRenderer [URL="\ref dw::core::ImgRenderer", color="#ff8080"];
- ImgRendererDist [URL="\ref dw::core::ImgRendererDist"];
- ExternalImgRenderer
- [URL="\ref dw::core::style::StyleImage::ExternalImgRenderer",
- color="#a0a0a0"];
- ExternalWidgetImgRenderer
- [URL="\ref dw::core::style::StyleImage::ExternalWidgetImgRenderer",
- color="#a0a0a0"];
- }
-
- subgraph cluster_dw_layout {
- style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
-
- Layout [URL="\ref dw::core::Layout"];
- LayoutImgRenderer [URL="\ref dw::core::Layout::LayoutImgRenderer"];
- }
-
- subgraph cluster_dw_widget {
- style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
-
- Widget [URL="\ref dw::core::Widget", color="#a0a0a0"];
- WidgetImgRenderer [URL="\ref dw::core::Widget::WidgetImgRenderer"];
- }
-
- subgraph cluster_dw_textblock {
- style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
-
- Textblock [URL="\ref dw::Textblock"];
- Word [URL="\ref dw::Textblock::Word"];
- WordImgRenderer [URL="\ref dw::Textblock::WordImgRenderer"];
- SpaceImgRenderer [URL="\ref dw::Textblock::SpaceImgRenderer"];
- }
-
- Style -> StyleImage [headlabel="*", taillabel="1"];
- StyleImage -> Imgbuf [headlabel="*", taillabel="1"];
- StyleImage -> StyleImgRenderer [headlabel="1", taillabel="1"];
- StyleImage -> ImgRendererDist [headlabel="1", taillabel="1"];
- ImgRendererDist -> StyleImgRenderer [headlabel="1", taillabel="1"];
- ImgRendererDist -> ImgRenderer [headlabel="1", taillabel="*"];
-
- ImgRenderer -> ImgRendererDist [arrowhead="none", arrowtail="empty",
- dir="both", style="dashed"];
- ImgRenderer -> StyleImgRenderer [arrowhead="none", arrowtail="empty",
- dir="both", style="dashed"];
- ImgRenderer -> ExternalImgRenderer [arrowhead="none", arrowtail="empty",
- dir="both", style="dashed"];
- ExternalImgRenderer -> ExternalWidgetImgRenderer [arrowhead="none",
- arrowtail="empty", dir="both", style="dashed"];
-
- Layout -> LayoutImgRenderer [headlabel="1", taillabel="0..1"];
- ExternalImgRenderer -> LayoutImgRenderer [arrowhead="none",
- arrowtail="empty", dir="both", style="dashed"];
-
- Widget -> WidgetImgRenderer [headlabel="1", taillabel="0..1"];
- ExternalWidgetImgRenderer -> WidgetImgRenderer [arrowhead="none",
- arrowtail="empty", dir="both", style="dashed"];
-
- Textblock -> Word [headlabel="1", taillabel="*"];
- Word -> WordImgRenderer [headlabel="1", taillabel="0..1"];
- Word -> SpaceImgRenderer [headlabel="1", taillabel="0..1"];
- ExternalWidgetImgRenderer -> WordImgRenderer [arrowhead="none",
- arrowtail="empty", dir="both", style="dashed"];
- WordImgRenderer -> SpaceImgRenderer [arrowhead="none", arrowtail="empty",
- dir="both", style="dashed"];
-}
-\enddot
-
-<center>[\ref uml-legend "legend"]</center>
-
-
-Memory management
------------------
-
-dw::core::style::StyleImage extends lout::signal::ObservedObject, so
-that deleting this instance can be connected to code dealing with
-cache clients etc. See StyleImageDeletionReceiver and how it is
-attached in StyleEngine::apply ("case CSS_PROPERTY_BACKGROUND_IMAGE").
-
-
-Bugs and Things Needing Improvement
-===================================
-
-(Mostly related to image backgrounds, when not otherwise mentioned.)
-
-High Priority
--------------
-
-**Configurability, security/privacy aspects, etc.,** which are
-currently available for image widgets, should be adopted. Perhaps some
-more configuration options specially for background images.
-
-
-Medium Priority
----------------
-
-**Background-attachment** is not yet implemented, and will be postponed.
-
-**Calls to dw::core::ImgRenderer::fatal** are incomplete. As an
-example, it is not called, when connecting to a server fails. (And so,
-as far as I see, no cache client is started.)
-
-
-Low Priority
-------------
-
-**Alpha support:** (not related to image backgrounds) currently alpha
-support (and also colormap management) is done in dicache, while
-dw::Image is only created with type RGB. This leads to several problems:
-
-- One dicache entry (representing an image related to the same URL),
- which has only one background color, may refer to different images
- with different background colors.
-- The dicache only handles background colors, not background images.
-
-The solution is basicly simple: keep alpha support out of dicache;
-instead implement RGBA in dw::Image. As it seems, the main problem is
-alpha support in FLTK/X11.
-
-
-Solved (Must Be Documented)
----------------------------
-
-*Drawing background images row by row may become slow. As an
-alternative, dw::core::ImgRenderer::finish could be used. However,
-drawing row by row could become an option.* There is now
-dw::core::style::drawBackgroundLineByLine, which can be changed in the
-code, and is set to *false*. The old code still exists, so changing
-this to *true* activates again drawing line by line.
-
-(For image widgets, this could also become an option: in contexts,
-when image data is retrieved in a very fast way.)
-
-*/