summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ec26e15)
raw | patch | inline | side by side (parent: ec26e15)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Fri, 2 Mar 2007 19:10:34 +0000 (19:10 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Fri, 2 Mar 2007 19:10:34 +0000 (19:10 +0000) |
src/display/nr-arena-image.cpp | patch | blob | history |
index e187c331f43c00c386e8246871d51cfcaa335f0d..d91733dc75bd24753311b3b317afd2c0a16a245f 100644 (file)
@@ -226,40 +226,38 @@ nr_arena_image_render (cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock
} else { // outline; draw a rect instead
- Path* thePath = new Path;
- thePath->SetBackData (false);
- thePath->Reset ();
+ if (!ct)
+ return item->state;
+
+ guint32 rgba = prefs_get_int_attribute("options.wireframecolors", "images", 0xff0000ff);
+ // FIXME: we use RGBA buffers but cairo writes BGRA (on i386), so we must cheat
+ // by setting color channels in the "wrong" order
+ cairo_set_source_rgba(ct, SP_RGBA32_B_F(rgba), SP_RGBA32_G_F(rgba), SP_RGBA32_R_F(rgba), SP_RGBA32_A_F(rgba));
+
+ cairo_set_line_width(ct, 0.5);
+ cairo_new_path(ct);
+
+ NR::Point shift(pb->area.x0, pb->area.y0);
+ NR::Point c00 = image->c00 - shift;
+ NR::Point c01 = image->c01 - shift;
+ NR::Point c11 = image->c11 - shift;
+ NR::Point c10 = image->c10 - shift;
+
+ cairo_move_to (ct, c00[NR::X], c00[NR::Y]);
- thePath->MoveTo (image->c00);
// the box
- thePath->LineTo (image->c10);
- thePath->LineTo (image->c11);
- thePath->LineTo (image->c01);
- thePath->LineTo (image->c00);
+ cairo_line_to (ct, c10[NR::X], c10[NR::Y]);
+ cairo_line_to (ct, c11[NR::X], c11[NR::Y]);
+ cairo_line_to (ct, c01[NR::X], c01[NR::Y]);
+ cairo_line_to (ct, c00[NR::X], c00[NR::Y]);
// the diagonals
- thePath->LineTo (image->c11);
- thePath->MoveTo (image->c10);
- thePath->LineTo (image->c01);
-
- // livarot black magic - exactly this sequnce of conversions to get stable rendering of the shape
- thePath->Convert(1.0);
- Shape* theShape = new Shape;
- thePath->Stroke(theShape, true, 0.25, join_pointy, butt_straight, 5);
- Shape* theShape1 = new Shape;
- theShape1->ConvertToShape(theShape, fill_nonZero);
-
- NRPixBlock m;
- nr_pixblock_setup_fast(&m, NR_PIXBLOCK_MODE_A8, area->x0, area->y0, area->x1, area->y1, TRUE);
- m.visible_area = pb->visible_area;
- nr_pixblock_render_shape_mask_or(m, theShape1);
- m.empty = FALSE;
- guint32 rgba = prefs_get_int_attribute("options.wireframecolors", "images", 0xff0000ff);
- nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
+ cairo_line_to (ct, c11[NR::X], c11[NR::Y]);
+ cairo_move_to (ct, c10[NR::X], c10[NR::Y]);
+ cairo_line_to (ct, c01[NR::X], c01[NR::Y]);
+
+ cairo_stroke(ct);
+
pb->empty = FALSE;
- nr_pixblock_release(&m);
- delete theShape;
- delete theShape1;
- delete thePath;
}
return item->state;