mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-30 23:43:40 +02:00
171 lines
3.2 KiB
ObjectPascal
171 lines
3.2 KiB
ObjectPascal
//
|
|
// AggPas 2.4 RM3 Demo application
|
|
// Note: Press F1 key on run to see more info about this demo
|
|
//
|
|
// Paths: src;src\ctrl;src\svg;src\util;src\platform\win;expat-wrap
|
|
//
|
|
program
|
|
component_rendering ;
|
|
|
|
uses
|
|
agg_basics ,
|
|
agg_platform_support ,
|
|
agg_slider_ctrl ,
|
|
agg_color ,
|
|
agg_pixfmt ,
|
|
agg_pixfmt_gray ,
|
|
agg_pixfmt_rgb ,
|
|
agg_renderer_base ,
|
|
agg_renderer_scanline ,
|
|
agg_rasterizer_scanline_aa ,
|
|
agg_scanline_p ,
|
|
agg_render_scanlines ,
|
|
agg_ctrl ,
|
|
agg_ellipse ;
|
|
|
|
{$I agg_mode.inc }
|
|
|
|
const
|
|
flip_y = true;
|
|
|
|
type
|
|
the_application = object(platform_support )
|
|
m_alpha : slider_ctrl_ptr;
|
|
|
|
constructor Construct(format_ : pix_format_e; flip_y_ : boolean );
|
|
destructor Destruct;
|
|
|
|
procedure on_draw; virtual;
|
|
|
|
procedure on_key(x ,y : int; key ,flags : unsigned ); virtual;
|
|
|
|
end;
|
|
|
|
{ CONSTRUCT }
|
|
constructor the_application.Construct;
|
|
begin
|
|
inherited Construct(format_ ,flip_y_ );
|
|
|
|
new(m_alpha ,Construct(5 ,5 ,320 - 5 ,10 + 5 ,not flip_y ) );
|
|
|
|
m_alpha.label_('Alpha=%1.0f' );
|
|
m_alpha.range_(0 ,255 );
|
|
m_alpha.value_(255 );
|
|
|
|
add_ctrl(m_alpha );
|
|
|
|
end;
|
|
|
|
{ DESTRUCT }
|
|
destructor the_application.Destruct;
|
|
begin
|
|
inherited Destruct;
|
|
|
|
dispose(m_alpha ,Destruct );
|
|
|
|
end;
|
|
|
|
{ ON_DRAW }
|
|
procedure the_application.on_draw;
|
|
var
|
|
pf ,
|
|
pfr ,
|
|
pfg ,
|
|
pfb : pixel_formats;
|
|
|
|
rbase ,
|
|
rbr ,
|
|
rbg ,
|
|
rbb : renderer_base;
|
|
|
|
r ,
|
|
rr ,
|
|
rg ,
|
|
rb : renderer_scanline_aa_solid;
|
|
|
|
ras : rasterizer_scanline_aa;
|
|
sl : scanline_p8;
|
|
|
|
rgba ,
|
|
gray : aggclr;
|
|
|
|
er ,
|
|
eg ,
|
|
eb : ellipse;
|
|
|
|
begin
|
|
// Initialize structures
|
|
pixfmt_bgr24 (pf ,rbuf_window );
|
|
pixfmt_gray8_bgr24r(pfr ,rbuf_window );
|
|
pixfmt_gray8_bgr24g(pfg ,rbuf_window );
|
|
pixfmt_gray8_bgr24b(pfb ,rbuf_window );
|
|
|
|
rbase.Construct(@pf );
|
|
rbr.Construct (@pfr );
|
|
rbg.Construct (@pfg );
|
|
rbb.Construct (@pfb );
|
|
|
|
r.Construct (@rbase );
|
|
rr.Construct(@rbr );
|
|
rg.Construct(@rbg );
|
|
rb.Construct(@rbb );
|
|
|
|
ras.Construct;
|
|
sl.Construct;
|
|
|
|
// Setup colors & background
|
|
rgba.ConstrDbl(1 ,1 ,1 );
|
|
gray.ConstrInt(0 ,trunc(m_alpha._value ) );
|
|
|
|
rbase.clear(@rgba );
|
|
|
|
// Draw ellipses
|
|
er.Construct (_width / 2 - 0.87 * 50 ,_height / 2 - 0.5 * 50 ,100 ,100 ,100 );
|
|
rr.color_ (@gray );
|
|
ras.add_path (@er );
|
|
render_scanlines(@ras ,@sl ,@rr );
|
|
|
|
eg.Construct (_width / 2 + 0.87 * 50 ,_height / 2 - 0.5 * 50 ,100 ,100 ,100 );
|
|
rg.color_ (@gray );
|
|
ras.add_path (@eg);
|
|
render_scanlines(@ras ,@sl ,@rg );
|
|
|
|
eb.Construct (_width / 2 ,_height / 2 + 50 ,100 ,100 ,100 );
|
|
rb.color_ (@gray );
|
|
ras.add_path (@eb );
|
|
render_scanlines(@ras ,@sl ,@rb );
|
|
|
|
// Render control
|
|
render_ctrl(@ras ,@sl ,@r ,m_alpha );
|
|
|
|
// Free AGG resources
|
|
ras.Destruct;
|
|
sl.Destruct;
|
|
|
|
end;
|
|
|
|
{ ON_KEY }
|
|
procedure the_application.on_key;
|
|
begin
|
|
if key = key_f1 then
|
|
message_(
|
|
'AGG has a gray-scale renderer that can use any 8-bit color channel '#13 +
|
|
'of an RGB or RGBA frame buffer. Most likely it will be used to draw '#13 +
|
|
'gray-scale images directly in the alpha-channel.' +
|
|
#13#13'Note: F2 key saves current "screenshot" file in this demo''s directory. ' );
|
|
|
|
end;
|
|
|
|
VAR
|
|
app : the_application;
|
|
|
|
BEGIN
|
|
app.Construct(pix_format_bgr24 ,flip_y );
|
|
app.caption_ ('AGG Example. Component Rendering (F1-Help)' );
|
|
|
|
if app.init(320 ,320 ,0 ) then
|
|
app.run;
|
|
|
|
app.Destruct;
|
|
|
|
END. |