From be8b05a3845aa1d6cb884ae60a1be879ae787204 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Sat, 3 Mar 2018 01:55:57 +0100 Subject: [PATCH] remove Ellipse_vertical_radius_squared Ellipse_horizontal_radius_squared Ellipse_limit global variables --- src/global.h | 5 +---- src/graph.c | 46 +++++++++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/global.h b/src/global.h index c4ce0be3..c9941ec7 100644 --- a/src/global.h +++ b/src/global.h @@ -567,10 +567,7 @@ GFX2_GLOBAL byte Mask_table[256]; #endif // -- Data for ellipses and circles -// FIXME: move most of these to graph.c -GFX2_GLOBAL long Ellipse_vertical_radius_squared; -GFX2_GLOBAL long Ellipse_horizontal_radius_squared; -GFX2_GLOBAL qword Ellipse_limit; +// FIXME: move this to graph.c GFX2_GLOBAL long Circle_limit; // -- Data for gradients diff --git a/src/graph.c b/src/graph.c index 1392c577..017edfca 100644 --- a/src/graph.c +++ b/src/graph.c @@ -59,19 +59,24 @@ // Generic pixel-drawing function. Func_pixel Pixel_figure; +typedef struct +{ + long vertical_radius_squared; + long horizontal_radius_squared; + qword limit; +} T_Ellipse_limits; + // Calcule les valeurs suivantes en fonction des deux paramètres: // // Ellipse_vertical_radius_squared // Ellipse_horizontal_radius_squared // Ellipse_Limit_High // Ellipse_Limit_Low -static void Ellipse_compute_limites(short horizontal_radius,short vertical_radius) +static void Ellipse_compute_limites(short horizontal_radius,short vertical_radius, T_Ellipse_limits * Ellipse) { - Ellipse_horizontal_radius_squared = - (long)horizontal_radius * horizontal_radius; - Ellipse_vertical_radius_squared = - (long)vertical_radius * vertical_radius; - Ellipse_limit = (qword)Ellipse_horizontal_radius_squared * Ellipse_vertical_radius_squared; + Ellipse->horizontal_radius_squared = (long)horizontal_radius * horizontal_radius; + Ellipse->vertical_radius_squared = (long)vertical_radius * vertical_radius; + Ellipse->limit = (qword)Ellipse->horizontal_radius_squared * Ellipse->vertical_radius_squared; } // Indique si le pixel se trouvant à Ellipse_cursor_X pixels @@ -79,11 +84,11 @@ static void Ellipse_compute_limites(short horizontal_radius,short vertical_radiu // Ellipse_cursor_Y pixels (Ellipse_cursor_Y>0 = en bas, // Ellipse_cursor_Y<0 = en haut) du centre se trouve dans l'ellipse en // cours. -static byte Pixel_in_ellipse(long x, long y) +static byte Pixel_in_ellipse(long x, long y, const T_Ellipse_limits * Ellipse) { - qword ediesi = (qword)x * x * Ellipse_vertical_radius_squared + - (qword)y * y * Ellipse_horizontal_radius_squared; - if((ediesi) <= Ellipse_limit) return 255; + qword ediesi = (qword)x * x * Ellipse->vertical_radius_squared + + (qword)y * y * Ellipse->horizontal_radius_squared; + if((ediesi) <= Ellipse->limit) return 255; return 0; } @@ -1355,17 +1360,18 @@ void Draw_empty_ellipse_general(short center_x,short center_y,short horizontal_r short x_pos; short y_pos; long x, y; + T_Ellipse_limits Ellipse; start_x=center_x-horizontal_radius; start_y=center_y-vertical_radius; // Calcul des limites de l'ellipse - Ellipse_compute_limites(horizontal_radius+1,vertical_radius+1); + Ellipse_compute_limites(horizontal_radius+1, vertical_radius+1, &Ellipse); // Affichage des extremitées de l'ellipse sur chaque quart de l'ellipse: for (y_pos=start_y,y=-vertical_radius;y_pos