gimp/libgimpbase/gimpchecks.c

128 lines
4.5 KiB
C
Raw Normal View History

2004-09-03 17:47:05 +08:00
/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* gimpchecks.c
* Copyright (C) 2004 Sven Neumann <sven@gimp.org>
*
* This library is free software: you can redistribute it and/or
2004-09-03 17:47:05 +08:00
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
2004-09-03 17:47:05 +08:00
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <https://www.gnu.org/licenses/>.
2004-09-03 17:47:05 +08:00
*/
#include "config.h"
#include <gegl.h>
2004-09-03 17:47:05 +08:00
#include <glib-object.h>
#include "gimpbasetypes.h"
#include "gimpchecks.h"
/**
* SECTION: gimpchecks
* @title: gimpchecks
* @short_description: Constants and functions related to rendering
* checkerboards.
*
* Constants and functions related to rendering checkerboards.
**/
/**
* gimp_checks_get_colors:
app, libgimp, libgimpbase, libgimpwidgets: better checkboard colors API. - Some coding style fixes (alignment, etc.). - Adding missing "Since: 3.0" annotations. We are still wondering whether this should go in 2.10, in which case, it would become "Since: 2.10.32" annotations. See discussion in !274. - Changing gimp_checks_get_colors() signature: merge the 4 color arguments into 2 (inout) arguments which seems a bit nicer in C, whereas binding handles such arguments correctly. The other alternative would have been to at least change the order to have out arguments in the end. I also hesitated to get another API in libgimp, which would have been config-aware (just returning the 2 check colors, depending on user-set Preferences), then having GimpPreviewArea handling 2 colors (without a GimpCheckType input). But actually, doing this, we'd remove the nice menu popup where one could choose a generic check type (not everyone wants to play with specific non-gray colors) in Gimp*Preview widgets. So in the end, I left this whole thing as-is. Instead I document the function with code sample to initialize properly the GimpPreviewArea (since libgimpwidgets/ are independent with no knowledge of the core config) in order to respect user preferences. - Hide the color properties in gimp_preview_area_menu_new() because anyway gimp_preview_area_menu_new() does not support GimpRGB properties right now (so all we get are warnings). It's still possible to select custom colors on GimpPreviewArea, simply we are stuck at the ones set in Preferences globally for now (unless a plug-in creates custom GUI to set these). Fixed Conflicts from !274: libgimp/gimp.h libgimpwidgets/gimppreviewarea.c
2022-05-14 01:00:07 +08:00
* @type: the checkerboard type
* @color1: (inout): current custom color and return location for the first color.
* @color2: (inout): current custom color and return location for the second color.
*
* Retrieves the colors to use when drawing a checkerboard for a certain
* #GimpCheckType and custom colors.
* If @type is %GIMP_CHECK_TYPE_CUSTOM_CHECKS, then @color1 and @color2
* will remain untouched, which means you must initialize them to the
* values expected for custom checks.
*
* To obtain the user-set colors in Preferences, just call:
* |[<!-- language="C" -->
* GeglColor *color1 = gimp_check_custom_color1 ();
* GeglColor *color2 = gimp_check_custom_color2 ();
app, libgimp, libgimpbase, libgimpwidgets: better checkboard colors API. - Some coding style fixes (alignment, etc.). - Adding missing "Since: 3.0" annotations. We are still wondering whether this should go in 2.10, in which case, it would become "Since: 2.10.32" annotations. See discussion in !274. - Changing gimp_checks_get_colors() signature: merge the 4 color arguments into 2 (inout) arguments which seems a bit nicer in C, whereas binding handles such arguments correctly. The other alternative would have been to at least change the order to have out arguments in the end. I also hesitated to get another API in libgimp, which would have been config-aware (just returning the 2 check colors, depending on user-set Preferences), then having GimpPreviewArea handling 2 colors (without a GimpCheckType input). But actually, doing this, we'd remove the nice menu popup where one could choose a generic check type (not everyone wants to play with specific non-gray colors) in Gimp*Preview widgets. So in the end, I left this whole thing as-is. Instead I document the function with code sample to initialize properly the GimpPreviewArea (since libgimpwidgets/ are independent with no knowledge of the core config) in order to respect user preferences. - Hide the color properties in gimp_preview_area_menu_new() because anyway gimp_preview_area_menu_new() does not support GimpRGB properties right now (so all we get are warnings). It's still possible to select custom colors on GimpPreviewArea, simply we are stuck at the ones set in Preferences globally for now (unless a plug-in creates custom GUI to set these). Fixed Conflicts from !274: libgimp/gimp.h libgimpwidgets/gimppreviewarea.c
2022-05-14 01:00:07 +08:00
* gimp_checks_get_colors (gimp_check_type (), &color1, &color2);
* ]|
*
* Since: 3.0
**/
void
gimp_checks_get_colors (GimpCheckType type,
GeglColor **color1,
GeglColor **color2)
{
g_return_if_fail ((color1 != NULL && GEGL_IS_COLOR (*color1)) || (color2 != NULL && GEGL_IS_COLOR (*color2)));
app, libgimp, libgimpbase, libgimpwidgets: better checkboard colors API. - Some coding style fixes (alignment, etc.). - Adding missing "Since: 3.0" annotations. We are still wondering whether this should go in 2.10, in which case, it would become "Since: 2.10.32" annotations. See discussion in !274. - Changing gimp_checks_get_colors() signature: merge the 4 color arguments into 2 (inout) arguments which seems a bit nicer in C, whereas binding handles such arguments correctly. The other alternative would have been to at least change the order to have out arguments in the end. I also hesitated to get another API in libgimp, which would have been config-aware (just returning the 2 check colors, depending on user-set Preferences), then having GimpPreviewArea handling 2 colors (without a GimpCheckType input). But actually, doing this, we'd remove the nice menu popup where one could choose a generic check type (not everyone wants to play with specific non-gray colors) in Gimp*Preview widgets. So in the end, I left this whole thing as-is. Instead I document the function with code sample to initialize properly the GimpPreviewArea (since libgimpwidgets/ are independent with no knowledge of the core config) in order to respect user preferences. - Hide the color properties in gimp_preview_area_menu_new() because anyway gimp_preview_area_menu_new() does not support GimpRGB properties right now (so all we get are warnings). It's still possible to select custom colors on GimpPreviewArea, simply we are stuck at the ones set in Preferences globally for now (unless a plug-in creates custom GUI to set these). Fixed Conflicts from !274: libgimp/gimp.h libgimpwidgets/gimppreviewarea.c
2022-05-14 01:00:07 +08:00
if (color1)
{
*color1 = gegl_color_duplicate (*color1);
switch (type)
{
case GIMP_CHECK_TYPE_LIGHT_CHECKS:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_LIGHT_COLOR_LIGHT);
break;
case GIMP_CHECK_TYPE_DARK_CHECKS:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_DARK_COLOR_LIGHT);
break;
case GIMP_CHECK_TYPE_WHITE_ONLY:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_WHITE_COLOR);
break;
case GIMP_CHECK_TYPE_GRAY_ONLY:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_GRAY_COLOR);
break;
case GIMP_CHECK_TYPE_BLACK_ONLY:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_BLACK_COLOR);
break;
case GIMP_CHECK_TYPE_CUSTOM_CHECKS:
app, libgimp, libgimpbase, libgimpwidgets: better checkboard colors API. - Some coding style fixes (alignment, etc.). - Adding missing "Since: 3.0" annotations. We are still wondering whether this should go in 2.10, in which case, it would become "Since: 2.10.32" annotations. See discussion in !274. - Changing gimp_checks_get_colors() signature: merge the 4 color arguments into 2 (inout) arguments which seems a bit nicer in C, whereas binding handles such arguments correctly. The other alternative would have been to at least change the order to have out arguments in the end. I also hesitated to get another API in libgimp, which would have been config-aware (just returning the 2 check colors, depending on user-set Preferences), then having GimpPreviewArea handling 2 colors (without a GimpCheckType input). But actually, doing this, we'd remove the nice menu popup where one could choose a generic check type (not everyone wants to play with specific non-gray colors) in Gimp*Preview widgets. So in the end, I left this whole thing as-is. Instead I document the function with code sample to initialize properly the GimpPreviewArea (since libgimpwidgets/ are independent with no knowledge of the core config) in order to respect user preferences. - Hide the color properties in gimp_preview_area_menu_new() because anyway gimp_preview_area_menu_new() does not support GimpRGB properties right now (so all we get are warnings). It's still possible to select custom colors on GimpPreviewArea, simply we are stuck at the ones set in Preferences globally for now (unless a plug-in creates custom GUI to set these). Fixed Conflicts from !274: libgimp/gimp.h libgimpwidgets/gimppreviewarea.c
2022-05-14 01:00:07 +08:00
/* Keep the current value. */
break;
default:
gegl_color_set_pixel (*color1, babl_format ("R'G'B'A double"), GIMP_CHECKS_GRAY_COLOR_LIGHT);
break;
}
}
if (color2)
{
*color2 = gegl_color_duplicate (*color2);
switch (type)
{
case GIMP_CHECK_TYPE_LIGHT_CHECKS:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_LIGHT_COLOR_DARK);
break;
case GIMP_CHECK_TYPE_DARK_CHECKS:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_DARK_COLOR_DARK);
break;
case GIMP_CHECK_TYPE_WHITE_ONLY:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_WHITE_COLOR);
break;
case GIMP_CHECK_TYPE_GRAY_ONLY:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_GRAY_COLOR);
break;
case GIMP_CHECK_TYPE_BLACK_ONLY:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_BLACK_COLOR);
break;
case GIMP_CHECK_TYPE_CUSTOM_CHECKS:
app, libgimp, libgimpbase, libgimpwidgets: better checkboard colors API. - Some coding style fixes (alignment, etc.). - Adding missing "Since: 3.0" annotations. We are still wondering whether this should go in 2.10, in which case, it would become "Since: 2.10.32" annotations. See discussion in !274. - Changing gimp_checks_get_colors() signature: merge the 4 color arguments into 2 (inout) arguments which seems a bit nicer in C, whereas binding handles such arguments correctly. The other alternative would have been to at least change the order to have out arguments in the end. I also hesitated to get another API in libgimp, which would have been config-aware (just returning the 2 check colors, depending on user-set Preferences), then having GimpPreviewArea handling 2 colors (without a GimpCheckType input). But actually, doing this, we'd remove the nice menu popup where one could choose a generic check type (not everyone wants to play with specific non-gray colors) in Gimp*Preview widgets. So in the end, I left this whole thing as-is. Instead I document the function with code sample to initialize properly the GimpPreviewArea (since libgimpwidgets/ are independent with no knowledge of the core config) in order to respect user preferences. - Hide the color properties in gimp_preview_area_menu_new() because anyway gimp_preview_area_menu_new() does not support GimpRGB properties right now (so all we get are warnings). It's still possible to select custom colors on GimpPreviewArea, simply we are stuck at the ones set in Preferences globally for now (unless a plug-in creates custom GUI to set these). Fixed Conflicts from !274: libgimp/gimp.h libgimpwidgets/gimppreviewarea.c
2022-05-14 01:00:07 +08:00
/* Keep the current value. */
break;
default:
gegl_color_set_pixel (*color2, babl_format ("R'G'B'A double"), GIMP_CHECKS_GRAY_COLOR_DARK);
break;
}
}
}