diff options
| author | bulia byak <buliabyak@gmail.com> | 2006-10-16 06:41:07 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2006-10-16 06:41:07 +0000 |
| commit | fc9793730d8c73a72daf8c0bff66e14bcb5cb7d4 (patch) | |
| tree | 21ba63a63d3c53050ad38c9651a8e9e174003428 /src/libnr/nr-rect.cpp | |
| parent | really add video templates (diff) | |
| download | inkscape-fc9793730d8c73a72daf8c0bff66e14bcb5cb7d4.tar.gz inkscape-fc9793730d8c73a72daf8c0bff66e14bcb5cb7d4.zip | |
some more NRRectL goodies for canvas optimizations
(bzr r1804)
Diffstat (limited to 'src/libnr/nr-rect.cpp')
| -rw-r--r-- | src/libnr/nr-rect.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/libnr/nr-rect.cpp b/src/libnr/nr-rect.cpp index 6d881e7b0..460816021 100644 --- a/src/libnr/nr-rect.cpp +++ b/src/libnr/nr-rect.cpp @@ -45,6 +45,60 @@ nr_rect_d_intersect (NRRect *d, const NRRect *r0, const NRRect *r1) return d; } +// returns minimal rect which covers all of r0 not covered by r1 +NRRectL * +nr_rect_l_subtract(NRRectL *d, NRRectL const *r0, NRRectL const *r1) +{ + bool inside1 = nr_rect_l_test_inside(r1, r0->x0, r0->y0); + bool inside2 = nr_rect_l_test_inside(r1, r0->x1, r0->y0); + bool inside3 = nr_rect_l_test_inside(r1, r0->x1, r0->y1); + bool inside4 = nr_rect_l_test_inside(r1, r0->x0, r0->y1); + + if (inside1 && inside2 && inside3) { + nr_rect_l_set_empty (d); + + } else if (inside1 && inside2) { + d->x0 = r0->x0; + d->y0 = r1->y1; + + d->x1 = r0->x1; + d->y1 = r0->y1; + } else if (inside2 && inside3) { + d->x0 = r0->x0; + d->y0 = r0->y0; + + d->x1 = r1->x0; + d->y1 = r0->y1; + } else if (inside3 && inside4) { + d->x0 = r0->x0; + d->y0 = r0->y0; + + d->x1 = r0->x1; + d->y1 = r1->y0; + } else if (inside4 && inside1) { + d->x0 = r1->x1; + d->y0 = r0->y0; + + d->x1 = r0->x1; + d->y1 = r0->y1; + } else { + d->x0 = r0->x0; + d->y0 = r0->y0; + + d->x1 = r0->x1; + d->y1 = r0->y1; + } + return d; +} + +NR::ICoord nr_rect_l_area(NRRectL *r) +{ + if (!r || NR_RECT_DFLS_TEST_EMPTY (r)) { + return 0; + } + return ((r->x1 - r->x0) * (r->y1 - r->y0)); +} + NRRect * nr_rect_d_union (NRRect *d, const NRRect *r0, const NRRect *r1) { |
