home *** CD-ROM | disk | FTP | other *** search
-
- // utils.h.document
-
- // Dreamscape - C++ class library for RISC OS
- // Copyright (c) 1996 Mark Seaborn <mseaborn@argonet.co.uk>
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Library General Public
- // License as published by the Free Software Foundation; either
- // version 2 of the License, or (at your option) any later version.
- // See the Dreamscape documentation for more information.
-
- #ifndef dreamscape_document_H
- #define dreamscape_document_H
-
- #include "window.h"
- #include "quality.h"
-
- class DocumentCoordSystem;
- typedef float DocUnit;
- typedef Coords<DocUnit, DocumentCoordSystem> DocCoords;
- typedef BBox<DocUnit, DocumentCoordSystem> DocBBox;
- typedef TransformMatrix<DocUnit, float, DocumentCoordSystem> DocTransform;
-
- class DocumentRedrawable {
- public:
- class RedrawInfo {
- public:
- RedrawInfo(): scale(1) {}
-
- DocBBox clip;
- ScrCoords origin;
- float scale;
- Quality quality;
- };
- virtual void redraw(const RedrawInfo &info) const = 0;
- };
-
- class DocumentInfo {
- public:
- DocumentInfo(): modified_changed(0), no_views_changed(0),
- filename_changed(0), extent_changed(0), modified(0),
- number_of_views(0) {}
-
- unsigned modified_changed: 1;
- unsigned no_views_changed: 1;
- unsigned filename_changed: 1;
- unsigned extent_changed: 1;
-
- unsigned modified: 1;
- int number_of_views;
- String filename;
- DocBBox extent;
- };
-
- class Document {
- friend View;
- List<View *> views;
- List<const DocumentRedrawable *> redrawers;
- unsigned modified: 1;
- String filename;
- DocBBox extent;
-
- void update_info(const DocumentInfo &info) const;
-
- public:
- Document();
- virtual ~Document();
-
- void add_redrawer(const DocumentRedrawable *redrawer);
- void remove_redrawer(const DocumentRedrawable *redrawer);
- void update_area(const DocBBox &area);
- void update_area(const DocBBox &area, const DocumentRedrawable *redrawer);
- void move_area(const DocBBox &area, const DocCoords &bottomleft);
-
- DocumentInfo get_info() const;
-
- int get_number_of_views() const { return views.size(); }
-
- void set_modified(bool modified);
- bool get_modified() const { return modified; }
-
- void set_filename(const char *filename);
- String get_filename() const { return filename; }
-
- void set_extent(const DocBBox &extent);
- void get_extent(DocBBox &extentn) const { extentn = extent; }
- DocBBox get_extent() const { return extent; }
- };
-
- class ViewInfo {
- public:
- ViewInfo(): scale_changed(0), quality_changed(0), scale(1) {}
-
- unsigned scale_changed: 1;
- unsigned quality_changed: 1;
-
- float scale;
- Quality quality;
- };
-
- class View: public WindowRedrawable {
- friend Document;
- Document *_document;
- Window *_window;
- float _scale;
- Quality _quality;
-
- class QuickRedrawer: public WindowRedrawable {
- const DocumentRedrawable *redrawer;
- const View *view;
- public:
- QuickRedrawer(const DocumentRedrawable *r): redrawer(r) {}
- void redraw(const RedrawInfo &info) const;
- friend Document;
- };
- friend QuickRedrawer;
-
- public:
- View(Document *document, BaseWindow *window);
- virtual ~View();
-
- void redraw(const RedrawInfo &info) const;
-
- Document *document() const { return _document; }
- BaseWindow *window() const { return _window; }
- virtual void document_info_changed(const DocumentInfo &info);
- virtual void view_info_changed(const ViewInfo &info);
-
- ViewInfo get_info() const;
-
- virtual void set_scale(float scale);
- float get_scale() const { return _scale; }
-
- virtual void set_quality(Quality quality);
- Quality get_quality() const { return _quality; }
-
- DocCoords win_to_doc(const WinCoords &pos) const;
- WinCoords doc_to_win(const DocCoords &pos) const;
- DocBBox win_to_doc(const WinBBox &bbox) const;
- WinBBox doc_to_win(const DocBBox &bbox) const;
- };
-
- #endif
-