The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#!/usr/bin/perl -w
use Gimp;
use strict;
# 2014/04/20 Ed J: bit of a stir, still same really
# 12/5/03: <sjburges@gimp.org>
# s/->mask/->get_mask
# 3/21/04: <sjburges@gimp.org>
# s/AlphaFade/alpha_fade/ to be compatible with PDB naming conventions
###
# Globals
###
my ($direction, $proceedFlag);
my ($plugin) = "plug_in_alpha_fade";
# XPM's that I removed the $ and the @'s from (they get interpreted in
# strings, which makes for nasty problems).
my @arr = (
["24 24 66 1",
" c None",
". c #A0A0A0",
"+ c #A2A2A2",
"X c #787878",
"# c #7B7B7B",
"Z c #A8A8A8",
"% c #AAAAAA",
"& c #848484",
"* c #868686",
"= c #B0B0B0",
"- c #B2B2B2",
"; c #8F8F8F",
"> c #929292",
", c #B8B8B8",
"' c #BABABA",
") c #9B9B9B",
"! c #9E9E9E",
"~ c #C0C0C0",
"{ c #C2C2C2",
"] c #A7A7A7",
"^ c #C7C7C7",
"/ c #C9C9C9",
"( c #B3B3B3",
"_ c #B5B5B5",
": c #A4A4A4",
"< c #7E7E7E",
"[ c #ACACAC",
"} c #898989",
"| c #B4B4B4",
"1 c #959595",
"2 c #BCBCBC",
"3 c #A1A1A1",
"4 c #C3C3C3",
"5 c #ADADAD",
"6 c #CCCCCC",
"7 c #CFCFCF",
"8 c #D2D2D2",
"9 c #D3D3D3",
"0 c #BEBEBE",
"a c #C1C1C1",
"b c #C4C4C4",
"c c #D8D8D8",
"d c #D9D9D9",
"e c #DBDBDB",
"f c #CACACA",
"g c #CDCDCD",
"h c #D0D0D0",
"i c #DFDFDF",
"j c #E1E1E1",
"k c #E3E3E3",
"l c #D6D6D6",
"m c #DCDCDC",
"n c #E7E7E7",
"o c #E9E9E9",
"p c #EBEBEB",
"q c #E2E2E2",
"r c #E4E4E4",
"s c #EFEFEF",
"t c #F1F1F1",
"u c #F3F3F3",
"v c #EDEDED",
"w c #F0F0F0",
"x c #F7F7F7",
"y c #F9F9F9",
"z c #FBFBFB",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W:#<%[*}-|>1'2!3{4%5/6_W",
"W#Z%&*=-;>,')!~{]%^/(_7W",
"W<%[*}-|>1'2!3{4%5/6_,8W",
"W%&*=-;>,')!~{]%^/(_780W",
"W[*}-|>1'2!3{4%5/6_,89aW",
"W*=-;>,')!~{]%^/(_780acW",
"W}-|>1'2!3{4%5/6_,89abdW",
"W-;>,')!~{]%^/(_780acdfW",
"W|>1'2!3{4%5/6_,89abdegW",
"W>,')!~{]%^/(_780acdfgiW",
"W1'2!3{4%5/6_,89abdeghjW",
"W')!~{]%^/(_780acdfgijlW",
"W2!3{4%5/6_,89abdeghjkdW",
"W!~{]%^/(_780acdfgijldnW",
"W3{4%5/6_,89abdeghjkdmoW",
"W{]%^/(_780acdfgijldnoqW",
"W4%5/6_,89abdeghjkdmoprW",
"W%^/(_780acdfgijldnoqrsW",
"W5/6_,89abdeghjkdmoprntW",
"W/(_780acdfgijldnoqrstvW",
"W6_,89abdeghjkdmoprntuwW",
"W_780acdfgijldnoqrstvwxW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 47 1",
" c None",
". c #A0A0A0",
"+ c #A4A4A4",
"X c #7E7E7E",
"# c #848484",
"Z c #B0B0B0",
"% c #B4B4B4",
"& c #959595",
"* c #9B9B9B",
"= c #C0C0C0",
"- c #C3C3C3",
"; c #ADADAD",
"> c #B3B3B3",
", c #CFCFCF",
"' c #D3D3D3",
") c #C4C4C4",
"! c #CACACA",
"~ c #DFDFDF",
"{ c #E3E3E3",
"] c #DCDCDC",
"^ c #E2E2E2",
"/ c #EFEFEF",
"( c #F3F3F3",
"_ c #F9F9F9",
": c #727272",
"< c #787878",
"[ c #A8A8A8",
"} c #ACACAC",
"| c #898989",
"1 c #8F8F8F",
"2 c #B8B8B8",
"3 c #BCBCBC",
"4 c #A1A1A1",
"5 c #A7A7A7",
"6 c #C7C7C7",
"7 c #CCCCCC",
"8 c #BEBEBE",
"9 c #D8D8D8",
"0 c #DBDBDB",
"a c #D0D0D0",
"b c #D6D6D6",
"c c #E7E7E7",
"d c #EBEBEB",
"e c #EDEDED",
"f c #F7F7F7",
"g c #FBFBFB",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 65 1",
" c None",
". c #CFCFCF",
"+ c #D2D2D2",
"X c #BEBEBE",
"# c #C1C1C1",
"Z c #D8D8D8",
"% c #D9D9D9",
"& c #CACACA",
"* c #CDCDCD",
"= c #DFDFDF",
"- c #E1E1E1",
"; c #D6D6D6",
"> c #E7E7E7",
", c #E9E9E9",
"' c #E2E2E2",
") c #E4E4E4",
"! c #EFEFEF",
"~ c #F1F1F1",
"{ c #EDEDED",
"] c #F0F0F0",
"^ c #F7F7F7",
"/ c #F9F9F9",
"( c #FCFCFC",
"_ c #BCBCBC",
": c #D5D5D5",
"< c #C7C7C7",
"[ c #DDDDDD",
"} c #D3D3D3",
"| c #E5E5E5",
"1 c #DEDEDE",
"2 c #EBEBEB",
"3 c #F5F5F5",
"4 c #F6F6F6",
"5 c #B3B3B3",
"6 c #B5B5B5",
"7 c #AFAFAF",
"8 c #C9C9C9",
"9 c #C6C6C6",
"0 c #A7A7A7",
"a c #AAAAAA",
"b c #A4A4A4",
"c c #C0C0C0",
"d c #C2C2C2",
"e c #BDBDBD",
"f c #9B9B9B",
"g c #9E9E9E",
"h c #989898",
"i c #B8B8B8",
"j c #BABABA",
"k c #B6B6B6",
"l c #8F8F8F",
"m c #929292",
"n c #8D8D8D",
"o c #B0B0B0",
"p c #B2B2B2",
"q c #AEAEAE",
"r c #848484",
"s c #868686",
"t c #808080",
"u c #A8A8A8",
"v c #A6A6A6",
"w c #787878",
"x c #7B7B7B",
"y c #757575",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W._X:Z<&[=};|>1'{!2{3^4W",
"W6.+X#Z%&*=-;%>,')!~{]^W",
"W5*._X:Z<&[=};|>1'{!2{3W",
"W856.+X#Z%&*=-;%>,')!~{W",
"W<75*._X:Z<&[=};|>1'{!2W",
"Wa<856.+X#Z%&*=-;%>,')!W",
"W09<75*._X:Z<&[=};|>1'{W",
"Wd0a<856.+X#Z%&*=-;%>,'W",
"Wcb09<75*._X:Z<&[=};|>1W",
"Wgcd0a<856.+X#Z%&*=-;%>W",
"Wfecb09<75*._X:Z<&[=};|W",
"Wjfgcd0a<856.+X#Z%&*=-;W",
"Wihfecb09<75*._X:Z<&[=}W",
"Wmijfgcd0a<856.+X#Z%&*=W",
"Wlkihfecb09<75*._X:Z<&[W",
"Wplmijfgcd0a<856.+X#Z%&W",
"Wonlkihfecb09<75*._X:Z<W",
"Wsoplmijfgcd0a<856.+X#ZW",
"Wrqonlkihfecb09<75*._X:W",
"Warsoplmijfgcd0a<856.+XW",
"Wutrqonlkihfecb09<75*._W",
"Wxuarsoplmijfgcd0a<856.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[ "24 24 47 1",
" c None",
". c #A0A0A0",
"+ c #727272",
"X c #A4A4A4",
"# c #787878",
"Z c #7E7E7E",
"% c #A8A8A8",
"& c #848484",
"* c #ACACAC",
"= c #B0B0B0",
"- c #898989",
"; c #B4B4B4",
"> c #8F8F8F",
", c #959595",
"' c #B8B8B8",
") c #9B9B9B",
"! c #BCBCBC",
"~ c #C0C0C0",
"{ c #A1A1A1",
"] c #C3C3C3",
"^ c #A7A7A7",
"/ c #ADADAD",
"( c #C7C7C7",
"_ c #B3B3B3",
": c #CCCCCC",
"< c #CFCFCF",
"[ c #D3D3D3",
"} c #BEBEBE",
"| c #C4C4C4",
"1 c #D8D8D8",
"2 c #CACACA",
"3 c #DBDBDB",
"4 c #DFDFDF",
"5 c #D0D0D0",
"6 c #E3E3E3",
"7 c #D6D6D6",
"8 c #DCDCDC",
"9 c #E7E7E7",
"0 c #E2E2E2",
"a c #EBEBEB",
"b c #EFEFEF",
"c c #F3F3F3",
"d c #EDEDED",
"e c #F7F7F7",
"f c #F9F9F9",
"g c #FBFBFB",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"WX##XX##XX##XX##XX##XX#W",
"WZ%%ZZ%%ZZ%%ZZ%%ZZ%%ZZ%W",
"W&**&&**&&**&&**&&**&&*W",
"W=--==--==--==--==--==-W",
"W;>>;;>>;;>>;;>>;;>>;;>W",
"W,'',,'',,'',,'',,'',,'W",
"W)!!))!!))!!))!!))!!))!W",
"W~{{~~{{~~{{~~{{~~{{~~{W",
"W]^^]]^^]]^^]]^^]]^^]]^W",
"W/((//((//((//((//((//(W",
"W_::__::__::__::__::__:W",
"W<''<<''<<''<<''<<''<<'W",
"W[}}[[}}[[}}[[}}[[}}[[}W",
"W|11||11||11||11||11||1W",
"W2332233223322332233223W",
"W4554455445544554455445W",
"W6776677667766776677667W",
"W8998899889988998899889W",
"W0aa00aa00aa00aa00aa00aW",
"Wb99bb99bb99bb99bb99bb9W",
"WcddccddccddccddccddccdW",
"WceecceecceecceecceecceW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 79 1",
" c None",
". c #A0A0A0",
"+ c #727272",
"X c #A2A2A2",
"# c #A4A4A4",
"Z c #7B7B7B",
"% c #7D7D7D",
"& c #A8A8A8",
"* c #A7A7A7",
"= c #797979",
"- c #A3A3A3",
"; c #A6A6A6",
"> c #808080",
", c #848484",
"' c #AEAEAE",
") c #AFAFAF",
"! c #898989",
"~ c #ACACAC",
"{ c #A9A9A9",
"] c #ADADAD",
"^ c #8B8B8B",
"/ c #8F8F8F",
"( c #B6B6B6",
"_ c #B7B7B7",
": c #959595",
"< c #949494",
"[ c #B4B4B4",
"} c #868686",
"| c #A5A5A5",
"1 c #ABABAB",
"2 c #909090",
"3 c #B8B8B8",
"4 c #BBBBBB",
"5 c #9E9E9E",
"6 c #C0C0C0",
"7 c #BFBFBF",
"8 c #9A9A9A",
"9 c #828282",
"0 c #B0B0B0",
"a c #939393",
"b c #C3C3C3",
"c c #C7C7C7",
"d c #8A8A8A",
"e c #BCBCBC",
"f c #C1C1C1",
"g c #AAAAAA",
"h c #CDCDCD",
"i c #CFCFCF",
"j c #CACACA",
"k c #BABABA",
"l c #D4D4D4",
"m c #D6D6D6",
"n c #C4C4C4",
"o c #D1D1D1",
"p c #D2D2D2",
"q c #D8D8D8",
"r c #CECECE",
"s c #DFDFDF",
"t c #DEDEDE",
"u c #CCCCCC",
"v c #B1B1B1",
"w c #757575",
"x c #DDDDDD",
"y c #DADADA",
"z c #E7E7E7",
"A c #E6E6E6",
"B c #E9E9E9",
"C c #EDEDED",
"D c #E4E4E4",
"E c #E2E2E2",
"F c #C5C5C5",
"G c #F4F4F4",
"H c #F3F3F3",
"I c #EEEEEE",
"J c #FFFFFF",
"K c #F7F7F7",
"L c #DCDCDC",
"M c #7E7E7E",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W.++..++X#Z%&*Z=X.++..+W",
"W+..++-;>,')!!'~>Z-.++.W",
"W+..+={]^/(_:<([^}{#++.W",
"W.++|1!2345.67583[!9|.+W",
"W.+=10a87b{~cc{|74ad1#+W",
"W+-{!aefg0hi3_hjg-e(!>-W",
"W+;]28fc[klmnblo[~f42};W",
"WX>^37g[pqjrstjnpug.3v>W",
"W#,/4b0kqxlyzAlhqo0|4[,W",
"WZ'(5{hljlBCzDBEj7hF5a'W",
"W%)_.~imryCGHICArbic.<)W",
"W&!:6c3nszzHJKzLsq3]63!W",
"W*!<7c_btADIKGDytm_~7_!W",
"WZ'(5{hljlBCzDBEj7hF5a'W",
"W=~[8|jonhEALyExnkjb8/~W",
"WX>^37g[pqjrstjnpug.3v>W",
"W.Z}[4-~uo7bqm7kuc-8[]ZW",
"W+-{!aefg0hi3_hjg-e(!>-W",
"W+.#9d(4.|Fc]~Fb.8(09=.W",
"W.++|1!2345.67583[!9|.+W",
"W.++.#>}v[a<3_a/v]>=..+W",
"W+..++-;>,')!!'~>Z-.++.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 46 1",
" c None",
". c #FFFFFF",
"+ c #FBFBFB",
"X c #F9F9F9",
"# c #F3F3F3",
"Z c #F7F7F7",
"% c #EDEDED",
"& c #EFEFEF",
"* c #E7E7E7",
"= c #EBEBEB",
"- c #E2E2E2",
"; c #DCDCDC",
"> c #D6D6D6",
", c #E3E3E3",
"' c #DFDFDF",
") c #D0D0D0",
"! c #DBDBDB",
"~ c #CACACA",
"{ c #C4C4C4",
"] c #D8D8D8",
"^ c #BEBEBE",
"/ c #D3D3D3",
"( c #CFCFCF",
"_ c #B8B8B8",
": c #CCCCCC",
"< c #B3B3B3",
"[ c #ADADAD",
"} c #C7C7C7",
"| c #A7A7A7",
"1 c #C3C3C3",
"2 c #C0C0C0",
"3 c #A1A1A1",
"4 c #BCBCBC",
"5 c #9B9B9B",
"6 c #959595",
"7 c #8F8F8F",
"8 c #B4B4B4",
"9 c #B0B0B0",
"0 c #898989",
"a c #ACACAC",
"b c #848484",
"c c #7E7E7E",
"d c #A8A8A8",
"e c #787878",
"f c #A4A4A4",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+XX++XX++XX++XX++XX++XW",
"W#ZZ##ZZ##ZZ##ZZ##ZZ##ZW",
"W%##%%##%%##%%##%%##%%#W",
"W&**&&**&&**&&**&&**&&*W",
"W=--==--==--==--==--==-W",
"W;**;;**;;**;;**;;**;;*W",
"W>,,>>,,>>,,>>,,>>,,>>,W",
"W'))''))''))''))''))'')W",
"W!~~!!~~!!~~!!~~!!~~!!~W",
"W{]]{{]]{{]]{{]]{{]]{{]W",
"W^//^^//^^//^^//^^//^^/W",
"W(__((__((__((__((__((_W",
"W:<<::<<::<<::<<::<<::<W",
"W[}}[[}}[[}}[[}}[[}}[[}W",
"W|11||11||11||11||11||1W",
"W2332233223322332233223W",
"W4554455445544554455445W",
"W6__66__66__66__66__66_W",
"W7887788778877887788778W",
"W9009900990099009900990W",
"WabbaabbaabbaabbaabbaabW",
"WcddccddccddccddccddccdW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[ "24 24 65 1",
" c None",
". c #CFCFCF",
"+ c #CDCDCD",
"X c #B3B3B3",
"# c #AFAFAF",
"Z c #C7C7C7",
"% c #C6C6C6",
"& c #A7A7A7",
"* c #A4A4A4",
"= c #C0C0C0",
"- c #BDBDBD",
"; c #9B9B9B",
"> c #989898",
", c #B8B8B8",
"' c #B6B6B6",
") c #8F8F8F",
"! c #8D8D8D",
"~ c #B0B0B0",
"{ c #AEAEAE",
"] c #848484",
"^ c #808080",
"/ c #A8A8A8",
"( c #A6A6A6",
"_ c #787878",
": c #757575",
"< c #D2D2D2",
"[ c #B5B5B5",
"} c #C9C9C9",
"| c #AAAAAA",
"1 c #C2C2C2",
"2 c #9E9E9E",
"3 c #BABABA",
"4 c #929292",
"5 c #B2B2B2",
"6 c #868686",
"7 c #7B7B7B",
"8 c #BEBEBE",
"9 c #BCBCBC",
"0 c #C1C1C1",
"a c #D8D8D8",
"b c #D5D5D5",
"c c #D9D9D9",
"d c #CACACA",
"e c #DFDFDF",
"f c #DDDDDD",
"g c #E1E1E1",
"h c #D6D6D6",
"i c #D3D3D3",
"j c #E7E7E7",
"k c #E5E5E5",
"l c #E9E9E9",
"m c #E2E2E2",
"n c #DEDEDE",
"o c #E4E4E4",
"p c #EFEFEF",
"q c #EDEDED",
"r c #F1F1F1",
"s c #EBEBEB",
"t c #F0F0F0",
"u c #F7F7F7",
"v c #F5F5F5",
"w c #F9F9F9",
"x c #F6F6F6",
"y c #FCFCFC",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W.[X}Z|&1=2;3,4)5~6]|/7W",
"W9.+X#Z%&*=-;>,')!~{]^/W",
"W8<.[X}Z|&1=2;3,4)5~6]|W",
"Wb89.+X#Z%&*=-;>,')!~{]W",
"Wa08<.[X}Z|&1=2;3,4)5~6W",
"WZab89.+X#Z%&*=-;>,')!~W",
"Wdca08<.[X}Z|&1=2;3,4)5W",
"WfdZab89.+X#Z%&*=-;>,')W",
"We+dca08<.[X}Z|&1=2;3,4W",
"WiefdZab89.+X#Z%&*=-;>,W",
"Whge+dca08<.[X}Z|&1=2;3W",
"WkhiefdZab89.+X#Z%&*=-;W",
"Wjchge+dca08<.[X}Z|&1=2W",
"WnjkhiefdZab89.+X#Z%&*=W",
"Wmljchge+dca08<.[X}Z|&1W",
"WqmnjkhiefdZab89.+X#Z%&W",
"Wpomljchge+dca08<.[X}Z|W",
"WspqmnjkhiefdZab89.+X#ZW",
"Wqrpomljchge+dca08<.[X}W",
"WvqspqmnjkhiefdZab89.+XW",
"Wutqrpomljchge+dca08<.[W",
"WxuvqspqmnjkhiefdZab89.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 46 1",
" c None",
". c #FFFFFF",
"+ c #FBFBFB",
"X c #F3F3F3",
"# c #EDEDED",
"Z c #EFEFEF",
"% c #EBEBEB",
"& c #DCDCDC",
"* c #D6D6D6",
"= c #DFDFDF",
"- c #DBDBDB",
"; c #C4C4C4",
"> c #BEBEBE",
", c #CFCFCF",
"' c #CCCCCC",
") c #ADADAD",
"! c #A7A7A7",
"~ c #C0C0C0",
"{ c #BCBCBC",
"] c #959595",
"^ c #8F8F8F",
"/ c #B0B0B0",
"( c #ACACAC",
"_ c #7E7E7E",
": c #787878",
"< c #F9F9F9",
"[ c #F7F7F7",
"} c #E7E7E7",
"| c #E2E2E2",
"1 c #E3E3E3",
"2 c #D0D0D0",
"3 c #CACACA",
"4 c #D8D8D8",
"5 c #D3D3D3",
"6 c #B8B8B8",
"7 c #B3B3B3",
"8 c #C7C7C7",
"9 c #C3C3C3",
"0 c #A1A1A1",
"a c #9B9B9B",
"b c #B4B4B4",
"c c #898989",
"d c #848484",
"e c #A8A8A8",
"f c #A4A4A4",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 62 1",
" c None",
". c #FFFFFF",
"+ c #FDFDFD",
"X c #F9F9F9",
"# c #F6F6F6",
"Z c #F7F7F7",
"% c #F5F5F5",
"& c #EDEDED",
"* c #EBEBEB",
"= c #EFEFEF",
"- c #E2E2E2",
"; c #DEDEDE",
"> c #E7E7E7",
", c #E5E5E5",
"' c #D6D6D6",
") c #D3D3D3",
"! c #DFDFDF",
"~ c #DDDDDD",
"{ c #CACACA",
"] c #C7C7C7",
"^ c #D8D8D8",
"/ c #D5D5D5",
"( c #BEBEBE",
"_ c #BCBCBC",
": c #FBFBFB",
"< c #F3F3F3",
"[ c #DCDCDC",
"} c #E3E3E3",
"| c #D0D0D0",
"1 c #DBDBDB",
"2 c #C4C4C4",
"3 c #B8B8B8",
"4 c #CFCFCF",
"5 c #CDCDCD",
"6 c #CCCCCC",
"7 c #B3B3B3",
"8 c #AFAFAF",
"9 c #ADADAD",
"0 c #C6C6C6",
"a c #C3C3C3",
"b c #A7A7A7",
"c c #A4A4A4",
"d c #A1A1A1",
"e c #C0C0C0",
"f c #BDBDBD",
"g c #9B9B9B",
"h c #989898",
"i c #959595",
"j c #B6B6B6",
"k c #B4B4B4",
"l c #8F8F8F",
"m c #8D8D8D",
"n c #898989",
"o c #B0B0B0",
"p c #AEAEAE",
"q c #ACACAC",
"r c #848484",
"s c #808080",
"t c #7E7E7E",
"u c #A8A8A8",
"v c #A6A6A6",
"W c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W:#<%<*>&*;[,})|~1]2/)_W",
"W#Z%&*=&-;>,')!~{]^/(_4W",
"W<%<*>&*;[,})|~1]2/)_35W",
"W%&*=&-;>,')!~{]^/(_457W",
"W<*>&*;[,})|~1]2/)_3568W",
"W*=&-;>,')!~{]^/(_4578]W",
"W>&*;[,})|~1]2/)_356890W",
"W&-;>,')!~{]^/(_4578]0bW",
"W*;[,})|~1]2/)_356890acW",
"W;>,')!~{]^/(_4578]0bceW",
"W[,})|~1]2/)_356890acdfW",
"W,')!~{]^/(_4578]0bcefgW",
"W})|~1]2/)_356890acdf_hW",
"W)!~{]^/(_4578]0bcefgh3W",
"W|~1]2/)_356890acdf_hijW",
"W~{]^/(_4578]0bcefgh3jlW",
"W1]2/)_356890acdf_hijkmW",
"W]^/(_4578]0bcefgh3jlmoW",
"W2/)_356890acdf_hijkmnpW",
"W/(_4578]0bcefgh3jlmoprW",
"W)_356890acdf_hijkmnpqsW",
"W_4578]0bcefgh3jlmoprsuW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
]);
sub avg { ($_[0] + $_[1]) / 2 }
sub do_fade {
my ($image, $drawable) = @_;
$drawable->become('Gimp::Layer');
$image->undo_group_start;
my @bounds = $image->selection_bounds;
$drawable->add_alpha unless $drawable->has_alpha;
my $mask;
unless ($mask = $drawable->get_mask) {
$mask = $drawable->create_mask(ADD_MASK_ALPHA);
$drawable->add_mask($mask);
}
Gimp::Context->push;
Gimp::Context->set_background([0.0,0.0,0.0,1.0]);
Gimp::Context->set_foreground([1.0,1.0,1.0,1.0]);
# Direction Map
# 0 3 6
# 1 4 7
# 2 5 8
# Bounds Map
# (1,2) (3,2)
# (1,4) (3,4)
my @blend_args = (
BLEND_FG_BG_RGB, LAYER_MODE_NORMAL_LEGACY,
($direction == 4 ? GRADIENT_RADIAL : GRADIENT_LINEAR),
100.0, # opacity
0.0, # offset
REPEAT_NONE,
0, # reverse
0, # supersample
1, # recursion levels
0.1, # supersample threshold
0, # dither
);
my %dir2argfunc = (
0 => sub { @_[3, 4, 1, 2] },
1 => sub { ($_[3], avg(@_[2,4]), $_[1], avg(@_[2,4])) },
2 => sub { @_[3, 2, 1, 4] },
3 => sub { (avg(@_[1,3]), $_[4], avg(@_[1,3]), $_[2]) },
4 => sub { (avg(@_[1,3]), avg(@_[2,4]), avg(@_[1,3]), $_[4]) }, # radial
5 => sub { (avg(@_[1,3]), $_[2], avg(@_[1,3]), $_[4]) },
6 => sub { @_[1, 4, 3, 2] },
7 => sub { ($_[1], avg(@_[2,4]), $_[3], avg(@_[2,4])) },
8 => sub { @_[1, 2, 3, 4] },
);
$mask->edit_blend(@blend_args, $dir2argfunc{$direction}->(@bounds));
$drawable->remove_mask(MASK_APPLY) if $direction >=0 && $direction <9;
Gimp::Context->pop;
$image->undo_group_end;
}
sub add_pixmap {
my ($window, $but, $num) = @_;
my ($pixmap, $mask) = Gtk2::Gdk::Pixmap->colormap_create_from_xpm_d(undef,
$but->get_colormap,
$but->style->bg('normal'),
@{$arr[$num]});
my ($pixmapId) = new_from_pixmap Gtk2::Image($pixmap, $mask);
$pixmapId->show;
$but->add($pixmapId);
}
sub create_window {
my $window = new Gtk2::Window('toplevel');
$window->set_name("Alpha Fader");
$window->set_wmclass("Gimp", "AlphaFader");
$window->signal_connect("destroy" => \&Gtk2::main_quit);
$window->signal_connect("delete_event" => \&Gtk2::false);
my $box1 = new Gtk2::VBox(0, 0);
$box1->set_spacing(2);
$window->add($box1);
my $frm = new Gtk2::Frame "Fade Type";
$frm->set_border_width(6);
$frm->show;
$box1->pack_start($frm, 1, 1, 0);
my $btnTable = new Gtk2::Table(3,3,1);
$btnTable->set_border_width(6);
$frm->add($btnTable);
my $btn = new Gtk2::RadioButton;
for (my $i=0;$i<3;$i++) {
for (my $j=0;$j<3;$j++) {
$btn = Gtk2::RadioButton->new_from_widget($btn);
$btn->set_mode(0);
$btn->signal_connect("clicked", sub { $direction = $_[1]; }, $i*3+$j);
$btn->show;
$btnTable->attach_defaults($btn, $i, $i+1, $j, $j+1);
add_pixmap($window, $btn, $i*3+$j);
if (Gimp->get_data($plugin) ne "") {
# if run before, get last data
$btn->clicked if Gimp->get_data($plugin) == $i*3+$j;
} else {
# first run of plug-in, set first button
$btn->clicked if $i==0 && $j==0;
}
}
}
my $hsep = new Gtk2::HSeparator;
$box1->pack_start($hsep, 0, 0, 0);
$hsep->show;
my $hbox = new Gtk2::HButtonBox;
$hbox->set_border_width(2);
$hbox->set_spacing(4);
$box1->pack_start($hbox, 0, 0, 0);
$hbox->show;
$btn = Gtk2::Button->new_from_stock('gtk-ok');
addbutton($btn, sub { $proceedFlag = 1; Gtk2->main_quit; }, $hbox);
$btn->grab_default;
$btn = Gtk2::Button->new_from_stock('gtk-cancel');
addbutton($btn, \&Gtk2::main_quit, $hbox);
$btnTable->show;
$box1->show;
$window->show;
}
sub addbutton {
my ($btn, $click, $hbox) = @_;
$btn->can_default(1);
$btn->signal_connect("clicked" => $click);
$btn->show;
$hbox->pack_start($btn, 0, 0, 0);
}
Gimp::on_run {
(my ($interactive, $img, $drw), $direction) = @_;
$proceedFlag = 1;
if ($interactive == 2) {
$direction = Gimp->get_data($plugin);
} elsif ($interactive != 1) {
$proceedFlag = 0;
Gimp::gtk_init;
create_window;
Gtk2->main;
}
# Do the gimply stuff on it
if ($proceedFlag) {
do_fade($img, $drw);
Gimp->displays_flush;
Gimp->set_data($plugin, $direction);
}
();
};
Gimp::on_query {
Gimp->install_procedure(
$plugin,
"Fade the alpha channel of a layer from one side to another",
<<EOF,
This was written as a slightly useful exercise, mostly to learn Gtk's
excellent perl interface. It was inspired by a mailing list question
that asked how to do exactly what this does, which is fade the alpha
from one side to another.
EOF
"Seth Burgess",
"Seth Burgess",
"2000",
"<Image>/Layer/Transparency/Fade...",
"*",
PLUGIN,
[
[PDB_INT32, "run_mode", "Interactive, [non-interactive"],
[PDB_IMAGE, "image", "Input image (unused)"],
[PDB_DRAWABLE, "drawable", "Input drawable"],
[PDB_INT32, "direction", "Direction to fade(0-8)"]
],
[]
);
};
exit Gimp::main;
__END__
=head1 NAME
alpha_fade - Fade the alpha channel of a layer from one side to another
=head1 SYNOPSIS
<Image>/Layer/Transparency/Fade...
=head1 DESCRIPTION
This was written as a slightly useful exercise, mostly to learn Gtk's
excellent perl interface. It was inspired by a mailing list question
that asked how to do exactly what this does, which is fade the alpha
from one side to another.
B<Does not use> L<Gimp::Fu>; look at L<fade-alpha> for the version that
does.
=head1 PARAMETERS
[PDB_INT32, "run_mode", "Interactive, [non-interactive"],
[PDB_IMAGE, "image", "Input image (unused)"],
[PDB_DRAWABLE, "drawable", "Input drawable"],
[PDB_INT32, "direction", "Direction to fade(0-8)"]
=head1 RETURN VALUES
=head1 IMAGE TYPES
*
=head1 AUTHOR
Seth Burgess
=head1 DATE
2000
=head1 LICENSE
Copyright Seth Burgess.
Distributed under the same terms as Gimp-Perl.