mirror of
https://github.com/gnustep/libs-back.git
synced 2025-05-30 17:00:52 +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>
|
2008-03-29 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Source/cairo/CairoFontEnumerator.m,
|
* Source/cairo/CairoFontEnumerator.m,
|
||||||
|
|
|
@ -338,9 +338,10 @@ BOOL _cairo_extents_for_NSGlyph(cairo_scaled_font_t *scaled_font, NSGlyph glyph,
|
||||||
objc_free(cdata);
|
objc_free(cdata);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use flip matrix
|
||||||
cairo_matrix_init(&font_matrix, matrix[0], matrix[1], matrix[2],
|
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);
|
cairo_set_font_matrix(ct, &font_matrix);
|
||||||
if (cairo_status(ct) != CAIRO_STATUS_SUCCESS)
|
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;
|
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);
|
cairo_text_path(ct, str);
|
||||||
if (cairo_status(ct) == CAIRO_STATUS_SUCCESS)
|
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)];
|
[path lineToPoint: NSMakePoint(data[1].point.x, data[1].point.y)];
|
||||||
break;
|
break;
|
||||||
case CAIRO_PATH_CURVE_TO:
|
case CAIRO_PATH_CURVE_TO:
|
||||||
[path curveToPoint: NSMakePoint(data[1].point.x, data[1].point.y)
|
[path curveToPoint: NSMakePoint(data[3].point.x, data[3].point.y)
|
||||||
controlPoint1: NSMakePoint(data[2].point.x, data[2].point.y)
|
controlPoint1: NSMakePoint(data[1].point.x, data[1].point.y)
|
||||||
controlPoint2: NSMakePoint(data[3].point.x, data[3].point.y)];
|
controlPoint2: NSMakePoint(data[2].point.x, data[2].point.y)];
|
||||||
break;
|
break;
|
||||||
case CAIRO_PATH_CLOSE_PATH:
|
case CAIRO_PATH_CLOSE_PATH:
|
||||||
[path closePath];
|
[path closePath];
|
||||||
|
|
|
@ -313,6 +313,37 @@ static float floatToUserSpace(NSAffineTransform *ctm, float f)
|
||||||
c[b] = 0;
|
c[b] = 0;
|
||||||
cairo_text_path(_ct, c);
|
cairo_text_path(_ct, c);
|
||||||
GS_ENDITEMBUF();
|
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…
Add table
Add a link
Reference in a new issue