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