plug-ins/ifscompose/ifscompose.[ch] use Pango to draw text.
2003-07-01 Sven Neumann <sven@gimp.org> * plug-ins/ifscompose/ifscompose.[ch] * plug-ins/ifscompose/ifscompose_utils.c: use Pango to draw text. * plug-ins/ifscompose/ifscompose_storage.c: minor code cleanup.
This commit is contained in:

committed by
Sven Neumann

parent
5b181dcf4d
commit
a8f6d6de9b
@ -1,3 +1,10 @@
|
|||||||
|
2003-07-01 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* plug-ins/ifscompose/ifscompose.[ch]
|
||||||
|
* plug-ins/ifscompose/ifscompose_utils.c: use Pango to draw text.
|
||||||
|
|
||||||
|
* plug-ins/ifscompose/ifscompose_storage.c: minor code cleanup.
|
||||||
|
|
||||||
2003-07-01 Sven Neumann <sven@gimp.org>
|
2003-07-01 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
* configure.in: bumped version number to 1.3.17.
|
* configure.in: bumped version number to 1.3.17.
|
||||||
|
@ -99,7 +99,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
IfsComposeVals ifsvals;
|
IfsComposeVals ifsvals;
|
||||||
AffElement **elements;
|
AffElement **elements;
|
||||||
gint *element_selected;
|
gboolean *element_selected;
|
||||||
gint current_element;
|
gint current_element;
|
||||||
} UndoItem;
|
} UndoItem;
|
||||||
|
|
||||||
@ -1560,10 +1560,11 @@ set_current_element (gint index)
|
|||||||
update_values ();
|
update_values ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gboolean
|
||||||
design_area_expose (GtkWidget *widget,
|
design_area_expose (GtkWidget *widget,
|
||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
|
PangoLayout *layout;
|
||||||
gint i;
|
gint i;
|
||||||
gint cx, cy;
|
gint cx, cy;
|
||||||
|
|
||||||
@ -1593,6 +1594,8 @@ design_area_expose (GtkWidget *widget,
|
|||||||
widget->style->fg_gc[widget->state],
|
widget->style->fg_gc[widget->state],
|
||||||
cx, cy - 10, cx, cy + 10);
|
cx, cy - 10, cx, cy + 10);
|
||||||
|
|
||||||
|
layout = gtk_widget_create_pango_layout (widget, NULL);
|
||||||
|
|
||||||
for (i = 0; i < ifsvals.num_elements; i++)
|
for (i = 0; i < ifsvals.num_elements; i++)
|
||||||
{
|
{
|
||||||
aff_element_draw (elements[i], element_selected[i],
|
aff_element_draw (elements[i], element_selected[i],
|
||||||
@ -1601,9 +1604,11 @@ design_area_expose (GtkWidget *widget,
|
|||||||
ifsDesign->pixmap,
|
ifsDesign->pixmap,
|
||||||
widget->style->fg_gc[widget->state],
|
widget->style->fg_gc[widget->state],
|
||||||
ifsDesign->selected_gc,
|
ifsDesign->selected_gc,
|
||||||
gtk_style_get_font (ifsDesign->area->style));
|
layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_unref (layout);
|
||||||
|
|
||||||
gdk_draw_drawable (widget->window,
|
gdk_draw_drawable (widget->window,
|
||||||
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||||
ifsDesign->pixmap,
|
ifsDesign->pixmap,
|
||||||
@ -1614,7 +1619,7 @@ design_area_expose (GtkWidget *widget,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gboolean
|
||||||
design_area_configure (GtkWidget *widget,
|
design_area_configure (GtkWidget *widget,
|
||||||
GdkEventConfigure *event)
|
GdkEventConfigure *event)
|
||||||
{
|
{
|
||||||
@ -1682,7 +1687,7 @@ design_area_button_press (GtkWidget *widget,
|
|||||||
|| !element_selected[ifsD->current_element] ))
|
|| !element_selected[ifsD->current_element] ))
|
||||||
{
|
{
|
||||||
for (i = 0; i < ifsvals.num_elements; i++)
|
for (i = 0; i < ifsvals.num_elements; i++)
|
||||||
element_selected[i] = 0;
|
element_selected[i] = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifsD->current_element >= 0)
|
if (ifsD->current_element >= 0)
|
||||||
@ -1883,7 +1888,8 @@ undo_begin (void)
|
|||||||
|
|
||||||
undo_ring[new_index].ifsvals = ifsvals;
|
undo_ring[new_index].ifsvals = ifsvals;
|
||||||
undo_ring[new_index].elements = g_new (AffElement *,ifsvals.num_elements);
|
undo_ring[new_index].elements = g_new (AffElement *,ifsvals.num_elements);
|
||||||
undo_ring[new_index].element_selected = g_new (gint, ifsvals.num_elements);
|
undo_ring[new_index].element_selected = g_new (gboolean,
|
||||||
|
ifsvals.num_elements);
|
||||||
undo_ring[new_index].current_element = ifsD->current_element;
|
undo_ring[new_index].current_element = ifsD->current_element;
|
||||||
|
|
||||||
for (i = 0; i < ifsvals.num_elements; i++)
|
for (i = 0; i < ifsvals.num_elements; i++)
|
||||||
@ -1920,7 +1926,7 @@ undo_exchange (gint el)
|
|||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
AffElement **telements;
|
AffElement **telements;
|
||||||
gint *tselected;
|
gboolean *tselected;
|
||||||
IfsComposeVals tifsvals;
|
IfsComposeVals tifsvals;
|
||||||
gint tcurrent;
|
gint tcurrent;
|
||||||
gdouble width = ifsDesign->area->allocation.width;
|
gdouble width = ifsDesign->area->allocation.width;
|
||||||
@ -2509,7 +2515,7 @@ ifs_compose_set_defaults (void)
|
|||||||
ifsvals.num_elements = 3;
|
ifsvals.num_elements = 3;
|
||||||
elements = g_realloc (elements, ifsvals.num_elements * sizeof(AffElement *));
|
elements = g_realloc (elements, ifsvals.num_elements * sizeof(AffElement *));
|
||||||
element_selected = g_realloc (element_selected,
|
element_selected = g_realloc (element_selected,
|
||||||
ifsvals.num_elements * sizeof(gint));
|
ifsvals.num_elements * sizeof(gboolean));
|
||||||
|
|
||||||
elements[0] = aff_element_new (0.3, 0.37 * ifsvals.aspect_ratio, &color,
|
elements[0] = aff_element_new (0.3, 0.37 * ifsvals.aspect_ratio, &color,
|
||||||
++count_for_naming);
|
++count_for_naming);
|
||||||
@ -2646,7 +2652,7 @@ ifsfile_replace_ifsvals (IfsComposeVals *new_ifsvals,
|
|||||||
}
|
}
|
||||||
|
|
||||||
element_selected = g_realloc (element_selected,
|
element_selected = g_realloc (element_selected,
|
||||||
ifsvals.num_elements * sizeof(gint));
|
ifsvals.num_elements * sizeof(gboolean));
|
||||||
for (i = 0; i < ifsvals.num_elements; i++)
|
for (i = 0; i < ifsvals.num_elements; i++)
|
||||||
element_selected[i] = FALSE;
|
element_selected[i] = FALSE;
|
||||||
|
|
||||||
@ -2791,7 +2797,7 @@ ifs_compose_new_callback (GtkWidget *widget,
|
|||||||
ifsvals.num_elements++;
|
ifsvals.num_elements++;
|
||||||
elements = g_realloc (elements, ifsvals.num_elements * sizeof (AffElement *));
|
elements = g_realloc (elements, ifsvals.num_elements * sizeof (AffElement *));
|
||||||
element_selected = g_realloc (element_selected,
|
element_selected = g_realloc (element_selected,
|
||||||
ifsvals.num_elements * sizeof (gint));
|
ifsvals.num_elements * sizeof (gboolean));
|
||||||
|
|
||||||
for (i = 0; i < ifsvals.num_elements-1; i++)
|
for (i = 0; i < ifsvals.num_elements-1; i++)
|
||||||
element_selected[i] = FALSE;
|
element_selected[i] = FALSE;
|
||||||
@ -2801,7 +2807,7 @@ ifs_compose_new_callback (GtkWidget *widget,
|
|||||||
set_current_element (ifsvals.num_elements-1);
|
set_current_element (ifsvals.num_elements-1);
|
||||||
|
|
||||||
ifsD->selected_orig = g_realloc (ifsD->selected_orig,
|
ifsD->selected_orig = g_realloc (ifsD->selected_orig,
|
||||||
ifsvals.num_elements*sizeof(AffElement));
|
ifsvals.num_elements * sizeof(AffElement));
|
||||||
aff_element_compute_trans (elem, width, height,
|
aff_element_compute_trans (elem, width, height,
|
||||||
ifsvals.center_x, ifsvals.center_y);
|
ifsvals.center_x, ifsvals.center_y);
|
||||||
|
|
||||||
|
@ -117,11 +117,14 @@ void aff_element_compute_boundary (AffElement *elem, gint width,
|
|||||||
gint height,
|
gint height,
|
||||||
AffElement **elements,
|
AffElement **elements,
|
||||||
int num_elements);
|
int num_elements);
|
||||||
void aff_element_draw (AffElement *elem, gint selected,
|
void aff_element_draw (AffElement *elem,
|
||||||
gint width, gint height,
|
gint selected,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
GdkDrawable *win,
|
GdkDrawable *win,
|
||||||
GdkGC *normal_gc,GdkGC *selected_gc,
|
GdkGC *normal_gc,
|
||||||
GdkFont *font);
|
GdkGC *selected_gc,
|
||||||
|
PangoLayout *layout);
|
||||||
|
|
||||||
|
|
||||||
void ifs_render (AffElement **elements, gint num_elements,
|
void ifs_render (AffElement **elements, gint num_elements,
|
||||||
@ -129,8 +132,9 @@ void ifs_render (AffElement **elements, gint num_elements,
|
|||||||
IfsComposeVals *vals, gint band_y, gint band_height,
|
IfsComposeVals *vals, gint band_y, gint band_height,
|
||||||
guchar *data, guchar *mask, guchar *nhits, gint preview);
|
guchar *data, guchar *mask, guchar *nhits, gint preview);
|
||||||
|
|
||||||
char * ifsvals_stringify (IfsComposeVals *vals, AffElement **elements);
|
gchar * ifsvals_stringify (IfsComposeVals *vals,
|
||||||
gboolean ifsvals_parse_string (char *str,
|
AffElement **elements);
|
||||||
|
gboolean ifsvals_parse_string (const gchar *str,
|
||||||
IfsComposeVals *vals,
|
IfsComposeVals *vals,
|
||||||
AffElement ***elements);
|
AffElement ***elements);
|
||||||
|
|
||||||
|
@ -135,7 +135,8 @@ ifsvals_parse_color (GScanner *scanner,
|
|||||||
/* Parse a float which (unlike G_TOKEN_FLOAT) can be negative
|
/* Parse a float which (unlike G_TOKEN_FLOAT) can be negative
|
||||||
*/
|
*/
|
||||||
static GTokenType
|
static GTokenType
|
||||||
parse_genuine_float (GScanner *scanner, gdouble *result)
|
parse_genuine_float (GScanner *scanner,
|
||||||
|
gdouble *result)
|
||||||
{
|
{
|
||||||
gboolean negate = FALSE;
|
gboolean negate = FALSE;
|
||||||
GTokenType token;
|
GTokenType token;
|
||||||
@ -158,7 +159,8 @@ parse_genuine_float (GScanner *scanner, gdouble *result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GTokenType
|
static GTokenType
|
||||||
ifsvals_parse_element (GScanner *scanner, AffElementVals *result)
|
ifsvals_parse_element (GScanner *scanner,
|
||||||
|
AffElementVals *result)
|
||||||
{
|
{
|
||||||
GTokenType token;
|
GTokenType token;
|
||||||
GTokenType expected_token;
|
GTokenType expected_token;
|
||||||
@ -297,7 +299,9 @@ ifsvals_parse_element (GScanner *scanner, AffElementVals *result)
|
|||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
ifsvals_parse (GScanner *scanner, IfsComposeVals *vals, AffElement ***elements)
|
ifsvals_parse (GScanner *scanner,
|
||||||
|
IfsComposeVals *vals,
|
||||||
|
AffElement ***elements)
|
||||||
{
|
{
|
||||||
GTokenType token, expected_token;
|
GTokenType token, expected_token;
|
||||||
AffElement *el;
|
AffElement *el;
|
||||||
@ -306,7 +310,7 @@ ifsvals_parse (GScanner *scanner, IfsComposeVals *vals, AffElement ***elements)
|
|||||||
|
|
||||||
GList *el_list = NULL;
|
GList *el_list = NULL;
|
||||||
GList *tmp_list;
|
GList *tmp_list;
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
new_vals = *vals;
|
new_vals = *vals;
|
||||||
new_vals.num_elements = 0;
|
new_vals.num_elements = 0;
|
||||||
@ -413,7 +417,9 @@ ifsvals_parse (GScanner *scanner, IfsComposeVals *vals, AffElement ***elements)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ifsvals_parse_string (char *str, IfsComposeVals *vals, AffElement ***elements)
|
ifsvals_parse_string (const gchar *str,
|
||||||
|
IfsComposeVals *vals,
|
||||||
|
AffElement ***elements)
|
||||||
{
|
{
|
||||||
GScanner *scanner = g_scanner_new (NULL);
|
GScanner *scanner = g_scanner_new (NULL);
|
||||||
gboolean result;
|
gboolean result;
|
||||||
@ -447,13 +453,16 @@ ifsvals_parse_string (char *str, IfsComposeVals *vals, AffElement ***elements)
|
|||||||
* The stringified result (free with g_free)
|
* The stringified result (free with g_free)
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
char *
|
gchar *
|
||||||
ifsvals_stringify (IfsComposeVals *vals, AffElement **elements)
|
ifsvals_stringify (IfsComposeVals *vals,
|
||||||
|
AffElement **elements)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
|
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
|
||||||
gchar cbuf[3][G_ASCII_DTOSTR_BUF_SIZE];
|
gchar cbuf[3][G_ASCII_DTOSTR_BUF_SIZE];
|
||||||
GString *result = g_string_new (NULL);
|
GString *result;
|
||||||
|
|
||||||
|
result = g_string_new (NULL);
|
||||||
|
|
||||||
g_string_append_printf (result, "iterations %d\n", vals->iterations);
|
g_string_append_printf (result, "iterations %d\n", vals->iterations);
|
||||||
g_string_append_printf (result, "max_memory %d\n", vals->max_memory);
|
g_string_append_printf (result, "max_memory %d\n", vals->max_memory);
|
||||||
|
@ -25,12 +25,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#warning FIXME: GDK_DISABLE_DEPRECATED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef GDK_DISABLE_DEPRECATED
|
|
||||||
|
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
|
|
||||||
#include <libgimp/gimp.h>
|
#include <libgimp/gimp.h>
|
||||||
@ -712,32 +706,35 @@ aff_element_compute_boundary (AffElement *elem,
|
|||||||
|
|
||||||
void
|
void
|
||||||
aff_element_draw (AffElement *elem,
|
aff_element_draw (AffElement *elem,
|
||||||
gint selected,
|
gboolean selected,
|
||||||
gint width,
|
gint width,
|
||||||
gint height,
|
gint height,
|
||||||
GdkDrawable *win,
|
GdkDrawable *win,
|
||||||
GdkGC *normal_gc,
|
GdkGC *normal_gc,
|
||||||
GdkGC *selected_gc,
|
GdkGC *selected_gc,
|
||||||
GdkFont *font)
|
PangoLayout *layout)
|
||||||
{
|
{
|
||||||
|
PangoRectangle rect;
|
||||||
GdkGC *gc;
|
GdkGC *gc;
|
||||||
gint string_width = gdk_string_width (font,elem->name);
|
|
||||||
gint string_height = font->ascent + font->descent + 2;
|
pango_layout_set_text (layout, elem->name, -1);
|
||||||
|
pango_layout_get_pixel_extents (layout, NULL, &rect);
|
||||||
|
|
||||||
if (selected)
|
if (selected)
|
||||||
gc = selected_gc;
|
gc = selected_gc;
|
||||||
else
|
else
|
||||||
gc = normal_gc;
|
gc = normal_gc;
|
||||||
|
|
||||||
gdk_draw_string(win,font,gc,
|
gdk_draw_layout (win, gc,
|
||||||
elem->v.x*width-string_width/2,
|
elem->v.x * width - rect.width / 2,
|
||||||
elem->v.y*width+string_height/2,elem->name);
|
elem->v.y * width + rect.height / 2,
|
||||||
|
layout);
|
||||||
|
|
||||||
if (elem->click_boundary != elem->draw_boundary)
|
if (elem->click_boundary != elem->draw_boundary)
|
||||||
gdk_draw_polygon(win,normal_gc,FALSE,elem->click_boundary->points,
|
gdk_draw_polygon (win, normal_gc, FALSE, elem->click_boundary->points,
|
||||||
elem->click_boundary->npoints);
|
elem->click_boundary->npoints);
|
||||||
|
|
||||||
gdk_draw_polygon(win,gc,FALSE,elem->draw_boundary->points,
|
gdk_draw_polygon (win, gc, FALSE, elem->draw_boundary->points,
|
||||||
elem->draw_boundary->npoints);
|
elem->draw_boundary->npoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -914,7 +911,7 @@ ifs_render (AffElement **elements,
|
|||||||
by roundoff*/
|
by roundoff*/
|
||||||
/* create the brush */
|
/* create the brush */
|
||||||
if (!preview)
|
if (!preview)
|
||||||
brush = create_brush(vals,&brush_size,&brush_offset);
|
brush = create_brush (vals,&brush_size,&brush_offset);
|
||||||
|
|
||||||
x = y = 0;
|
x = y = 0;
|
||||||
r = g = b = 0;
|
r = g = b = 0;
|
||||||
|
Reference in New Issue
Block a user