1
//----------------------------------------------------------------------------
2
// Anti-Grain Geometry - Version 2.4 (Public License)
3
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5
// Anti-Grain Geometry - Version 2.4 Release Milano 3 (AggPas 2.4 RM3)
6
// Pascal Port By: Milan Marusinec alias Milano
8
// http://www.aggpas.org
9
// Copyright (c) 2005-2006
11
// Permission to copy, use, modify, sell and distribute this software
12
// is granted provided this copyright notice appears in all copies.
13
// This software is provided "as is" without express or implied
14
// warranty, and with no claim as to its suitability for any purpose.
16
//----------------------------------------------------------------------------
17
// Contact: mcseem@antigrain.com
18
// mcseemagg@yahoo.com
19
// http://www.antigrain.com
21
//----------------------------------------------------------------------------
23
// class renderer_primitives
25
// [Pascal Port History] -----------------------------------------------------
27
// 15.01.2006-Milano: Unit port establishment
29
{ agg_renderer_primitives.pas }
31
agg_renderer_primitives ;
42
agg_ellipse_bresenham ;
46
renderer_primitives_ptr = ^renderer_primitives;
47
renderer_primitives = object
48
m_ren : renderer_base_ptr;
51
m_line_color : aggclr;
56
constructor Construct(ren_ : renderer_base_ptr );
58
function coord(c : double ) : int;
60
procedure fill_color_(c : aggclr_ptr );
61
procedure line_color_(c : aggclr_ptr );
63
function _fill_color : aggclr_ptr;
64
function _line_color : aggclr_ptr;
66
procedure rectangle (x1 ,y1 ,x2 ,y2 : int );
67
procedure solid_rectangle (x1 ,y1 ,x2 ,y2 : int );
68
procedure outlined_rectangle(x1 ,y1 ,x2 ,y2 : int );
70
procedure ellipse (x ,y ,rx ,ry : int );
71
procedure solid_ellipse (x ,y ,rx ,ry : int );
72
procedure outlined_ellipse(x ,y ,rx ,ry : int );
74
procedure line(x1 ,y1 ,x2 ,y2 : int; last : boolean = false );
76
procedure move_to(x ,y : int );
77
procedure line_to(x ,y : int; last : boolean = false );
79
function ren : renderer_base_ptr;
87
{ LOCAL VARIABLES & CONSTANTS }
88
{ UNIT IMPLEMENTATION }
90
constructor renderer_primitives.Construct;
92
m_fill_color.Construct;
93
m_line_color.Construct;
103
function renderer_primitives.coord;
105
result:=trunc(c * subpixel_size );
110
procedure renderer_primitives.fill_color_;
117
procedure renderer_primitives.line_color_;
124
function renderer_primitives._fill_color;
126
result:=@m_fill_color;
131
function renderer_primitives._line_color;
133
result:=@m_line_color;
138
procedure renderer_primitives.rectangle;
140
m_ren.blend_hline(x1 ,y1 ,x2 - 1 ,@m_line_color ,cover_full );
141
m_ren.blend_vline(x2 ,y1 ,y2 - 1 ,@m_line_color ,cover_full );
142
m_ren.blend_hline(x1 + 1 ,y2 ,x2 ,@m_line_color ,cover_full );
143
m_ren.blend_vline(x1 ,y1 + 1 ,y2 ,@m_line_color ,cover_full );
148
procedure renderer_primitives.solid_rectangle;
150
m_ren.blend_bar(x1 ,y1 ,x2 ,y2 ,@m_fill_color ,cover_full );
154
{ OUTLINED_RECTANGLE }
155
procedure renderer_primitives.outlined_rectangle;
157
rectangle (x1 ,y1 ,x2 ,y2 );
158
m_ren.blend_bar(x1 + 1 ,y1 + 1 ,x2 - 1 ,y2 - 1 ,@m_fill_color ,cover_full );
163
procedure renderer_primitives.ellipse;
165
ei : ellipse_bresenham_interpolator;
170
ei.Construct(rx ,ry );
179
m_ren.blend_pixel(x + dx ,y + dy ,@m_line_color ,cover_full );
180
m_ren.blend_pixel(x + dx ,y - dy ,@m_line_color ,cover_full );
181
m_ren.blend_pixel(x - dx ,y - dy ,@m_line_color ,cover_full );
182
m_ren.blend_pixel(x - dx ,y + dy ,@m_line_color ,cover_full );
191
procedure renderer_primitives.solid_ellipse;
193
ei : ellipse_bresenham_interpolator;
195
dx ,dy ,dx0 ,dy0 : int;
198
ei.Construct(rx ,ry );
211
m_ren.blend_hline(x - dx0 ,y + dy0 ,x + dx0 ,@m_fill_color ,cover_full );
212
m_ren.blend_hline(x - dx0 ,y - dy0 ,x + dx0 ,@m_fill_color ,cover_full );
223
m_ren.blend_hline(x - dx0 ,y + dy0 ,x + dx0 ,@m_fill_color ,cover_full );
228
procedure renderer_primitives.outlined_ellipse;
230
ei : ellipse_bresenham_interpolator;
235
ei.Construct(rx ,ry );
244
m_ren.blend_pixel(x + dx ,y + dy ,@m_line_color ,cover_full );
245
m_ren.blend_pixel(x + dx ,y - dy ,@m_line_color ,cover_full );
246
m_ren.blend_pixel(x - dx ,y - dy ,@m_line_color ,cover_full );
247
m_ren.blend_pixel(x - dx ,y + dy ,@m_line_color ,cover_full );
249
if (ei._dy <> 0 ) and
252
m_ren.blend_hline(x - dx + 1 ,y + dy ,x + dx - 1 ,@m_fill_color ,cover_full );
253
m_ren.blend_hline(x - dx + 1 ,y - dy ,x + dx - 1 ,@m_fill_color ,cover_full );
264
procedure renderer_primitives.line;
266
li : line_bresenham_interpolator;
270
li.Construct(x1 ,y1 ,x2 ,y2 );
277
m_ren.blend_pixel(li.line_lr(x1 ) ,li.line_lr(y1 ) ,@m_line_color ,cover_full );
288
m_ren.blend_pixel(li._x2 ,li._y1 ,@m_line_color ,cover_full );
297
m_ren.blend_pixel(li._x1 ,li._y2 ,@m_line_color ,cover_full );
308
procedure renderer_primitives.move_to;
316
procedure renderer_primitives.line_to;
318
line(m_curr_x ,m_curr_y ,x ,y ,last );
326
function renderer_primitives.ren;