mirror of https://github.com/GNOME/gimp.git
app/text/Makefile.am new files that hold yet unused GimpItem transform
2003-08-15 Sven Neumann <sven@gimp.org> * app/text/Makefile.am * app/text/gimptextlayer-transform.[ch]: new files that hold yet unused GimpItem transform methods. * app/text/gimptextlayer.[ch]: export gimp_text_layer_render(). * app/text/gimptext-bitmap.[ch] * app/text/gimptext-private.h * app/text/gimptext-vectors.c * app/text/gimptextlayout-render.c: use the transformation matrix. This doesn't change anything since it's still always the identity matrix.
This commit is contained in:
parent
75f1f8161f
commit
5988e8967e
21
ChangeLog
21
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2003-08-15 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/text/Makefile.am
|
||||
* app/text/gimptextlayer-transform.[ch]: new files that hold yet
|
||||
unused GimpItem transform methods.
|
||||
|
||||
* app/text/gimptextlayer.[ch]: export gimp_text_layer_render().
|
||||
|
||||
* app/text/gimptext-bitmap.[ch]
|
||||
* app/text/gimptext-private.h
|
||||
* app/text/gimptext-vectors.c
|
||||
* app/text/gimptextlayout-render.c: use the transformation matrix.
|
||||
This doesn't change anything since it's still always the identity
|
||||
matrix.
|
||||
|
||||
2003-08-15 Helvetix Victorinox <helvetix@gimp.org>
|
||||
|
||||
* app/composite/gimp-composite-vis.c
|
||||
|
@ -22,7 +37,7 @@
|
|||
"Tab Style" menu and grey them out if the dockable has no
|
||||
get_preview_func.
|
||||
|
||||
2003-08-15 Sven Neumann <neo@bender>
|
||||
2003-08-15 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* LICENSE: cosmetics.
|
||||
|
||||
|
@ -35,7 +50,7 @@
|
|||
* app/composite/make-installer.py: generate smaller tables and
|
||||
less code. Now takes real command line options:
|
||||
options:
|
||||
--version show program's version number and exit
|
||||
--version show program's version number
|
||||
-h, --help show this help message and exit
|
||||
-f FILE, --file=FILE the input object file
|
||||
-t, --test generate regression testing code
|
||||
|
@ -336,7 +351,7 @@
|
|||
than 2.2.2. The next stable release will probably require 2.2.2
|
||||
or later but for the moment we only issue a warning.
|
||||
|
||||
2003-08-09 Sven Neumann <neo@bender>
|
||||
2003-08-09 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* configure.in: added devel-docs/app.
|
||||
|
||||
|
|
|
@ -15,30 +15,32 @@ INCLUDES = \
|
|||
noinst_LIBRARIES = libapptext.a
|
||||
|
||||
libapptext_a_sources = \
|
||||
text-types.h \
|
||||
text-enums.h \
|
||||
gimpfont.c \
|
||||
gimpfont.h \
|
||||
gimpfontlist.c \
|
||||
gimpfontlist.h \
|
||||
gimptext.c \
|
||||
gimptext.h \
|
||||
gimptext-bitmap.c \
|
||||
gimptext-bitmap.h \
|
||||
gimptext-compat.c \
|
||||
gimptext-compat.h \
|
||||
gimptext-parasite.c \
|
||||
gimptext-parasite.h \
|
||||
gimptext-private.h \
|
||||
gimptext-vectors.c \
|
||||
gimptext-vectors.h \
|
||||
gimptext-xlfd.c \
|
||||
gimptext-xlfd.h \
|
||||
gimptextlayer.c \
|
||||
gimptextlayer.h \
|
||||
gimptextlayout.c \
|
||||
gimptextlayout.h \
|
||||
gimptextlayout-render.c \
|
||||
text-types.h \
|
||||
text-enums.h \
|
||||
gimpfont.c \
|
||||
gimpfont.h \
|
||||
gimpfontlist.c \
|
||||
gimpfontlist.h \
|
||||
gimptext.c \
|
||||
gimptext.h \
|
||||
gimptext-bitmap.c \
|
||||
gimptext-bitmap.h \
|
||||
gimptext-compat.c \
|
||||
gimptext-compat.h \
|
||||
gimptext-parasite.c \
|
||||
gimptext-parasite.h \
|
||||
gimptext-private.h \
|
||||
gimptext-vectors.c \
|
||||
gimptext-vectors.h \
|
||||
gimptext-xlfd.c \
|
||||
gimptext-xlfd.h \
|
||||
gimptextlayer.c \
|
||||
gimptextlayer.h \
|
||||
gimptextlayer-transform.c \
|
||||
gimptextlayer-transform.h \
|
||||
gimptextlayout.c \
|
||||
gimptextlayout.h \
|
||||
gimptextlayout-render.c \
|
||||
gimptextlayout-render.h
|
||||
|
||||
libapptext_a_built_sources = text-enums.c
|
||||
|
|
|
@ -38,12 +38,14 @@
|
|||
void
|
||||
gimp_text_render_bitmap (PangoFont *font,
|
||||
PangoGlyph glyph,
|
||||
gint flags,
|
||||
FT_Int32 flags,
|
||||
FT_Matrix *trafo,
|
||||
gint x,
|
||||
gint y,
|
||||
FT_Bitmap *bitmap)
|
||||
{
|
||||
FT_Face face;
|
||||
FT_Vector pos;
|
||||
gint y_start, y_limit, x_start, x_limit;
|
||||
gint ix, iy;
|
||||
const guchar *src;
|
||||
|
@ -51,11 +53,21 @@ gimp_text_render_bitmap (PangoFont *font,
|
|||
|
||||
face = pango_ft2_font_get_face (font);
|
||||
|
||||
FT_Set_Transform (face, trafo, NULL);
|
||||
|
||||
FT_Load_Glyph (face, (FT_UInt) glyph, flags);
|
||||
FT_Render_Glyph (face->glyph,
|
||||
(flags & FT_LOAD_TARGET_MONO ?
|
||||
ft_render_mode_mono : ft_render_mode_normal));
|
||||
|
||||
pos.x = x;
|
||||
pos.y = y;
|
||||
|
||||
FT_Vector_Transform (&pos, trafo);
|
||||
|
||||
x = PANGO_PIXELS (pos.x);
|
||||
y = PANGO_PIXELS (pos.y);
|
||||
|
||||
x_start = MAX (0, - (x + face->glyph->bitmap_left));
|
||||
x_limit = MIN (face->glyph->bitmap.width,
|
||||
bitmap->width - (x + face->glyph->bitmap_left));
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
|
||||
void gimp_text_render_bitmap (PangoFont *font,
|
||||
PangoGlyph glyph,
|
||||
gint flags,
|
||||
FT_Int32 flags,
|
||||
FT_Matrix *trafo,
|
||||
gint x,
|
||||
gint y,
|
||||
FT_Bitmap *bitmap);
|
||||
|
|
|
@ -44,7 +44,8 @@ struct _GimpTextLayoutClass
|
|||
|
||||
typedef void (* GimpTextRenderFunc) (PangoFont *font,
|
||||
PangoGlyph glyph,
|
||||
gint flags,
|
||||
FT_Int32 load_flags,
|
||||
FT_Matrix *tranform,
|
||||
gint x,
|
||||
gint y,
|
||||
gpointer render_data);
|
||||
|
|
|
@ -53,14 +53,15 @@ struct _RenderContext
|
|||
GimpVectors *vectors;
|
||||
GimpStroke *stroke;
|
||||
GimpAnchor *anchor;
|
||||
gint offset_x;
|
||||
gint offset_y;
|
||||
gdouble offset_x;
|
||||
gdouble offset_y;
|
||||
};
|
||||
|
||||
|
||||
static void gimp_text_render_vectors (PangoFont *font,
|
||||
PangoGlyph *glyph,
|
||||
gint flags,
|
||||
FT_Int32 flags,
|
||||
FT_Matrix *matrix,
|
||||
gint x,
|
||||
gint y,
|
||||
RenderContext *context);
|
||||
|
@ -244,7 +245,8 @@ cubicto (FT_Vector *control1,
|
|||
static void
|
||||
gimp_text_render_vectors (PangoFont *font,
|
||||
PangoGlyph *pango_glyph,
|
||||
gint flags,
|
||||
FT_Int32 flags,
|
||||
FT_Matrix *trafo,
|
||||
gint x,
|
||||
gint y,
|
||||
RenderContext *context)
|
||||
|
@ -272,8 +274,8 @@ gimp_text_render_vectors (PangoFont *font,
|
|||
{
|
||||
FT_OutlineGlyph outline_glyph = (FT_OutlineGlyph) glyph;
|
||||
|
||||
context->offset_x = x;
|
||||
context->offset_y = y;
|
||||
context->offset_x = (gdouble) x / PANGO_SCALE;
|
||||
context->offset_y = (gdouble) y / PANGO_SCALE;
|
||||
|
||||
FT_Outline_Decompose (&outline_glyph->outline, &outline_funcs, context);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,162 @@
|
|||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* GimpTextLayer
|
||||
* Copyright (C) 2002-2003 Sven Neumann <sven@gimp.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <pango/pangoft2.h>
|
||||
|
||||
#include "text-types.h"
|
||||
|
||||
#include "core/gimpimage-undo.h"
|
||||
|
||||
#include "gimptext.h"
|
||||
#include "gimptextlayer.h"
|
||||
#include "gimptextlayer-transform.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
void
|
||||
gimp_text_layer_scale (GimpItem *item,
|
||||
gint new_width,
|
||||
gint new_height,
|
||||
gint new_offset_x,
|
||||
gint new_offset_y,
|
||||
GimpInterpolationType interpolation_type)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_layer_flip (GimpItem *item,
|
||||
GimpOrientationType flip_type,
|
||||
gdouble axis,
|
||||
gboolean clip_result)
|
||||
{
|
||||
GimpLayer *layer;
|
||||
GimpImage *gimage;
|
||||
|
||||
layer = GIMP_LAYER (item);
|
||||
gimage = gimp_item_get_image (item);
|
||||
|
||||
gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_TRANSFORM,
|
||||
_("Flip Text Layer"));
|
||||
|
||||
{
|
||||
GimpText *text = GIMP_TEXT_LAYER (item)->text;
|
||||
GimpMatrix2 trafo = { { { 1.0, 0.0 }, { 0.0, 1.0 } } };
|
||||
|
||||
switch (flip_type)
|
||||
{
|
||||
case GIMP_ORIENTATION_HORIZONTAL:
|
||||
trafo.coeff[0][0] = - 1.0;
|
||||
break;
|
||||
|
||||
case GIMP_ORIENTATION_VERTICAL:
|
||||
trafo.coeff[1][1] = - 1.0;
|
||||
break;
|
||||
|
||||
case GIMP_ORIENTATION_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
|
||||
gimp_matrix2_mult (&trafo, &text->transformation);
|
||||
g_object_notify (G_OBJECT (text), "transformation");
|
||||
gimp_text_layer_render (GIMP_TEXT_LAYER (item));
|
||||
}
|
||||
|
||||
/* If there is a layer mask, make sure it gets flipped as well */
|
||||
if (layer->mask)
|
||||
gimp_item_flip (GIMP_ITEM (layer->mask),
|
||||
flip_type, axis, clip_result);
|
||||
|
||||
gimp_image_undo_group_end (gimage);
|
||||
|
||||
/* Make sure we're not caching any old selection info */
|
||||
gimp_layer_invalidate_boundary (layer);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_layer_rotate (GimpItem *item,
|
||||
GimpRotationType rotate_type,
|
||||
gdouble center_x,
|
||||
gdouble center_y,
|
||||
gboolean clip_result)
|
||||
{
|
||||
GimpLayer *layer;
|
||||
GimpImage *gimage;
|
||||
gdouble cos = 1.0;
|
||||
gdouble sin = 0.0;
|
||||
|
||||
layer = GIMP_LAYER (item);
|
||||
gimage = gimp_item_get_image (item);
|
||||
|
||||
gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_TRANSFORM,
|
||||
_("Rotate Text Layer"));
|
||||
|
||||
switch (rotate_type)
|
||||
{
|
||||
case GIMP_ROTATE_90:
|
||||
cos = 0.0;
|
||||
sin = - 1.0;
|
||||
break;
|
||||
case GIMP_ROTATE_180:
|
||||
cos = - 1.0;
|
||||
sin = 0.0;
|
||||
break;
|
||||
case GIMP_ROTATE_270:
|
||||
cos = 0.0;
|
||||
sin = 1.0;
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
GimpText *text = GIMP_TEXT_LAYER (item)->text;
|
||||
GimpMatrix2 trafo = { { { cos, - sin }, { sin, cos } } };
|
||||
|
||||
gimp_matrix2_mult (&trafo, &text->transformation);
|
||||
g_object_notify (G_OBJECT (text), "transformation");
|
||||
gimp_text_layer_render (GIMP_TEXT_LAYER (item));
|
||||
}
|
||||
|
||||
/* If there is a layer mask, make sure it gets rotates as well */
|
||||
if (layer->mask)
|
||||
gimp_item_rotate (GIMP_ITEM (layer->mask),
|
||||
rotate_type, center_x, center_y, clip_result);
|
||||
|
||||
gimp_image_undo_group_end (gimage);
|
||||
|
||||
/* Make sure we're not caching any old selection info */
|
||||
gimp_layer_invalidate_boundary (layer);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_layer_transform (GimpItem *item,
|
||||
const GimpMatrix3 *matrix,
|
||||
GimpTransformDirection direction,
|
||||
GimpInterpolationType interpolation_type,
|
||||
gboolean clip_result,
|
||||
GimpProgressFunc progress_callback,
|
||||
gpointer progress_data)
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* GimpTextLayer
|
||||
* Copyright (C) 2002-2003 Sven Neumann <sven@gimp.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GIMP_TEXT_LAYER_TRANSFORM_H__
|
||||
#define __GIMP_TEXT_LAYER_TRANSFORM_H__
|
||||
|
||||
|
||||
void gimp_text_layer_scale (GimpItem *item,
|
||||
gint new_width,
|
||||
gint new_height,
|
||||
gint new_offset_x,
|
||||
gint new_offset_y,
|
||||
GimpInterpolationType interpolation_type);
|
||||
void gimp_text_layer_flip (GimpItem *item,
|
||||
GimpOrientationType flip_type,
|
||||
gdouble axis,
|
||||
gboolean clip_result);
|
||||
void gimp_text_layer_rotate (GimpItem *item,
|
||||
GimpRotationType rotate_type,
|
||||
gdouble center_x,
|
||||
gdouble center_y,
|
||||
gboolean clip_result);
|
||||
void gimp_text_layer_transform (GimpItem *item,
|
||||
const GimpMatrix3 *matrix,
|
||||
GimpTransformDirection direction,
|
||||
GimpInterpolationType interpolation_type,
|
||||
gboolean clip_result,
|
||||
GimpProgressFunc progress_callback,
|
||||
gpointer progress_data);
|
||||
|
||||
|
||||
#endif /* __GIMP_TEXT_LAYER_TRANSFORM_H__ */
|
|
@ -42,6 +42,7 @@
|
|||
#include "gimptext-bitmap.h"
|
||||
#include "gimptext-private.h"
|
||||
#include "gimptextlayer.h"
|
||||
#include "gimptextlayer-transform.h"
|
||||
#include "gimptextlayout.h"
|
||||
#include "gimptextlayout-render.h"
|
||||
|
||||
|
@ -62,11 +63,12 @@ static GimpItem * gimp_text_layer_duplicate (GimpItem *item,
|
|||
static void gimp_text_layer_rename (GimpItem *item,
|
||||
const gchar *new_name,
|
||||
const gchar *undo_desc);
|
||||
|
||||
static void gimp_text_layer_set_text (GimpTextLayer *layer,
|
||||
GimpText *text);
|
||||
static void gimp_text_layer_notify_text (GimpTextLayer *layer);
|
||||
static gboolean gimp_text_layer_idle_render (GimpTextLayer *layer);
|
||||
static gboolean gimp_text_layer_render (GimpTextLayer *layer);
|
||||
static gboolean gimp_text_layer_render_now (GimpTextLayer *layer);
|
||||
static void gimp_text_layer_render_layout (GimpTextLayer *layer,
|
||||
GimpTextLayout *layout);
|
||||
|
||||
|
@ -124,9 +126,16 @@ gimp_text_layer_class_init (GimpTextLayerClass *klass)
|
|||
viewable_class->default_stock_id = "gimp-text-layer";
|
||||
viewable_class->get_preview = gimp_text_layer_get_preview;
|
||||
|
||||
item_class->default_name = _("Text Layer");
|
||||
item_class->duplicate = gimp_text_layer_duplicate;
|
||||
item_class->rename = gimp_text_layer_rename;
|
||||
item_class->default_name = _("Text Layer");
|
||||
|
||||
#if 0
|
||||
item_class->scale = gimp_text_layer_scale;
|
||||
item_class->flip = gimp_text_layer_flip;
|
||||
item_class->rotate = gimp_text_layer_rotate;
|
||||
item_class->transform = gimp_text_layer_transform;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -226,9 +235,18 @@ gimp_text_layer_rename (GimpItem *item,
|
|||
GIMP_ITEM_CLASS (parent_class)->rename (item, new_name, undo_desc);
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_text_layer_new:
|
||||
* @image: the #GimpImage the layer should belong to
|
||||
* @text: a #GimpText object
|
||||
*
|
||||
* Creates a new text layer.
|
||||
*
|
||||
* Return value: a new #GimpTextLayer or %NULL in case of a problem
|
||||
**/
|
||||
GimpLayer *
|
||||
gimp_text_layer_new (GimpImage *image,
|
||||
GimpText *text)
|
||||
GimpText *text)
|
||||
{
|
||||
GimpTextLayer *layer;
|
||||
|
||||
|
@ -248,7 +266,7 @@ gimp_text_layer_new (GimpImage *image,
|
|||
|
||||
gimp_text_layer_set_text (layer, text);
|
||||
|
||||
if (! gimp_text_layer_render (layer))
|
||||
if (! gimp_text_layer_render_now (layer))
|
||||
{
|
||||
g_object_unref (layer);
|
||||
return NULL;
|
||||
|
@ -353,6 +371,20 @@ gimp_text_layer_get_text (GimpTextLayer *layer)
|
|||
return layer->text;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_text_layer_render (GimpTextLayer *layer)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_TEXT_LAYER (layer));
|
||||
|
||||
if (layer->idle_render_id)
|
||||
{
|
||||
g_source_remove (layer->idle_render_id);
|
||||
layer->idle_render_id = 0;
|
||||
}
|
||||
|
||||
gimp_text_layer_render_now (layer);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_text_layer_notify_text (GimpTextLayer *layer)
|
||||
{
|
||||
|
@ -370,13 +402,13 @@ gimp_text_layer_idle_render (GimpTextLayer *layer)
|
|||
{
|
||||
layer->idle_render_id = 0;
|
||||
|
||||
gimp_text_layer_render (layer);
|
||||
gimp_text_layer_render_now (layer);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_text_layer_render (GimpTextLayer *layer)
|
||||
gimp_text_layer_render_now (GimpTextLayer *layer)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
GimpItem *item;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* The GIMP -- an image manipulation program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* GimpText
|
||||
* GimpTextLayer
|
||||
* Copyright (C) 2002-2003 Sven Neumann <sven@gimp.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -60,6 +60,7 @@ GimpLayer * gimp_text_layer_new (GimpImage *image,
|
|||
GimpLayer * gimp_text_layer_from_layer (GimpLayer *layer,
|
||||
GimpText *text);
|
||||
GimpText * gimp_text_layer_get_text (GimpTextLayer *layer);
|
||||
void gimp_text_layer_render (GimpTextLayer *layer);
|
||||
|
||||
|
||||
#endif /* __GIMP_TEXT_LAYER_H__ */
|
||||
|
|
|
@ -60,7 +60,8 @@ static void gimp_text_layout_render_glyphs (GimpTextLayout *layout,
|
|||
gint x,
|
||||
gint y,
|
||||
gpointer render_data);
|
||||
static gint gimp_text_layout_render_flags (GimpTextLayout *layout);
|
||||
static FT_Int32 gimp_text_layout_render_flags (GimpTextLayout *layout);
|
||||
static FT_Matrix gimp_text_layout_render_trafo (GimpTextLayout *layout);
|
||||
|
||||
|
||||
|
||||
|
@ -77,6 +78,9 @@ gimp_text_layout_render (GimpTextLayout *layout,
|
|||
|
||||
gimp_text_layout_get_offsets (layout, &x, &y);
|
||||
|
||||
x *= PANGO_SCALE;
|
||||
y *= PANGO_SCALE;
|
||||
|
||||
iter = pango_layout_get_iter (layout->layout);
|
||||
|
||||
do
|
||||
|
@ -92,8 +96,8 @@ gimp_text_layout_render (GimpTextLayout *layout,
|
|||
|
||||
gimp_text_layout_render_line (layout, line,
|
||||
render_func,
|
||||
x + PANGO_PIXELS (rect.x),
|
||||
y + PANGO_PIXELS (baseline),
|
||||
x + rect.x,
|
||||
y + baseline,
|
||||
render_data);
|
||||
}
|
||||
while (pango_layout_iter_next_line (iter));
|
||||
|
@ -120,7 +124,7 @@ gimp_text_layout_render_line (GimpTextLayout *layout,
|
|||
gimp_text_layout_render_glyphs (layout,
|
||||
run->item->analysis.font, run->glyphs,
|
||||
render_func,
|
||||
x + PANGO_PIXELS (x_off), y,
|
||||
x + x_off, y,
|
||||
render_data);
|
||||
|
||||
x_off += rect.width;
|
||||
|
@ -137,19 +141,26 @@ gimp_text_layout_render_glyphs (GimpTextLayout *layout,
|
|||
gpointer render_data)
|
||||
{
|
||||
PangoGlyphInfo *gi;
|
||||
gint flags;
|
||||
FT_Int32 flags;
|
||||
FT_Matrix trafo;
|
||||
FT_Vector pos;
|
||||
gint i;
|
||||
gint x_position = 0;
|
||||
|
||||
flags = gimp_text_layout_render_flags (layout);
|
||||
trafo = gimp_text_layout_render_trafo (layout);
|
||||
|
||||
for (i = 0, gi = glyphs->glyphs; i < glyphs->num_glyphs; i++, gi++)
|
||||
{
|
||||
if (gi->glyph)
|
||||
{
|
||||
render_func (font, gi->glyph, flags,
|
||||
x + PANGO_PIXELS (x_position + gi->geometry.x_offset),
|
||||
y + PANGO_PIXELS (gi->geometry.y_offset),
|
||||
pos.x = x + x_position + gi->geometry.x_offset;
|
||||
pos.y = y + gi->geometry.y_offset;
|
||||
|
||||
FT_Vector_Transform (&pos, &trafo);
|
||||
|
||||
render_func (font, gi->glyph, flags, &trafo,
|
||||
pos.x, pos.y,
|
||||
render_data);
|
||||
}
|
||||
|
||||
|
@ -157,7 +168,7 @@ gimp_text_layout_render_glyphs (GimpTextLayout *layout,
|
|||
}
|
||||
}
|
||||
|
||||
static gint
|
||||
static FT_Int32
|
||||
gimp_text_layout_render_flags (GimpTextLayout *layout)
|
||||
{
|
||||
GimpText *text = layout->text;
|
||||
|
@ -176,3 +187,17 @@ gimp_text_layout_render_flags (GimpTextLayout *layout)
|
|||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static FT_Matrix
|
||||
gimp_text_layout_render_trafo (GimpTextLayout *layout)
|
||||
{
|
||||
GimpText *text = layout->text;
|
||||
FT_Matrix trafo;
|
||||
|
||||
trafo.xx = text->transformation.coeff[0][0] * 65536.0;
|
||||
trafo.xy = text->transformation.coeff[0][1] * 65536.0;
|
||||
trafo.yx = text->transformation.coeff[1][0] * 65536.0;
|
||||
trafo.yy = text->transformation.coeff[1][1] * 65536.0;
|
||||
|
||||
return trafo;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue