garrysmod icon indicating copy to clipboard operation
garrysmod copied to clipboard

Added additional color constructors

Open Kefta opened this issue 7 years ago • 5 comments

Finale to the critically acclaimed color-hex PR series (https://github.com/garrynewman/garrysmod/pull/1089); I ended up going with the implementation recommended by @SimonSchick. Although @sannysc made some very good points on the side of having a single polymorphic constructor, with Lua being weakly-typed, it would be very messy, unclear, and inefficient. Color is now a global metatable that acts as a contructor and a calltable. Supports constructing by integer, hex string (0x112233, #112233, #123), X11/web color name, string ("123456", "123 213 231"), vector of floats between 0 and 1, color (copy-constructor), and table with numerical or string (rgba) keys.

Testing:

local testcol = Color(255, 255, 255)
assert(testcol == Color.FromInt(0xFFFFFFFF))
assert(testcol == Color.FromInt(0xFFFFFF))
assert(testcol == Color.FromHexString("0xFFFFFFFF"))
assert(testcol == Color.FromHexString("#FFFFFF"))
assert(testcol == Color.FromHexString("#FFF"))
assert(testcol == Color.FromName("white"))
assert(testcol == Color.FromString("255 255 255"))
assert(testcol == Color.FromString("255 255 255 255"))
assert(testcol == Color.FromString(tostring(0xFFFFFFFF)))
assert(testcol == Color.FromString("foo bar"))
assert(testcol == Color.FromVector(Vector(1, 1, 1)))
assert(testcol == Color.FromColor(testcol))
assert(testcol == Color.FromTable({r = 255, g = 255, b = 255}))
assert(testcol == Color.FromTable({255, 255, 255, 255}))

local testcol = Color(199, 21, 133)
assert(testcol == Color.FromInt(0xc71585))
assert(testcol == Color.FromHexString("0xc71585"))
assert(testcol == Color.FromHexString("#c71585"))
assert(testcol == Color.FromName("mediumvioletred"))
assert(testcol == Color.FromString("199 21 133"))
assert(testcol == Color.FromString(tostring(0xFFc71585)))
assert(testcol == Color.FromVector(testcol:ToVector()))
assert(testcol == Color.FromColor(testcol))
assert(testcol == Color.FromTable({r = 199, g = 21, b = 133, a = 255}))
assert(testcol == Color.FromTable({199, 21, 133}))

Kefta avatar Dec 29 '16 13:12 Kefta

If I got a penny every time you made a PR related to HEX colors, I'd be rich. Anyway, nice work.

MyDimeIsUp avatar Dec 30 '16 05:12 MyDimeIsUp

@MrUnknownGamer You would have four pennies.

Kefta avatar Jan 15 '17 05:01 Kefta

Would this be merged if I changed Color back to a function with an __index?

Kefta avatar Feb 26 '20 00:02 Kefta

Would this be merged at all?

Kefta avatar May 07 '20 02:05 Kefta

:pensive:

garryspins avatar Apr 03 '21 17:04 garryspins