sodipodi-ctrlrect.cpp revision 6b76ef6bb3e9b4e1cc83e01cd81a55bbd0450989
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Simple non-transformed rectangle, usable for rubberband
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Lauris Kaplinski <lauris@ximian.com>
f4a94b19c3c5d7d1e7bd926de1eb7e6c077babb2johanengelen * bulia byak <buliabyak@users.sf.net>
f4a94b19c3c5d7d1e7bd926de1eb7e6c077babb2johanengelen * Carl Hetherington <inkscape@carlh.net>
f4a94b19c3c5d7d1e7bd926de1eb7e6c077babb2johanengelen * Copyright (C) 1999-2001 Lauris Kaplinski
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Copyright (C) 2000-2001 Ximian, Inc.
5c45bb188ab729e501e48732842cb9de6a9813beAlex Valavanis * Released under GNU GPL
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Currently we do not have point method, as it should always be painted
8d9f5d586a04809427ce1df284a5720112177991cilix * during some transformation, which takes care of events...
c169f6cddd2da06cfb761339f445bbd8866f72a8buliabyak * Corner coords can be in any order - i.e. x1 < x0 is allowed
80db4eb7f4fe34ba6f42344c71338dc8a98302bbJabiertxofstatic void sp_ctrlrect_class_init(SPCtrlRectClass *c);
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelenstatic void sp_ctrlrect_destroy(GtkObject *object);
ab99111a42436818e6902e044c8f3af2b724263bcilixstatic void sp_ctrlrect_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags);
76db360f5f052775326e6d406b9e1e9e2966e11acilixstatic void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf);
b62895f15526ccefdf1e274c49c02aa043895ee9johanengelen 0, // base_init
4fe8248cd521387d0829c423bf4492e2cbdfd7cdJohan Engelen 0, // base_finalize
5ca48c4a31a249352a2685fbc2a576f1e0d041a0Jabiertxof 0, // class_finalize
081a89987d4cb46e707c9dd5648a7a24a01a750djfbarraud 0, // class_data
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis 0, // n_preallocs
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis 0 // value_table
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis type = g_type_register_static(SP_TYPE_CANVAS_ITEM, "SPCtrlRect", &info, static_cast<GTypeFlags>(0));
d1561c248f49dc3508ae9e6557fc0d371928e394Markus Engelstatic void sp_ctrlrect_class_init(SPCtrlRectClass *c)
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis GtkObjectClass *object_class = (GtkObjectClass *) c;
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis SPCanvasItemClass *item_class = (SPCanvasItemClass *) c;
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis parent_class = (SPCanvasItemClass*) gtk_type_class(sp_canvas_item_get_type());
790674255fb54e588b4b6d73ee9e15050b45d1a4johanengelen/* FIXME: use definitions from somewhere else */
4d2f452da50c83a3bced2bab8cb9e2b287c6efd1johanengelenstatic void sp_ctrlrect_hline(SPCanvasBuf *buf, gint y, gint xs, gint xe, guint32 rgba, guint dashed)
9de5f3bfa8e35ad5e6adcd6eaad4d0d49e7043a3johanengelen guchar *p = buf->buf + (y - buf->rect.y0) * buf->buf_rowstride + (x0 - buf->rect.x0) * 4;
9de5f3bfa8e35ad5e6adcd6eaad4d0d49e7043a3johanengelen p[0] = INK_COMPOSE(r, a, p[0]);
032f369baeef7d4a3b8769997df5dcd6dd874830jfbarraudstatic void sp_ctrlrect_vline(SPCanvasBuf *buf, gint x, gint ys, gint ye, guint32 rgba, guint dashed)
a2887d4a3493b24349a0f1390ed069ca1d2b1d61JazzyNico guchar *p = buf->buf + (y0 - buf->rect.y0) * buf->buf_rowstride + (x - buf->rect.x0) * 4;
136203b42d18389e16f7e30427dd6424e555149dJabiertxo Arraiza Cenoz p[0] = INK_COMPOSE(r, a, p[0]);
a45e91fd09273632e9acf849bb72621832156f07cilix/** Fills the pixels in [xs, xe)*[ys,ye) clipped to the tile with rgb * a. */
eac94793745a61429b52a4b489e148737d091749cilixstatic void sp_ctrlrect_area(SPCanvasBuf *buf, gint xs, gint ys, gint xe, gint ye, guint32 rgba)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm guchar *p = buf->buf + (y - buf->rect.y0) * buf->buf_rowstride + (x0 - buf->rect.x0) * 4;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm p[0] = INK_COMPOSE(r, a, p[0]);
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraudstatic void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf)
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraudstatic void sp_ctrlrect_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags)
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen _rect = Geom::Rect(Geom::Point(0,0),Geom::Point(0,0));
6f4a90e526af850ffc36064f58f09c190f3b633fjohanengelen if ((_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) &&
76db360f5f052775326e6d406b9e1e9e2966e11acilix sp_ctrlrect_hline(buf, _area.y0, _area.x0, _area.x1, _border_color, _dashed);
76db360f5f052775326e6d406b9e1e9e2966e11acilix /* Bottom */
b0c42c0dfcd02cc05126371948489a5a88b2e4b3cilix sp_ctrlrect_hline(buf, _area.y1, _area.x0, _area.x1, _border_color, _dashed);
3d0482af18ffb591c1d8ddecf516629e1bcd2ae4cilix sp_ctrlrect_vline(buf, _area.x0, _area.y0 + 1, _area.y1 - 1, _border_color, _dashed);
3d0482af18ffb591c1d8ddecf516629e1bcd2ae4cilix /* Right */
64aee804a6a47424f7994e60558351b8cf2ea4dbcilix sp_ctrlrect_vline(buf, _area.x1, _area.y0 + 1, _area.y1 - 1, _border_color, _dashed);
64aee804a6a47424f7994e60558351b8cf2ea4dbcilix /* Right shadow */
b320a8d186114a5122ddc3afbe95110eb6cb10cecilix sp_ctrlrect_area(buf, _area.x1 + 1, _area.y0 + _shadow_size,
b320a8d186114a5122ddc3afbe95110eb6cb10cecilix _area.x1 + _shadow_size, _area.y1 + _shadow_size, _shadow_color);
b320a8d186114a5122ddc3afbe95110eb6cb10cecilix /* Bottom shadow */
044d712d4d03f8354962d54e47cfac2346a69ccccilix sp_ctrlrect_area(buf, _area.x0 + _shadow_size, _area.y1 + 1,
0a75b58e47d3de42550c4f7960e253ea3befc09ajohanengelenvoid CtrlRect::update(Geom::Matrix const &affine, unsigned int flags)
0a75b58e47d3de42550c4f7960e253ea3befc09ajohanengelen if (((SPCanvasItemClass *) parent_class)->update) {
4afe3fc6b9c122bc5c02b27aea3845ba41384d2acilix ((SPCanvasItemClass *) parent_class)->update(this, affine, flags);
ecf048161ae0284d01d34ca5844204775c0d3fdecilix if (_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) {
3515994554d167522343ce57417648b39370ccabcilix /* Request redraw old */
afa1e71af5a64b54df797ac1f0bcf32c6613b371johanengelen _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
afa1e71af5a64b54df797ac1f0bcf32c6613b371johanengelen /* Bottom */
b62895f15526ccefdf1e274c49c02aa043895ee9johanengelen _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
05e1ec4d6f1ccc3a0db3cc13e8a3b18489714f14Johan Engelen _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
80db4eb7f4fe34ba6f42344c71338dc8a98302bbJabiertxof Geom::Rect bbox(_rect.min() * affine, _rect.max() * affine);
09d98e945b8105f64767a305e727300b9aaddd4aJabiertxof _area.x0 = (int) floor(bbox.min()[Geom::X] + 0.5);
09d98e945b8105f64767a305e727300b9aaddd4aJabiertxof _area.y0 = (int) floor(bbox.min()[Geom::Y] + 0.5);
09d98e945b8105f64767a305e727300b9aaddd4aJabiertxof _area.x1 = (int) floor(bbox.max()[Geom::X] + 0.5);
5ca48c4a31a249352a2685fbc2a576f1e0d041a0Jabiertxof _area.y1 = (int) floor(bbox.max()[Geom::Y] + 0.5);
19715d9462f14c8543082f8df232e3c99a8453caJabiertxof if (_area.x0 != 0 || _area.x1 != 0 || _area.y0 != 0 || _area.y1 != 0) {
19715d9462f14c8543082f8df232e3c99a8453caJabiertxof /* Request redraw new */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm /* Left */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm /* Right */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz /* Bottom */
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
07b7f1aaaf1087716e784a50cf574a059f7018d3Jon A. Cruz _area.x1 + _shadow_size + 1, _area.y1 + _shadow_size + 1);
c90010388b0d4045c26e81c2be28beedcb36c7d3cilix Local Variables:
c90010388b0d4045c26e81c2be28beedcb36c7d3cilix c-file-style:"stroustrup"
77a4a003111bd5cfb771d4849801c898aeb889b0cilix c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
77a4a003111bd5cfb771d4849801c898aeb889b0cilix indent-tabs-mode:nil
77a4a003111bd5cfb771d4849801c898aeb889b0cilix fill-column:99
262d0c3f05130d86368d95f110aa8ccab5f83e5ccilix// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :