Activity log for bug #780943

Date Who What changed Old value New value Message
2011-05-11 07:19:56 Kamil Dudka bug added bug
2011-05-11 07:19:56 Kamil Dudka attachment added https://bugzilla.redhat.com/attachment.cgi?id=497930&action=edit https://bugs.launchpad.net/bugs/780943/+attachment/2124109/+files/libucil.patch-third
2011-05-11 07:21:01 Kamil Dudka description I am forwarding a patch written by John Sullivan and submitted to Red Hat bugzilla: https://bugzilla.redhat.com/699472 John's original description of the patch follows: While working on something completely different I bumped into several issues with the libucil drawing primitives: 1) Although ucil_draw_rect clips to the viewport, neither ucil_draw_box nor ucil_draw_circle do, which causes memory corruption and crashes when they partially or completely fall outside the buffer. 2) The internal HLINE implementation looks like a partial attempt to optimize for 8pp drawing on 32-bit word machines, but is called for 16/32bpp drawing and even for 8pp gets the bounds checking wrong and can draw outside the line endpoints 3) There is a separate partial attempt at a HLINE for 24bpp, but this isn't used. Instead the box drawers simply loop, but ucil_draw_box gets the bounds wrong and so never draws the bottom-right pixel of the box. 4) Although ucil_draw_line uses Bresenham, ucil_draw_circle uses trig which is slower and grottier This patch: 1) fixes draw_hline to handle 8/16/24/32bpp fully 2) refactors the colorspace support in draw_rect and draw_box so that 24bpp can be handled the same way as 8/16/32bpp 3) changes draw_circle to use a DDA 4) since (3) makes filled circles easy, I've added a new function ucil_draw_filled_circle 5) _box, _circle and _filled_circle now normalize and clip so they can draw shapes that lie only partially within the viewport. I am forwarding a patch written by John Sullivan and submitted to Red Hat bugzilla: https://bugzilla.redhat.com/699472 John's original description of the patch follows: While working on something completely different I bumped into several issues with the libucil drawing primitives: 1) Although ucil_draw_rect clips to the viewport, neither ucil_draw_box nor ucil_draw_circle do, which causes memory corruption and crashes when they partially or completely fall outside the buffer. 2) The internal HLINE implementation looks like a partial attempt to optimize for 8pp drawing on 32-bit word machines, but is called for 16/32bpp drawing and even for 8pp gets the bounds checking wrong and can draw outside the line endpoints 3) There is a separate partial attempt at a HLINE for 24bpp, but this isn't used. Instead the box drawers simply loop, but ucil_draw_box gets the bounds wrong and so never draws the bottom-right pixel of the box. 4) Although ucil_draw_line uses Bresenham, ucil_draw_circle uses trig which is slower and grottier This patch: 1) fixes draw_hline to handle 8/16/24/32bpp fully 2) refactors the colorspace support in draw_rect and draw_box so that 24bpp can be handled the same way as 8/16/32bpp 3) changes draw_circle to use a DDA 4) since (3) makes filled circles easy, I've added a new function ucil_draw_filled_circle 5) _box, _circle and _filled_circle now normalize and clip so they can draw shapes that lie only partially within the viewport.
2011-07-24 07:44:18 Arne Caspari unicap: status New Fix Committed
2011-07-24 07:44:23 Arne Caspari unicap: importance Undecided Medium
2011-07-24 07:44:27 Arne Caspari unicap: assignee Arne Caspari (arne-datafloater)