From 5439fe5b0176129256e23f4090e72b26c809fce2 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Wed, 24 Jan 2001 12:21:50 +0000 Subject: [PATCH] app/tools/airbrush.c app/tools/by_color_select.c include 2001-01-24 Sven Neumann * app/tools/airbrush.c * app/tools/by_color_select.c * app/tools/color_picker.c: include gimpcolor/gimpcolor.h * libgimpcolor/gimprgb.c: optimized compositing functions. * plug-ins/Lighting/lighting_preview.c * plug-ins/MapObject/mapobject_preview.c: use gimp_rgb_composite functions instead of doing the blending manually * plug-ins/MapObject/map_object_shade.c: fixed a rendering bug when transparent_background == FALSE --- ChangeLog | 15 +++++++++ app/paint/gimpairbrush.c | 2 ++ app/tools/airbrush.c | 2 ++ app/tools/by_color_select.c | 2 ++ app/tools/color_picker.c | 6 ++-- app/tools/gimpairbrushtool.c | 2 ++ app/tools/gimpbycolorselecttool.c | 2 ++ libgimpcolor/gimprgb.c | 30 ++++++++++++------ plug-ins/Lighting/lighting_preview.c | 42 +++++++++++--------------- plug-ins/MapObject/mapobject_preview.c | 41 ++++++++++--------------- plug-ins/MapObject/mapobject_shade.c | 21 +++++++------ 11 files changed, 93 insertions(+), 72 deletions(-) diff --git a/ChangeLog b/ChangeLog index ddca0ecfef..a5bbf4403f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2001-01-24 Sven Neumann + + * app/tools/airbrush.c + * app/tools/by_color_select.c + * app/tools/color_picker.c: include gimpcolor/gimpcolor.h + + * libgimpcolor/gimprgb.c: optimized compositing functions. + + * plug-ins/Lighting/lighting_preview.c + * plug-ins/MapObject/mapobject_preview.c: use gimp_rgb_composite + functions instead of doing the blending manually + + * plug-ins/MapObject/map_object_shade.c: fixed a rendering bug when + transparent_background == FALSE + 2001-01-24 Michael Natterer * Makefile.am diff --git a/app/paint/gimpairbrush.c b/app/paint/gimpairbrush.c index 47b307737c..a1f0d8a5ee 100644 --- a/app/paint/gimpairbrush.c +++ b/app/paint/gimpairbrush.c @@ -20,6 +20,8 @@ #include +#include "libgimpcolor/gimpcolor.h" + #include "apptypes.h" #include "appenv.h" diff --git a/app/tools/airbrush.c b/app/tools/airbrush.c index 47b307737c..a1f0d8a5ee 100644 --- a/app/tools/airbrush.c +++ b/app/tools/airbrush.c @@ -20,6 +20,8 @@ #include +#include "libgimpcolor/gimpcolor.h" + #include "apptypes.h" #include "appenv.h" diff --git a/app/tools/by_color_select.c b/app/tools/by_color_select.c index 992d3b29dd..6b4dd45020 100644 --- a/app/tools/by_color_select.c +++ b/app/tools/by_color_select.c @@ -21,6 +21,8 @@ #include #include +#include "libgimpcolor/gimpcolor.h" + #include "apptypes.h" #include "appenv.h" diff --git a/app/tools/color_picker.c b/app/tools/color_picker.c index 2a78f3d781..dc39ea4a9f 100644 --- a/app/tools/color_picker.c +++ b/app/tools/color_picker.c @@ -20,9 +20,9 @@ #include -#include "apptypes.h" +#include "libgimpcolor/gimpcolor.h" -#include "libgimp/gimpcolorarea.h" +#include "apptypes.h" #include "appenv.h" #include "color_picker.h" @@ -38,6 +38,8 @@ #include "tools.h" #include "tool_options.h" +#include "libgimp/gimpcolorarea.h" + #include "libgimp/gimpintl.h" diff --git a/app/tools/gimpairbrushtool.c b/app/tools/gimpairbrushtool.c index 47b307737c..a1f0d8a5ee 100644 --- a/app/tools/gimpairbrushtool.c +++ b/app/tools/gimpairbrushtool.c @@ -20,6 +20,8 @@ #include +#include "libgimpcolor/gimpcolor.h" + #include "apptypes.h" #include "appenv.h" diff --git a/app/tools/gimpbycolorselecttool.c b/app/tools/gimpbycolorselecttool.c index 992d3b29dd..6b4dd45020 100644 --- a/app/tools/gimpbycolorselecttool.c +++ b/app/tools/gimpbycolorselecttool.c @@ -21,6 +21,8 @@ #include #include +#include "libgimpcolor/gimpcolor.h" + #include "apptypes.h" #include "appenv.h" diff --git a/libgimpcolor/gimprgb.c b/libgimpcolor/gimprgb.c index b10d18dfe8..761afa2063 100644 --- a/libgimpcolor/gimprgb.c +++ b/libgimpcolor/gimprgb.c @@ -205,20 +205,30 @@ gimp_rgb_composite (GimpRGB *color1, case GIMP_RGB_COMPOSITE_NORMAL: /* put color2 on top of color1 */ - factor = color1->a * (1.0 - color2->a); - color1->r = color1->r * factor + color2->r * color2->a; - color1->g = color1->g * factor + color2->g * color2->a; - color1->b = color1->b * factor + color2->b * color2->a; - color1->a = factor + color2->a; + if (color2->a == 1.0) + { + *color1 = *color2; + } + else + { + factor = color1->a * (1.0 - color2->a); + color1->r = color1->r * factor + color2->r * color2->a; + color1->g = color1->g * factor + color2->g * color2->a; + color1->b = color1->b * factor + color2->b * color2->a; + color1->a = factor + color2->a; + } break; case GIMP_RGB_COMPOSITE_BEHIND: /* put color2 below color1 */ - factor = color2->a * (1.0 - color1->a); - color1->r = color2->r * factor + color1->r * color1->a; - color1->g = color2->g * factor + color1->g * color1->a; - color1->b = color2->b * factor + color1->b * color1->a; - color1->a = factor + color1->a; + if (color1->a < 1.0) + { + factor = color2->a * (1.0 - color1->a); + color1->r = color2->r * factor + color1->r * color1->a; + color1->g = color2->g * factor + color1->g * color1->a; + color1->b = color2->b * factor + color1->b * color1->a; + color1->a = factor + color1->a; + } break; } } diff --git a/plug-ins/Lighting/lighting_preview.c b/plug-ins/Lighting/lighting_preview.c index d507d780b1..c8ae27f8ad 100644 --- a/plug-ins/Lighting/lighting_preview.c +++ b/plug-ins/Lighting/lighting_preview.c @@ -39,7 +39,8 @@ compute_preview (gint startx, gint xcnt, ycnt, f1, f2; gdouble imagex, imagey; gint32 index = 0; - GimpRGB color, darkcheck, lightcheck, temp; + GimpRGB color; + GimpRGB lightcheck, darkcheck; GimpVector3 pos; get_ray_func ray_func; @@ -80,9 +81,10 @@ compute_preview (gint startx, init_compute (); precompute_init (width, height); - gimp_rgb_set (&lightcheck, 0.75, 0.75, 0.75); - gimp_rgb_set (&darkcheck, 0.50, 0.50, 0.50); - gimp_rgb_set (&color, 0.3, 0.7, 1.0); + gimp_rgba_set (&lightcheck, + GIMP_CHECK_LIGHT, GIMP_CHECK_LIGHT, GIMP_CHECK_LIGHT, 1.0); + gimp_rgba_set (&darkcheck, + GIMP_CHECK_DARK, GIMP_CHECK_DARK, GIMP_CHECK_DARK, 1.0); if (mapvals.bump_mapped == TRUE && mapvals.bumpmap_id != -1) { @@ -141,36 +143,26 @@ compute_preview (gint startx, if (f1) { if (color.a == 0.0) - { - color=lightcheck; - } + color = lightcheck; else - { - gimp_rgb_multiply (&color, color.a); - temp = lightcheck; - gimp_rgb_multiply (&temp, 1.0 - color.a); - gimp_rgb_add (&color, &temp); - } + gimp_rgb_composite (&color, &lightcheck, + GIMP_RGB_COMPOSITE_BEHIND); } else { if (color.a == 0.0) - { - color = darkcheck; - } + color = darkcheck; else - { - gimp_rgb_multiply (&color, color.a); - temp = darkcheck; - gimp_rgb_multiply (&temp, 1.0 - color.a); - gimp_rgb_add (&color, &temp); - } + gimp_rgb_composite (&color, &darkcheck, + GIMP_RGB_COMPOSITE_BEHIND); } } - preview_rgb_data[index++] = (guchar) (255.0 * color.r); - preview_rgb_data[index++] = (guchar) (255.0 * color.g); - preview_rgb_data[index++] = (guchar) (255.0 * color.b); + gimp_rgb_get_uchar (&color, + preview_rgb_data + index, + preview_rgb_data + index + 1, + preview_rgb_data + index + 2); + index += 3; imagex++; } else diff --git a/plug-ins/MapObject/mapobject_preview.c b/plug-ins/MapObject/mapobject_preview.c index ba57c0b28c..1bb2aa7f43 100644 --- a/plug-ins/MapObject/mapobject_preview.c +++ b/plug-ins/MapObject/mapobject_preview.c @@ -167,7 +167,6 @@ compute_preview (gint x, GimpVector3 p1, p2; GimpRGB color; GimpRGB lightcheck, darkcheck; - GimpRGB temp; gint xcnt, ycnt, f1, f2; glong index = 0; @@ -201,8 +200,10 @@ compute_preview (gint x, gimp_rgb_set_alpha (&background, 1.0); } - gimp_rgb_set (&lightcheck, 0.75, 0.75, 0.75); - gimp_rgb_set (&darkcheck, 0.50, 0.50, 0.50); + gimp_rgba_set (&lightcheck, + GIMP_CHECK_LIGHT, GIMP_CHECK_LIGHT, GIMP_CHECK_LIGHT, 1.0); + gimp_rgba_set (&darkcheck, + GIMP_CHECK_DARK, GIMP_CHECK_DARK, GIMP_CHECK_DARK, 1.0); gimp_vector3_set (&p2, -1.0, -1.0, 0.0); for (ycnt = 0; ycnt < ph; ycnt++) @@ -224,36 +225,26 @@ compute_preview (gint x, if (f1) { if (color.a == 0.0) - { - color = lightcheck; - } + color = lightcheck; else - { - gimp_rgb_multiply (&color, color.a); - temp = lightcheck; - gimp_rgb_multiply (&temp, 1.0 - color.a); - gimp_rgb_add (&color, &temp); - } - } + gimp_rgb_composite (&color, &lightcheck, + GIMP_RGB_COMPOSITE_BEHIND); + } else { if (color.a == 0.0) - { - color = darkcheck; - } + color = darkcheck; else - { - gimp_rgb_multiply (&color, color.a); - temp = darkcheck; - gimp_rgb_multiply (&temp, 1.0 - color.a); - gimp_rgb_add (&color, &temp); - } + gimp_rgb_composite (&color, &darkcheck, + GIMP_RGB_COMPOSITE_BEHIND); } } - preview_rgb_data[index++] = (guchar) (color.r * 255.0); - preview_rgb_data[index++] = (guchar) (color.g * 255.0); - preview_rgb_data[index++] = (guchar) (color.b * 255.0); + gimp_rgb_get_uchar (&color, + preview_rgb_data + index, + preview_rgb_data + index + 1, + preview_rgb_data + index + 2); + index += 3; } } diff --git a/plug-ins/MapObject/mapobject_shade.c b/plug-ins/MapObject/mapobject_shade.c index 5816030a1b..81586aaa31 100644 --- a/plug-ins/MapObject/mapobject_shade.c +++ b/plug-ins/MapObject/mapobject_shade.c @@ -219,8 +219,11 @@ get_ray_color_plane (GimpVector3 *pos) } } - if (color.a == 0.0) - color = background; + if (mapvals.transparent_background == FALSE && color.a < 1.0) + { + gimp_rgb_composite (&color, &background, + GIMP_RGB_COMPOSITE_BEHIND); + } return color; } @@ -391,11 +394,6 @@ get_ray_color_sphere (GimpVector3 *pos) gimp_rgb_clamp (&color2); - if (mapvals.transparent_background == FALSE && color2.a < 1.0) - { - gimp_rgb_composite (&color2, &background, GIMP_RGB_COMPOSITE_BEHIND); - } - /* Compute a mix of the first and second colors */ /* ============================================ */ @@ -404,7 +402,7 @@ get_ray_color_sphere (GimpVector3 *pos) } else if (color.a != 0.0 && inside == TRUE && - mapvals.lightsource.type!=NO_LIGHT) + mapvals.lightsource.type != NO_LIGHT) { /* Compute shading at this point */ /* ============================= */ @@ -421,8 +419,11 @@ get_ray_color_sphere (GimpVector3 *pos) } } - if (color.a == 0.0) - color = background; + if (mapvals.transparent_background == FALSE && color.a < 1.0) + { + gimp_rgb_composite (&color, &background, + GIMP_RGB_COMPOSITE_BEHIND); + } return color; }