[cairo] Re: 1.4.2 release planned for today, 1.4.4 in a few weeks
Hugo Vincent
hugo.vincent at gmail.com
Mon Mar 26 17:09:54 PDT 2007
Hi Baz,
The code below seems to replicate the crash; that is to say, even the
simplest use of a radial gradient on Quartz crashes.
verbatim error: cairo.c:91: failed assertion `status >
CAIRO_STATUS_SUCCESS && status <= CAIRO_STATUS_LAST_STATUS'
System Info:
Mac OS X 10.4.9 (on Intel Core 2 Duo), Xcode 2.4.1, Cairo 1.4.2
[release]
Note, this code isn't exactly what I've been testing with, but I am
100% confident the other stuff I have in my code, but not in the
included code here, is not what is causing this crash. Like I said
before, Rsvg renders correctly, assuming the SVG file has no radial
gradients. Also, because both Rsvg (which uses the Cairo C api) and
this code, which is using Cairomm, both crash in the same way, we can
assume the problem isn't with Cairomm. Finally, if you render this
code into a PNG file it works fine.
Cheers,
Hugo
-----------------------------------------------------------
testview.h:
-----------------------------------------------------------
#import <Cocoa/Cocoa.h>
@interface TestView : NSView
{
// nothing needed here
}
@end
-----------------------------------------------------------
testview.m
-----------------------------------------------------------
#include <cairomm/cairomm.h>
#include <cairomm/quartz_surface.h>
#ifndef CAIRO_HAS_QUARTZ_SURFACE
#error Need to build Cairo and Cairomm with Quartz support (version
1.4.0 or higher)
#endif
@implementation TestView
- (id)initWithFrame:(NSRect)frameRect
{
if ((self = [super initWithFrame:frameRect]) != nil)
{
// nothing needed here
}
return self;
}
- (void)drawRect:(NSRect)rect
{
// Get the size of this NSView
NSRect bounds = [self bounds];
int width = bounds.size.width;
int height = bounds.size.height;
// Get CoreGraphcis context reference
CGContextRef ctx = (CGContextRef)[[NSGraphicsContext currentContext]
graphicsPort];
// Make the CGContext coordinate system sane, as expected by Cairo
CGContextTranslateCTM (ctx, 0.0, height);
CGContextScaleCTM (ctx, 1.0, -1.0);
// Create the Cairo surface and context
Cairo::RefPtr<Cairo::QuartzSurface> surface =
Cairo::QuartzSurface::create(ctx, width, height);
Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);
// Draw a radial gradient (copied and pasted, more or less, from
http://cairographics.org/samples/gradient.html)
cr->scale(width,height);
Cairo::RefPtr<Cairo::RadialGradient> grad2 =
Cairo::RadialGradient::create(0.45, 0.4, 0.1, 0.4, 0.4, 0.5);
grad2->add_color_stop_rgba(0, 1,0,0, 1);
grad2->add_color_stop_rgba(1, 0,1,0, 1);
cr->set_source(grad2);
cairo_arc (cr, 0.5, 0.5, 0.3, 0, 2 * M_PI);
cr->fill(); // CRASHES!
}
@end
On 27/03/2007, at 10:22 AM, Baz wrote:
> On 17/03/07, Hugo Vincent <hugo.vincent at gmail.com> wrote:
>> Can the patch for bug 10036 (Cairo-Quartz Line-width-scaling problem)
>> be accepted for into 1.4.2 (or even 1.4.4)? Please!?
>> https://bugs.freedesktop.org/show_bug.cgi?id=10036
>>
>> Also, I have been playing round with Rsvg on Mac OS X, rendering into
>> a Cairo-Quartz context. It mostly works (except for the above
>> mentioned bug), however in certain cases it crashes rather
>> ungracefully when trying to do fallback operations for things that
>> aren't supported natively by Cairo-Quartz (certain radial gradients
>> seem to be the culprit). I'll prepare a proper test case and submit a
>> bug soon after I've tried it with 1.4.2.
>>
>> Cheers,
>> Hugo Vincent
>
> Hugo, did you ever track down that crasher?
>
> Cheers,
> Baz
More information about the cairo
mailing list