* Source/cairo/CairoGState.m: Add support for image

interpolation setting in context.
        Patch by Josh Freeman <gnustep_lists@twilightedge.com>


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@38528 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2015-05-22 21:28:20 +00:00
parent ec48a487bf
commit af03e424c8
2 changed files with 22 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2015-05-22 Fred Kiefer <FredKiefer@gmx.de>
* Source/cairo/CairoGState.m: Add support for image interpolation
setting in context.
Patch by Josh Freeman <gnustep_lists@twilightedge.com>
2015-05-22 Fred Kiefer <FredKiefer@gmx.de>
* Source/gsc/GSGState.m (_fillRect:withPattern:): Add support for

View file

@ -101,6 +101,16 @@ static inline CGFloat floatToUserSpace(NSAffineTransform *ctm, double d)
return (CGFloat)d;
}
static inline cairo_filter_t cairoFilterFromNSImageInterpolation(NSImageInterpolation interpolation)
{
switch (interpolation)
{
case NSImageInterpolationNone: return CAIRO_FILTER_NEAREST;
case NSImageInterpolationLow: return CAIRO_FILTER_FAST;
case NSImageInterpolationHigh: return CAIRO_FILTER_BEST;
default: return CAIRO_FILTER_GOOD;
}
}
@implementation CairoGState
@ -1163,7 +1173,8 @@ _set_op(cairo_t *ct, NSCompositingOperation op)
cairo_matrix_init_scale(&source_matrix, 1, -1);
cairo_matrix_translate(&source_matrix, 0, -pixelsHigh);
cairo_pattern_set_matrix(cpattern, &source_matrix);
cairo_pattern_set_filter(cpattern, CAIRO_FILTER_BILINEAR);
cairo_pattern_set_filter(cpattern,
cairoFilterFromNSImageInterpolation([drawcontext imageInterpolation]));
if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 6, 0))
{
cairo_pattern_set_extend(cpattern, CAIRO_EXTEND_PAD);
@ -1339,7 +1350,8 @@ _set_op(cairo_t *ct, NSCompositingOperation op)
//cairo_matrix_translate(&source_matrix, 0, -[_surface size].height);
cairo_matrix_translate(&source_matrix, minx - x + dx, miny - y + dy - ssize.height);
cairo_pattern_set_matrix(cpattern, &source_matrix);
cairo_pattern_set_filter(cpattern, CAIRO_FILTER_BILINEAR);
cairo_pattern_set_filter(cpattern,
cairoFilterFromNSImageInterpolation([drawcontext imageInterpolation]));
cairo_set_source(_ct, cpattern);
cairo_pattern_destroy(cpattern);
cairo_rectangle(_ct, x, y, width, height);
@ -1431,7 +1443,8 @@ doesn't support to use the receiver cairo target as the source. */
cairo_matrix_init_scale(&source_matrix, 1, -1);
cairo_matrix_translate(&source_matrix, 0, -[source->_surface size].height);
cairo_pattern_set_matrix(cpattern, &source_matrix);
cairo_pattern_set_filter(cpattern, CAIRO_FILTER_BILINEAR);
cairo_pattern_set_filter(cpattern,
cairoFilterFromNSImageInterpolation([drawcontext imageInterpolation]));
if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 6, 0))
{
cairo_pattern_set_extend(cpattern, CAIRO_EXTEND_PAD);