[PATCH] multiple issues in libucil primitives

Bug #780943 reported by Kamil Dudka on 2011-05-11
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
unicap
Medium
Arne Caspari

Bug 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.

Kamil Dudka (kdudka) wrote :
description: updated
Changed in unicap:
status: New → Fix Committed
importance: Undecided → Medium
assignee: nobody → Arne Caspari (arne-datafloater)
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers