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)); }
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); } } }
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); } } }
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; }
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); }
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); }
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 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); }