diff --git a/ChangeLog b/ChangeLog index f86fbd491c..12b2fe14cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-08-28 Larry Ewing + + * app/text/gimptext-vectors.c (conicto): interpolate the position + of the cubic control points correctly and set the previous control + point. + (cubicto): set the previous control point to the new value then + add remaining points. + 2003-08-28 Manish Singh * plug-ins/common/screenshot.c: cleanups. sizeof() isn't valid @@ -17,6 +25,7 @@ * app/gui/grid-dialog.c * plug-ins/common/CML_explorer.c: cleanup, remove unnecessary casts. +>>>>>>> 1.6232 2003-08-28 Sven Neumann * configure.in: bumped version number to 1.3.20. @@ -177,6 +186,7 @@ * app/pdb/layer_cmds.c: regenerated. +>>>>>>> 1.6230 2003-08-27 Sven Neumann * app/widgets/gimpitemfactory.c (gimp_item_factory_translate_func): diff --git a/app/text/gimptext-vectors.c b/app/text/gimptext-vectors.c index a5cc2e885e..1dc1777a0b 100644 --- a/app/text/gimptext-vectors.c +++ b/app/text/gimptext-vectors.c @@ -32,6 +32,7 @@ #include "vectors/gimpbezierstroke.h" #include "vectors/gimpvectors.h" +#include "vectors/gimpanchor.h" #include "gimptext.h" #include "gimptext-private.h" @@ -45,7 +46,6 @@ #define FT_GLYPH_FORMAT_OUTLINE ft_glyph_format_outline #endif - typedef struct _RenderContext RenderContext; struct _RenderContext @@ -134,10 +134,10 @@ moveto (FT_Vector *to, &coords, NULL, EXTEND_SIMPLE); context->anchor = gimp_bezier_stroke_extend (context->stroke, - &coords, context->anchor, EXTEND_SIMPLE); + &coords, context->anchor, EXTEND_SIMPLE); context->anchor = gimp_bezier_stroke_extend (context->stroke, - &coords, context->anchor, EXTEND_SIMPLE); + &coords, context->anchor, EXTEND_SIMPLE); return 0; } @@ -172,12 +172,15 @@ lineto (FT_Vector *to, } static gint -conicto (FT_Vector *control, +conicto (FT_Vector *ftcontrol, FT_Vector *to, gpointer data) { RenderContext *context = (RenderContext *) data; GimpCoords coords; + GimpCoords control; + GimpCoords last; + GList *l; #if TEXT_DEBUG g_printerr ("conicto %f, %f\n", to->x / 64.0, to->y / 64.0); @@ -185,21 +188,47 @@ conicto (FT_Vector *control, if (! context->stroke) return 0; + + gimp_text_vector_coords (context, ftcontrol, &control); - gimp_text_vector_coords (context, control, &coords); + last = control; + /* Find the last endpoint */ + for (l = g_list_last (context->stroke->anchors); l; l = l->prev) + { + GimpAnchor *anchor = l->data; + + if (anchor->type == GIMP_ANCHOR_ANCHOR) + { + last = anchor->position; + break; + } + } + + /* interpolate the cubic control point */ + coords = last; + coords.x = (last.x + 2 * control.x) * (1.0 / 3.0); + coords.y = (last.y + 2 * control.y) * (1.0 / 3.0); + + context->anchor->position = coords; + + gimp_text_vector_coords (context, to, &last); + + /* interpolate the cubic control point */ + coords = last; + coords.x = (last.x + 2 * control.x) * (1.0 / 3.0); + coords.y = (last.y + 2 * control.y) * (1.0 / 3.0); + context->anchor = gimp_bezier_stroke_extend (context->stroke, &coords, context->anchor, EXTEND_SIMPLE); - gimp_text_vector_coords (context, to, &coords); - context->anchor = gimp_bezier_stroke_extend (context->stroke, - &coords, context->anchor, EXTEND_SIMPLE); + &last, context->anchor, EXTEND_SIMPLE); context->anchor = gimp_bezier_stroke_extend (context->stroke, - &coords, context->anchor, EXTEND_SIMPLE); + &last, context->anchor, EXTEND_SIMPLE); return 0; } @@ -222,6 +251,10 @@ cubicto (FT_Vector *control1, gimp_text_vector_coords (context, control1, &coords); + context->anchor->position = coords; + + gimp_text_vector_coords (context, control2, &coords); + context->anchor = gimp_bezier_stroke_extend (context->stroke, &coords, context->anchor, EXTEND_SIMPLE); @@ -231,9 +264,6 @@ cubicto (FT_Vector *control1, context->anchor = gimp_bezier_stroke_extend (context->stroke, &coords, context->anchor, EXTEND_SIMPLE); - - gimp_text_vector_coords (context, control2, &coords); - context->anchor = gimp_bezier_stroke_extend (context->stroke, &coords, context->anchor, EXTEND_SIMPLE);