mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 12:01:27 +01: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. | 
