Example #1
0
        public SliderWidget(double x1, double y1, double x2, double y2)
            : base(x1, y1, x2, y2)
        {
            m_border_width   = 1.0;
            m_border_extra   = ((y2 - y1) / 2);
            m_text_thickness = (1.0);
            m_pdx            = (0.0);
            m_mouse_move     = false;
            m_value          = (0.5);
            m_preview_value  = (0.5);
            m_min            = (0.0);
            m_max            = (1.0);
            m_num_steps      = (0);
            m_descending     = (false);
            m_ellipse        = new VertexSource.Ellipse();
            m_storage        = new PathStorage();
            m_text           = new GsvText();
            m_text_poly      = new StrokeConverter(m_text);

            CalculateBox();

            m_background_color      = (new RGBA_Doubles(1.0, 0.9, 0.8));
            m_triangle_color        = (new RGBA_Doubles(0.7, 0.6, 0.6));
            m_text_color            = (new RGBA_Doubles(0.0, 0.0, 0.0));
            m_pointer_preview_color = (new RGBA_Doubles(0.6, 0.4, 0.4, 0.4));
            m_pointer_color         = (new RGBA_Doubles(0.8, 0.0, 0.0, 0.6));
        }
Example #2
0
        public spline_ctrl(Vector2 location, Vector2 size, int num_pnt)
            : base(location, false)
        {
            LocalBounds  = new RectangleDouble(0, 0, size.X, size.Y);
            m_curve_pnt  = new VertexStorage();
            m_curve_poly = new Stroke(m_curve_pnt);
            m_ellipse    = new Ellipse();

            m_background_color   = new Color(1.0, 1.0, 0.9);
            m_border_color       = new Color(0.0, 0.0, 0.0);
            m_curve_color        = new Color(0.0, 0.0, 0.0);
            m_inactive_pnt_color = new Color(0.0, 0.0, 0.0);
            m_active_pnt_color   = new Color(1.0, 0.0, 0.0);

            m_num_pnt      = (num_pnt);
            m_border_width = (1.0);
            m_border_extra = (0.0);
            m_curve_width  = (1.0);
            m_point_size   = (3.0);
            m_curve_poly   = new Stroke(m_curve_pnt);
            m_idx          = (0);
            m_vertex       = (0);
            m_active_pnt   = (-1);
            m_move_pnt     = (-1);
            m_pdx          = (0.0);
            m_pdy          = (0.0);
            if (m_num_pnt < 4)
            {
                m_num_pnt = 4;
            }
            if (m_num_pnt > 32)
            {
                m_num_pnt = 32;
            }

            for (int i = 0; i < m_num_pnt; i++)
            {
                m_xp[i] = (double)(i) / (double)(m_num_pnt - 1);
                m_yp[i] = 0.5;
            }
            calc_spline_box();
            update_spline();
            {
                m_spline.init((int)m_num_pnt, m_xp, m_yp);
                for (int i = 0; i < 256; i++)
                {
                    m_spline_values[i] = m_spline.get((double)(i) / 255.0);
                    if (m_spline_values[i] < 0.0)
                    {
                        m_spline_values[i] = 0.0;
                    }
                    if (m_spline_values[i] > 1.0)
                    {
                        m_spline_values[i] = 1.0;
                    }
                    m_spline_values8[i] = (byte)(m_spline_values[i] * 255.0);
                }
            }
        }
Example #3
0
		public spline_ctrl(Vector2 location, Vector2 size, int num_pnt)
			: base(location, false)
		{
			LocalBounds = new RectangleDouble(0, 0, size.x, size.y);
			m_curve_pnt = new PathStorage();
			m_curve_poly = new Stroke(m_curve_pnt);
			m_ellipse = new Ellipse();

			m_background_color = new RGBA_Bytes(1.0, 1.0, 0.9);
			m_border_color = new RGBA_Bytes(0.0, 0.0, 0.0);
			m_curve_color = new RGBA_Bytes(0.0, 0.0, 0.0);
			m_inactive_pnt_color = new RGBA_Bytes(0.0, 0.0, 0.0);
			m_active_pnt_color = new RGBA_Bytes(1.0, 0.0, 0.0);

			m_num_pnt = (num_pnt);
			m_border_width = (1.0);
			m_border_extra = (0.0);
			m_curve_width = (1.0);
			m_point_size = (3.0);
			m_curve_poly = new Stroke(m_curve_pnt);
			m_idx = (0);
			m_vertex = (0);
			m_active_pnt = (-1);
			m_move_pnt = (-1);
			m_pdx = (0.0);
			m_pdy = (0.0);
			if (m_num_pnt < 4) m_num_pnt = 4;
			if (m_num_pnt > 32) m_num_pnt = 32;

			for (int i = 0; i < m_num_pnt; i++)
			{
				m_xp[i] = (double)(i) / (double)(m_num_pnt - 1);
				m_yp[i] = 0.5;
			}
			calc_spline_box();
			update_spline();
			{
				m_spline.init((int)m_num_pnt, m_xp, m_yp);
				for (int i = 0; i < 256; i++)
				{
					m_spline_values[i] = m_spline.get((double)(i) / 255.0);
					if (m_spline_values[i] < 0.0) m_spline_values[i] = 0.0;
					if (m_spline_values[i] > 1.0) m_spline_values[i] = 1.0;
					m_spline_values8[i] = (byte)(m_spline_values[i] * 255.0);
				}
			}
		}
Example #4
0
 public polygon_ctrl_impl(int np, double point_radius)
     : base(new Vector2())
 {
     m_ellipse          = new MatterHackers.Agg.VertexSource.Ellipse();
     m_polygon          = new ArrayPOD <double>(np * 2);
     m_num_points       = (np);
     m_node             = (-1);
     m_edge             = (-1);
     m_vs               = new simple_polygon_vertex_source(m_polygon.Array, m_num_points, false);
     m_stroke           = new Stroke(m_vs);
     m_point_radius     = (point_radius);
     m_status           = (0);
     m_dx               = (0.0);
     m_dy               = (0.0);
     m_in_polygon_check = (true);
     m_stroke.width(1.0);
 }
 public PolygonControl(int np, double point_radius)
     : base(new Vector2())
 {
     m_ellipse          = new PixelFarm.Agg.VertexSource.Ellipse();
     m_polygon          = new double[np * 2];
     m_num_points       = (np);
     m_node             = (-1);
     m_edge             = (-1);
     m_vs               = new SimplePolygonVertexSource(m_polygon, m_num_points, false);
     m_stroke           = new Stroke(1);
     m_point_radius     = (point_radius);
     m_status           = (0);
     m_dx               = (0.0);
     m_dy               = (0.0);
     m_in_polygon_check = (true);
     m_stroke.Width     = 1;
 }
Example #6
0
        public curve3_ctrl_impl()
            : base(new Vector2())
        {
            m_stroke  = new Stroke(m_curve);
            m_poly    = new polygon_ctrl_impl(3, 5.0);
            m_idx     = 0;
            m_curve   = new Curve3();
            m_ellipse = new MatterHackers.Agg.VertexSource.Ellipse();

            m_poly.in_polygon_check(false);
            m_poly.SetXN(0, 100.0);
            m_poly.SetYN(0, 0.0);
            m_poly.SetXN(1, 100.0);
            m_poly.SetYN(1, 50.0);
            m_poly.SetXN(2, 50.0);
            m_poly.SetYN(2, 100.0);
        }
Example #7
0
		public bezier_ctrl_impl()
			: base(new Vector2(0, 0))
		{
			m_stroke = new Stroke(m_curve);
			m_poly = new polygon_ctrl_impl(4, 5.0);
			m_idx = (0);
			m_ellipse = new MatterHackers.Agg.VertexSource.Ellipse();

			m_poly.in_polygon_check(false);
			m_poly.SetXN(0, 100.0);
			m_poly.SetYN(0, 0.0);
			m_poly.SetXN(1, 100.0);
			m_poly.SetYN(1, 50.0);
			m_poly.SetXN(2, 50.0);
			m_poly.SetYN(2, 100.0);
			m_poly.SetXN(3, 0.0);
			m_poly.SetYN(3, 100.0);
		}
Example #8
0
        public SliderWidget(double x1, double y1, double x2, double y2)
            : base(x1, y1, x2, y2)
        {
            m_border_width = 1.0;
            m_border_extra = ((y2 - y1) / 2);
            m_text_thickness = (1.0);
            m_pdx = (0.0);
            m_mouse_move = false;
            m_value = (0.5);
            m_preview_value = (0.5);
            m_min = (0.0);
            m_max = (1.0);
            m_num_steps = (0);
            m_descending = (false);
            m_ellipse = new VertexSource.Ellipse();
            m_storage = new PathStorage();
            m_text = new GsvText();
            m_text_poly = new StrokeConverter(m_text);

            CalculateBox();

            m_background_color = (new RGBA_Doubles(1.0, 0.9, 0.8));
            m_triangle_color = (new RGBA_Doubles(0.7, 0.6, 0.6));
            m_text_color = (new RGBA_Doubles(0.0, 0.0, 0.0));
            m_pointer_preview_color = (new RGBA_Doubles(0.6, 0.4, 0.4, 0.4));
            m_pointer_color = (new RGBA_Doubles(0.8, 0.0, 0.0, 0.6));
        }
Example #9
0
		public polygon_ctrl_impl(int np, double point_radius)
			: base(new Vector2())
		{
			m_ellipse = new MatterHackers.Agg.VertexSource.Ellipse();
			m_polygon = new ArrayPOD<double>(np * 2);
			m_num_points = (np);
			m_node = (-1);
			m_edge = (-1);
			m_vs = new simple_polygon_vertex_source(m_polygon.Array, m_num_points, false);
			m_stroke = new Stroke(m_vs);
			m_point_radius = (point_radius);
			m_status = (0);
			m_dx = (0.0);
			m_dy = (0.0);
			m_in_polygon_check = (true);
			m_stroke.width(1.0);
		}
Example #10
0
        public override void OnDraw(RendererBase renderer)
        {
            GammaLookUpTable gamma = new GammaLookUpTable(m_gamma.value());
            IBlender NormalBlender = new BlenderBGRA();
            IBlender GammaBlender = new BlenderGammaBGRA(gamma);
            ImageBuffer rasterNormal = new ImageBuffer(NewRenderer().DestImage, NormalBlender);
            ImageBuffer rasterGamma = new ImageBuffer(NewRenderer().DestImage, GammaBlender);
            ImageClippingProxy clippingProxyNormal = new ImageClippingProxy(rasterNormal);
            ImageClippingProxy clippingProxyGamma = new ImageClippingProxy(rasterGamma);

            clippingProxyNormal.clear(new RGBA_Doubles(0,0,0));

            rasterizer_scanline_aa ras = new rasterizer_scanline_aa();
            scanline_packed_8 sl = new scanline_packed_8();

            VertexSource.Ellipse e = new VertexSource.Ellipse();

            // TODO: If you drag the control circles below the bottom of the window we get an exception.  This does not happen in AGG.
            // It needs to be debugged.  Turning on clipping fixes it.  But standard agg works without clipping.  Could be a bigger problem than this.
            //ras.clip_box(0, 0, width(), height());

            // Render two "control" circles
            e.init(m_x[0], m_y[0], 3, 3, 16);
            ras.add_path(e);
            Renderer.RenderSolid(clippingProxyNormal, ras, sl, new RGBA_Bytes(127, 127, 127));
            e.init(m_x[1], m_y[1], 3, 3, 16);
            ras.add_path(e);
            Renderer.RenderSolid(clippingProxyNormal, ras, sl, new RGBA_Bytes(127, 127, 127));

            // Creating a rounded rectangle
            VertexSource.RoundedRect r = new VertexSource.RoundedRect(m_x[0], m_y[0], m_x[1], m_y[1], 10);
            r.normalize_radius();

            // Drawing as an outline
                conv_stroke p = new conv_stroke(r);
                p.width(1.0);
                ras.add_path(p);

                //Renderer.RenderSolid(clippingProxyGamma, ras, sl, new RGBA_Bytes(0, 0, 0));
            Renderer.RenderSolid(clippingProxyGamma, ras, sl, new RGBA_Bytes(255, 1, 1));








            /*            
                    int i;

                    // radial line test
                    //-------------------------
                    dashed_line<rasterizer_type, 
                                renderer_scanline_type, 
                                scanline_type> dash(ras, ren_sl, sl);

                    double cx = width() / 2.0;
                    double cy = height() / 2.0;

                    ren_sl.color(agg::rgba(1.0, 1.0, 1.0, 0.2));
                    for(i = 180; i > 0; i--) 
                    {
                        double n = 2.0 * agg::pi * i / 180.0;
                        dash.draw(cx + min(cx, cy) * sin(n), cy + min(cx, cy) * cos(n),
                                  cx, cy, 
                                  1.0, (i < 90) ? i : 0.0);
                    }


                    typedef agg::gradient_x gradient_func_type;
                    typedef agg::span_interpolator_linear<> interpolator_type;
                    typedef agg::span_allocator<color_type> span_allocator_type;
                    typedef agg::pod_auto_array<color_type, 256> color_array_type;
                    typedef agg::span_gradient<color_type, 
                                               interpolator_type, 
                                               gradient_func_type, 
                                               color_array_type> span_gradient_type;

                    typedef agg::renderer_scanline_aa<renderer_base_type, 
                                                      span_allocator_type,
                                                      span_gradient_type> renderer_gradient_type;

                    gradient_func_type  gradient_func;                   // The gradient function
                    agg::trans_affine   gradient_mtx;                    // Affine transformer
                    interpolator_type   span_interpolator(gradient_mtx); // Span interpolator
                    span_allocator_type span_allocator;                  // Span Allocator
                    color_array_type    gradient_colors;                 // The gradient colors
                    span_gradient_type  span_gradient(span_interpolator, 
                                                      gradient_func, 
                                                      gradient_colors, 
                                                      0, 100);

                    renderer_gradient_type ren_gradient(ren_base, span_allocator, span_gradient);

                    dashed_line<rasterizer_type, 
                                renderer_gradient_type, 
                                scanline_type> dash_gradient(ras, ren_gradient, sl);

                    double x1, y1, x2, y2;

                    for(i = 1; i <= 20; i++)
                    {
                        ren_sl.color(agg::rgba(1,1,1));

                        // integral point sizes 1..20
                        //----------------
                        agg::ellipse ell;
            
                        ell.init(20 + i * (i + 1) + 0.5, 
                                 20.5, 
                                 i / 2.0, 
                                 i / 2.0, 
                                 8 + i);
                        ras.reset();
                        ras.add_path(ell);
                        agg::render_scanlines(ras, sl, ren_sl);
            

                        // fractional point sizes 0..2
                        //----------------
                        ell.init(18 + i * 4 + 0.5, 33 + 0.5, 
                                 i/20.0, i/20.0, 
                                 8);
                        ras.reset();
                        ras.add_path(ell);
                        agg::render_scanlines(ras, sl, ren_sl);


                        // fractional point positioning
                        //---------------
                        ell.init(18 + i * 4 + (i-1) / 10.0 + 0.5, 
                                 27 + (i - 1) / 10.0 + 0.5, 
                                 0.5, 0.5, 8);
                        ras.reset();
                        ras.add_path(ell);
                        agg::render_scanlines(ras, sl, ren_sl);


                        // integral line widths 1..20
                        //----------------
                        fill_color_array(gradient_colors, 
                                         agg::rgba(1,1,1), 
                                         agg::rgba(i % 2, (i % 3) * 0.5, (i % 5) * 0.25));

                        x1 = 20 + i* (i + 1);
                        y1 = 40.5;
                        x2 = 20 + i * (i + 1) + (i - 1) * 4;
                        y2 = 100.5;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, i, 0);


                        fill_color_array(gradient_colors, 
                                         agg::rgba(1,0,0), 
                                         agg::rgba(0,0,1));

                        // fractional line lengths H (red/blue)
                        //----------------
                        x1 = 17.5 + i * 4;
                        y1 = 107;
                        x2 = 17.5 + i * 4 + i/6.66666667;
                        y2 = 107;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, 1.0, 0);


                        // fractional line lengths V (red/blue)
                        //---------------
                        x1 = 18 + i * 4;
                        y1 = 112.5;
                        x2 = 18 + i * 4;
                        y2 = 112.5 + i / 6.66666667;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, 1.0, 0);

                        // fractional line positioning (red)
                        //---------------
                        fill_color_array(gradient_colors, 
                                         agg::rgba(1,0,0), 
                                         agg::rgba(1,1,1));
                        x1 = 21.5;
                        y1 = 120 + (i - 1) * 3.1;
                        x2 = 52.5;
                        y2 = 120 + (i - 1) * 3.1;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, 1.0, 0);


                        // fractional line width 2..0 (green)
                        fill_color_array(gradient_colors, 
                                         agg::rgba(0,1,0), 
                                         agg::rgba(1,1,1));
                        x1 = 52.5;
                        y1 = 118 + i * 3;
                        x2 = 83.5;
                        y2 = 118 + i * 3;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, 2.0 - (i - 1) / 10.0, 0);

                        // stippled fractional width 2..0 (blue)
                        fill_color_array(gradient_colors, 
                                         agg::rgba(0,0,1), 
                                         agg::rgba(1,1,1));
                        x1 = 83.5;
                        y1 = 119 + i * 3;
                        x2 = 114.5;
                        y2 = 119 + i * 3;
                        calc_linear_gradient_transform(x1, y1, x2, y2, gradient_mtx);
                        dash_gradient.draw(x1, y1, x2, y2, 2.0 - (i - 1) / 10.0, 3.0);


                        ren_sl.color(agg::rgba(1,1,1));
                        if(i <= 10)
                        {
                            // integral line width, horz aligned (mipmap test)
                            //-------------------
                            dash.draw(125.5, 119.5 + (i + 2) * (i / 2.0),
                                      135.5, 119.5 + (i + 2) * (i / 2.0),
                                      i, 0.0);
                        }

                        // fractional line width 0..2, 1 px H
                        //-----------------
                        dash.draw(17.5 + i * 4, 192, 18.5 + i * 4, 192, i / 10.0, 0);

                        // fractional line positioning, 1 px H
                        //-----------------
                        dash.draw(17.5 + i * 4 + (i - 1) / 10.0, 186, 
                                  18.5 + i * 4 + (i - 1) / 10.0, 186,
                                  1.0, 0);
                    }


                    // Triangles
                    //---------------
                    for (int i = 1; i <= 13; i++) 
                    {
                        fill_color_array(gradient_colors, 
                                         agg::rgba(1,1,1), 
                                         agg::rgba(i % 2, (i % 3) * 0.5, (i % 5) * 0.25));
                        calc_linear_gradient_transform(width()  - 150, 
                                                       height() - 20 - i * (i + 1.5),
                                                       width()  - 20,  
                                                       height() - 20 - i * (i + 1),
                                                       gradient_mtx);
                        ras.reset();
                        ras.move_to_d(width() - 150, height() - 20 - i * (i + 1.5));
                        ras.line_to_d(width() - 20,  height() - 20 - i * (i + 1));
                        ras.line_to_d(width() - 20,  height() - 20 - i * (i + 2));
                        agg::render_scanlines(ras, sl, ren_gradient);
                    }
             */










            base.OnDraw(renderer);
        }