diff --git a/ChangeLog b/ChangeLog index 69f1a07000..359253cd74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-11-16 DindinX + + * plug-ins/gfig/gfig-arc.c + * plug-ins/gfig/gfig-bezier.c + * plug-ins/gfig/gfig-circle.c + * plug-ins/gfig/gfig-dialog.c + * plug-ins/gfig/gfig-ellipse.c + * plug-ins/gfig/gfig-line.c + * plug-ins/gfig/gfig-poly.c + * plug-ins/gfig/gfig-spiral.c + * plug-ins/gfig/gfig-star.c + * plug-ins/gfig/gfig-style.c + * plug-ins/gfig/gfig-style.h + * plug-ins/gfig/gfig-types.h + * plug-ins/gfig/gfig.h: added a toggle so we can now choose to stroke + the painting or not. + 2004-11-16 DindinX * plug-ins/gfig/gfig-dialog.c: implemented the gradient fill, using a diff --git a/plug-ins/gfig/gfig-arc.c b/plug-ins/gfig/gfig-arc.c index aed2123cad..e80402b270 100644 --- a/plug-ins/gfig/gfig-arc.c +++ b/plug-ins/gfig/gfig-arc.c @@ -498,28 +498,12 @@ d_paint_arc (GfigObject *obj) reverse_pairs_list (&line_pnts[0], i/2); /* One go */ - if (selvals.painttype == PAINT_BRUSH_TYPE) + if (obj->style.paint_type == PAINT_BRUSH_TYPE) { gfig_paint (selvals.brshtype, gfig_context->drawable_id, i, line_pnts); } - else - { - if (selopt.as_pie) - { - /* Add center point - cause a pie like selection... */ - line_pnts[i++] = center_pnt.x; - line_pnts[i++] = center_pnt.y; - } - - gimp_free_select (gfig_context->image_id, - i, line_pnts, - selopt.type, - selopt.antia, - selopt.feather, - selopt.feather_radius); - } g_free (line_pnts); } diff --git a/plug-ins/gfig/gfig-bezier.c b/plug-ins/gfig/gfig-bezier.c index e2b6af9dc6..e152845a73 100644 --- a/plug-ins/gfig/gfig-bezier.c +++ b/plug-ins/gfig/gfig-bezier.c @@ -260,21 +260,12 @@ d_paint_bezier (GfigObject *obj) scale_to_xy (&line_pnts[0], i / 2); /* One go */ - if (selvals.painttype == PAINT_BRUSH_TYPE) + if (obj->style.paint_type == PAINT_BRUSH_TYPE) { gfig_paint (selvals.brshtype, gfig_context->drawable_id, i, line_pnts); } - else - { - gimp_free_select (gfig_context->image_id, - i, line_pnts, - selopt.type, - selopt.antia, - selopt.feather, - selopt.feather_radius); - } g_free (bz_line_pnts); /* Don't free line_pnts - may need again */ diff --git a/plug-ins/gfig/gfig-circle.c b/plug-ins/gfig/gfig-circle.c index 61a48f9740..ddde296289 100644 --- a/plug-ins/gfig/gfig-circle.c +++ b/plug-ins/gfig/gfig-circle.c @@ -85,14 +85,6 @@ d_paint_circle (GfigObject *obj) g_assert (obj != NULL); - if (selvals.approxcircles) - { - obj->type_data = 600; - - d_paint_poly (obj); - return; - } - /* Drawing circles is hard . * 1) select circle * 2) stroke it @@ -131,8 +123,8 @@ d_paint_circle (GfigObject *obj) paint_layer_fill (); - gimp_edit_stroke (gfig_context->drawable_id); - + if (obj->style.paint_type == PAINT_BRUSH_TYPE) + gimp_edit_stroke (gfig_context->drawable_id); } static GfigObject* diff --git a/plug-ins/gfig/gfig-dialog.c b/plug-ins/gfig/gfig-dialog.c index b279c25583..91e857fdf1 100644 --- a/plug-ins/gfig/gfig-dialog.c +++ b/plug-ins/gfig/gfig-dialog.c @@ -115,7 +115,6 @@ SelectItVals selvals = FALSE, /* reverse lines */ TRUE, /* Scale to image when painting */ 1.0, /* Scale to image fp */ - FALSE, /* Approx circles by drawing lines */ BRUSH_BRUSH_TYPE, /* Default to use a brush */ LINE /* Initial object type */ }; @@ -373,7 +372,18 @@ gfig_dialog (void) gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); - /* foreground color button in Style frame*/ + gfig_context->paint_type_toggle = + gtk_check_button_new_with_mnemonic (_("Stro_ke")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gfig_context->paint_type_toggle), + selvals.painttype); + g_signal_connect (gfig_context->paint_type_toggle, "toggled", + G_CALLBACK (set_paint_type_callback), + NULL); + gtk_box_pack_start (GTK_BOX (vbox), gfig_context->paint_type_toggle, + FALSE, FALSE, 0); + gtk_widget_show (gfig_context->paint_type_toggle); + + /* foreground color button in Stroke frame*/ gfig_context->fg_color = g_new (GimpRGB, 1); gfig_context->fg_color_button = gimp_color_button_new ("Foreground", SEL_BUTTON_WIDTH, @@ -389,7 +399,7 @@ gfig_dialog (void) FALSE, FALSE, 0); gtk_widget_show (gfig_context->fg_color_button); - /* brush selector in Style frame */ + /* brush selector in Stroke frame */ gfig_context->brush_select = gimp_brush_select_widget_new ("Brush", gfig_context->current_style->brush_name, -1, -1, -1, @@ -1720,6 +1730,8 @@ paint_layer_fill (void) 0.0, 0.0, /* (x1, y1) - ignored */ 0.0, 0.0); /* (x2, y2) - ignored */ return; + default: + return; } gimp_edit_bucket_fill (gfig_context->drawable_id, diff --git a/plug-ins/gfig/gfig-ellipse.c b/plug-ins/gfig/gfig-ellipse.c index 0c5b215a61..9787958635 100644 --- a/plug-ins/gfig/gfig-ellipse.c +++ b/plug-ins/gfig/gfig-ellipse.c @@ -82,120 +82,6 @@ d_draw_ellipse (GfigObject * obj) gfig_draw_arc (center_pnt->pnt.x, center_pnt->pnt.y, bound_wx, bound_wy, 0, 360); } -static void -d_paint_approx_ellipse (GfigObject *obj) -{ - /* first point center */ - /* Next point is radius */ - gdouble *line_pnts; - gint seg_count = 0; - gint i = 0; - DobjPoints *center_pnt; - DobjPoints *radius_pnt; - gdouble a_axis; - gdouble b_axis; - gdouble ang_grid; - gdouble ang_loop; - gdouble radius; - gint loop; - GdkPoint first_pnt, last_pnt; - gboolean first = TRUE; - - g_assert (obj != NULL); - - /* count - add one to close polygon */ - seg_count = 600; - - center_pnt = obj->points; - - if (!center_pnt || !seg_count) - return; /* no-line */ - - line_pnts = g_new0 (gdouble, 2 * seg_count + 1); - - /* Go around all the points drawing a line from one to the next */ - - radius_pnt = center_pnt->next; /* this defines the vetices */ - - /* Have center and radius - get lines */ - a_axis = ((gdouble) (radius_pnt->pnt.x - center_pnt->pnt.x)); - b_axis = ((gdouble) (radius_pnt->pnt.y - center_pnt->pnt.y)); - - /* Lines */ - ang_grid = 2 * G_PI / (gdouble) 600; - - for (loop = 0; loop < 600; loop++) - { - gdouble lx, ly; - GdkPoint calc_pnt; - - ang_loop = (gdouble)loop * ang_grid; - - radius = (a_axis * b_axis / - (sqrt (cos (ang_loop) * cos (ang_loop) * - (b_axis * b_axis - a_axis * a_axis) + a_axis * a_axis))); - - lx = radius * cos (ang_loop); - ly = radius * sin (ang_loop); - - calc_pnt.x = RINT (lx + center_pnt->pnt.x); - calc_pnt.y = RINT (ly + center_pnt->pnt.y); - - /* Miss out duped pnts */ - if (!first) - { - if (calc_pnt.x == last_pnt.x && calc_pnt.y == last_pnt.y) - { - continue; - } - } - - line_pnts[i++] = calc_pnt.x; - line_pnts[i++] = calc_pnt.y; - last_pnt = calc_pnt; - - if (first) - { - first_pnt = calc_pnt; - first = FALSE; - } - } - - line_pnts[i++] = first_pnt.x; - line_pnts[i++] = first_pnt.y; - - /* Reverse line if approp */ - if (selvals.reverselines) - reverse_pairs_list (&line_pnts[0], i / 2); - - /* Scale before drawing */ - if (selvals.scaletoimage) - scale_to_original_xy (&line_pnts[0], i / 2); - else - scale_to_xy (&line_pnts[0], i / 2); - - /* One go */ - if (selvals.painttype == PAINT_BRUSH_TYPE) - { - gfig_paint (selvals.brshtype, - gfig_context->drawable_id, - i, line_pnts); - } - else - { - gimp_free_select (gfig_context->image_id, - i, line_pnts, - selopt.type, - selopt.antia, - selopt.feather, - selopt.feather_radius); - } - - g_free (line_pnts); -} - - - static void d_paint_ellipse (GfigObject *obj) { @@ -214,12 +100,6 @@ d_paint_ellipse (GfigObject *obj) g_assert (obj != NULL); - if (selvals.approxcircles) - { - d_paint_approx_ellipse (obj); - return; - } - center_pnt = obj->points; if (!center_pnt) @@ -266,7 +146,8 @@ d_paint_ellipse (GfigObject *obj) paint_layer_fill (); - gimp_edit_stroke (gfig_context->drawable_id); + if (obj->style.paint_type == PAINT_BRUSH_TYPE) + gimp_edit_stroke (gfig_context->drawable_id); } static GfigObject * diff --git a/plug-ins/gfig/gfig-line.c b/plug-ins/gfig/gfig-line.c index 964c8c95bb..4c02e1dec6 100644 --- a/plug-ins/gfig/gfig-line.c +++ b/plug-ins/gfig/gfig-line.c @@ -110,21 +110,12 @@ d_paint_line (GfigObject *obj) scale_to_xy (&line_pnts[0], i/2); /* One go */ - if (selvals.painttype == PAINT_BRUSH_TYPE) + if (obj->style.paint_type == PAINT_BRUSH_TYPE) { gfig_paint (selvals.brshtype, gfig_context->drawable_id, seg_count * 2, line_pnts); } - else - { - gimp_free_select (gfig_context->image_id, - seg_count * 2, line_pnts, - selopt.type, - selopt.antia, - selopt.feather, - selopt.feather_radius); - } g_free (line_pnts); } diff --git a/plug-ins/gfig/gfig-poly.c b/plug-ins/gfig/gfig-poly.c index a0851cbbe1..fe07140a14 100644 --- a/plug-ins/gfig/gfig-poly.c +++ b/plug-ins/gfig/gfig-poly.c @@ -242,7 +242,8 @@ d_paint_poly (GfigObject *obj) paint_layer_fill (); - gimp_edit_stroke (gfig_context->drawable_id); + if (obj->style.paint_type == PAINT_BRUSH_TYPE) + gimp_edit_stroke (gfig_context->drawable_id); g_free (line_pnts); } diff --git a/plug-ins/gfig/gfig-spiral.c b/plug-ins/gfig/gfig-spiral.c index e0c7a82fed..c0462e23b4 100644 --- a/plug-ins/gfig/gfig-spiral.c +++ b/plug-ins/gfig/gfig-spiral.c @@ -242,21 +242,12 @@ d_paint_spiral (GfigObject *obj) scale_to_xy (&line_pnts[0], i / 2); /* One go */ - if (selvals.painttype == PAINT_BRUSH_TYPE) + if (obj->style.paint_type == PAINT_BRUSH_TYPE) { gfig_paint (selvals.brshtype, gfig_context->drawable_id, i, line_pnts); } - else - { - gimp_free_select (gfig_context->image_id, - i, line_pnts, - selopt.type, - selopt.antia, - selopt.feather, - selopt.feather_radius); - } g_free (line_pnts); } diff --git a/plug-ins/gfig/gfig-star.c b/plug-ins/gfig/gfig-star.c index b4e5ac8e48..b369dbfe06 100644 --- a/plug-ins/gfig/gfig-star.c +++ b/plug-ins/gfig/gfig-star.c @@ -299,7 +299,8 @@ d_paint_star (GfigObject *obj) paint_layer_fill (); - gimp_edit_stroke (gfig_context->drawable_id); + if (obj->style.paint_type == PAINT_BRUSH_TYPE) + gimp_edit_stroke (gfig_context->drawable_id); g_free (line_pnts); } diff --git a/plug-ins/gfig/gfig-style.c b/plug-ins/gfig/gfig-style.c index 989dbf1360..831c3ac583 100644 --- a/plug-ins/gfig/gfig-style.c +++ b/plug-ins/gfig/gfig-style.c @@ -430,6 +430,18 @@ set_background_callback (GimpColorButton *button, gfig_paint_callback (); } +void +set_paint_type_callback (GtkToggleButton *toggle, + gpointer data) +{ + gboolean paint_type; + + paint_type = gtk_toggle_button_get_active (toggle); + gfig_context->default_style.paint_type = paint_type; + gfig_context->current_style->paint_type = paint_type; + gfig_paint_callback (); +} + /* * gfig_brush_changed_callback() is the callback for the brush * selector widget. It reads the brush name from the widget, and @@ -526,6 +538,7 @@ gfig_style_copy (Style *style1, style1->pattern = g_strdup (style0->pattern); style1->fill_type = style0->fill_type; style1->fill_opacity = style0->fill_opacity; + style1->paint_type = style0->paint_type; } /* @@ -648,6 +661,8 @@ gfig_style_set_context_from_style (Style *style) (gint) style->fill_type); gfig_context->enable_repaint = enable_repaint; + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gfig_context->paint_type_toggle), + style->paint_type); } /* @@ -685,6 +700,9 @@ gfig_style_set_style_from_context (Style *style) /* FIXME when there is an opacity control widget to read */ style->fill_opacity = 100.; + + style->paint_type = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gfig_context->paint_type_toggle)); } void diff --git a/plug-ins/gfig/gfig-style.h b/plug-ins/gfig/gfig-style.h index dedf107c7c..b5aafae521 100644 --- a/plug-ins/gfig/gfig-style.h +++ b/plug-ins/gfig/gfig-style.h @@ -55,6 +55,8 @@ void set_foreground_callback (GimpColorButton *button, void set_background_callback (GimpColorButton *button, gpointer data); +void set_paint_type_callback (GtkToggleButton *toggle, + gpointer data); void gfig_brush_changed_callback (const gchar *brush_name, diff --git a/plug-ins/gfig/gfig-types.h b/plug-ins/gfig/gfig-types.h index ac55d8b4d9..b94a2d8992 100644 --- a/plug-ins/gfig/gfig-types.h +++ b/plug-ins/gfig/gfig-types.h @@ -73,9 +73,8 @@ typedef enum typedef enum { - PAINT_BRUSH_TYPE = 0, - PAINT_SELECTION_TYPE, - PAINT_SELECTION_FILL_TYPE + PAINT_NONE = 0, + PAINT_BRUSH_TYPE = 1 } PaintType; typedef enum diff --git a/plug-ins/gfig/gfig.h b/plug-ins/gfig/gfig.h index dd7133eca0..d6d5b8d8cd 100644 --- a/plug-ins/gfig/gfig.h +++ b/plug-ins/gfig/gfig.h @@ -89,7 +89,6 @@ typedef struct gboolean reverselines; gboolean scaletoimage; gdouble scaletoimagefp; - gboolean approxcircles; BrushType brshtype; DobjType otype; } SelectItVals; @@ -144,6 +143,7 @@ typedef struct GtkWidget *pattern_select; GtkWidget *gradient_select; GtkWidget *fillstyle_combo; + GtkWidget *paint_type_toggle; GimpRGB *fg_color; GimpRGB *bg_color; gboolean enable_repaint;