dev_bbox.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "fitz-internal.h"
  2. /* TODO: add clip stack and use to intersect bboxes */
  3. static void
  4. fz_bbox_fill_path(fz_device *dev, fz_path *path, int even_odd, const fz_matrix *ctm,
  5. fz_colorspace *colorspace, float *color, float alpha)
  6. {
  7. fz_rect *result = dev->user;
  8. fz_rect r;
  9. fz_union_rect(result, fz_bound_path(dev->ctx, path, NULL, ctm, &r));
  10. }
  11. static void
  12. fz_bbox_stroke_path(fz_device *dev, fz_path *path, fz_stroke_state *stroke,
  13. const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha)
  14. {
  15. fz_rect *result = dev->user;
  16. fz_rect r;
  17. fz_union_rect(result, fz_bound_path(dev->ctx, path, stroke, ctm, &r));
  18. }
  19. static void
  20. fz_bbox_fill_text(fz_device *dev, fz_text *text, const fz_matrix *ctm,
  21. fz_colorspace *colorspace, float *color, float alpha)
  22. {
  23. fz_rect *result = dev->user;
  24. fz_rect r;
  25. fz_union_rect(result, fz_bound_text(dev->ctx, text, ctm, &r));
  26. }
  27. static void
  28. fz_bbox_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke,
  29. const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha)
  30. {
  31. fz_rect *result = dev->user;
  32. fz_rect r;
  33. fz_union_rect(result, fz_bound_text(dev->ctx, text, ctm, &r));
  34. }
  35. static void
  36. fz_bbox_fill_shade(fz_device *dev, fz_shade *shade, const fz_matrix *ctm, float alpha)
  37. {
  38. fz_rect *result = dev->user;
  39. fz_rect r;
  40. fz_union_rect(result, fz_bound_shade(dev->ctx, shade, ctm, &r));
  41. }
  42. static void
  43. fz_bbox_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float alpha)
  44. {
  45. fz_rect *result = dev->user;
  46. fz_rect r = fz_unit_rect;
  47. fz_union_rect(result, fz_transform_rect(&r, ctm));
  48. }
  49. static void
  50. fz_bbox_fill_image_mask(fz_device *dev, fz_image *image, const fz_matrix *ctm,
  51. fz_colorspace *colorspace, float *color, float alpha)
  52. {
  53. fz_rect *result = dev->user;
  54. fz_rect r = fz_unit_rect;
  55. fz_union_rect(result, fz_transform_rect(&r, ctm));
  56. }
  57. fz_device *
  58. fz_new_bbox_device(fz_context *ctx, fz_rect *result)
  59. {
  60. fz_device *dev;
  61. dev = fz_new_device(ctx, result);
  62. dev->fill_path = fz_bbox_fill_path;
  63. dev->stroke_path = fz_bbox_stroke_path;
  64. dev->fill_text = fz_bbox_fill_text;
  65. dev->stroke_text = fz_bbox_stroke_text;
  66. dev->fill_shade = fz_bbox_fill_shade;
  67. dev->fill_image = fz_bbox_fill_image;
  68. dev->fill_image_mask = fz_bbox_fill_image_mask;
  69. *result = fz_empty_rect;
  70. return dev;
  71. }