Initial import of Dillo
This commit is contained in:
213
dw/view.hh
Normal file
213
dw/view.hh
Normal file
@ -0,0 +1,213 @@
|
||||
#ifndef __DW_VIEW_HH__
|
||||
#define __DW_VIEW_HH__
|
||||
|
||||
#ifndef __INCLUDED_FROM_DW_CORE_HH__
|
||||
# error Do not include this file directly, use "core.hh" instead.
|
||||
#endif
|
||||
|
||||
namespace dw {
|
||||
namespace core {
|
||||
|
||||
/**
|
||||
* \brief An interface to encapsulate platform dependent drawing.
|
||||
*
|
||||
* \sa\ref dw-overview, \ref dw-layout-views
|
||||
*/
|
||||
class View: public lout::object::Object
|
||||
{
|
||||
public:
|
||||
/*
|
||||
* ----------------------------
|
||||
* Operations on the view
|
||||
* ----------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief This methods notifies the view, that it has been attached to a
|
||||
* layout.
|
||||
*/
|
||||
virtual void setLayout (Layout *layout) = 0;
|
||||
|
||||
/**
|
||||
* \brief Set the canvas size.
|
||||
*/
|
||||
virtual void setCanvasSize (int width, int ascent, int descent) = 0;
|
||||
|
||||
/**
|
||||
* \brief Set the cursor appearance.
|
||||
*/
|
||||
virtual void setCursor (style::Cursor cursor) = 0;
|
||||
|
||||
/**
|
||||
* \brief Set the background of the view.
|
||||
*/
|
||||
virtual void setBgColor (style::Color *color) = 0;
|
||||
|
||||
/*
|
||||
* ---------------------------------------------------------
|
||||
* Scrolling and Related. Only usesViewport must be
|
||||
* implemented, if it returns false, the other methods
|
||||
* are never called.
|
||||
* ---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Return, whether this view uses a viewport.
|
||||
*/
|
||||
virtual bool usesViewport () = 0;
|
||||
|
||||
/**
|
||||
* \brief Get the thickness of the horizontal scrollbar, when it is
|
||||
* visible.
|
||||
*
|
||||
* Does not have to be implemented, when usesViewport returns false.
|
||||
*/
|
||||
virtual int getHScrollbarThickness () = 0;
|
||||
|
||||
/**
|
||||
* \brief Get the thickness of the vertical scrollbar, when it is
|
||||
* visible.
|
||||
*
|
||||
* Does not have to be implemented, when usesViewport returns false.
|
||||
*/
|
||||
virtual int getVScrollbarThickness () = 0;
|
||||
|
||||
virtual int getScrollbarOnLeft () = 0;
|
||||
|
||||
/**
|
||||
* \brief Scroll the viewport to the given position.
|
||||
*
|
||||
* Does not have to be implemented, when usesViewport returns false.
|
||||
*/
|
||||
virtual void scrollTo (int x, int y) = 0;
|
||||
|
||||
/**
|
||||
* \brief Scroll the viewport as commanded.
|
||||
*/
|
||||
virtual void scroll (ScrollCommand) { };
|
||||
|
||||
/**
|
||||
* \brief Set the viewport size.
|
||||
*
|
||||
* Does not have to be implemented, when usesViewport returns false.
|
||||
*
|
||||
* This will normally imply a resize of the UI widget. Width and height are
|
||||
* the dimensions of the new size, \em including the scrollbar thicknesses.
|
||||
*
|
||||
*/
|
||||
virtual void setViewportSize (int width, int height,
|
||||
int hScrollbarThickness,
|
||||
int vScrollbarThickness) = 0;
|
||||
|
||||
/*
|
||||
* -----------------------
|
||||
* Drawing functions
|
||||
* -----------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Called before drawing.
|
||||
*
|
||||
* All actual drawing operations will be enclosed into calls of
|
||||
* dw::core:View::startDrawing and dw::core:View::finishDrawing. They
|
||||
* may be implemented, e.g. when a backing
|
||||
* pixmap is used, to prevent flickering. StartDrawing() will then
|
||||
* initialize the backing pixmap, all other drawing operations will draw
|
||||
* into it, and finishDrawing() will merge it into the window.
|
||||
*/
|
||||
virtual void startDrawing (Rectangle *area) = 0;
|
||||
|
||||
/**
|
||||
* \brief Called after drawing.
|
||||
*
|
||||
* \sa dw::core:View::startDrawing
|
||||
*/
|
||||
virtual void finishDrawing (Rectangle *area) = 0;
|
||||
|
||||
/**
|
||||
* \brief Queue a region, which is given in \em canvas coordinates, for
|
||||
* drawing.
|
||||
*
|
||||
* The view implementation is responsible, that this region is drawn, either
|
||||
* immediately, or (which is more typical, since more efficient) the areas
|
||||
* are collected, combined (as far as possible), and the drawing is later
|
||||
* done in an idle function.
|
||||
*/
|
||||
virtual void queueDraw (Rectangle *area) = 0;
|
||||
|
||||
/**
|
||||
* \brief Queue the total viewport for drawing.
|
||||
*
|
||||
* \sa dw::core::View::queueDraw
|
||||
*/
|
||||
virtual void queueDrawTotal () = 0;
|
||||
|
||||
/**
|
||||
* \brief Cancel a draw queue request.
|
||||
*
|
||||
* If dw::core::View::queueDraw or dw::core::View::queueDrawTotal have been
|
||||
* called before, and the actual drawing was not processed yet, the actual
|
||||
* drawing should be cancelled. Otherwise, the cancellation should be
|
||||
* ignored.
|
||||
*/
|
||||
virtual void cancelQueueDraw () = 0;
|
||||
|
||||
/*
|
||||
* The following methods should be self-explaining.
|
||||
*/
|
||||
|
||||
virtual void drawPoint (style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
int x, int y) = 0;
|
||||
virtual void drawLine (style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
int x1, int y1, int x2, int y2) = 0;
|
||||
virtual void drawTypedLine (style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
style::LineType type, int width,
|
||||
int x1, int y1, int x2, int y2) = 0;
|
||||
virtual void drawRectangle (style::Color *color,
|
||||
style::Color::Shading shading, bool filled,
|
||||
int x, int y, int width, int height) = 0;
|
||||
virtual void drawArc (style::Color *color,
|
||||
style::Color::Shading shading, bool filled,
|
||||
int centerX, int centerY, int width, int height,
|
||||
int angle1, int angle2) = 0;
|
||||
virtual void drawPolygon (style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
bool filled, bool convex, Point *points,
|
||||
int npoints) = 0;
|
||||
virtual void drawText (style::Font *font,
|
||||
style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
int x, int y, const char *text, int len) = 0;
|
||||
virtual void drawSimpleWrappedText (style::Font *font, style::Color *color,
|
||||
style::Color::Shading shading,
|
||||
int x, int y, int w, int h,
|
||||
const char *text) = 0;
|
||||
virtual void drawImage (Imgbuf *imgbuf, int xRoot, int yRoot,
|
||||
int x, int y, int width, int height) = 0;
|
||||
|
||||
/*
|
||||
* --------------
|
||||
* Clipping
|
||||
* --------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* To prevent drawing outside of a given area, a clipping view may be
|
||||
* requested, which also implements this interface. The clipping view is
|
||||
* related to the parent view (clipping views may be nested!), anything
|
||||
* which is drawn into this clipping view, is later merged again into the
|
||||
* parent view. An implementation will typically use additional pixmaps,
|
||||
* which are later merged into the parent view pixmap/window.
|
||||
*/
|
||||
|
||||
virtual View *getClippingView (int x, int y, int width, int height) = 0;
|
||||
virtual void mergeClippingView (View *clippingView) = 0;
|
||||
};
|
||||
|
||||
} // namespace core
|
||||
} // namespace dw
|
||||
|
||||
#endif // __DW_VIEW_HH__
|
||||
Reference in New Issue
Block a user