forked from KolibriOS/kolibrios
125 lines
4.2 KiB
C
125 lines
4.2 KiB
C
|
|
||
|
|
||
|
/** Clears plotting area to a flat colour (if needed)
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_clg_t)(nsfb_t *nsfb, nsfb_colour_t c);
|
||
|
|
||
|
/** Plots a rectangle outline. The line can be solid, dotted or
|
||
|
* dashed. Top left corner at (x0,y0) and rectangle has given
|
||
|
* width and height.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_rectangle_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, int line_width, nsfb_colour_t c, bool dotted, bool dashed);
|
||
|
|
||
|
/** Plots a line using a given pen.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_line_t)(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen);
|
||
|
|
||
|
/** Plots a filled polygon with straight lines between points.
|
||
|
* The lines around the edge of the ploygon are not plotted. The
|
||
|
* polygon is filled with the non-zero winding rule.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_polygon_t)(nsfb_t *nsfb, const int *p, unsigned int n, nsfb_colour_t fill);
|
||
|
|
||
|
/** Plots a filled rectangle. Top left corner at (x0,y0), bottom
|
||
|
* right corner at (x1,y1). Note: (x0,y0) is inside filled area,
|
||
|
* but (x1,y1) is below and to the right. See diagram below.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_fill_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c);
|
||
|
|
||
|
/** Clipping operations.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_clip_t)(nsfb_t *nsfb, nsfb_bbox_t *clip);
|
||
|
|
||
|
/** Plots an arc, around (x,y), from anticlockwise from angle1 to
|
||
|
* angle2. Angles are measured anticlockwise from horizontal, in
|
||
|
* degrees.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_arc_t)(nsfb_t *nsfb, int x, int y, int radius, int angle1, int angle2, nsfb_colour_t c);
|
||
|
|
||
|
/** Plots a point.
|
||
|
*
|
||
|
* Plot a single alpha blended pixel.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_point_t)(nsfb_t *nsfb, int x, int y, nsfb_colour_t c);
|
||
|
|
||
|
/** Plot an ellipse.
|
||
|
*
|
||
|
* plot an ellipse outline, note if teh bounding box is square this will plot a
|
||
|
* circle.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_ellipse_t)(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c);
|
||
|
|
||
|
/** Plot a filled ellipse.
|
||
|
*
|
||
|
* plot a filled ellipse, note if the bounding box is square this will plot a
|
||
|
* circle.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_ellipse_fill_t)(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c);
|
||
|
|
||
|
|
||
|
/** Plot bitmap
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_bitmap_t)(nsfb_t *nsfb, const nsfb_bbox_t *loc, const nsfb_colour_t *pixel, int bmp_width, int bmp_height, int bmp_stride, bool alpha);
|
||
|
|
||
|
|
||
|
/** Copy an area of screen
|
||
|
*
|
||
|
* Copy an area of the display.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_copy_t)(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox);
|
||
|
|
||
|
|
||
|
/** Plot an 8 bit per pixel glyph.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_glyph8_t)(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c);
|
||
|
|
||
|
|
||
|
/** Plot an 1 bit per pixel glyph.
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_glyph1_t)(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c);
|
||
|
|
||
|
/** Read rectangle of screen into buffer
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_readrect_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer);
|
||
|
|
||
|
/** Plot quadratic bezier spline
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_quadratic_bezier_t)(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_plot_pen_t *pen);
|
||
|
|
||
|
/** Plot cubic bezier spline
|
||
|
*/
|
||
|
typedef bool (nsfb_plotfn_cubic_bezier_t)(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_point_t *ctrlb, nsfb_plot_pen_t *pen);
|
||
|
|
||
|
typedef bool (nsfb_plotfn_polylines_t)(nsfb_t *nsfb, int pointc, const nsfb_point_t *points, nsfb_plot_pen_t *pen);
|
||
|
|
||
|
/** plot path */
|
||
|
typedef bool (nsfb_plotfn_path_t)(nsfb_t *nsfb, int pathc, nsfb_plot_pathop_t *pathop, nsfb_plot_pen_t *pen);
|
||
|
|
||
|
/** plotter function table. */
|
||
|
typedef struct nsfb_plotter_fns_s {
|
||
|
nsfb_plotfn_clg_t *clg;
|
||
|
nsfb_plotfn_rectangle_t *rectangle;
|
||
|
nsfb_plotfn_line_t *line;
|
||
|
nsfb_plotfn_polygon_t *polygon;
|
||
|
nsfb_plotfn_fill_t *fill;
|
||
|
nsfb_plotfn_clip_t *get_clip;
|
||
|
nsfb_plotfn_clip_t *set_clip;
|
||
|
nsfb_plotfn_ellipse_t *ellipse;
|
||
|
nsfb_plotfn_ellipse_fill_t *ellipse_fill;
|
||
|
nsfb_plotfn_arc_t *arc;
|
||
|
nsfb_plotfn_bitmap_t *bitmap;
|
||
|
nsfb_plotfn_point_t *point;
|
||
|
nsfb_plotfn_copy_t *copy;
|
||
|
nsfb_plotfn_glyph8_t *glyph8;
|
||
|
nsfb_plotfn_glyph1_t *glyph1;
|
||
|
nsfb_plotfn_readrect_t *readrect;
|
||
|
nsfb_plotfn_quadratic_bezier_t *quadratic;
|
||
|
nsfb_plotfn_cubic_bezier_t *cubic;
|
||
|
nsfb_plotfn_path_t *path;
|
||
|
nsfb_plotfn_polylines_t *polylines;
|
||
|
} nsfb_plotter_fns_t;
|
||
|
|
||
|
|
||
|
bool select_plotters(nsfb_t *nsfb);
|
||
|
|