mirror of
https://github.com/gryf/wmaker.git
synced 2026-02-06 16:25:50 +01:00
fix to allow parallel builds on SMP systems using make -j
This commit is contained in:
4
wrlib/tests/.cvsignore
Normal file
4
wrlib/tests/.cvsignore
Normal file
@@ -0,0 +1,4 @@
|
||||
Makefile Makefile.in
|
||||
view testgrad testdraw testrot
|
||||
.libs *.pc
|
||||
.psrc .inslog2 tca.map tca.log pchdir *.rpt
|
||||
25
wrlib/tests/Makefile.am
Normal file
25
wrlib/tests/Makefile.am
Normal file
@@ -0,0 +1,25 @@
|
||||
## automake input file for wrlib
|
||||
|
||||
AUTOMAKE_OPTIONS = no-dependencies
|
||||
|
||||
noinst_PROGRAMS = testdraw testgrad testrot view
|
||||
|
||||
EXTRA_DIST = test.png tile.xpm ballot_box.xpm
|
||||
include_HEADERS = $(top_builddir)/wrlib/wraster.h
|
||||
|
||||
INCLUDES = $(DFLAGS) @HEADER_SEARCH_PATH@
|
||||
|
||||
LIBLIST = $(top_builddir)/wrlib/libwraster.la
|
||||
|
||||
testdraw_SOURCES = testdraw.c
|
||||
testdraw_LDADD = $(LIBLIST)
|
||||
|
||||
testgrad_SOURCES = testgrad.c
|
||||
testgrad_LDADD = $(LIBLIST)
|
||||
|
||||
testrot_SOURCES = testrot.c
|
||||
testrot_LDADD = $(LIBLIST)
|
||||
|
||||
view_SOURCES= view.c
|
||||
view_LDADD = $(LIBLIST)
|
||||
|
||||
906
wrlib/tests/ballot_box.xpm
Normal file
906
wrlib/tests/ballot_box.xpm
Normal file
@@ -0,0 +1,906 @@
|
||||
/* XPM */
|
||||
static char * ballot_box_xpm[] = {
|
||||
"48 48 855 2",
|
||||
" c None",
|
||||
". c #B8B8B8",
|
||||
"+ c #A0A0A0",
|
||||
"@ c #4A2511",
|
||||
"# c #A7A7A7",
|
||||
"$ c #EDEDED",
|
||||
"% c #EBE8E7",
|
||||
"& c #A6948D",
|
||||
"* c #904B22",
|
||||
"= c #B4622D",
|
||||
"- c #9F5427",
|
||||
"; c #87431F",
|
||||
"> c #4B2410",
|
||||
", c #BFBFBF",
|
||||
"' c #464646",
|
||||
") c #818181",
|
||||
"! c #D4D4D4",
|
||||
"~ c #FEFEFE",
|
||||
"{ c #E79860",
|
||||
"] c #E38848",
|
||||
"^ c #F4E2D5",
|
||||
"/ c #F0E7E2",
|
||||
"( c #C1804A",
|
||||
"_ c #9B562B",
|
||||
": c #7D3E1C",
|
||||
"< c #8A8A8A",
|
||||
"[ c #ECDEDF",
|
||||
"} c #B68183",
|
||||
"| c #E2E2E2",
|
||||
"1 c #6A6A6A",
|
||||
"2 c #686868",
|
||||
"3 c #C6C6C6",
|
||||
"4 c #F7F7F7",
|
||||
"5 c #F5D6C1",
|
||||
"6 c #E7C9B3",
|
||||
"7 c #D1D1D1",
|
||||
"8 c #FBFBFB",
|
||||
"9 c #E7A966",
|
||||
"0 c #E7AC69",
|
||||
"a c #D79A5D",
|
||||
"b c #B77642",
|
||||
"c c #9B562C",
|
||||
"d c #743819",
|
||||
"e c #3E1C0C",
|
||||
"f c #717171",
|
||||
"g c #B4B4B4",
|
||||
"h c #C1A7A8",
|
||||
"i c #B37F80",
|
||||
"j c #BC8E90",
|
||||
"k c #797979",
|
||||
"l c #343434",
|
||||
"m c #E0E0E0",
|
||||
"n c #DABFC0",
|
||||
"o c #924345",
|
||||
"p c #E3CFCF",
|
||||
"q c #A46264",
|
||||
"r c #D1B0B1",
|
||||
"s c #91857C",
|
||||
"t c #ABABAB",
|
||||
"u c #EADBCA",
|
||||
"v c #C98D54",
|
||||
"w c #E7AA67",
|
||||
"x c #E8AC69",
|
||||
"y c #E8AD6B",
|
||||
"z c #EAAF6C",
|
||||
"A c #D99E61",
|
||||
"B c #AD6E3E",
|
||||
"C c #884723",
|
||||
"D c #663015",
|
||||
"E c #503C33",
|
||||
"F c #565656",
|
||||
"G c #7E7878",
|
||||
"H c #978383",
|
||||
"I c #E8E8E8",
|
||||
"J c #DBDBDB",
|
||||
"K c #5F5F5F",
|
||||
"L c #444444",
|
||||
"M c #343130",
|
||||
"N c #EEEEEE",
|
||||
"O c #BF9192",
|
||||
"P c #C8A0A1",
|
||||
"Q c #9B5254",
|
||||
"R c #DDDDDD",
|
||||
"S c #BDBDBD",
|
||||
"T c #646464",
|
||||
"U c #CEC3BA",
|
||||
"V c #8D5730",
|
||||
"W c #E6A865",
|
||||
"X c #E2A466",
|
||||
"Y c #EAB270",
|
||||
"Z c #ECB472",
|
||||
"` c #BC8450",
|
||||
" . c #9A5C32",
|
||||
".. c #763E20",
|
||||
"+. c #4F3120",
|
||||
"@. c #3A312C",
|
||||
"#. c #5D5D5D",
|
||||
"$. c #999999",
|
||||
"%. c #2C2C2C",
|
||||
"&. c #834D28",
|
||||
"*. c #3D3834",
|
||||
"=. c #C0C0C0",
|
||||
"-. c #E1E1E1",
|
||||
";. c #414141",
|
||||
">. c #BBBBBB",
|
||||
",. c #3B1407",
|
||||
"'. c #2F2113",
|
||||
"). c #764A2A",
|
||||
"!. c #DFA061",
|
||||
"~. c #E8AC6A",
|
||||
"{. c #E9AE6B",
|
||||
"]. c #EAB06D",
|
||||
"^. c #EBB270",
|
||||
"/. c #EDB673",
|
||||
"(. c #D9A368",
|
||||
"_. c #B17848",
|
||||
":. c #8A4B27",
|
||||
"<. c #470C06",
|
||||
"[. c #4B220E",
|
||||
"}. c #9D562A",
|
||||
"|. c #CB7F43",
|
||||
"1. c #D98D4C",
|
||||
"2. c #AF7B4F",
|
||||
"3. c #4F4F4F",
|
||||
"4. c #D3C0C0",
|
||||
"5. c #AB7D7E",
|
||||
"6. c #C7C7C7",
|
||||
"7. c #989898",
|
||||
"8. c #535353",
|
||||
"9. c #201714",
|
||||
"0. c #8E8E8E",
|
||||
"a. c #413531",
|
||||
"b. c #B07042",
|
||||
"c. c #E7AB68",
|
||||
"d. c #EAB77D",
|
||||
"e. c #ECB87E",
|
||||
"f. c #EAB06E",
|
||||
"g. c #EDB674",
|
||||
"h. c #EEB877",
|
||||
"i. c #F2C17E",
|
||||
"j. c #D0B17B",
|
||||
"k. c #693E29",
|
||||
"l. c #34160A",
|
||||
"m. c #854520",
|
||||
"n. c #BB6F38",
|
||||
"o. c #DC965F",
|
||||
"p. c #E4AE81",
|
||||
"q. c #F4E1D1",
|
||||
"r. c #C4C4C4",
|
||||
"s. c #333333",
|
||||
"t. c #929292",
|
||||
"u. c #DACDCD",
|
||||
"v. c #A47071",
|
||||
"w. c #7A7A7A",
|
||||
"x. c #212121",
|
||||
"y. c #252525",
|
||||
"z. c #626262",
|
||||
"A. c #CFD8D4",
|
||||
"B. c #F4DABD",
|
||||
"C. c #E9AF6C",
|
||||
"D. c #EAB16F",
|
||||
"E. c #EBB371",
|
||||
"F. c #EDB875",
|
||||
"G. c #F8D693",
|
||||
"H. c #FCDD9A",
|
||||
"I. c #E19151",
|
||||
"J. c #3A1407",
|
||||
"K. c #6B3316",
|
||||
"L. c #B16532",
|
||||
"M. c #D07F41",
|
||||
"N. c #DC9A67",
|
||||
"O. c #AEAEAE",
|
||||
"P. c #9E9E9E",
|
||||
"Q. c #9C9C9C",
|
||||
"R. c #2F2F2F",
|
||||
"S. c #8F8F8F",
|
||||
"T. c #B0B0B0",
|
||||
"U. c #9A9A9A",
|
||||
"V. c #6D6D6D",
|
||||
"W. c #363636",
|
||||
"X. c #0F0F0F",
|
||||
"Y. c #2D2D2D",
|
||||
"Z. c #757575",
|
||||
"`. c #A9ACAA",
|
||||
" + c #91A59C",
|
||||
".+ c #C0CBC6",
|
||||
"++ c #637F72",
|
||||
"@+ c #F0CAA1",
|
||||
"#+ c #EEBB78",
|
||||
"$+ c #FADA98",
|
||||
"%+ c #F8D18E",
|
||||
"&+ c #E58D48",
|
||||
"*+ c #CB6830",
|
||||
"=+ c #502510",
|
||||
"-+ c #9B5328",
|
||||
";+ c #C9773B",
|
||||
">+ c #D27F40",
|
||||
",+ c #D38141",
|
||||
"'+ c #D48344",
|
||||
")+ c #BF8253",
|
||||
"!+ c #85532C",
|
||||
"~+ c #361A0C",
|
||||
"{+ c #686260",
|
||||
"]+ c #CFCFCF",
|
||||
"^+ c #5A5A5A",
|
||||
"/+ c #1A1A1A",
|
||||
"(+ c #5E5E5E",
|
||||
"_+ c #5C5C5C",
|
||||
":+ c #3A3A3A",
|
||||
"<+ c #0D0D0D",
|
||||
"[+ c #3E3E3E",
|
||||
"}+ c #828282",
|
||||
"|+ c #C4C7C6",
|
||||
"1+ c #DFE4E2",
|
||||
"2+ c #15402C",
|
||||
"3+ c #A1B2AA",
|
||||
"4+ c #F6E2CD",
|
||||
"5+ c #EBB882",
|
||||
"6+ c #EFBE7C",
|
||||
"7+ c #FCE09D",
|
||||
"8+ c #F2BC79",
|
||||
"9+ c #D77334",
|
||||
"0+ c #DF7D3A",
|
||||
"a+ c #E07E3B",
|
||||
"b+ c #8B4821",
|
||||
"c+ c #BF6C34",
|
||||
"d+ c #CE7A3D",
|
||||
"e+ c #D07C3E",
|
||||
"f+ c #D17E3F",
|
||||
"g+ c #CA7A3E",
|
||||
"h+ c #864722",
|
||||
"i+ c #511F0C",
|
||||
"j+ c #491909",
|
||||
"k+ c #4B2211",
|
||||
"l+ c #6C6360",
|
||||
"m+ c #323232",
|
||||
"n+ c #131313",
|
||||
"o+ c #191919",
|
||||
"p+ c #393939",
|
||||
"q+ c #C9C9C9",
|
||||
"r+ c #728C80",
|
||||
"s+ c #967568",
|
||||
"t+ c #66331A",
|
||||
"u+ c #E6A965",
|
||||
"v+ c #F4CB88",
|
||||
"w+ c #FEE4A1",
|
||||
"x+ c #E89F5D",
|
||||
"y+ c #DC7736",
|
||||
"z+ c #DD7937",
|
||||
"A+ c #DE7A37",
|
||||
"B+ c #D77536",
|
||||
"C+ c #AF5F2C",
|
||||
"D+ c #E2813C",
|
||||
"E+ c #D77C3B",
|
||||
"F+ c #CD783C",
|
||||
"G+ c #CF7A3D",
|
||||
"H+ c #CA793D",
|
||||
"I+ c #B06733",
|
||||
"J+ c #B26835",
|
||||
"K+ c #815636",
|
||||
"L+ c #1D1715",
|
||||
"M+ c #1B0D08",
|
||||
"N+ c #706F6F",
|
||||
"O+ c #939393",
|
||||
"P+ c #050505",
|
||||
"Q+ c #040404",
|
||||
"R+ c #000000",
|
||||
"S+ c #0D0401",
|
||||
"T+ c #1F0A03",
|
||||
"U+ c #444140",
|
||||
"V+ c #F7E6D6",
|
||||
"W+ c #7A492D",
|
||||
"X+ c #A96F3F",
|
||||
"Y+ c #E6A966",
|
||||
"Z+ c #F8D491",
|
||||
"`+ c #F9D593",
|
||||
" @ c #DF8748",
|
||||
".@ c #DA7434",
|
||||
"+@ c #DB7635",
|
||||
"@@ c #DB7736",
|
||||
"#@ c #D47234",
|
||||
"$@ c #793E24",
|
||||
"%@ c #361F1A",
|
||||
"&@ c #4D1C0A",
|
||||
"*@ c #783919",
|
||||
"=@ c #D87A38",
|
||||
"-@ c #D77B3B",
|
||||
";@ c #CD773B",
|
||||
">@ c #D07D3E",
|
||||
",@ c #D27E40",
|
||||
"'@ c #D38041",
|
||||
")@ c #D48243",
|
||||
"!@ c #D7894A",
|
||||
"~@ c #B28E5F",
|
||||
"{@ c #2A261D",
|
||||
"]@ c #030100",
|
||||
"^@ c #222121",
|
||||
"/@ c #171717",
|
||||
"(@ c #1B0F0B",
|
||||
"_@ c #441708",
|
||||
":@ c #57240E",
|
||||
"<@ c #4D4743",
|
||||
"[@ c #FCF7F3",
|
||||
"}@ c #E5AA70",
|
||||
"|@ c #E2A05E",
|
||||
"1@ c #E8AE6B",
|
||||
"2@ c #FADC99",
|
||||
"3@ c #F3C685",
|
||||
"4@ c #D87638",
|
||||
"5@ c #D77132",
|
||||
"6@ c #D87233",
|
||||
"7@ c #D97334",
|
||||
"8@ c #BF642D",
|
||||
"9@ c #4F1F0D",
|
||||
"0@ c #3A3432",
|
||||
"a@ c #555555",
|
||||
"b@ c #C1C1C1",
|
||||
"c@ c #120000",
|
||||
"d@ c #411608",
|
||||
"e@ c #4D1B09",
|
||||
"f@ c #5C260F",
|
||||
"g@ c #A85A28",
|
||||
"h@ c #D77A3A",
|
||||
"i@ c #CC763A",
|
||||
"j@ c #CE793C",
|
||||
"k@ c #CF7B3D",
|
||||
"l@ c #D07D3F",
|
||||
"m@ c #D78849",
|
||||
"n@ c #FBDD9B",
|
||||
"o@ c #5F553C",
|
||||
"p@ c #1F1F1F",
|
||||
"q@ c #7D5737",
|
||||
"r@ c #D79154",
|
||||
"s@ c #DD9352",
|
||||
"t@ c #804724",
|
||||
"u@ c #733F21",
|
||||
"v@ c #E3A66E",
|
||||
"w@ c #E19C5B",
|
||||
"x@ c #ECB876",
|
||||
"y@ c #EBAE6F",
|
||||
"z@ c #D46B30",
|
||||
"A@ c #D56C30",
|
||||
"B@ c #D66E31",
|
||||
"C@ c #D77032",
|
||||
"D@ c #994B20",
|
||||
"E@ c #46190A",
|
||||
"F@ c #312825",
|
||||
"G@ c #6C6C6C",
|
||||
"H@ c #D2D2D2",
|
||||
"I@ c #B68F90",
|
||||
"J@ c #D7BDBE",
|
||||
"K@ c #060200",
|
||||
"L@ c #331106",
|
||||
"M@ c #8B3712",
|
||||
"N@ c #68270D",
|
||||
"O@ c #59240E",
|
||||
"P@ c #A35829",
|
||||
"Q@ c #CF7B3E",
|
||||
"R@ c #D17D3F",
|
||||
"S@ c #F1C584",
|
||||
"T@ c #7F7250",
|
||||
"U@ c #0D0804",
|
||||
"V@ c #5E3C20",
|
||||
"W@ c #B57642",
|
||||
"X@ c #DA8E4D",
|
||||
"Y@ c #DB8F4F",
|
||||
"Z@ c #DC9150",
|
||||
"`@ c #804725",
|
||||
" # c #D58F51",
|
||||
".# c #E19D5C",
|
||||
"+# c #F2C886",
|
||||
"@# c #FBDC99",
|
||||
"## c #DD8D51",
|
||||
"$# c #D1682E",
|
||||
"%# c #D2692E",
|
||||
"&# c #D36B2F",
|
||||
"*# c #CC672E",
|
||||
"=# c #7D3918",
|
||||
"-# c #4D1A09",
|
||||
";# c #290E05",
|
||||
"># c #321A11",
|
||||
",# c #3B3B3B",
|
||||
"'# c #3D3D3D",
|
||||
")# c #1E0A03",
|
||||
"!# c #903A13",
|
||||
"~# c #873511",
|
||||
"{# c #63250C",
|
||||
"]# c #693015",
|
||||
"^# c #AC5F2E",
|
||||
"/# c #CD783B",
|
||||
"(# c #D38142",
|
||||
"_# c #DD9656",
|
||||
":# c #D68647",
|
||||
"<# c #D88848",
|
||||
"[# c #D88A49",
|
||||
"}# c #D98C4C",
|
||||
"|# c #DC9151",
|
||||
"1# c #DD9453",
|
||||
"2# c #E29F5E",
|
||||
"3# c #F8D592",
|
||||
"4# c #F4CB8A",
|
||||
"5# c #D67B41",
|
||||
"6# c #CD642C",
|
||||
"7# c #CF662D",
|
||||
"8# c #D0672E",
|
||||
"9# c #C15F2A",
|
||||
"0# c #632810",
|
||||
"a# c #7D3817",
|
||||
"b# c #C4642C",
|
||||
"c# c #873F1A",
|
||||
"d# c #7C2B0F",
|
||||
"e# c #8D401A",
|
||||
"f# c #290801",
|
||||
"g# c #803310",
|
||||
"h# c #823311",
|
||||
"i# c #5A210B",
|
||||
"j# c #6A3015",
|
||||
"k# c #BC6C35",
|
||||
"l# c #D37F40",
|
||||
"m# c #D58344",
|
||||
"n# c #D58445",
|
||||
"o# c #D88948",
|
||||
"p# c #D88B4A",
|
||||
"q# c #DA8F4E",
|
||||
"r# c #DB904F",
|
||||
"s# c #E4A665",
|
||||
"t# c #FCDF9C",
|
||||
"u# c #EAB274",
|
||||
"v# c #CD6831",
|
||||
"w# c #CB612A",
|
||||
"x# c #CC632B",
|
||||
"y# c #AD5324",
|
||||
"z# c #511D0B",
|
||||
"A# c #763013",
|
||||
"B# c #CB642C",
|
||||
"C# c #C9612B",
|
||||
"D# c #AC4A1E",
|
||||
"E# c #9D4F22",
|
||||
"F# c #1B0500",
|
||||
"G# c #180902",
|
||||
"H# c #50200A",
|
||||
"I# c #7E3110",
|
||||
"J# c #7B3D1C",
|
||||
"K# c #BE6E36",
|
||||
"L# c #D58546",
|
||||
"M# c #D78748",
|
||||
"N# c #D88949",
|
||||
"O# c #D98B4A",
|
||||
"P# c #ECB977",
|
||||
"Q# c #DE975C",
|
||||
"R# c #C75D27",
|
||||
"S# c #C85F28",
|
||||
"T# c #CA6029",
|
||||
"U# c #93421C",
|
||||
"V# c #622911",
|
||||
"W# c #943412",
|
||||
"X# c #BE5825",
|
||||
"Y# c #D56E31",
|
||||
"Z# c #A55525",
|
||||
"`# c #310802",
|
||||
" $ c #240601",
|
||||
".$ c #150500",
|
||||
"+$ c #200C03",
|
||||
"@$ c #702D0E",
|
||||
"#$ c #752D0F",
|
||||
"$$ c #511D0A",
|
||||
"%$ c #82401D",
|
||||
"&$ c #C8773B",
|
||||
"*$ c #D68546",
|
||||
"=$ c #FADB99",
|
||||
"-$ c #D27C44",
|
||||
";$ c #C55B25",
|
||||
">$ c #C65C26",
|
||||
",$ c #C05B26",
|
||||
"'$ c #793315",
|
||||
")$ c #060606",
|
||||
"!$ c #2E2E2E",
|
||||
"~$ c #EEE1DB",
|
||||
"{$ c #F8EBE4",
|
||||
"]$ c #D5723B",
|
||||
"^$ c #A45425",
|
||||
"/$ c #260D04",
|
||||
"($ c #2C0F05",
|
||||
"_$ c #0C0501",
|
||||
":$ c #070402",
|
||||
"<$ c #3C1807",
|
||||
"[$ c #883611",
|
||||
"}$ c #8D4B24",
|
||||
"|$ c #CA783C",
|
||||
"1$ c #D58444",
|
||||
"2$ c #DD9757",
|
||||
"3$ c #F6D290",
|
||||
"4$ c #F2C989",
|
||||
"5$ c #C55F2B",
|
||||
"6$ c #C25824",
|
||||
"7$ c #C35925",
|
||||
"8$ c #AF4F21",
|
||||
"9$ c #60250E",
|
||||
"0$ c #1C0A04",
|
||||
"a$ c #0A0A0A",
|
||||
"b$ c #87595A",
|
||||
"c$ c #F2D8C9",
|
||||
"d$ c #D0672D",
|
||||
"e$ c #A35224",
|
||||
"f$ c #0D0200",
|
||||
"g$ c #0F0501",
|
||||
"h$ c #282828",
|
||||
"i$ c #070707",
|
||||
"j$ c #0D0501",
|
||||
"k$ c #56220B",
|
||||
"l$ c #6C290E",
|
||||
"m$ c #9B5126",
|
||||
"n$ c #E4A766",
|
||||
"o$ c #FBDE9B",
|
||||
"p$ c #E5AD71",
|
||||
"q$ c #BE5322",
|
||||
"r$ c #BF5523",
|
||||
"s$ c #C15623",
|
||||
"t$ c #9D451C",
|
||||
"u$ c #4C1B0A",
|
||||
"v$ c #100704",
|
||||
"w$ c #3F2C2C",
|
||||
"x$ c #AB9898",
|
||||
"y$ c #EAE3E3",
|
||||
"z$ c #F7EAE3",
|
||||
"A$ c #CE662D",
|
||||
"B$ c #A25123",
|
||||
"C$ c #878787",
|
||||
"D$ c #7F7F7F",
|
||||
"E$ c #DFDFDF",
|
||||
"F$ c #425F51",
|
||||
"G$ c #3E4F47",
|
||||
"H$ c #121212",
|
||||
"I$ c #1F0C03",
|
||||
"J$ c #58210D",
|
||||
"K$ c #DEB67D",
|
||||
"L$ c #D38750",
|
||||
"M$ c #BB5020",
|
||||
"N$ c #BC5221",
|
||||
"O$ c #853816",
|
||||
"P$ c #3F1507",
|
||||
"Q$ c #0A0402",
|
||||
"R$ c #0E0E0E",
|
||||
"S$ c #616161",
|
||||
"T$ c #B69C9D",
|
||||
"U$ c #893336",
|
||||
"V$ c #DB926C",
|
||||
"W$ c #7C3617",
|
||||
"X$ c #EAEDEB",
|
||||
"Y$ c #ACB7B2",
|
||||
"Z$ c #8E9994",
|
||||
"`$ c #424E48",
|
||||
" % c #595959",
|
||||
".% c #130602",
|
||||
"+% c #100601",
|
||||
"@% c #401907",
|
||||
"#% c #9F411D",
|
||||
"$% c #B84D1E",
|
||||
"%% c #B94F1F",
|
||||
"&% c #B54E20",
|
||||
"*% c #6D2B10",
|
||||
"=% c #160702",
|
||||
"-% c #554338",
|
||||
";% c #787878",
|
||||
">% c #382B24",
|
||||
",% c #97481F",
|
||||
"'% c #C55F29",
|
||||
")% c #723114",
|
||||
"!% c #230B02",
|
||||
"~% c #302A28",
|
||||
"{% c #C2C0BE",
|
||||
"]% c #EEF1F0",
|
||||
"^% c #A1AFA8",
|
||||
"/% c #C4CAC7",
|
||||
"(% c #585858",
|
||||
"_% c #280D05",
|
||||
":% c #361207",
|
||||
"<% c #401708",
|
||||
"[% c #280F04",
|
||||
"}% c #551F09",
|
||||
"|% c #9A3E18",
|
||||
"1% c #B74C1D",
|
||||
"2% c #A4451B",
|
||||
"3% c #5E230D",
|
||||
"4% c #742E12",
|
||||
"5% c #963714",
|
||||
"6% c #883111",
|
||||
"7% c #77290E",
|
||||
"8% c #983814",
|
||||
"9% c #9A3814",
|
||||
"0% c #91421B",
|
||||
"a% c #C96029",
|
||||
"b% c #C25C28",
|
||||
"c% c #5E250E",
|
||||
"d% c #1F0A02",
|
||||
"e% c #0A0200",
|
||||
"f% c #311205",
|
||||
"g% c #B8A8A2",
|
||||
"h% c #82998E",
|
||||
"i% c #CECECE",
|
||||
"j% c #140602",
|
||||
"k% c #3F1608",
|
||||
"l% c #712B0F",
|
||||
"m% c #833311",
|
||||
"n% c #57210B",
|
||||
"o% c #170802",
|
||||
"p% c #250C03",
|
||||
"q% c #6B250C",
|
||||
"r% c #993D17",
|
||||
"s% c #B54A1D",
|
||||
"t% c #A2421A",
|
||||
"u% c #873615",
|
||||
"v% c #9D411A",
|
||||
"w% c #B95020",
|
||||
"x% c #BB5121",
|
||||
"y% c #A9441A",
|
||||
"z% c #9C3A15",
|
||||
"A% c #C05723",
|
||||
"B% c #C45B25",
|
||||
"C% c #C75C27",
|
||||
"D% c #B05122",
|
||||
"E% c #55200C",
|
||||
"F% c #160701",
|
||||
"G% c #9E8075",
|
||||
"H% c #BEBEBE",
|
||||
"I% c #371307",
|
||||
"J% c #6A280D",
|
||||
"K% c #813211",
|
||||
"L% c #803111",
|
||||
"M% c #7F3111",
|
||||
"N% c #7E3011",
|
||||
"O% c #762D0F",
|
||||
"P% c #451A08",
|
||||
"Q% c #360B03",
|
||||
"R% c #7C240B",
|
||||
"S% c #481808",
|
||||
"T% c #983C17",
|
||||
"U% c #782E11",
|
||||
"V% c #B74D1E",
|
||||
"W% c #BD5322",
|
||||
"X% c #B44C1E",
|
||||
"Y% c #B84F20",
|
||||
"Z% c #C35924",
|
||||
"`% c #C45A25",
|
||||
" & c #AE4F20",
|
||||
".& c #461909",
|
||||
"+& c #130600",
|
||||
"@& c #2D1105",
|
||||
"#& c #66260D",
|
||||
"$& c #703D2A",
|
||||
"%& c #8F7165",
|
||||
"&& c #6E341C",
|
||||
"*& c #7D3010",
|
||||
"=& c #7C3010",
|
||||
"-& c #7B2F10",
|
||||
";& c #7A2F10",
|
||||
">& c #792E10",
|
||||
",& c #782E10",
|
||||
"'& c #6A280E",
|
||||
")& c #2F1205",
|
||||
"!& c #331206",
|
||||
"~& c #541E0B",
|
||||
"{& c #843313",
|
||||
"]& c #AE451A",
|
||||
"^& c #B1471B",
|
||||
"/& c #BF5422",
|
||||
"(& c #9C451C",
|
||||
"_& c #867872",
|
||||
":& c #A68574",
|
||||
"<& c #3F1B0F",
|
||||
"[& c #0C0300",
|
||||
"}& c #2C1005",
|
||||
"|& c #501D0A",
|
||||
"1& c #772D10",
|
||||
"2& c #752C0F",
|
||||
"3& c #742C0F",
|
||||
"4& c #6F2A0E",
|
||||
"5& c #722B0F",
|
||||
"6& c #511E0A",
|
||||
"7& c #6E270E",
|
||||
"8& c #A93F18",
|
||||
"9& c #B0461B",
|
||||
"0& c #B4491C",
|
||||
"a& c #B54A1C",
|
||||
"b& c #BC5121",
|
||||
"c& c #9A431B",
|
||||
"d& c #3B3431",
|
||||
"e& c #E9E9E9",
|
||||
"f& c #838181",
|
||||
"g& c #260400",
|
||||
"h& c #6B280E",
|
||||
"i& c #732B0F",
|
||||
"j& c #712A0F",
|
||||
"k& c #702A0F",
|
||||
"l& c #6F2A0F",
|
||||
"m& c #6E290E",
|
||||
"n& c #5C220C",
|
||||
"o& c #3D1407",
|
||||
"p& c #832F11",
|
||||
"q& c #AD4419",
|
||||
"r& c #AF451A",
|
||||
"s& c #B2481B",
|
||||
"t& c #B84E1F",
|
||||
"u& c #8C3C18",
|
||||
"v& c #CACACA",
|
||||
"w& c #454545",
|
||||
"x& c #371506",
|
||||
"y& c #702A0E",
|
||||
"z& c #6D290E",
|
||||
"A& c #6C280E",
|
||||
"B& c #6A270E",
|
||||
"C& c #69270E",
|
||||
"D& c #3E1507",
|
||||
"E& c #8B3413",
|
||||
"F& c #AE431A",
|
||||
"G& c #B1461B",
|
||||
"H& c #B5491C",
|
||||
"I& c #893816",
|
||||
"J& c #452B1F",
|
||||
"K& c #A3A3A3",
|
||||
"L& c #DEDEE1",
|
||||
"M& c #E6E6E6",
|
||||
"N& c #0F0000",
|
||||
"O& c #090300",
|
||||
"P& c #160801",
|
||||
"Q& c #531F0A",
|
||||
"R& c #461A09",
|
||||
"S& c #545454",
|
||||
"T& c #724C3D",
|
||||
"U& c #68260E",
|
||||
"V& c #67260D",
|
||||
"W& c #66250D",
|
||||
"X& c #65250D",
|
||||
"Y& c #3D1507",
|
||||
"Z& c #863213",
|
||||
"`& c #AC4119",
|
||||
" * c #B0461A",
|
||||
".* c #863514",
|
||||
"+* c #53382D",
|
||||
"@* c #959595",
|
||||
"#* c #C6C6C9",
|
||||
"$* c #4D4F60",
|
||||
"%* c #7F808D",
|
||||
"&* c #404154",
|
||||
"** c #CECED3",
|
||||
"=* c #BEBFC5",
|
||||
"-* c #040100",
|
||||
";* c #0E0500",
|
||||
">* c #270E04",
|
||||
",* c #382F2C",
|
||||
"'* c #6B4638",
|
||||
")* c #64250D",
|
||||
"!* c #63240D",
|
||||
"~* c #62230D",
|
||||
"{* c #401608",
|
||||
"]* c #722A0F",
|
||||
"^* c #AB4018",
|
||||
"/* c #AD421A",
|
||||
"(* c #AF441A",
|
||||
"_* c #7E3B20",
|
||||
":* c #D3D1D1",
|
||||
"<* c #ECECEC",
|
||||
"[* c #5F6170",
|
||||
"}* c #EEEEEF",
|
||||
"|* c #303246",
|
||||
"1* c #969696",
|
||||
"2* c #CCCCCC",
|
||||
"3* c #5B3324",
|
||||
"4* c #61230C",
|
||||
"5* c #60230C",
|
||||
"6* c #5F230C",
|
||||
"7* c #5E220C",
|
||||
"8* c #70290F",
|
||||
"9* c #AA3F18",
|
||||
"0* c #973916",
|
||||
"a* c #301006",
|
||||
"b* c #312117",
|
||||
"c* c #31302F",
|
||||
"d* c #CDCDCD",
|
||||
"e* c #8F909B",
|
||||
"f* c #1E1E1E",
|
||||
"g* c #D2D2D1",
|
||||
"h* c #696969",
|
||||
"i* c #583224",
|
||||
"j* c #5E220B",
|
||||
"k* c #5D220B",
|
||||
"l* c #5C210B",
|
||||
"m* c #6E280F",
|
||||
"n* c #A83E17",
|
||||
"o* c #A43E18",
|
||||
"p* c #561E0C",
|
||||
"q* c #2B0E05",
|
||||
"r* c #505162",
|
||||
"s* c #9F9FA9",
|
||||
"t* c #BCBDC3",
|
||||
"u* c #D6D6D6",
|
||||
"v* c #9D9D9D",
|
||||
"w* c #737373",
|
||||
"x* c #694F45",
|
||||
"y* c #5B200B",
|
||||
"z* c #5A200B",
|
||||
"A* c #591F0B",
|
||||
"B* c #581F0A",
|
||||
"C* c #381306",
|
||||
"D* c #6D270E",
|
||||
"E* c #A63D17",
|
||||
"F* c #993915",
|
||||
"G* c #240500",
|
||||
"H* c #AEAFB7",
|
||||
"I* c #F0F0F0",
|
||||
"J* c #575757",
|
||||
"K* c #CCCCD1",
|
||||
"L* c #D8D7D7",
|
||||
"M* c #A49590",
|
||||
"N* c #561E0A",
|
||||
"O* c #551D0A",
|
||||
"P* c #351206",
|
||||
"Q* c #6B260E",
|
||||
"R* c #A53C16",
|
||||
"S* c #903514",
|
||||
"T* c #8E8E96",
|
||||
"U* c #9B9BA0",
|
||||
"V* c #F5F5F5",
|
||||
"W* c #342721",
|
||||
"X* c #290E04",
|
||||
"Y* c #4F1B09",
|
||||
"Z* c #521C0A",
|
||||
"`* c #511C09",
|
||||
" = c #69250D",
|
||||
".= c #A33B15",
|
||||
"+= c #822F11",
|
||||
"@= c #1D0200",
|
||||
"#= c #838383",
|
||||
"$= c #6F707E",
|
||||
"%= c #030000",
|
||||
"&= c #0B0400",
|
||||
"*= c #140701",
|
||||
"== c #3B1406",
|
||||
"-= c #4E1A09",
|
||||
";= c #311005",
|
||||
">= c #68240C",
|
||||
",= c #802D10",
|
||||
"'= c #050100",
|
||||
")= c #919191",
|
||||
"!= c #010000",
|
||||
"~= c #0A0300",
|
||||
"{= c #1D0A02",
|
||||
"]= c #270D04",
|
||||
"^= c #351005",
|
||||
"/= c #100000",
|
||||
"(= c #111111",
|
||||
"_= c #0E0501",
|
||||
":= c #0E0400",
|
||||
"<= c #070000",
|
||||
"[= c #909090",
|
||||
" ",
|
||||
" . + @ ",
|
||||
" # $ % & * = - ; > , # ' ",
|
||||
" ) ! ~ ~ ~ ~ { ] ^ / ( _ : > < [ } | + 1 1 ' ' ",
|
||||
" 2 3 4 ~ ~ ~ ~ ~ 5 6 7 8 9 0 a b c d e f g h i j ~ ~ 4 3 k ",
|
||||
" l m ~ n o p q r ~ 4 s t u v w x y z A B C D E F G H 7 I J K L ",
|
||||
" M N O P Q [ ~ I R S T U V W w x y X Y Z ` ...+.@.#.$.%. ",
|
||||
" D &.*.N p r ~ I J =.-.;.>.,.'.).!.~.{.].^.Z /.(._.:...<. ",
|
||||
" [.}.|.1.2.3.~ [ 4.5.7 6.7.8.f 9.0.a.b.c.d.e.f.^.Z g.h.i.j.k. ",
|
||||
" l.m.n.o.p.q.r.s.t.u.v.R S w.L x.y.z.! ~ ~ A.~ B.C.D.E.F.G.H.I.J. ",
|
||||
" K.L.M.N.O.P.N 4 Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ +~ @+y z #+$+%+&+*+J. ",
|
||||
" =+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+++1+2+3+4+5+w x 6+7+8+9+0+a+J. ",
|
||||
" l.b+c+d+e+f+>+g+h+i+j+k+l+r.m+n+l o+p+(+q+~ ~ r+A.s+j+t+u+v+w+x+y+z+A+B+J. ",
|
||||
" K.C+D+E+F+G+e+f+H+I+J+K+L+M+N+O+P+Q+X.R+S+T+U+N ~ V+W+X+Y+Z+`+ @.@+@@@#@$@%@ ' ' ' ",
|
||||
" &@*@=@D+-@;@F+G+>@,@'@)@!@~@{@]@^@/@Q+R+(@_@j+:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@| | t.",
|
||||
" c@d@e@f@g@h@i@;@j@k@l@,@'@m@n@o@R+]@p@X.q@r@s@t@j+u@v@w@x@w+y@z@A@B@C@D@E@F@G@H@I@J@| ' ",
|
||||
" K@L@M@N@j+O@P@i@;@j@Q@R@,@'@m@S@T@U@V@W@X@Y@Z@s@`@ #.#+#@###$#%#&#*#=#-#;#>#F ,#'#R+x. ",
|
||||
" K@)#!#!#~#{#j+]#^#/#j@e+f+>+(#'+_#:#<#[#}#X@Y@|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#L@ ",
|
||||
" K@f#g#!#!#!#h#i#j+j#k#d+e+f+l#(#m#n#:#o#p#1.q#r#s#t#u#v#w#x#6#y#z#A#B#C#B@D#E#J. ",
|
||||
" c@F#G#H#!#!#!#!#I#i#j+J#K#e+f+'@)@m#L#M#N#O#1.P#w+Q#R#S#T#w#U#,.V#W#X#&#A@Y#Z#J. ",
|
||||
" `# $.$+$@$!#!#!#!##$$$j+%$&$,@'@)@m#*$M#q#+#=$-$;$>$R#,$'$;#)$!$~${$]$&#A@^$J. ",
|
||||
" `#/$($_$:$<$[$!#!#!#!##$$$i+}$|$'@)@1$2$3$4$5$6$7$;$8$9$0$a$W.b$N c$d$%#&#e$J. ",
|
||||
" f$g$_+#.h$i$j$k$!#!#!#!#M@l$e@i+m$R@n$o$p$q$r$s$6$t$u$v$X.w$x$y$z$6#A$d$%#B$J. ",
|
||||
" C$D$0.N E$F$G$p+n+H$I$@$!#!#!#!#M@l$j+J$K$L$M$N$q$r$O$P$Q$R$S$T$U$~ V$x#6#A$d$W$($ ",
|
||||
" k . 4 ~ X$Y$Z$`$ %L .%+%@%[$!#!#!#!#~#j+#%$%%%M$&%*%P$=%,.-%F ;%D$>%,%w#x#'%)%!% ",
|
||||
" ~%{%]%++^%/%(%_%:%<%[%G#}%!#!#!#!#j+|%1%$%2%3%4%5%6%7%W#8%9%0%R#S#a%b%c%d% ",
|
||||
" e%f%g%~ h%i%j%:%k%l%m%n%o%p%q%!#!#j+r%s%t%u%v%M$w%x%y%8%z%A%B%>$C%D%E%F% ",
|
||||
" e%/$:%G%1+H%I%J%K%L%M%N%O%P%+%Q%R%S%T%U%U%1%V%%%M$N$W%X%Y%6$Z%`% &.&+& ",
|
||||
" K@@&#&J.$&%&&&N%*&=&-&;&>&,&'&)&.$!&~&{&]&^&1%V%%%M$N$W%/&(&_&:&<&[& ",
|
||||
" K@}&M%l%|&|&#&;&>&,&1&O%2&3&4&5&6&L@7&8&9&0&a&1%V%%%M$b&c&d&T.e&f&' ",
|
||||
" g&-&;&>&3&h&O%2&3&i&5&j&k&l&m&n&o&p&q&r&s&0&a&1%V%t&u&d&# E$~ R v&< S$w& ",
|
||||
" +%x&y&2&3&i&h&j&k&l&m&z&A&h&B&C&D&E&F&r&G&s&0&H&I&J&p+K&-.8 L&~ ~ ~ M&| 3 . $.1 ",
|
||||
" N&O&P&Q&k&R&S&T&A&h&B&C&U&V&W&X&Y&Z&`&F&r& *.*+*S&@*q+#*$*%*&***=*~ ~ ~ ~ ~ ~ S. ",
|
||||
" R+R+-*;*>*,*@*}+'*V&W&X&)*!*!*~*{*]*^*`&/*(*_*m+. :*<*[*%*&*=*&*L&}*|*~ ~ ~ ! ",
|
||||
" R+R+R+f$1*2*O+Z.3*!*~*4*5*6*7*Y&8*9*^*`&0*:%a*b*c*d*=*e*=*&*}*}*&***~ ~ 4 f ",
|
||||
" R+R+f*8 g*2*7.h*i*7*j*k*l*l*J.m*n*9*^*o*p*q*[&R+R+D$~ r*}*~ [*s*~ ~ ~ , ",
|
||||
" R+f*i%L&t*-.u*v*w*x*y*z*A*B*C*D*E*n*9*F*_@G*R+R+R+R+!$i%~ e*e*H*~ ~ I*J* ",
|
||||
" R+R+R+R$3.0.~ ~ }*&*K*-.u*L*M*-#N*O*O*P*Q*R*E*S*_@[& R+R+R+R+D$~ %*s*~ 4 $. ",
|
||||
" l | ~ ~ ~ ~ ~ ~ T*%*L&&*U*-.V*W*X*Y*Z*`*L@ =.=+=J.@= R+R+R+!$i%~ e&$. ",
|
||||
" i$#=I*~ e***~ =***=*[*H*$=8 K&%=&=*===-=;=>=,=L@'= R+R+R$)=w. ",
|
||||
" R+o+$.4 }*$=s*L&&*[*s*s*~ ! l R+R+!=~={=]=C*^=/= R+R+(= ",
|
||||
" R+R+l # $ ~ s*$=L&s*L&~ e&K R+R+R+R+_=:=<= ",
|
||||
" R+R+s.[=e&~ **e*~ ~ | ) R+R+R+ ",
|
||||
" R+R+i$3.! ~ d*4 , ' ",
|
||||
" R+R+s.# J ) o+ ",
|
||||
" R+R+X.'# ",
|
||||
" ",
|
||||
" "};
|
||||
BIN
wrlib/tests/test.png
Normal file
BIN
wrlib/tests/test.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
634
wrlib/tests/testdraw.c
Normal file
634
wrlib/tests/testdraw.c
Normal file
@@ -0,0 +1,634 @@
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "wraster.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
Display *dpy;
|
||||
RContext *ctx;
|
||||
char *ProgName;
|
||||
|
||||
|
||||
void
|
||||
testDraw()
|
||||
{
|
||||
RImage *img, *tile, *icon, *tmp;
|
||||
RColor color, from, to;
|
||||
RColor cdelta;
|
||||
RSegment segs[20];
|
||||
int i, x, y;
|
||||
XSetWindowAttributes val;
|
||||
Pixmap pix, back;
|
||||
Window win;
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 128, 256,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel, &val);
|
||||
back = XCreatePixmap(ctx->dpy, ctx->drawable, 128, 256, ctx->depth);
|
||||
|
||||
/* Dark blue tile gradient */
|
||||
from.red = 0x28;
|
||||
from.green = 0x45;
|
||||
from.blue = 0x69;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x08;
|
||||
to.green = 0x24;
|
||||
to.blue = 0x20;
|
||||
to.alpha = 0xff;
|
||||
|
||||
/* Standard gray tile gradient */
|
||||
/*from.red = 0xa6;
|
||||
from.green = 0xa6;
|
||||
from.blue = 0xb6;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x51;
|
||||
to.green = 0x55;
|
||||
to.blue = 0x61;
|
||||
to.alpha = 0xff;*/
|
||||
|
||||
/* Make the tile, and put it as a sample in the first place */
|
||||
tile = RRenderGradient(64, 64, &from, &to, RGRD_DIAGONAL);
|
||||
img = RCloneImage(tile);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 0, 0);
|
||||
|
||||
/* Read the image, and combine it with the tile. Put it as a sample
|
||||
* in the second slot, and also save a copy for later use. */
|
||||
icon = RLoadImage(ctx, "ballot_box.xpm", 0);
|
||||
if (!icon) {
|
||||
puts(RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
RCombineArea(img, icon, 0, 0, icon->width, icon->height, 8, 8);
|
||||
RReleaseImage(icon);
|
||||
tmp = img;
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 64, 0);
|
||||
|
||||
img = RCloneImage(tile);
|
||||
|
||||
/* Draw random pixels on image */
|
||||
for (i=0; i< 200; i++) {
|
||||
color.red = rand()%256;
|
||||
color.green = rand()%256;
|
||||
color.blue = rand()%256;
|
||||
color.alpha = 255;
|
||||
x = rand()%64;
|
||||
y = rand()%64;
|
||||
RPutPixel(img, x, y, &color);
|
||||
}
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 0, 64);
|
||||
|
||||
RReleaseImage(img);
|
||||
img = RCloneImage(tile);
|
||||
|
||||
/* Alter random pixels in image with the same amount for r/g/b */
|
||||
for (i=0; i< 200; i++) {
|
||||
cdelta.red = cdelta.green = cdelta.blue = rand()%511 - 255;
|
||||
cdelta.alpha = 0;
|
||||
x = rand()%64;
|
||||
y = rand()%64;
|
||||
ROperatePixel(img, RAddOperation, x, y, &cdelta);
|
||||
}
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 64, 64);
|
||||
|
||||
RReleaseImage(img);
|
||||
img = RCloneImage(tile);
|
||||
|
||||
/* Draw lines in all directions to test different slopes */
|
||||
color.red = 0xff;
|
||||
color.green = 0x7d;
|
||||
color.blue = 0x52;
|
||||
color.alpha = 0xff;
|
||||
for (i=0; i<16; i++)
|
||||
segs[i].x1 = segs[i].y1 = 31;
|
||||
|
||||
segs[6].x2 = segs[7].x2 = segs[8].x2 = segs[9].x2 = segs[10].x2 = 0;
|
||||
segs[2].y2 = segs[3].y2 = segs[4].y2 = segs[5].y2 = segs[6].y2 = 0;
|
||||
segs[5].x2 = segs[11].x2 = 16;
|
||||
segs[1].y2 = segs[7].y2 = 16;
|
||||
segs[4].x2 = segs[12].x2 = 31;
|
||||
segs[0].y2 = segs[8].y2 = 31;
|
||||
segs[3].x2 = segs[13].x2 = 46;
|
||||
segs[9].y2 = segs[15].y2 = 46;
|
||||
segs[0].x2 = segs[1].x2 = segs[2].x2 = segs[14].x2 = segs[15].x2 = 62;
|
||||
segs[10].y2 = segs[11].y2 = segs[12].y2 = segs[13].y2 = segs[14].y2 = 62;
|
||||
RDrawSegments(img, segs, 9, &color);
|
||||
|
||||
/* Also test how alpha channel behaves when drawing lines */
|
||||
color.alpha = 0x80;
|
||||
RDrawSegments(img, &segs[9], 7, &color);
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 0, 128);
|
||||
|
||||
RReleaseImage(img);
|
||||
img = RCloneImage(tile);
|
||||
|
||||
/* Alter lines in all directions (test different slopes) */
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
cdelta.alpha = 0;
|
||||
ROperateSegments(img, RAddOperation, segs, 16, &cdelta);
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 64, 128);
|
||||
|
||||
RReleaseImage(img);
|
||||
|
||||
/* Create a bevel around the icon, and save it for a later use */
|
||||
img = tmp;
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
cdelta.alpha = 0;
|
||||
ROperateLine(img, RAddOperation, 8, 8, 56, 8, &cdelta);
|
||||
ROperateLine(img, RAddOperation, 8, 9, 8, 56, &cdelta);
|
||||
cdelta.red = cdelta.green = cdelta.blue = 40;
|
||||
cdelta.alpha = 0;
|
||||
ROperateLine(img, RSubtractOperation, 8, 56, 56, 56, &cdelta);
|
||||
ROperateLine(img, RSubtractOperation, 56, 8, 56, 55, &cdelta);
|
||||
RReleaseImage(tile);
|
||||
tmp = RCloneImage(img);
|
||||
|
||||
/* Draw some solid lines over the icon */
|
||||
color.red = 0xff;
|
||||
color.green = 0x7d;
|
||||
color.blue = 0x52;
|
||||
color.alpha = 0xff;
|
||||
for (i=16; i<24; i++) {
|
||||
RDrawLine(img, 9, i, 55, i, &color);
|
||||
}
|
||||
|
||||
/* Also try some lines with alpha over the icon */
|
||||
color.alpha = 0x80;
|
||||
for (i=40; i<48; i++) {
|
||||
RDrawLine(img, 9, i, 55, i, &color);
|
||||
}
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 0, 192);
|
||||
|
||||
RReleaseImage(img);
|
||||
|
||||
/* Restore the image with the icon, and alter some lines */
|
||||
img = tmp;
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
cdelta.alpha = 0;
|
||||
for (i=16; i<24; i++) {
|
||||
ROperateLine(img, RSubtractOperation, 9, i, 55, i, &cdelta);
|
||||
}
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
for (i=40; i<48; i++) {
|
||||
ROperateLine(img, RAddOperation, 9, i, 55, i, &cdelta);
|
||||
}
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 64, 192);
|
||||
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, win, back);
|
||||
XMapRaised(dpy, win);
|
||||
XClearWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
testBevel()
|
||||
{
|
||||
RImage *img, *tile;
|
||||
RColor color, from, to;
|
||||
XSetWindowAttributes val;
|
||||
Pixmap pix, back;
|
||||
Window win;
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 140, 140,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel, &val);
|
||||
back = XCreatePixmap(ctx->dpy, ctx->drawable, 140, 140, ctx->depth);
|
||||
|
||||
/* Standard gray tile gradient */
|
||||
from.red = 0xa6;
|
||||
from.green = 0xa6;
|
||||
from.blue = 0xb6;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x51;
|
||||
to.green = 0x55;
|
||||
to.blue = 0x61;
|
||||
to.alpha = 0xff;
|
||||
|
||||
/* Dark blue tile gradient */
|
||||
/*from.red = 0x28;
|
||||
from.green = 0x45;
|
||||
from.blue = 0x69;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x08;
|
||||
to.green = 0x24;
|
||||
to.blue = 0x20;
|
||||
to.alpha = 0xff;*/
|
||||
|
||||
/* Create Background */
|
||||
img = RCreateImage(140, 140, True);
|
||||
color.red = 0x28;
|
||||
color.green = 0x45;
|
||||
color.blue = 0x69;
|
||||
color.alpha = 0xff;
|
||||
RClearImage(img, &color);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 140, 140, 0, 0);
|
||||
RReleaseImage(img);
|
||||
|
||||
tile = RRenderGradient(64, 64, &from, &to, RGRD_DIAGONAL);
|
||||
|
||||
img = RCloneImage(tile);
|
||||
RBevelImage(img, RBEV_SUNKEN);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 3, 3);
|
||||
RReleaseImage(img);
|
||||
|
||||
img = RCloneImage(tile);
|
||||
RBevelImage(img, RBEV_RAISED);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 73, 3);
|
||||
RReleaseImage(img);
|
||||
|
||||
img = RCloneImage(tile);
|
||||
RBevelImage(img, RBEV_RAISED2);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 3, 73);
|
||||
RReleaseImage(img);
|
||||
|
||||
img = RCloneImage(tile);
|
||||
RBevelImage(img, RBEV_RAISED3);
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 73, 73);
|
||||
RReleaseImage(img);
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, win, back);
|
||||
XMapRaised(dpy, win);
|
||||
XClearWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
|
||||
void testScale()
|
||||
{
|
||||
RImage *image;
|
||||
RImage *scaled;
|
||||
XSetWindowAttributes val;
|
||||
Pixmap pix;
|
||||
Window win;
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 140, 140,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel, &val);
|
||||
XStoreName(dpy, win, "Scale");
|
||||
pix = XCreatePixmap(ctx->dpy, ctx->drawable, 140, 140, ctx->depth);
|
||||
|
||||
image = RLoadImage(ctx, "ballot_box.xpm", 0);
|
||||
if (!image) {
|
||||
puts("couldnt load ballot_box.xpm");
|
||||
return;
|
||||
}
|
||||
|
||||
scaled = RScaleImage(image, 140, 140);
|
||||
|
||||
RReleaseImage(image);
|
||||
RConvertImage(ctx, scaled, &pix);
|
||||
XSetWindowBackgroundPixmap(dpy, win, pix);
|
||||
XMapRaised(dpy, win);
|
||||
XClearWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
|
||||
void testRotate()
|
||||
{
|
||||
|
||||
RImage *image;
|
||||
RImage *rotated;
|
||||
XSetWindowAttributes val;
|
||||
Pixmap pix;
|
||||
Window win;
|
||||
|
||||
image = RLoadImage(ctx, "ballot_box.xpm", 0);
|
||||
if (!image) {
|
||||
puts("couldnt load ballot_box.xpm");
|
||||
return;
|
||||
}
|
||||
|
||||
image = RScaleImage(image, 90, 180);
|
||||
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, image->height,
|
||||
image->width,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel, &val);
|
||||
XStoreName(dpy, win, "Rotate");
|
||||
pix = XCreatePixmap(ctx->dpy, ctx->drawable, image->height, image->width,
|
||||
ctx->depth);
|
||||
|
||||
rotated = RRotateImage(image, 90.0);
|
||||
|
||||
RReleaseImage(image);
|
||||
RConvertImage(ctx, rotated, &pix);
|
||||
XSetWindowBackgroundPixmap(dpy, win, pix);
|
||||
XMapRaised(dpy, win);
|
||||
XClearWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
drawClip()
|
||||
{
|
||||
RImage *img;
|
||||
RColor color, from, to, tmp;
|
||||
RColor cdelta, cdelta1;
|
||||
RSegment segs[20];
|
||||
XSetWindowAttributes val;
|
||||
Pixmap pix, back;
|
||||
Window win;
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 64, 64,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel, &val);
|
||||
back = XCreatePixmap(ctx->dpy, ctx->drawable, 64, 64, ctx->depth);
|
||||
|
||||
/* Standard gray tile gradient */
|
||||
from.red = 0xa6;
|
||||
from.green = 0xa6;
|
||||
from.blue = 0xb6;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x51;
|
||||
to.green = 0x55;
|
||||
to.blue = 0x61;
|
||||
to.alpha = 0xff;
|
||||
|
||||
/* Dark blue tile gradient */
|
||||
from.red = 0x28;
|
||||
from.green = 0x45;
|
||||
from.blue = 0x69;
|
||||
from.alpha = 0xff;
|
||||
to.red = 0x08;
|
||||
to.green = 0x24;
|
||||
to.blue = 0x20;
|
||||
to.alpha = 0xff;
|
||||
|
||||
img = RRenderGradient(64, 64, &from, &to, RGRD_DIAGONAL);
|
||||
|
||||
RBevelImage(img, RBEV_RAISED3);
|
||||
#if 1
|
||||
color.alpha = 255;
|
||||
color.red = color.green = color.blue = 0;
|
||||
|
||||
cdelta.alpha = 0;
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
|
||||
cdelta1.alpha = 0;
|
||||
cdelta1.red = cdelta1.green = cdelta1.blue = 40;
|
||||
|
||||
segs[0].x1 = segs[2].y1 = segs[4].x1 = segs[4].x2 = 63-21;
|
||||
segs[0].x2 = segs[2].y2 = segs[1].x2 = segs[3].y2 = 63-2;
|
||||
segs[0].y1 = segs[2].x1 = segs[1].y1 = segs[3].x1 = 2;
|
||||
segs[0].y2 = segs[2].x2 = segs[6].x1 = segs[6].x2 = 21;
|
||||
segs[1].x1 = segs[3].y1 = segs[5].x1 = segs[5].x2 = 63-22;
|
||||
segs[1].y2 = segs[3].x2 = segs[7].x1 = segs[7].x2 = 22;
|
||||
|
||||
segs[4].y1 = segs[5].y1 = segs[10].x1 = segs[11].x1 = 0;
|
||||
segs[4].y2 = segs[5].y2 = segs[10].x2 = segs[11].x2 = 1;
|
||||
segs[6].y1 = segs[7].y1 = segs[8].x1 = segs[9].x1 = 63-1;
|
||||
segs[6].y2 = segs[7].y2 = segs[8].x2 = segs[9].x2 = 63;
|
||||
segs[8].y1 = segs[8].y2 = 21;
|
||||
segs[9].y1 = segs[9].y2 = 22;
|
||||
segs[10].y1 = segs[10].y2 = 63-21;
|
||||
segs[11].y1 = segs[11].y2 = 63-22;
|
||||
/* Black segments */
|
||||
RDrawSegments(img, segs, 12, &color);
|
||||
|
||||
segs[0].x1 = segs[3].y1 = 63-20;
|
||||
segs[0].x2 = segs[1].y2 = segs[2].x2 = segs[3].y2 = 63-2;
|
||||
segs[0].y1 = segs[1].x1 = segs[2].y1 = segs[3].x1 = 2;
|
||||
segs[1].y1 = segs[2].x1 = 63-23;
|
||||
segs[0].y2 = segs[3].x2 = 20;
|
||||
segs[1].x2 = segs[2].y2 = 23;
|
||||
/* Bevels arround black segments */
|
||||
ROperateSegments(img, RAddOperation, segs, 2, &cdelta);
|
||||
ROperateSegments(img, RSubtractOperation, &segs[2], 2 ,&cdelta1);
|
||||
|
||||
RGetPixel(img, 63-2, 20, &tmp);
|
||||
/*RPutPixel(img, 63-1, 23, &tmp);*/
|
||||
RDrawLine(img, 63-1, 23, 63, 23, &tmp);
|
||||
RGetPixel(img, 63-23, 2, &tmp);
|
||||
RDrawLine(img, 63-23, 0, 63-23, 1, &tmp);
|
||||
|
||||
RGetPixel(img, 23, 63-2, &tmp);
|
||||
/*RPutPixel(img, 23, 63-1, &tmp);*/
|
||||
RDrawLine(img, 23, 63-1, 23, 63, &tmp);
|
||||
RGetPixel(img, 2, 63-20, &tmp);
|
||||
RDrawLine(img, 0, 63-23, 1, 63-23, &tmp);
|
||||
#else
|
||||
color.alpha = 255;
|
||||
color.red = color.green = color.blue = 0;
|
||||
|
||||
cdelta.alpha = 0;
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
|
||||
cdelta1.alpha = 0;
|
||||
cdelta1.red = cdelta1.green = cdelta1.blue = 40;
|
||||
|
||||
RDrawLine(img, 63-21, 2, 63-2, 21, &color); /* upper 2 black lines */
|
||||
ROperateLine(img, RAddOperation, 63-20, 2, 63-2, 20, &cdelta); /* the bevel arround them */
|
||||
ROperateLine(img, RSubtractOperation, 63-22, 2, 63-2, 22, &cdelta1);
|
||||
RDrawLine(img, 63-21, 0, 63-21, 1, &color); /* upper small black lines */
|
||||
RDrawLine(img, 63-1, 21, 63, 21, &color);
|
||||
|
||||
RGetPixel(img, 63-2, 20, &tmp);
|
||||
RPutPixel(img, 63-1, 22, &tmp);
|
||||
RGetPixel(img, 2, 63-22, &tmp);
|
||||
RDrawLine(img, 63-22, 0, 63-22, 1, &tmp);
|
||||
|
||||
RDrawLine(img, 2, 63-21, 21, 63-2, &color); /* lower 2 black lines */
|
||||
ROperateLine(img, RSubtractOperation, 2, 63-20, 20, 63-2, &cdelta1); /* the bevel arround them */
|
||||
ROperateLine(img, RAddOperation, 2, 63-22, 22, 63-2, &cdelta);
|
||||
RDrawLine(img, 21, 63-1, 21, 63, &color); /* lower small black lines */
|
||||
RDrawLine(img, 0, 63-21, 1, 63-21, &color);
|
||||
ROperateLine(img, RAddOperation, 22, 63-1, 22, 63, &cdelta);
|
||||
/*ROperateLine(img, RAddOperation, 22, 63-1, 22, 63, &cdelta);*/ /* the bevel arround them */
|
||||
ROperateLine(img, RSubtractOperation, 0, 63-22, 1, 63-22, &cdelta1);
|
||||
#endif
|
||||
|
||||
RConvertImage(ctx, img, &pix);
|
||||
XCopyArea(dpy, pix, back, ctx->copy_gc, 0, 0, 64, 64, 0, 0);
|
||||
RReleaseImage(img);
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, win, back);
|
||||
XMapRaised(dpy, win);
|
||||
XClearWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
benchmark()
|
||||
{
|
||||
RImage *img;
|
||||
RColor color;
|
||||
RColor cdelta;
|
||||
double t1, t2, total, d1=0, d2=0, d3=0;
|
||||
struct timeval timev;
|
||||
int i, j;
|
||||
|
||||
puts("Starting benchmark");
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
|
||||
img = RCreateImage(1024, 768, True);
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("Image created in %f sec\n", total);
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
|
||||
color.red = 0x28;
|
||||
color.green = 0x45;
|
||||
color.blue = 0x69;
|
||||
color.alpha = 0xff;
|
||||
RClearImage(img, &color);
|
||||
|
||||
color.red = 0xff;
|
||||
color.green = 0x7d;
|
||||
color.blue = 0x52;
|
||||
color.alpha = 0xff;
|
||||
cdelta.red = cdelta.green = cdelta.blue = 80;
|
||||
cdelta.alpha = 0;
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("Image filled in %f sec\n", total);
|
||||
|
||||
for(j=1; j<6; j++) {
|
||||
printf("Pass %d...\n", j);
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
|
||||
color.alpha = 0xff;
|
||||
for (i=0; i< 10000; i++) {
|
||||
RDrawLine(img, 0, i%64, i%64, 63, &color);
|
||||
}
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("Drawing 10000 lines in %f sec\n", total);
|
||||
d1 += total;
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
|
||||
color.alpha = 80;
|
||||
for (i=0; i< 10000; i++) {
|
||||
RDrawLine(img, 0, i%64, i%64, 63, &color);
|
||||
}
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("Drawing 10000 lines with alpha in %f sec\n", total);
|
||||
d2+=total;
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
|
||||
for (i=0; i< 10000; i++) {
|
||||
ROperateLine(img, RAddOperation, 0, i%64, i%64, 63, &cdelta);
|
||||
}
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("Altering 10000 lines in %f sec\n", total);
|
||||
d3+=total;
|
||||
}
|
||||
printf("Average: %f, %f, %f\n", d1/5, d2/5, d3/5);
|
||||
|
||||
RReleaseImage(img);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
RContextAttributes attr;
|
||||
int visualID = -1;
|
||||
|
||||
ProgName = strrchr(argv[0],'/');
|
||||
if (!ProgName)
|
||||
ProgName = argv[0];
|
||||
else
|
||||
ProgName++;
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
puts("cant open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
attr.flags = RC_RenderMode | RC_ColorsPerChannel;
|
||||
|
||||
attr.render_mode = RDitheredRendering;
|
||||
attr.colors_per_channel = 4;
|
||||
|
||||
if (visualID >= 0) {
|
||||
attr.flags |= RC_VisualID;
|
||||
attr.visualid = visualID;
|
||||
}
|
||||
|
||||
ctx = RCreateContext(dpy, DefaultScreen(dpy), &attr);
|
||||
|
||||
if (!ctx) {
|
||||
printf("could not initialize graphics library context: %s\n",
|
||||
RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Here are the things we want to test */
|
||||
testDraw();
|
||||
|
||||
testBevel();
|
||||
|
||||
drawClip();
|
||||
|
||||
testScale();
|
||||
|
||||
testRotate();
|
||||
|
||||
/* benchmark();*/
|
||||
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
|
||||
213
wrlib/tests/testgrad.c
Normal file
213
wrlib/tests/testgrad.c
Normal file
@@ -0,0 +1,213 @@
|
||||
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "wraster.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef BENCH
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
|
||||
Display *dpy;
|
||||
Window win;
|
||||
RContext *ctx;
|
||||
RImage *imgh, *imgv, *imgd;
|
||||
Pixmap pix;
|
||||
char *ProgName;
|
||||
|
||||
|
||||
void
|
||||
print_help()
|
||||
{
|
||||
printf("usage: %s [-options] color1 [color2 ...]\n", ProgName);
|
||||
puts("options:");
|
||||
puts(" -m match colors");
|
||||
puts(" -d dither colors (default)");
|
||||
puts(" -c <cpc> colors per channel to use");
|
||||
puts(" -v <vis-id> visual id to use");
|
||||
}
|
||||
|
||||
#ifdef BENCH
|
||||
#include "bench.h"
|
||||
#endif
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
RContextAttributes attr;
|
||||
RColor **colors = NULL;
|
||||
int i, rmode = RDitheredRendering, ncolors = 0, cpc = 4;
|
||||
char **color_name;
|
||||
XColor color;
|
||||
XSetWindowAttributes val;
|
||||
int visualID = -1;
|
||||
#ifdef BENCH
|
||||
double t1, t2, total, t, rt;
|
||||
struct timeval timev;
|
||||
#endif
|
||||
|
||||
ProgName = strrchr(argv[0],'/');
|
||||
if (!ProgName)
|
||||
ProgName = argv[0];
|
||||
else
|
||||
ProgName++;
|
||||
|
||||
color_name = (char **) malloc(sizeof(char*) * argc);
|
||||
if(color_name == NULL) {
|
||||
fprintf(stderr, "Cannot allocate memory!\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (argc>1) {
|
||||
for (i=1; i<argc; i++) {
|
||||
if (strcmp(argv[i], "-m")==0) {
|
||||
rmode = RBestMatchRendering;
|
||||
} else if (strcmp(argv[i], "-d")==0) {
|
||||
rmode = RDitheredRendering;
|
||||
} else if (strcmp(argv[i], "-c")==0) {
|
||||
i++;
|
||||
if (i>=argc) {
|
||||
fprintf(stderr, "too few arguments for %s\n", argv[i-1]);
|
||||
exit(0);
|
||||
}
|
||||
if (sscanf(argv[i], "%i", &cpc)!=1) {
|
||||
fprintf(stderr, "bad value for colors per channel: \"%s\"\n", argv[i]);
|
||||
exit(0);
|
||||
}
|
||||
} else if (strcmp(argv[i], "-v")==0) {
|
||||
i++;
|
||||
if (i>=argc) {
|
||||
fprintf(stderr, "too few arguments for %s\n", argv[i-1]);
|
||||
exit(0);
|
||||
}
|
||||
if (sscanf(argv[i], "%i", &visualID)!=1) {
|
||||
fprintf(stderr, "bad value for visual ID: \"%s\"\n", argv[i]);
|
||||
exit(0);
|
||||
}
|
||||
} else if (argv[i][0] != '-') {
|
||||
color_name[ncolors++] = argv[i];
|
||||
} else {
|
||||
print_help();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ncolors == 0) {
|
||||
print_help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
puts("cant open display");
|
||||
exit(1);
|
||||
}
|
||||
attr.flags = RC_RenderMode | RC_ColorsPerChannel;
|
||||
|
||||
attr.render_mode = rmode;
|
||||
attr.colors_per_channel = cpc;
|
||||
|
||||
if (visualID >= 0) {
|
||||
attr.flags |= RC_VisualID;
|
||||
attr.visualid = visualID;
|
||||
}
|
||||
|
||||
ctx = RCreateContext(dpy, DefaultScreen(dpy), &attr);
|
||||
|
||||
if (!ctx) {
|
||||
printf("could not initialize graphics library context: %s\n",
|
||||
RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
colors = malloc(sizeof(RColor*)*(ncolors+1));
|
||||
for (i=0; i<ncolors; i++) {
|
||||
if (!XParseColor(dpy, ctx->cmap, color_name[i], &color)) {
|
||||
printf("could not parse color \"%s\"\n", color_name[i]);
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
colors[i] = malloc(sizeof(RColor));
|
||||
colors[i]->red = color.red >> 8;
|
||||
colors[i]->green = color.green >> 8;
|
||||
colors[i]->blue = color.blue >> 8;
|
||||
printf("0x%02x%02x%02x\n", colors[i]->red, colors[i]->green,
|
||||
colors[i]->blue);
|
||||
}
|
||||
}
|
||||
colors[i] = NULL;
|
||||
|
||||
val.background_pixel = ctx->black;
|
||||
val.colormap = ctx->cmap;
|
||||
val.backing_store = Always;
|
||||
#ifdef BENCH
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 250, 250,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel|CWBackingStore, &val);
|
||||
#else
|
||||
win = XCreateWindow(dpy, DefaultRootWindow(dpy), 10, 10, 750, 250,
|
||||
0, ctx->depth, InputOutput, ctx->visual,
|
||||
CWColormap|CWBackPixel|CWBackingStore, &val);
|
||||
#endif
|
||||
XMapRaised(dpy, win);
|
||||
XFlush(dpy);
|
||||
|
||||
#ifdef BENCH
|
||||
rt = 0;
|
||||
gettimeofday(&timev, NULL);
|
||||
t = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
for (i=0; i<9; i++) {
|
||||
if (i>0)
|
||||
printf("\nrepeating...\n\n");
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
if (i%3==0)
|
||||
imgh = RRenderMultiGradient(550, 550, colors, RGRD_HORIZONTAL);
|
||||
else if (i%3==1)
|
||||
imgh = RRenderMultiGradient(550, 550, colors, RGRD_VERTICAL);
|
||||
else
|
||||
imgh = RRenderMultiGradient(550, 550, colors, RGRD_DIAGONAL);
|
||||
|
||||
gettimeofday(&timev, NULL);
|
||||
t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t2 - t1;
|
||||
printf("gradient rendered in %f sec\n", total);
|
||||
|
||||
RConvertImage(ctx, imgh, &pix);
|
||||
gettimeofday(&timev, NULL);
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
total = t1 - t2;
|
||||
rt += total;
|
||||
printf("image converted in %f sec\n", total);
|
||||
|
||||
XCopyArea(dpy, pix, win, ctx->copy_gc, 0, 0, 250, 250, 0, 0);
|
||||
|
||||
XFlush(dpy);
|
||||
}
|
||||
t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000);
|
||||
printf("------------------------------------------\n");
|
||||
printf("%i images processed in %f sec\n", i, t1-t);
|
||||
printf("average time per convertion %f sec\n", rt/i);
|
||||
printf("------------------------------------------\n");
|
||||
#else
|
||||
imgh = RRenderMultiGradient(250, 250, colors, RGRD_HORIZONTAL);
|
||||
imgv = RRenderMultiGradient(250, 250, colors, RGRD_VERTICAL);
|
||||
imgd = RRenderMultiGradient(250, 250, colors, RGRD_DIAGONAL);
|
||||
RConvertImage(ctx, imgh, &pix);
|
||||
XCopyArea(dpy, pix, win, ctx->copy_gc, 0, 0, 250, 250, 0, 0);
|
||||
|
||||
RConvertImage(ctx, imgv, &pix);
|
||||
XCopyArea(dpy, pix, win, ctx->copy_gc, 0, 0, 250, 250, 250, 0);
|
||||
|
||||
RConvertImage(ctx, imgd, &pix);
|
||||
XCopyArea(dpy, pix, win, ctx->copy_gc, 0, 0, 250, 250, 500, 0);
|
||||
|
||||
XFlush(dpy);
|
||||
#endif
|
||||
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
|
||||
70
wrlib/tests/testrot.c
Normal file
70
wrlib/tests/testrot.c
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "wraster.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "tile.xpm"
|
||||
Display *dpy;
|
||||
Window win;
|
||||
RContext *ctx;
|
||||
RImage *img;
|
||||
Pixmap pix;
|
||||
|
||||
|
||||
#define MAX(a,b) (a)>(b) ? (a) : (b)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
RContextAttributes attr;
|
||||
float a;
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
puts("cant open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
attr.flags = RC_RenderMode | RC_ColorsPerChannel;
|
||||
attr.render_mode = RDitheredRendering;
|
||||
attr.colors_per_channel = 4;
|
||||
ctx = RCreateContext(dpy, DefaultScreen(dpy), &attr);
|
||||
|
||||
if (argc<2)
|
||||
img = RGetImageFromXPMData(ctx, image_name);
|
||||
else
|
||||
img = RLoadImage(ctx, argv[1], 0);
|
||||
|
||||
if (!img) {
|
||||
puts(RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10,
|
||||
MAX(img->width, img->height),
|
||||
MAX(img->height, img->width), 0, 0, 0);
|
||||
XMapRaised(dpy, win);
|
||||
XFlush(dpy);
|
||||
|
||||
a = 0;
|
||||
while (1) {
|
||||
RImage *tmp;
|
||||
|
||||
a = a + 1.0;
|
||||
|
||||
tmp = RRotateImage(img, a);
|
||||
if (!RConvertImage(ctx, tmp, &pix)) {
|
||||
puts(RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
RReleaseImage(tmp);
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, win, pix);
|
||||
XFreePixmap(dpy, pix);
|
||||
XClearWindow(dpy, win);
|
||||
XSync(dpy, 0);
|
||||
usleep(50000);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
125
wrlib/tests/tile.xpm
Normal file
125
wrlib/tests/tile.xpm
Normal file
@@ -0,0 +1,125 @@
|
||||
/* XPM */
|
||||
static char *image_name[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
" 64 64 54 1",
|
||||
/* colors */
|
||||
". c #ffffff",
|
||||
"# c #000000",
|
||||
"a c #516161",
|
||||
"b c #a2a2b2",
|
||||
"c c #a2a2a2",
|
||||
"d c #a292b2",
|
||||
"e c #92a2a2",
|
||||
"f c #a292a2",
|
||||
"g c #9292a2",
|
||||
"h c #929292",
|
||||
"i c #9282a2",
|
||||
"j c #829292",
|
||||
"k c #928292",
|
||||
"l c #828292",
|
||||
"m c #828282",
|
||||
"n c #827192",
|
||||
"o c #615161",
|
||||
"p c #92a2b2",
|
||||
"q c #9292b2",
|
||||
"r c #8292a2",
|
||||
"s c #8282a2",
|
||||
"t c #718292",
|
||||
"u c #718282",
|
||||
"v c #515161",
|
||||
"w c #515151",
|
||||
"x c #827182",
|
||||
"y c #415151",
|
||||
"z c #514151",
|
||||
"A c #717192",
|
||||
"B c #717182",
|
||||
"C c #717171",
|
||||
"D c #414151",
|
||||
"E c #716182",
|
||||
"F c #617182",
|
||||
"G c #415141",
|
||||
"H c #414141",
|
||||
"I c #617171",
|
||||
"J c #413041",
|
||||
"K c #304141",
|
||||
"L c #716171",
|
||||
"M c #616171",
|
||||
"N c #616182",
|
||||
"O c #303030",
|
||||
"P c #616161",
|
||||
"Q c #303041",
|
||||
"R c #516171",
|
||||
"S c #304130",
|
||||
"T c #615171",
|
||||
"U c #203030",
|
||||
"V c #302030",
|
||||
"W c #515171",
|
||||
"X c #202030",
|
||||
"Y c #202020",
|
||||
"Z c #413051",
|
||||
/* pixels */
|
||||
"...............................................................#",
|
||||
"..............................................................a#",
|
||||
"..bcbcdcdcdcdefgdefgfgfgggfgghihihihijijijklkjklklkllmlllmnmnmo#",
|
||||
"..bbebpbebebededeqegegegegegrgggjgjgjijijsjijsjljljllllltltlula#",
|
||||
"..bcdcbcfcdefefefgfefgfhfgghghghihijkhijkjkjklklkllmlmlmnmnmnmv#",
|
||||
"..pbbbededededeqefeqegggggggggjgrgjijijijijsjllljllllltlllununw#",
|
||||
"..dcdcdcdefgfefgfgfgghggghihihihijkjijklkjklllkllmlllmnmnunmnuv#",
|
||||
"..ebebebededeqegegegggegrgrgjgjgjijijsjkjsjljljlllllultlunulunw#",
|
||||
"..dcfcdefefefgfgfgfhfhghihghihijkjijkjkjklklkllmlmlmnmnmnmnuxuv#",
|
||||
"..ededededeqefegegggggggggjgjgjijijijijsjllljllllltlllununununy#",
|
||||
"..fcdefgfefgfgfgghggghihihihijkjijklklklllkllmnmlmnmnununuxunuz#",
|
||||
"..ebeqedeqegegegggggrgrgjgjgjijijsjkjsjljljlllllululununununuAy#",
|
||||
"..defefefgfgfgghfhghihghihijkjijkjkjklklkllmlmlmnmnmnmnuxuxuxBz#",
|
||||
"..ededeqegggegggggrgggjijgjijijijijsjllllllllltltlununununuAuBy#",
|
||||
"..fgfefgfgfgghggghihihihijklijklklklllkllmnmnmnmnununuxunuxBxBz#",
|
||||
"..efeqegegegggggjgrgjgjgjijijsjljsjljljltlllululununununuAuBuBy#",
|
||||
"..fefgfgfgghghghihghihijkjkjklkjklkmkllmlmlmnmnuxmnuxuxuxBxBxBz#",
|
||||
"..eqegggegggggrgggjijijijijijkjsjlllllllllultlununununuAuBBAuBy#",
|
||||
"..fgfgfgghghghihihihijklijklklkllllllmnmnmnmnununuxBxuxBBBxBBBz#",
|
||||
"..egegegggggjgrgjgjgjijijsjljljllljltltlululununununuAuBuBuBBBy#",
|
||||
"..fgfgghghghihihihijkjkjklklklkmkllmnmlmnmnuxunuxuxuxBxBxBBCBCz#",
|
||||
"..ggegggggjgggjijijijijsjkjsjlllllllllultlununununuAuBBBuBBBBBD#",
|
||||
"..fgghghghihijihijklijklklkllllllmnmnmnmnununuxBxBxBBBxBBCEBBCz#",
|
||||
"..egggggjgrgjijgjsjijsjljljllllltltlululununuAunuAuBuBuBBBBBFBG#",
|
||||
"..ghghghihihkhijkjkjklklkllmkllmnmlmnmnuxunuxuxuxBxBxBBCBCBCECD#",
|
||||
"..ggggjgrgjijijijijsjllsjllllltllluntlununununuAuBBBBBBBBBFBFBH#",
|
||||
"..ihghihijijijklkjklklkllmlllmnmnmnmnununuxBxBxBBBxBBCEBECECEIJ#",
|
||||
"..ggjgjgjijijsjijsjljljllllltltlululununuAuBuAuBuBuBFBBBIBFBIEH#",
|
||||
"..ghihijkhijkjkjklklkllmlmlmnmlmnmnuxunuxBxuxBxBxBBCBCBCECEIECH#",
|
||||
"..jgrgjijijijijsjllljllllltlllununununununuAuBBBBBBBBBFBFBIEIEK#",
|
||||
"..ihijkjijklkjklklkllmlllmnmnmnmnununuxBxBxBBBBBBCEBECECEIEIEIJ#",
|
||||
"..jgjijijsjijsjljljllllltltlululununuAuBuBuBBBuBFBFBIBIBIEIBIEK#",
|
||||
"..ijkjijkjkjklklkllmlmlmnmnmnmnuxunuxBxBxBxBxBBCECBCECEIECEILIJ#",
|
||||
"..jijijijijsjllljllllltlllununununuAunuAuBBBBBBBBBFBFBIEIEIEIEK#",
|
||||
"..kjijklkjklllkllmlllmnmnunmnuxunuxBxBxBBBBBBCECECECEIEIEILMEMJ#",
|
||||
"..jijsjkjsjljljlllllultlunulununuAuBuBuBBBBBFBFBIBIBIEIBINIEINK#",
|
||||
"..ijkjkjklklkllmlmlmnmnmnmnuxuxuxBxBxBBBxBBCECBCECEIECEILILILMJ#",
|
||||
"..jijijsjllljllllltltlununununuAuBBAuBBBBBFBBBIEFBIEIEIEIEINIMK#",
|
||||
"..klklklllkllmnmlmnmnununuxunuxBxBxBBBBBBCECECECEIEIEILMEMLMMMJ#",
|
||||
"..jkjsjljljlllllululununununuAuBuBuBBBBBFBFBIBIBIEIBINININIMIMK#",
|
||||
"..kjklklkllmlmlmnmnunmnuxuxuxBxBxBBCBCBCECBCECEIECEILMLILMLMLMJ#",
|
||||
"..jsjlllllllllultlununununuAuBBAuBBBBBFBBBIEIEIEIEIEIEINIMMMMMO#",
|
||||
"..klllkllmnmnmnmnununuxunuxBxBxBBBBBBCECECECEIEIEILMLMLMMMMMMPQ#",
|
||||
"..jllljltlllululununununuAuBuBuBBBBBFBFBIBIBIEIEINININIMMMIMRMS#",
|
||||
"..kmkllmnmlmnmnuxunuxuxuxBxBxBBCBCBCECECECEIECEILMLMLMLMLMMPTPQ#",
|
||||
"..llllllllultlununununuAuBBAuBBBBBFBBBIEIEIEIEINIEINIMMMMMMMMMU#",
|
||||
"..lllmnmnmnmnununuxBxuxBBBxBBCBBBCECEIECEIEIEILMLMLMMMMMMPTPTPV#",
|
||||
"..lltltlululununununuAuBuBuBBBBBFBFBIEIBIEIEINININIMMMMMRMRMaMU#",
|
||||
"..lmnmlmnmnuxunuxuxuxBxBxBBCBCBCECECECEILILILMLMLMMMLMMPTPMPTPO#",
|
||||
"..llllultlununununuAuBBBuBBBBBFBFBIEIEIEIEININMNIMMMMMRMMMRTRMU#",
|
||||
"..nmnmnmnununuxBxBxBBBxBBCEBBCECEIEIEIEIEILMLMLMMMMMMPTPTPTPTaV#",
|
||||
"..tlululununuAunuAuBuBuBBBBBFBFBIEIBIEIEINIMIMIMMMMMRMRMaMaMaTU#",
|
||||
"..lmnmnuxunuxBxuxBxBxBBCBCBCECEIECEILILILMLMLMMMMMMPTPMPTPTaTPV#",
|
||||
"..unulununununuAuBBBBBBBBBFBFBIEIEIEIEININMNIMMMMMRMMMRTRMaTaTU#",
|
||||
"..nmnununuxBxBxBBBxBBCEBECECEIEIEILIEILMLMLMMMMMMPTPTPTPTaTaTaV#",
|
||||
"..ulununuAuBuAuBBBuBFBBBIBFBIEIBIEIEINIMIMIMMMMMRMRMaMaMaTaTaWU#",
|
||||
"..nuxunuxBxBxBxBxBBCECBCECEIECEILILILMLMLMMMMMMPTPTPTPTaTPTaovV#",
|
||||
"..ununununuAuBBBBBBBBBFBFBIEIEIEIEINIMMNIMMMMMRMMMaTRMaTaTaWaTU#",
|
||||
"..nunuxBxBxBBBBBBCECECECEIEIEILMEILMMMLMMMMMMPTPTaTPTaTaTaovovV#",
|
||||
"..unuAuBuBuBBBBBFBFBIBIBIEIBIEIEINIMIMIMMMMMRMRMaTaMaTaTaWaWaWU#",
|
||||
"..nuxBxBxBxBxBBCECBCECEIECEILILILMLMLMMPMMMPTPTPTPTaTaTaovovovX#",
|
||||
"..uAunuAuBBBBBBBBBIBFBIEIEIEIEINIMMMIMMMMMRMRMaTRTaTaTaWaWvWavY#",
|
||||
"..owvwvwvwzwzyzyzGzDzHzHDHZHDHJHJKJKJSJOQOQOQOVOVOVOVUVXVYVYXYX#",
|
||||
".###############################################################"
|
||||
};
|
||||
93
wrlib/tests/view.c
Normal file
93
wrlib/tests/view.c
Normal file
@@ -0,0 +1,93 @@
|
||||
#include <X11/Xlib.h>
|
||||
#include "wraster.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "tile.xpm"
|
||||
Display *dpy;
|
||||
Window win;
|
||||
RContext *ctx;
|
||||
RImage *img;
|
||||
Pixmap pix;
|
||||
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
RContextAttributes attr;
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if (!dpy) {
|
||||
puts("cant open display");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
attr.flags = RC_RenderMode | RC_ColorsPerChannel;
|
||||
attr.render_mode = RDitheredRendering;
|
||||
attr.colors_per_channel = 4;
|
||||
ctx = RCreateContext(dpy, DefaultScreen(dpy), &attr);
|
||||
|
||||
if (argc<2)
|
||||
img = RGetImageFromXPMData(ctx, image_name);
|
||||
else
|
||||
img = RLoadImage(ctx, argv[1], 0);
|
||||
|
||||
if (!img) {
|
||||
puts(RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (argc > 2) {
|
||||
RImage *tmp = img;
|
||||
|
||||
img = RScaleImage(tmp, tmp->width*atol(argv[2]),
|
||||
tmp->height*atol(argv[2]));
|
||||
/*img = RSmoothScaleImage(tmp, tmp->width*atol(argv[2]),
|
||||
tmp->height*atol(argv[2]));
|
||||
*/
|
||||
|
||||
RReleaseImage(tmp);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (argc > 2) {
|
||||
img = RScaleImage(img, img->width*atof(argv[2]),
|
||||
img->height*atof(argv[2]));
|
||||
}
|
||||
|
||||
{
|
||||
RImage *tmp = RCreateImage(200, 200, True);
|
||||
RColor col = {0,0,255,255};
|
||||
|
||||
if (img->format == RRGBAFormat)
|
||||
puts("alpha");
|
||||
else
|
||||
puts("no alpha");
|
||||
|
||||
RClearImage(tmp, &col);
|
||||
|
||||
RCombineArea(tmp, img, 0, 0, 20, 20, 10, 10);
|
||||
img = tmp;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!RConvertImage(ctx, img, &pix)) {
|
||||
puts(RMessageForError(RErrorCode));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("%ix%i\n", img->width, img->height);
|
||||
|
||||
|
||||
|
||||
win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10,
|
||||
img->width, img->height, 0, 0, 0);
|
||||
XSetWindowBackgroundPixmap(dpy, win, pix);
|
||||
XClearWindow(dpy, win);
|
||||
XMapRaised(dpy, win);
|
||||
XFlush(dpy);
|
||||
getchar();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user