mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-23 11:51:27 +00:00
Correct cairo glyph to path conversion.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@26426 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
19dda8e5a7
commit
9ca5ecc181
3 changed files with 51 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-04-03 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Source/cairo/CairoFontInfo.m (-appendBezierPathWithGlyphs:...):
|
||||
Correct implementation.
|
||||
* Source/cairo/CairoGState.m (-DPScharpath::): Correct implementation.
|
||||
|
||||
2008-03-29 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Source/cairo/CairoFontEnumerator.m,
|
||||
|
|
|
@ -338,9 +338,10 @@ BOOL _cairo_extents_for_NSGlyph(cairo_scaled_font_t *scaled_font, NSGlyph glyph,
|
|||
objc_free(cdata);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Use flip matrix
|
||||
cairo_matrix_init(&font_matrix, matrix[0], matrix[1], matrix[2],
|
||||
matrix[3], matrix[4], matrix[5]);
|
||||
-matrix[3], matrix[4], matrix[5]);
|
||||
cairo_set_font_matrix(ct, &font_matrix);
|
||||
if (cairo_status(ct) != CAIRO_STATUS_SUCCESS)
|
||||
{
|
||||
|
@ -363,6 +364,14 @@ BOOL _cairo_extents_for_NSGlyph(cairo_scaled_font_t *scaled_font, NSGlyph glyph,
|
|||
return;
|
||||
}
|
||||
|
||||
if ([path elementCount] > 0)
|
||||
{
|
||||
NSPoint p;
|
||||
|
||||
p = [path currentPoint];
|
||||
cairo_move_to(ct, floorf(p.x), floorf(p.y));
|
||||
}
|
||||
|
||||
cairo_text_path(ct, str);
|
||||
if (cairo_status(ct) == CAIRO_STATUS_SUCCESS)
|
||||
{
|
||||
|
@ -383,9 +392,9 @@ BOOL _cairo_extents_for_NSGlyph(cairo_scaled_font_t *scaled_font, NSGlyph glyph,
|
|||
[path lineToPoint: NSMakePoint(data[1].point.x, data[1].point.y)];
|
||||
break;
|
||||
case CAIRO_PATH_CURVE_TO:
|
||||
[path curveToPoint: NSMakePoint(data[1].point.x, data[1].point.y)
|
||||
controlPoint1: NSMakePoint(data[2].point.x, data[2].point.y)
|
||||
controlPoint2: NSMakePoint(data[3].point.x, data[3].point.y)];
|
||||
[path curveToPoint: NSMakePoint(data[3].point.x, data[3].point.y)
|
||||
controlPoint1: NSMakePoint(data[1].point.x, data[1].point.y)
|
||||
controlPoint2: NSMakePoint(data[2].point.x, data[2].point.y)];
|
||||
break;
|
||||
case CAIRO_PATH_CLOSE_PATH:
|
||||
[path closePath];
|
||||
|
|
|
@ -313,6 +313,37 @@ static float floatToUserSpace(NSAffineTransform *ctm, float f)
|
|||
c[b] = 0;
|
||||
cairo_text_path(_ct, c);
|
||||
GS_ENDITEMBUF();
|
||||
if (cairo_status(_ct) == CAIRO_STATUS_SUCCESS)
|
||||
{
|
||||
cairo_path_t *cpath;
|
||||
cairo_path_data_t *data;
|
||||
int i;
|
||||
|
||||
cpath = cairo_copy_path(_ct);
|
||||
|
||||
for (i = 0; i < cpath->num_data; i += cpath->data[i].header.length)
|
||||
{
|
||||
data = &cpath->data[i];
|
||||
switch (data->header.type)
|
||||
{
|
||||
case CAIRO_PATH_MOVE_TO:
|
||||
[path moveToPoint: NSMakePoint(data[1].point.x, data[1].point.y)];
|
||||
break;
|
||||
case CAIRO_PATH_LINE_TO:
|
||||
[path lineToPoint: NSMakePoint(data[1].point.x, data[1].point.y)];
|
||||
break;
|
||||
case CAIRO_PATH_CURVE_TO:
|
||||
[path curveToPoint: NSMakePoint(data[3].point.x, data[3].point.y)
|
||||
controlPoint1: NSMakePoint(data[1].point.x, data[1].point.y)
|
||||
controlPoint2: NSMakePoint(data[2].point.x, data[2].point.y)];
|
||||
break;
|
||||
case CAIRO_PATH_CLOSE_PATH:
|
||||
[path closePath];
|
||||
break;
|
||||
}
|
||||
}
|
||||
cairo_path_destroy(cpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue