[cairo] get bounded box using cairo_stroke_extents

Mark Olesen markjolesen at gmail.com
Sun Feb 21 06:52:30 UTC 2016


I am trying to get the bounded box using cairo_stroke_extents
(cairo_fill_extents has similar issue). I wind up with x1 being
way off. The rest look okay. I have attached a png. The blue
rectangle is the bounds box. Any suggestions?

Thanks in advance.

#include <cairo.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

int
main (int argc, char *argv[])
{
  cairo_surface_t* cs;
  cairo_t *cr;
  double angle;
  double skewx;
  cairo_matrix_t matrix;
  double x1, x2, y1, y2;

  cs= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 180.,100.);
  cr= cairo_create(cs);

  cairo_set_line_width(cr, 1.);

  cairo_save(cr);
  cairo_set_source_rgb(cr, 1., 0., 0.);
  cairo_rectangle(cr, 50., 20., 50., 50.);
  cairo_stroke(cr);
  cairo_restore(cr);

  cairo_save(cr);
  angle= 45.;
  skewx= tan(angle * M_PI / 180.);
  cairo_matrix_init(
      &matrix,
      1.0, 0.0,
      skewx, 1.0,
      50.0, 20.0);
  cairo_transform(cr, &matrix);
  cairo_rectangle(cr, 0., 0., 50., 50.);
  cairo_translate(cr, -50., -20.); // *Lawrence D'Oliveiro tip*
  cairo_set_source_rgb(cr, 0., 0., 0.);
  cairo_stroke_extents(cr, &x1, &y1, &x2, &y2);
  cairo_stroke(cr);
  cairo_restore(cr);

  printf("(%lf, %lf) (%lf,%lf)\n", x1, y1, x2, y2);
/*
x1 is way off
(-1.500000, 19.500000) (151.500000,70.500000)
*/
  cairo_set_source_rgb(cr, 0., 0., 1.);
  cairo_rectangle(cr, x1, y1, x2-x1, y2-y1);
  cairo_stroke(cr);

  cairo_surface_write_to_png(cs, "skew.png");

  cairo_destroy(cr);
  cairo_surface_destroy(cs);

  return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cairographics.org/archives/cairo/attachments/20160220/841c9a47/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: skew.png
Type: image/png
Size: 728 bytes
Desc: not available
URL: <https://lists.cairographics.org/archives/cairo/attachments/20160220/841c9a47/attachment.png>


More information about the cairo mailing list