diff --git a/src/backends/fig_types.f90 b/src/backends/fig_types.f90 index cb5be94..2a8d99e 100644 --- a/src/backends/fig_types.f90 +++ b/src/backends/fig_types.f90 @@ -17,8 +17,8 @@ module fig_types end interface type :: canvas_size - integer(pixel) :: width - integer(pixel) :: height + integer :: width + integer :: height end type canvas_size contains diff --git a/src/backends/generic_cairo/cairo_utils.f90 b/src/backends/generic_cairo/cairo_utils.f90 index f77bd26..171b4bf 100644 --- a/src/backends/generic_cairo/cairo_utils.f90 +++ b/src/backends/generic_cairo/cairo_utils.f90 @@ -11,19 +11,14 @@ module fig_cairo_utils subroutine set_rgba(cr,color) type(c_ptr), intent(inout) :: cr type(RGB) :: color - call cairo_set_source_rgba(cr,normalize_ch(color%r),normalize_ch(color%g),normalize_ch(color%b),normalize_ch(color%a)) - end subroutine set_rgba + call cairo_set_source_rgba(cr,(color%r),(color%g),(color%b),(color%a)) - function normalize_ch(ch) result(res) - integer, intent(in) :: ch - real(kind=8) :: res - res= real(ch,kind=8)/real(2**rgb_bit_depth-1,kind=8) - end function normalize_ch + end subroutine set_rgba subroutine fill(cr,sh) type(c_ptr), intent(inout) :: cr class(shape), intent(in) :: sh - if (sh%fill_color%a .ne. 0) then + if (sh%fill_color%a > 0.0001) then call set_rgba(cr,sh%fill_color) call cairo_fill_preserve(cr) end if @@ -40,7 +35,7 @@ subroutine stroke(cr,sh) deallocate(dash_arr) end if - if (sh%stroke_color%a .ne. 0) then + if (sh%stroke_color%a > 0.0001) then call set_rgba(cr,sh%stroke_color) call cairo_set_line_width(cr,sh%stroke_width) call cairo_stroke(cr) diff --git a/src/fig_config.f90 b/src/fig_config.f90 index 423e1c8..1dd2e0a 100644 --- a/src/fig_config.f90 +++ b/src/fig_config.f90 @@ -1,11 +1,7 @@ module fig_config use iso_fortran_env, only: int32 implicit none - integer, parameter :: rgb_level = int32 - !! technically it should be int8 but there are problems with signed integers and bit manipulation - integer, parameter :: pixel = int32 !! 8 bits per every color channel (r,g,b,a) integer, parameter :: rgb_bit_depth = 8 - logical :: FIG_ABSOLUTE_COORDINATES = .false. end module fig_config diff --git a/src/fig_rgb.f90 b/src/fig_rgb.f90 index 478d48c..b480551 100644 --- a/src/fig_rgb.f90 +++ b/src/fig_rgb.f90 @@ -4,30 +4,35 @@ module fig_rgb type :: RGB sequence - integer(rgb_level) :: r - integer(rgb_level) :: g - integer(rgb_level) :: b - integer(rgb_level) :: a + real(kind=8) :: r + real(kind=8) :: g + real(kind=8) :: b + real(kind=8) :: a end type RGB contains elemental type(integer(pixel)) function rgb_to_int(color) result(rgb_int) type(RGB), intent(in) :: color + integer :: r,g,b,a + r=color%r*(2**rgb_bit_depth-1) + b=color%b*(2**rgb_bit_depth-1) + g=color%g*(2**rgb_bit_depth-1) + a=color%a*(2**rgb_bit_depth-1) - rgb_int = ior(ishft(color%a, rgb_bit_depth*3),& - ior(ishft(color%r, rgb_bit_depth*2),& - ior(ishft(color%g, rgb_bit_depth), color%b))) + rgb_int = ior(ishft(a, rgb_bit_depth*3),& + ior(ishft(r, rgb_bit_depth*2),& + ior(ishft(g, rgb_bit_depth), b))) end function rgb_to_int elemental type(RGB) function int_to_rgb(rgb_int) result(color) integer(pixel), intent(in):: rgb_int - color%a = ibits(rgb_int, 3*rgb_bit_depth, rgb_bit_depth) - color%r = ibits(rgb_int, 2*rgb_bit_depth, rgb_bit_depth) - color%g = ibits(rgb_int, rgb_bit_depth , rgb_bit_depth) - color%b = ibits(rgb_int, 0, rgb_bit_depth) + color%a = real(ibits(rgb_int, 3*rgb_bit_depth, rgb_bit_depth),kind=8) / (2**rgb_bit_depth-1) + color%r = real(ibits(rgb_int, 2*rgb_bit_depth, rgb_bit_depth),kind=8) / (2**rgb_bit_depth-1) + color%g = real(ibits(rgb_int, rgb_bit_depth , rgb_bit_depth),kind=8) / (2**rgb_bit_depth-1) + color%b = real(ibits(rgb_int, 0, rgb_bit_depth),kind=8) / (2**rgb_bit_depth-1) end function int_to_rgb end module fig_rgb diff --git a/src/fig_rgb_color_constants.f90 b/src/fig_rgb_color_constants.f90 index daf36c5..928c851 100644 --- a/src/fig_rgb_color_constants.f90 +++ b/src/fig_rgb_color_constants.f90 @@ -2,153 +2,153 @@ module fig_rgb_color_constants use fig_rgb implicit none - type(RGB), parameter :: FIG_COLOR_ALICEBLUE = RGB(240, 248, 255, 255) - type(RGB), parameter :: FIG_COLOR_ANTIQUEWHITE = RGB(250, 235, 215, 255) - type(RGB), parameter :: FIG_COLOR_AQUA = RGB( 0, 255, 255, 255) - type(RGB), parameter :: FIG_COLOR_AQUAMARINE = RGB(127, 255, 212, 255) - type(RGB), parameter :: FIG_COLOR_AZURE = RGB(240, 255, 255, 255) - type(RGB), parameter :: FIG_COLOR_BEIGE = RGB(245, 245, 220, 255) - type(RGB), parameter :: FIG_COLOR_BISQUE = RGB(255, 228, 196, 255) - type(RGB), parameter :: FIG_COLOR_BLACK = RGB( 0, 0, 0, 255) - type(RGB), parameter :: FIG_COLOR_BLANCHEDALMOND= RGB(255, 235, 205, 255) - type(RGB), parameter :: FIG_COLOR_BLUE = RGB( 0, 0, 255, 255) - type(RGB), parameter :: FIG_COLOR_BLUEVIOLET = RGB(138, 43, 226, 255) - type(RGB), parameter :: FIG_COLOR_BROWN = RGB(165, 42, 42, 255) - type(RGB), parameter :: FIG_COLOR_BURLYWOOD = RGB(222, 184, 135, 255) - type(RGB), parameter :: FIG_COLOR_CADETBLUE= RGB( 95, 158, 160, 255) - type(RGB), parameter :: FIG_COLOR_CHARTREUSE = RGB(127, 255, 0, 255) - type(RGB), parameter :: FIG_COLOR_CHOCOLATE = RGB(210, 105, 30, 255) - type(RGB), parameter :: FIG_COLOR_CORAL = RGB(255, 127, 80, 255) - type(RGB), parameter :: FIG_COLOR_CORNFLOWERBLUE = RGB(100, 149, 237, 255) - type(RGB), parameter :: FIG_COLOR_CORNSILK = RGB(255, 248, 220, 255) - type(RGB), parameter :: FIG_COLOR_CRIMSON = RGB(220, 20, 60, 255) - type(RGB), parameter :: FIG_COLOR_CYAN = RGB( 0, 255, 255, 255) - type(RGB), parameter :: FIG_COLOR_DARKBLUE = RGB( 0, 0, 139, 255) - type(RGB), parameter :: FIG_COLOR_DARKCYAN = RGB( 0, 139, 139, 255) - type(RGB), parameter :: FIG_COLOR_DARKGOLDENROD = RGB(184, 134, 11, 255) - type(RGB), parameter :: FIG_COLOR_DARKGRAY = RGB(169, 169, 169, 255) - type(RGB), parameter :: FIG_COLOR_DARKGREEN = RGB( 0, 100, 0, 255) - type(RGB), parameter :: FIG_COLOR_DARKGREY = RGB(169, 169, 169, 255) - type(RGB), parameter :: FIG_COLOR_DARKKHAKI = RGB(189, 183, 107, 255) - type(RGB), parameter :: FIG_COLOR_DARKMAGENTA = RGB(139, 0, 139, 255) - type(RGB), parameter :: FIG_COLOR_DARKOLIVEGREEN = RGB( 85, 107, 47, 255) - type(RGB), parameter :: FIG_COLOR_DARKORANGE = RGB(255, 140, 0, 255) - type(RGB), parameter :: FIG_COLOR_DARKORCHID = RGB(153, 50, 204, 255) - type(RGB), parameter :: FIG_COLOR_DARKED = RGB(139, 0, 0, 255) - type(RGB), parameter :: FIG_COLOR_DARKSALMON = RGB(233, 150, 122, 255) - type(RGB), parameter :: FIG_COLOR_DARKSEAGREEN = RGB(143, 188, 143, 255) - type(RGB), parameter :: FIG_COLOR_DARKSLATEBLUE = RGB( 72, 61, 139, 255) - type(RGB), parameter :: FIG_COLOR_DARKSLATEGRAY = RGB( 47, 79, 79, 255) - type(RGB), parameter :: FIG_COLOR_DARKSLATEGREY = RGB( 47, 79, 79, 255) - type(RGB), parameter :: FIG_COLOR_DARKTURQUOISE = RGB( 0, 206, 209, 255) - type(RGB), parameter :: FIG_COLOR_DARKVIOLETT = RGB(148, 0, 211, 255) - type(RGB), parameter :: FIG_COLOR_DEEPPINK = RGB(255, 20, 147, 255) - type(RGB), parameter :: FIG_COLOR_DEEPSKYBLUE = RGB( 0, 191, 255, 255) - type(RGB), parameter :: FIG_COLOR_DIMGRAY = RGB(105, 105, 105, 255) - type(RGB), parameter :: FIG_COLOR_DIMGREY = RGB(105, 105, 105, 255) - type(RGB), parameter :: FIG_COLOR_DODGERBLUE = RGB( 30, 144, 255, 255) - type(RGB), parameter :: FIG_COLOR_FIREBRICK = RGB(178, 34, 34, 255) - type(RGB), parameter :: FIG_COLOR_FLORALWHITE = RGB(255, 250, 240, 255) - type(RGB), parameter :: FIG_COLOR_FORESTGREEN = RGB( 34, 139, 34, 255) - type(RGB), parameter :: FIG_COLOR_FUCHSIA = RGB(255, 0, 255, 255) - type(RGB), parameter :: FIG_COLOR_GAINSBORO = RGB(220, 220, 220, 255) - type(RGB), parameter :: FIG_COLOR_GHOSTWHITE= RGB(248, 248, 255, 255) - type(RGB), parameter :: FIG_COLOR_GOLD = RGB(255, 215, 0, 255) - type(RGB), parameter :: FIG_COLOR_GOLDENROD = RGB(218, 165, 32, 255) - type(RGB), parameter :: FIG_COLOR_GRAY = RGB(128, 128, 128, 255) - type(RGB), parameter :: FIG_COLOR_GREY = RGB(128, 128, 128, 255) - type(RGB), parameter :: FIG_COLOR_GREEN = RGB( 0, 128, 0, 255) - type(RGB), parameter :: FIG_COLOR_GREENYELLOW = RGB(173, 255, 47, 255) - type(RGB), parameter :: FIG_COLOR_HONEYDEW = RGB(240, 255, 240, 255) - type(RGB), parameter :: FIG_COLOR_HOTPINK = RGB(255, 105, 180, 255) - type(RGB), parameter :: FIG_COLOR_INDIANRED = RGB(205, 92, 92, 255) - type(RGB), parameter :: FIG_COLOR_INDIGO = RGB( 75, 0, 130, 255) - type(RGB), parameter :: FIG_COLOR_IVORY = RGB(255, 255, 240, 255) - type(RGB), parameter :: FIG_COLOR_KHAKI = RGB(240, 230, 140, 255) - type(RGB), parameter :: FIG_COLOR_LAVENDER = RGB(230, 230, 250, 255) - type(RGB), parameter :: FIG_COLOR_LAVENDERBLUSH = RGB(255, 240, 245, 255) - type(RGB), parameter :: FIG_COLOR_LAWNGREEN = RGB(124, 252, 0, 255) - type(RGB), parameter :: FIG_COLOR_LEMONCHIFFON = RGB(255, 250, 205, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTBLUE = RGB(173, 216, 230, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTCORAL = RGB(240, 128, 128, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTCYAN = RGB(224, 255, 255, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTGOLDENRODYELLOW = RGB(250, 250, 210, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTGRAY = RGB(211, 211, 211, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTGREEN = RGB(144, 238, 144, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTGREY = RGB(211, 211, 211, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTPINK = RGB(255, 182, 193, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSALMON = RGB(255, 160, 122, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSEAGREEN = RGB( 32, 178, 170, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSKYBLUE = RGB(135, 206, 250, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSLATEGRAY = RGB(119, 136, 153, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSLATEGREY = RGB(119, 136, 153, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTSTEELBLUE = RGB(176, 196, 222, 255) - type(RGB), parameter :: FIG_COLOR_LIGHTYELLOW = RGB(255, 255, 224, 255) - type(RGB), parameter :: FIG_COLOR_LIME = RGB( 0, 255, 0, 255) - type(RGB), parameter :: FIG_COLOR_LIMEGREEN = RGB( 50, 205, 50, 255) - type(RGB), parameter :: FIG_COLOR_LINEN = RGB(250, 240, 230, 255) - type(RGB), parameter :: FIG_COLOR_MAGENTA =RGB(255, 0, 255, 255) - type(RGB), parameter :: FIG_COLOR_MAROON =RGB(128, 0, 0, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMAQUAMARINE = RGB(102, 205, 170, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMBLUE = RGB( 0, 0, 205, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMORCHID = RGB(186, 85, 211, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMPURPLE = RGB(147, 112, 219, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMSEAGREEN = RGB( 60, 179, 113, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMSLATEBLUE = RGB(123, 104, 238, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMSPRINGGREEN = RGB( 0, 250, 154, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMTURQUOISE = RGB( 72, 209, 204, 255) - type(RGB), parameter :: FIG_COLOR_MEDIUMVIOLETRED = RGB(199, 21, 133, 255) - type(RGB), parameter :: FIG_COLOR_MIDNIGHTBLUE = RGB( 25, 25, 112, 255) - type(RGB), parameter :: FIG_COLOR_MINTCREAM = RGB(245, 255, 250, 255) - type(RGB), parameter :: FIG_COLOR_MISTYROSE = RGB(255, 228, 225, 255) - type(RGB), parameter :: FIG_COLOR_MOCCASIN = RGB(255, 228, 181, 255) - type(RGB), parameter :: FIG_COLOR_NAVAJOWHITE = RGB(255, 222, 173, 255) - type(RGB), parameter :: FIG_COLOR_NAVY = RGB( 0, 0, 128, 255) - type(RGB), parameter :: FIG_COLOR_OLDLACE = RGB(253, 245, 230, 255) - type(RGB), parameter :: FIG_COLOR_OLIVE = RGB(128, 128, 0, 255) - type(RGB), parameter :: FIG_COLOR_OLIVEDRAB = RGB(107, 142, 35, 255) - type(RGB), parameter :: FIG_COLOR_ORANGE = RGB(255, 165, 0, 255) - type(RGB), parameter :: FIG_COLOR_ORANGERED = RGB(255, 69, 0, 255) - type(RGB), parameter :: FIG_COLOR_ORCHID = RGB(218, 112, 214, 255) - type(RGB), parameter :: FIG_COLOR_PALEGOLDENROD = RGB(238, 232, 170, 255) - type(RGB), parameter :: FIG_COLOR_PALEGREEN = RGB(152, 251, 152, 255) - type(RGB), parameter :: FIG_COLOR_PALETURQUOISE = RGB(175, 238, 238, 255) - type(RGB), parameter :: FIG_COLOR_PALEVIOLETRED = RGB(219, 112, 147, 255) - type(RGB), parameter :: FIG_COLOR_PAPAYAWHIP = RGB(255, 239, 213, 255) - type(RGB), parameter :: FIG_COLOR_PEACHPUF = RGB(255, 218, 185, 255) - type(RGB), parameter :: FIG_COLOR_PERU = RGB(205, 133, 63, 255) - type(RGB), parameter :: FIG_COLOR_PINK = RGB(255, 192, 203, 255) - type(RGB), parameter :: FIG_COLOR_PLUM = RGB(221, 160, 221, 255) - type(RGB), parameter :: FIG_COLOR_POWDERBLUE = RGB(176, 224, 230, 255) - type(RGB), parameter :: FIG_COLOR_PURPLE = RGB(128, 0, 128, 255) - type(RGB), parameter :: FIG_COLOR_RED = RGB(255, 0, 0, 255) - type(RGB), parameter :: FIG_COLOR_ROSYBROWN = RGB(188, 143, 143, 255) - type(RGB), parameter :: FIG_COLOR_ROYALBLUE = RGB( 65, 105, 225, 255) - type(RGB), parameter :: FIG_COLOR_SADDLEBROWN = RGB(139, 69, 19, 255) - type(RGB), parameter :: FIG_COLOR_SALMON = RGB(250, 128, 114, 255) - type(RGB), parameter :: FIG_COLOR_SANDYBROWN = RGB(244, 164, 96, 255) - type(RGB), parameter :: FIG_COLOR_SEAGREEN = RGB( 46, 139, 87, 255) - type(RGB), parameter :: FIG_COLOR_SEASHELL = RGB(255, 245, 238, 255) - type(RGB), parameter :: FIG_COLOR_SIENNA = RGB(160, 82, 45, 255) - type(RGB), parameter :: FIG_COLOR_SILVER = RGB(192, 192, 192, 255) - type(RGB), parameter :: FIG_COLOR_SKYBLUE = RGB(135, 206, 235, 255) - type(RGB), parameter :: FIG_COLOR_SLATEBLUE = RGB(106, 90, 205, 255) - type(RGB), parameter :: FIG_COLOR_SLATEGRAY = RGB(112, 128, 144, 255) - type(RGB), parameter :: FIG_COLOR_SLATEGREY = RGB(112, 128, 144, 255) - type(RGB), parameter :: FIG_COLOR_SNOW = RGB(255, 250, 250, 255) - type(RGB), parameter :: FIG_COLOR_SPRINGGREEN = RGB( 0, 255, 127, 255) - type(RGB), parameter :: FIG_COLOR_STEELBLUE = RGB( 70, 130, 180, 255) - type(RGB), parameter :: FIG_COLOR_TAN = RGB(210, 180, 140, 255) - type(RGB), parameter :: FIG_COLOR_TEAL = RGB( 0, 128, 128, 255) - type(RGB), parameter :: FIG_COLOR_THISTLE = RGB(216, 191, 216, 255) - type(RGB), parameter :: FIG_COLOR_TOMATO = RGB(255, 99, 71, 255) - type(RGB), parameter :: FIG_COLOR_TURQUOISE = RGB( 64, 224, 208, 255) - type(RGB), parameter :: FIG_COLOR_VIOLET = RGB(238, 130, 238, 255) - type(RGB), parameter :: FIG_COLOR_WHEAT = RGB(245, 222, 179, 255) - type(RGB), parameter :: FIG_COLOR_WHITE = RGB(255, 255, 255, 255) - type(RGB), parameter :: FIG_COLOR_WHITESMOKE = RGB(245, 245, 245, 255) - type(RGB), parameter :: FIG_COLOR_YELLOW = RGB(255, 255, 0, 255) - type(RGB), parameter :: FIG_COLOR_YELLOWGREEN = RGB(154, 205, 50, 255) - type(RGB), parameter :: FIG_COLOR_BLANK = RGB(0, 0, 0, 0) + type(RGB), parameter :: FIG_COLOR_ALICEBLUE= RGB(0.9412, 0.9725, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_ANTIQUEWHITE = RGB(0.9804, 0.9216, 0.8431, 1.0000) + type(RGB), parameter :: FIG_COLOR_AQUA = RGB( 0.0000, 1.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_AQUAMARINE = RGB(0.4980, 1.0000, 0.8314, 1.0000) + type(RGB), parameter :: FIG_COLOR_AZURE = RGB(0.9412, 1.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_BEIGE = RGB(0.9608, 0.9608, 0.8627, 1.0000) + type(RGB), parameter :: FIG_COLOR_BISQUE = RGB(1.0000, 0.8941, 0.7686, 1.0000) + type(RGB), parameter :: FIG_COLOR_BLACK = RGB( 0.0000, 0.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_BLANCHEDALMOND= RGB(1.0000, 0.9216, 0.8039, 1.0000) + type(RGB), parameter :: FIG_COLOR_BLUE = RGB( 0.0000, 0.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_BLUEVIOLET = RGB(0.5412, 0.1686, 0.8863, 1.0000) + type(RGB), parameter :: FIG_COLOR_BROWN = RGB(0.6471, 0.1647, 0.1647, 1.0000) + type(RGB), parameter :: FIG_COLOR_BURLYWOOD = RGB(0.8706, 0.7216, 0.5294, 1.0000) + type(RGB), parameter :: FIG_COLOR_CADETBLUE= RGB( 0.3725, 0.6196, 0.6275, 1.0000) + type(RGB), parameter :: FIG_COLOR_CHARTREUSE = RGB(0.4980, 1.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_CHOCOLATE = RGB(0.8235, 0.4118, 0.1176, 1.0000) + type(RGB), parameter :: FIG_COLOR_CORAL = RGB(1.0000, 0.4980, 0.3137, 1.0000) + type(RGB), parameter :: FIG_COLOR_CORNFLOWERBLUE = RGB(0.3922, 0.5843, 0.9294, 1.0000) + type(RGB), parameter :: FIG_COLOR_CORNSILK = RGB(1.0000, 0.9725, 0.8627, 1.0000) + type(RGB), parameter :: FIG_COLOR_CRIMSON = RGB(0.8627, 0.0784, 0.2353, 1.0000) + type(RGB), parameter :: FIG_COLOR_CYAN = RGB( 0.0000, 1.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKBLUE = RGB( 0.0000, 0.0000, 0.5451, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKCYAN = RGB( 0.0000, 0.5451, 0.5451, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKGOLDENROD = RGB(0.7216, 0.5255, 0.0431, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKGRAY = RGB(0.6627, 0.6627, 0.6627, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKGREEN = RGB( 0.0000, 0.3922, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKGREY = RGB(0.6627, 0.6627, 0.6627, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKKHAKI = RGB(0.7412, 0.7176, 0.4196, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKMAGENTA = RGB(0.5451, 0.0000, 0.5451, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKOLIVEGREEN = RGB( 0.3333, 0.4196, 0.1843, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKORANGE = RGB(1.0000, 0.5490, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKORCHID = RGB(0.6000, 0.1961, 0.8000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKED = RGB(0.5451, 0.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKSALMON = RGB(0.9137, 0.5882, 0.4784, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKSEAGREEN = RGB(0.5608, 0.7373, 0.5608, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKSLATEBLUE = RGB( 0.2824, 0.2392, 0.5451, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKSLATEGRAY = RGB( 0.1843, 0.3098, 0.3098, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKSLATEGREY = RGB( 0.1843, 0.3098, 0.3098, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKTURQUOISE = RGB( 0.0000, 0.8078, 0.8196, 1.0000) + type(RGB), parameter :: FIG_COLOR_DARKVIOLETT = RGB(0.5804, 0.0000, 0.8275, 1.0000) + type(RGB), parameter :: FIG_COLOR_DEEPPINK = RGB(1.0000, 0.0784, 0.5765, 1.0000) + type(RGB), parameter :: FIG_COLOR_DEEPSKYBLUE = RGB( 0.0000, 0.7490, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_DIMGRAY = RGB(0.4118, 0.4118, 0.4118, 1.0000) + type(RGB), parameter :: FIG_COLOR_DIMGREY = RGB(0.4118, 0.4118, 0.4118, 1.0000) + type(RGB), parameter :: FIG_COLOR_DODGERBLUE = RGB( 0.1176, 0.5647, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_FIREBRICK = RGB(0.6980, 0.1333, 0.1333, 1.0000) + type(RGB), parameter :: FIG_COLOR_FLORALWHITE = RGB(1.0000, 0.9804, 0.9412, 1.0000) + type(RGB), parameter :: FIG_COLOR_FORESTGREEN = RGB( 0.1333, 0.5451, 0.1333, 1.0000) + type(RGB), parameter :: FIG_COLOR_FUCHSIA = RGB(1.0000, 0.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_GAINSBORO = RGB(0.8627, 0.8627, 0.8627, 1.0000) + type(RGB), parameter :: FIG_COLOR_GHOSTWHITE= RGB(0.9725, 0.9725, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_GOLD = RGB(1.0000, 0.8431, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_GOLDENROD = RGB(0.8549, 0.6471, 0.1255, 1.0000) + type(RGB), parameter :: FIG_COLOR_GRAY = RGB(0.5020, 0.5020, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_GREY = RGB(0.5020, 0.5020, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_GREEN = RGB( 0.0000, 0.5020, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_GREENYELLOW = RGB(0.6784, 1.0000, 0.1843, 1.0000) + type(RGB), parameter :: FIG_COLOR_HONEYDEW = RGB(0.9412, 1.0000, 0.9412, 1.0000) + type(RGB), parameter :: FIG_COLOR_HOTPINK = RGB(1.0000, 0.4118, 0.7059, 1.0000) + type(RGB), parameter :: FIG_COLOR_INDIANRED = RGB(0.8039, 0.3608, 0.3608, 1.0000) + type(RGB), parameter :: FIG_COLOR_INDIGO = RGB( 0.2941, 0.0000, 0.5098, 1.0000) + type(RGB), parameter :: FIG_COLOR_IVORY = RGB(1.0000, 1.0000, 0.9412, 1.0000) + type(RGB), parameter :: FIG_COLOR_KHAKI = RGB(0.9412, 0.9020, 0.5490, 1.0000) + type(RGB), parameter :: FIG_COLOR_LAVENDER = RGB(0.9020, 0.9020, 0.9804, 1.0000) + type(RGB), parameter :: FIG_COLOR_LAVENDERBLUSH = RGB(1.0000, 0.9412, 0.9608, 1.0000) + type(RGB), parameter :: FIG_COLOR_LAWNGREEN = RGB(0.4863, 0.9882, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_LEMONCHIFFON = RGB(1.0000, 0.9804, 0.8039, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTBLUE = RGB(0.6784, 0.8471, 0.9020, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTCORAL = RGB(0.9412, 0.5020, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTCYAN = RGB(0.8784, 1.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTGOLDENRODYELLOW = RGB(0.9804, 0.9804, 0.8235, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTGRAY = RGB(0.8275, 0.8275, 0.8275, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTGREEN = RGB(0.5647, 0.9333, 0.5647, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTGREY = RGB(0.8275, 0.8275, 0.8275, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTPINK = RGB(1.0000, 0.7137, 0.7569, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSALMON = RGB(1.0000, 0.6275, 0.4784, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSEAGREEN = RGB( 0.1255, 0.6980, 0.6667, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSKYBLUE = RGB(0.5294, 0.8078, 0.9804, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSLATEGRAY = RGB(0.4667, 0.5333, 0.6000, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSLATEGREY = RGB(0.4667, 0.5333, 0.6000, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTSTEELBLUE = RGB(0.6902, 0.7686, 0.8706, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIGHTYELLOW = RGB(1.0000, 1.0000, 0.8784, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIME = RGB( 0.0000, 1.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_LIMEGREEN = RGB( 0.1961, 0.8039, 0.1961, 1.0000) + type(RGB), parameter :: FIG_COLOR_LINEN = RGB(0.9804, 0.9412, 0.9020, 1.0000) + type(RGB), parameter :: FIG_COLOR_MAGENTA =RGB(1.0000, 0.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_MAROON =RGB(0.5020, 0.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMAQUAMARINE = RGB(0.4000, 0.8039, 0.6667, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMBLUE = RGB( 0.0000, 0.0000, 0.8039, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMORCHID = RGB(0.7294, 0.3333, 0.8275, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMPURPLE = RGB(0.5765, 0.4392, 0.8588, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMSEAGREEN = RGB( 0.2353, 0.7020, 0.4431, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMSLATEBLUE = RGB(0.4824, 0.4078, 0.9333, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMSPRINGGREEN = RGB( 0.0000, 0.9804, 0.6039, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMTURQUOISE = RGB( 0.2824, 0.8196, 0.8000, 1.0000) + type(RGB), parameter :: FIG_COLOR_MEDIUMVIOLETRED = RGB(0.7804, 0.0824, 0.5216, 1.0000) + type(RGB), parameter :: FIG_COLOR_MIDNIGHTBLUE = RGB( 0.0980, 0.0980, 0.4392, 1.0000) + type(RGB), parameter :: FIG_COLOR_MINTCREAM = RGB(0.9608, 1.0000, 0.9804, 1.0000) + type(RGB), parameter :: FIG_COLOR_MISTYROSE = RGB(1.0000, 0.8941, 0.8824, 1.0000) + type(RGB), parameter :: FIG_COLOR_MOCCASIN = RGB(1.0000, 0.8941, 0.7098, 1.0000) + type(RGB), parameter :: FIG_COLOR_NAVAJOWHITE = RGB(1.0000, 0.8706, 0.6784, 1.0000) + type(RGB), parameter :: FIG_COLOR_NAVY = RGB( 0.0000, 0.0000, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_OLDLACE = RGB(0.9922, 0.9608, 0.9020, 1.0000) + type(RGB), parameter :: FIG_COLOR_OLIVE = RGB(0.5020, 0.5020, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_OLIVEDRAB = RGB(0.4196, 0.5569, 0.1373, 1.0000) + type(RGB), parameter :: FIG_COLOR_ORANGE = RGB(1.0000, 0.6471, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_ORANGERED = RGB(1.0000, 0.2706, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_ORCHID = RGB(0.8549, 0.4392, 0.8392, 1.0000) + type(RGB), parameter :: FIG_COLOR_PALEGOLDENROD = RGB(0.9333, 0.9098, 0.6667, 1.0000) + type(RGB), parameter :: FIG_COLOR_PALEGREEN = RGB(0.5961, 0.9843, 0.5961, 1.0000) + type(RGB), parameter :: FIG_COLOR_PALETURQUOISE = RGB(0.6863, 0.9333, 0.9333, 1.0000) + type(RGB), parameter :: FIG_COLOR_PALEVIOLETRED = RGB(0.8588, 0.4392, 0.5765, 1.0000) + type(RGB), parameter :: FIG_COLOR_PAPAYAWHIP = RGB(1.0000, 0.9373, 0.8353, 1.0000) + type(RGB), parameter :: FIG_COLOR_PEACHPUF = RGB(1.0000, 0.8549, 0.7255, 1.0000) + type(RGB), parameter :: FIG_COLOR_PERU = RGB(0.8039, 0.5216, 0.2471, 1.0000) + type(RGB), parameter :: FIG_COLOR_PINK = RGB(1.0000, 0.7529, 0.7961, 1.0000) + type(RGB), parameter :: FIG_COLOR_PLUM = RGB(0.8667, 0.6275, 0.8667, 1.0000) + type(RGB), parameter :: FIG_COLOR_POWDERBLUE = RGB(0.6902, 0.8784, 0.9020, 1.0000) + type(RGB), parameter :: FIG_COLOR_PURPLE = RGB(0.5020, 0.0000, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_RED = RGB(1.0000, 0.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_ROSYBROWN = RGB(0.7373, 0.5608, 0.5608, 1.0000) + type(RGB), parameter :: FIG_COLOR_ROYALBLUE = RGB( 0.2549, 0.4118, 0.8824, 1.0000) + type(RGB), parameter :: FIG_COLOR_SADDLEBROWN = RGB(0.5451, 0.2706, 0.0745, 1.0000) + type(RGB), parameter :: FIG_COLOR_SALMON = RGB(0.9804, 0.5020, 0.4471, 1.0000) + type(RGB), parameter :: FIG_COLOR_SANDYBROWN = RGB(0.9569, 0.6431, 0.3765, 1.0000) + type(RGB), parameter :: FIG_COLOR_SEAGREEN = RGB( 0.1804, 0.5451, 0.3412, 1.0000) + type(RGB), parameter :: FIG_COLOR_SEASHELL = RGB(1.0000, 0.9608, 0.9333, 1.0000) + type(RGB), parameter :: FIG_COLOR_SIENNA = RGB(0.6275, 0.3216, 0.1765, 1.0000) + type(RGB), parameter :: FIG_COLOR_SILVER = RGB(0.7529, 0.7529, 0.7529, 1.0000) + type(RGB), parameter :: FIG_COLOR_SKYBLUE = RGB(0.5294, 0.8078, 0.9216, 1.0000) + type(RGB), parameter :: FIG_COLOR_SLATEBLUE = RGB(0.4157, 0.3529, 0.8039, 1.0000) + type(RGB), parameter :: FIG_COLOR_SLATEGRAY = RGB(0.4392, 0.5020, 0.5647, 1.0000) + type(RGB), parameter :: FIG_COLOR_SLATEGREY = RGB(0.4392, 0.5020, 0.5647, 1.0000) + type(RGB), parameter :: FIG_COLOR_SNOW = RGB(1.0000, 0.9804, 0.9804, 1.0000) + type(RGB), parameter :: FIG_COLOR_SPRINGGREEN = RGB( 0.0000, 1.0000, 0.4980, 1.0000) + type(RGB), parameter :: FIG_COLOR_STEELBLUE = RGB( 0.2745, 0.5098, 0.7059, 1.0000) + type(RGB), parameter :: FIG_COLOR_TAN = RGB(0.8235, 0.7059, 0.5490, 1.0000) + type(RGB), parameter :: FIG_COLOR_TEAL = RGB( 0.0000, 0.5020, 0.5020, 1.0000) + type(RGB), parameter :: FIG_COLOR_THISTLE = RGB(0.8471, 0.7490, 0.8471, 1.0000) + type(RGB), parameter :: FIG_COLOR_TOMATO = RGB(1.0000, 0.3882, 0.2784, 1.0000) + type(RGB), parameter :: FIG_COLOR_TURQUOISE = RGB( 0.2510, 0.8784, 0.8157, 1.0000) + type(RGB), parameter :: FIG_COLOR_VIOLET = RGB(0.9333, 0.5098, 0.9333, 1.0000) + type(RGB), parameter :: FIG_COLOR_WHEAT = RGB(0.9608, 0.8706, 0.7020, 1.0000) + type(RGB), parameter :: FIG_COLOR_WHITE = RGB(1.0000, 1.0000, 1.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_WHITESMOKE = RGB(0.9608, 0.9608, 0.9608, 1.0000) + type(RGB), parameter :: FIG_COLOR_YELLOW = RGB(1.0000, 1.0000, 0.0000, 1.0000) + type(RGB), parameter :: FIG_COLOR_YELLOWGREEN = RGB(0.6039, 0.8039, 0.1961, 1.0000) + type(RGB), parameter :: FIG_COLOR_BLANK = RGB(0.0000, 0.0000, 0.0000, 0.0000) end module fig_rgb_color_constants diff --git a/test/chess.f90 b/test/chess.f90 index 709ca78..6d75f87 100644 --- a/test/chess.f90 +++ b/test/chess.f90 @@ -50,7 +50,7 @@ program chess_checker call svg_canva%apply_shapes(checker) call svg_canva%save_to_svg() call svg_canva%destroy() - call bitmap_canva%init(WIDTH,HEIGHT,file_name) + call bitmap_canva%init(HEIGHT,WIDTH,file_name) call bitmap_canva%apply_shapes(checker) call bitmap_canva%save_to_png() call bitmap_canva%save_to_ppm() diff --git a/test/circle.f90 b/test/circle.f90 index e375adb..f0a8c3a 100644 --- a/test/circle.f90 +++ b/test/circle.f90 @@ -21,7 +21,7 @@ program circle_test call canva%init() bg = FIG_COLOR_GREEN - bg%a = 150 + bg%a = 150/255. call canva%set_background(bg) ! Circle parameters diff --git a/test/drawing_test.f90 b/test/drawing_test.f90 index 0dde54e..59624f9 100644 --- a/test/drawing_test.f90 +++ b/test/drawing_test.f90 @@ -34,9 +34,9 @@ program drawing_test_all c%center%y = 100.0 / CANVAS_HEIGHT c%r = 50.0 c%fill_color = FIG_COLOR_PINK - c%fill_color%a = 100 + c%fill_color%a = .5 c%stroke_color = FIG_COLOR_RED - c%stroke_color%a = 100 + c%stroke_color%a = .5 call canva%add_shape(c) ! Ellipse @@ -45,10 +45,10 @@ program drawing_test_all elp%rx = 50.0 elp%ry = 25.0 color = FIG_COLOR_GOLD - color%a = 100 + color%a = .5 elp%fill_color = color elp%stroke_color = FIG_COLOR_RED - elp%stroke_color%a = 100 + elp%stroke_color%a = .5 call canva%add_shape(elp) ! Rectangle 1 @@ -57,7 +57,7 @@ program drawing_test_all r%width = 100.0 r%height = 50.0 r%fill_color = FIG_COLOR_BLUE - r%fill_color%a = 100 + r%fill_color%a = .5 r%stroke_width = 10 r%stroke_color = FIG_COLOR_GOLD call canva%add_shape(r) @@ -68,12 +68,12 @@ program drawing_test_all r%width = 120.0 r%height = 50.0 r%fill_color = FIG_COLOR_RED - r%fill_color%a = 100 + r%fill_color%a = .5 r%rx=5 r%ry=5 r%stroke_width = 6 r%stroke_color = FIG_COLOR_SEAGREEN - r%stroke_color%a=150 + r%stroke_color%a=.5 call canva%add_shape(r) ! Line @@ -86,7 +86,7 @@ program drawing_test_all call canva%add_shape(l) l%stroke_width = 2 l%stroke_color = FIG_COLOR_RED - l%stroke_color%a=100 + l%stroke_color%a=.5 call canva%add_shape(l) @@ -96,12 +96,12 @@ program drawing_test_all l%p2%x = 550.0 / CANVAS_WIDTH l%p2%y = 400.0 / CANVAS_HEIGHT l%stroke_color = FIG_COLOR_BLACK - l%stroke_color%a=100 + l%stroke_color%a=.5 l%stroke_width = 50 call canva%add_shape(l) l%stroke_width = 2 l%stroke_color = FIG_COLOR_RED - l%stroke_color%a=100 + l%stroke_color%a=.5 call canva%add_shape(l) @@ -113,7 +113,7 @@ program drawing_test_all ar%start_angle= 0 ar%end_angle= pi * 1.2 ar%fill_color = FIG_COLOR_INDIGO - ar%fill_color%a=100 + ar%fill_color%a=.5 ar%stroke_color = FIG_COLOR_BROWN call canva%add_shape(ar) diff --git a/test/int_to_RGB_to_int.f90 b/test/int_to_RGB_to_int.f90 index a35e352..ff6ef2f 100644 --- a/test/int_to_RGB_to_int.f90 +++ b/test/int_to_RGB_to_int.f90 @@ -8,22 +8,21 @@ program int_to_RGB_to_int do color_counter=1,1000 call random_number(intermediate_real) - rgb_old%r = int(256*intermediate_real) + rgb_old%r = intermediate_real call random_number(intermediate_real) - rgb_old%g = int(256*intermediate_real) + rgb_old%g = intermediate_real call random_number(intermediate_real) - rgb_old%b = int(256*intermediate_real) + rgb_old%b = intermediate_real call random_number(intermediate_real) - rgb_old%a = int(256*intermediate_real) + rgb_old%a = intermediate_real color_integer = rgb_to_int(rgb_old) - rgb_new=int_to_rgb(color_integer) - if (rgb_old%r /= rgb_new%r .or. & - rgb_old%g /= rgb_new%g .or. & - rgb_old%b /= rgb_new%b .or. & - rgb_old%a /= rgb_new%a ) then + if (abs(rgb_old%r - rgb_new%r) > 1.0e-2 .or. & + abs(rgb_old%g - rgb_new%g) > 1.0e-2 .or. & + abs(rgb_old%b - rgb_new%b) > 1.0e-2 .or. & + abs(rgb_old%a - rgb_new%a) > 1.0e-2) then error stop "converting between RGB and int or vice versa went wrong" endif diff --git a/test/line.f90 b/test/line.f90 index 7dd5514..2b9f471 100644 --- a/test/line.f90 +++ b/test/line.f90 @@ -42,9 +42,8 @@ program radial_lines angle_step = 1.0 * atan(1.0) / NUM_LINES do i = 0, NUM_LINES - 1 - call random_color(color) angle = 4 * i * angle_step - call draw_radial_line(radial_canvas, cx, cy, radius, angle, color) + call draw_radial_line(radial_canvas, cx, cy, radius, angle) end do call svg_canva%init(CANVAS_WIDTH,CANVAS_HEIGHT,file_name) @@ -60,11 +59,10 @@ program radial_lines call test_both(file_name,bitmap_canva) contains - subroutine draw_radial_line(canva, cx, cy, radius, angle, color) + subroutine draw_radial_line(canva, cx, cy, radius, angle) type(drawing), intent(inout) :: canva real, intent(in) :: cx, cy, radius real, intent(in) :: angle - type(RGB), intent(in) :: color integer :: x1, y1, x2, y2 real :: cos_angle, sin_angle @@ -79,18 +77,5 @@ subroutine draw_radial_line(canva, cx, cy, radius, angle, color) call canva%add_shape(sh) end subroutine draw_radial_line - - subroutine random_color(color) - type(RGB), intent(out) :: color - real :: r, g, b - call random_number(r) - call random_number(g) - call random_number(b) - color%r = int(r * 255) - color%g = int(g * 255) - color%b = int(b * 255) - color%a = 255 - end subroutine random_color - end program radial_lines diff --git a/test/triangle_pattern.f90 b/test/triangle_pattern.f90 index 4f17234..5f71c67 100644 --- a/test/triangle_pattern.f90 +++ b/test/triangle_pattern.f90 @@ -95,16 +95,5 @@ program test_fig_fill_triangle call test_both(file_name,bitmap_canva) contains - subroutine random_color(color) - type(RGB) :: color - real :: r, g, b - call random_number(r) - call random_number(g) - call random_number(b) - color%r = int(r * 255) - color%g = int(g * 255) - color%b = int(b * 255) - color%a = 255 - end subroutine random_color end program test_fig_fill_triangle