QB64.org Forum

Active Forums => QB64 Discussion => Topic started by: TempodiBasic on September 30, 2019, 06:06:05 pm

Title: Please STOP kidding me with CONST!
Post by: TempodiBasic on September 30, 2019, 06:06:05 pm
Hi
It is real another thread about CONST and 32bit colors...

I must sign as BAD PRACTICE to create CONST colors for 32bit screens!  :-)

Or just do you developers like to kidding me with this keywords? :-P

here the issue

try to run to see the result
Code: QB64: [Select]
  1. CONST True = -1, False = NOT True, Opaque = 255, HalfOpa = 127, QuaterOpac = 63
  2. ' Opaque colors
  3. CONST Black = _RGBA32(0, 0, 0, Opaque)
  4. CONST Green = _RGBA32(50, 200, 50, Opaque)
  5. CONST Blu = _RGBA32(50, 50, 250, Opaque)
  6. CONST White = _RGBA32(250, 250, 250, Opaque)
  7. 'Half Opaque colors
  8. CONST HBlack = _RGBA32(0, 0, 0, HalfOpa)
  9. CONST HGreen = _RGBA32(50, 200, 50, HalfOpa)
  10. CONST HBlu = _RGBA32(50, 50, 250, HalfOpa)
  11. CONST HRed = _RGBA32(250, 50, 50, HalfOpa)
  12. CONST HWhite = _RGBA32(250, 250, 250, HalfOpa)
  13. ' Quarter Opaque colors
  14. CONST QBlack = _RGBA32(0, 0, 0, QuaterOpac)
  15. CONST QGreen = _RGBA32(50, 200, 50, QuaterOpac)
  16. CONST QBlu = _RGBA32(50, 50, 250, QuaterOpac)
  17. CONST QRed = _RGBA32(250, 50, 50, QuaterOpac)
  18. CONST QWhite = _RGBA32(250, 250, 250, QuaterOpac)
  19.  
  20. SCREEN _NEWIMAGE(800, 600, 32)
  21.  
  22. FOR a = 1 TO 10
  23.     b = (RND * 50) + 1
  24.     c = (RND * 50) + 1
  25.     DrawCell b, c, HGreen
  26.     DrawCell b, c, HBlu
  27.     DrawCell b, c, HRed
  28.  
  29. SUB DrawCell (X AS INTEGER, Y AS INTEGER, Col AS LONG)
  30.     LINE (10 * (X - 1), 10 * (Y - 1))-(10 * X, 10 * Y), Col, BF
  31.     LINE (10 * (X - 1), 10 * (Y - 1))-(10 * X, 10 * Y), White, B
  32.  

well you'll get a black screen! Yes!
Why? Because _RGBA32 doesn't get the value of an Integer Constant defined first in the program!
LOL, you want that I come back to ASCII screen! I have understood this!

Thanks for read!
Title: Re: Please STOP kidding me with CONST!
Post by: SMcNeill on September 30, 2019, 07:11:05 pm
CONST has always been half implemented in QB64, with a lot of things just not possible.  It wasn’t very long ago when a CONST couldn’t even process another CONST at all.  (I think v1.2 or v1.3 is when the functionality was added.)  If it doesn’t work with _RGB, it’s simply an oversight where those commands are processed differently than the main segment of Math Functions (they offer a color picker pop-up now, I think). 

Here’s what you need to do to fix the issue:

1) Relax.  Repeat, repeatedly, “Nobody is out to get me, or sabotage my efforts coding with CONST and colors.”  Breath long, deep breaths.  Inhale.  Exhale.  Repeat, repeatedly, “Nobody is out to get me, or sabotage my efforts coding with CONST and colors.”   Then...
2) Work around the issue by placing literal values in the function.
3) OR, learn to write color values as their hex equivalent. 
4) OR, go into QB64.bas, scroll down to the label “stevewashere:”, and just a short ways after that — past the $PRECOMPILER commands — you’ll see “CONST” and the two _RGB and _RGBA areas.  Correct the issue yourself and share the results with us.
5) OR, simply post a bug report and wait until somebody decides to look into the issue and add the functionality there.

Either that, or take Pete’s recommended method:
6) Just code in SCREEN 0, where you don’t need no complicated CONST for colors.
Title: Re: Please STOP kidding me with CONST!
Post by: bplus on September 30, 2019, 08:15:48 pm


Try this to create and paste color constants straight into your code:
Code: QB64: [Select]
  1. _TITLE "Color CONST for _RGBA32(red, green, blue, alpha)" 'B+ 2019-05-19
  2. '2019-05-26 update this for mouse inputs
  3. '>>>>>>>>>>>> test your colors here
  4. '>>>>>>>>>>>> then create and name Hex string CONSTs if you want to the Clipboard
  5.  
  6. 'sample clipping
  7. CONST Purple = &HFFB400B4
  8. CONST Red = &HFFFA3232
  9.  
  10. SCREEN _NEWIMAGE(800, 600, 32)
  11.     INPUT "Clear clipboard? enter y for yes "; w$
  12.     IF w$ = "y" THEN _CLIPBOARD$ = ""
  13. r = 128: g = 128: b = 128: a = 128
  14. COLOR &HFFDDDDDD, 0
  15.     CLS
  16.     MakeConst$ = "&H" + RIGHT$(STRING$(8, "0") + HEX$(_RGBA32(r, g, b, a)), 8)
  17.     slider 16, 10, r, "Red"
  18.     slider 16, 60, g, "Green"
  19.     slider 16, 110, b, "Blue"
  20.     slider 16, 160, a, "Alpha"
  21.     _PRINTSTRING (250, 260), "Press c to create CONST for Clipboard"
  22.     _PRINTSTRING (210, 280), "Use this Hex string for color CONST: " + MakeConst$
  23.     LINE (90, 300)-(710, 590), , B
  24.     LINE (100, 310)-(700, 580), VAL(MakeConst$), BF
  25.  
  26.     mb = _MOUSEBUTTON(1)
  27.     IF mb THEN 'clear it
  28.         mx = _MOUSEX: my = _MOUSEY
  29.         IF mx >= 16 AND mx <= 784 THEN
  30.             IF my >= 10 AND my <= 50 THEN
  31.                 r = _ROUND((mx - 16) / 3)
  32.             ELSEIF my >= 60 AND my <= 100 THEN
  33.                 g = _ROUND((mx - 16) / 3)
  34.             ELSEIF my >= 110 AND my <= 150 THEN
  35.                 b = _ROUND((mx - 16) / 3)
  36.             ELSEIF my >= 160 AND my <= 200 THEN
  37.                 a = _ROUND((mx - 16) / 3)
  38.             END IF
  39.         END IF
  40.     END IF
  41.     k$ = INKEY$
  42.     IF k$ = "q" THEN EXIT DO
  43.     IF k$ = "c" THEN
  44.         LOCATE 16, 30
  45.         INPUT "Enter name for your color CONST "; cname$
  46.         _CLIPBOARD$ = _CLIPBOARD$ + CHR$(10) + "CONST " + cname$ + " = " + MakeConst$
  47.     END IF
  48.     _DISPLAY
  49.     _LIMIT 60
  50.  
  51. SUB slider (x, y, value, label$)
  52.     SELECT CASE label$
  53.         CASE "Red": c~& = &HFFFF0000
  54.         CASE "Green": c~& = &HFF008800
  55.         CASE "Blue": c~& = &HFF0000FF
  56.         CASE "Alpha": c~& = &H88FFFFFF
  57.     END SELECT
  58.     LINE (x, y)-STEP(768, 40), c~&, B
  59.     LINE (x, y)-STEP(3 * value, 40), c~&, BF
  60.     s$ = label$ + " = " + _TRIM$(STR$(value))
  61.     _PRINTSTRING (x + 384 - 4 * LEN(s$), y + 12), s$
  62.  

  [ This attachment cannot be displayed inline in 'Print Page' view ]

Fresh from my Clipboard:
CONST White = &HFFFAFAFA
Title: Re: Please STOP kidding me with CONST!
Post by: Cobalt on September 30, 2019, 11:51:11 pm
It wasn’t very long ago when a CONST couldn’t even process another CONST at all.  (I think v1.2 or v1.3 is when the functionality was added.) 

what do you mean "process another CONST"? as I have always been able to CONST TRUE = -1, FALSE = NOT TRUE
isn't FALSE = NOT TRUE processing the constant TRUE? I must be misinterpreting something.
Title: Re: Please STOP kidding me with CONST!
Post by: SMcNeill on September 30, 2019, 11:59:25 pm
what do you mean "process another CONST"? as I have always been able to CONST TRUE = -1, FALSE = NOT TRUE
isn't FALSE = NOT TRUE processing the constant TRUE? I must be misinterpreting something.

Clarification: Not with any of the functions that called the internal math routine.

CONST X = 180
CONST SinX = SIN(X) <—— ERRORED OUT AND DID NOT WORK.
Title: Re: Please STOP kidding me with CONST!
Post by: Cobalt on October 01, 2019, 12:49:40 am
AH, got it now.
Title: Re: Please STOP kidding me with CONST!
Post by: TempodiBasic on October 01, 2019, 06:02:09 pm
Hi Bplus
sorry I have forgotten the utility that you have built some time ago

thank to remind it to me I'll use to get HEX value so it seems I'm a good expert programmer :-)
Title: Re: Please STOP kidding me with CONST!
Post by: TempodiBasic on October 01, 2019, 06:12:53 pm
Hi Steve

Quote
Here’s what you need to do to fix the issue:

1) Relax.  Repeat, repeatedly, “Nobody is out to get me, or sabotage my efforts coding with CONST and colors.”  Breath long, deep breaths.  Inhale.  Exhale.  Repeat, repeatedly, “Nobody is out to get me, or sabotage my efforts coding with CONST and colors.”   Then...
2) Work around the issue by placing literal values in the function.
3) OR, learn to write color values as their hex equivalent.
4) OR, go into QB64.bas, scroll down to the label “stevewashere:”, and just a short ways after that — past the $PRECOMPILER commands — you’ll see “CONST” and the two _RGB and _RGBA areas.  Correct the issue yourself and share the results with us.
5) OR, simply post a bug report and wait until somebody decides to look into the issue and add the functionality there.

Either that, or take Pete’s recommended method:
6) Just code in SCREEN 0, where you don’t need no complicated CONST for colors.

thanks,
1. already done!

2. already done, but it seems to me go back and not forward in programming!

3. It seems a good way to workaround the compiler status quo (using Bplus' tool it is easy and fast!)

4. I have taken now a look and I have found also "stevewashere2:" but some name of variables seems to be the cousins of that used in the esoteric Larryln's interpreter...https://www.qb64.org/forum/index.php?topic=1754.msg109983#msg109983 (https://www.qb64.org/forum/index.php?topic=1754.msg109983#msg109983). I must imagine how this parser goes working... after all things, also you at beginning have had to dig into code to understand the structure of the program.

5. in the past done, but now I post only if the issue can be interesting for someother user of QB64

6. it is the last option... I come out from ASCII world that I find fantastic...but we know more limited for output to the screen!

Thanks for you help and your tips!
Title: Re: Please STOP kidding me with CONST!
Post by: bplus on October 01, 2019, 06:43:11 pm
Wait,...   Stevewashere2:

;-))