ColorRgba.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #pragma once
  2. namespace Javelin {
  3. template<typename T>
  4. class ColorRgb {
  5. public:
  6. T b;
  7. T g;
  8. T r;
  9. ColorRgb()
  10. : b(0)
  11. , g(0)
  12. , r(0) {
  13. }
  14. ColorRgb(T red, T green, T blue)
  15. : b(blue)
  16. , g(green)
  17. , r(red) {
  18. }
  19. ColorRgb(const ColorRgb<T> &x)
  20. : b(x.b)
  21. , g(x.g)
  22. , r(x.r) {
  23. }
  24. ColorRgb<int> operator *(int x) {
  25. return ColorRgb<int>(r * x, g * x, b * x);
  26. }
  27. ColorRgb<int> operator +(const ColorRgb<T> &x) const {
  28. return ColorRgb<int>(r + (int)x.r, g + (int)x.g, b + (int)x.b);
  29. }
  30. ColorRgb<int> operator -(const ColorRgb<T> &x) const {
  31. return ColorRgb<int>(r - (int)x.r, g - (int)x.g, b - (int)x.b);
  32. }
  33. int operator %(const ColorRgb<T> &x) const {
  34. return r * (int)x.r + g * (int)x.g + b * (int)x.b;
  35. }
  36. bool operator ==(const ColorRgb<T> &x) const {
  37. return r == x.r && g == x.g && b == x.b;
  38. }
  39. bool operator !=(const ColorRgb<T> &x) const {
  40. return r != x.r || g != x.g || b != x.b;
  41. }
  42. void SetMin(const ColorRgb<T> &x) {
  43. if (x.r < r) {
  44. r = x.r;
  45. }
  46. if (x.g < g) {
  47. g = x.g;
  48. }
  49. if (x.b < b) {
  50. b = x.b;
  51. }
  52. }
  53. void SetMax(const ColorRgb<T> &x) {
  54. if (x.r > r) {
  55. r = x.r;
  56. }
  57. if (x.g > g) {
  58. g = x.g;
  59. }
  60. if (x.b > b) {
  61. b = x.b;
  62. }
  63. }
  64. };
  65. template<typename T>
  66. class ColorRgba : public ColorRgb<T> {
  67. public:
  68. T a;
  69. ColorRgba() :
  70. a(0) {
  71. }
  72. ColorRgba(T red, T green, T blue, T alpha)
  73. : ColorRgb<T>(red, green, blue)
  74. , a(alpha) {
  75. }
  76. ColorRgba(const ColorRgba<T> &x)
  77. : ColorRgb<T>(x.r, x.g, x.b)
  78. , a(x.a) {
  79. }
  80. ColorRgba<int> operator *(int x) {
  81. return ColorRgba<T>(ColorRgb<T>::r * x,
  82. ColorRgb<T>::g * x,
  83. ColorRgb<T>::b * x,
  84. a * x);
  85. }
  86. ColorRgba<int> operator +(const ColorRgba<T> &x) {
  87. return ColorRgba<T>(ColorRgb<T>::r + (int)x.r,
  88. ColorRgb<T>::g + (int)x.g,
  89. ColorRgb<T>::b + (int)x.b,
  90. a + (int)x.a);
  91. }
  92. ColorRgba<int> operator -(const ColorRgba<T> &x) {
  93. return ColorRgba<T>(ColorRgb<T>::r - (int)x.r,
  94. ColorRgb<T>::g - (int)x.g,
  95. ColorRgb<T>::b - (int)x.b,
  96. a - (int)x.a);
  97. }
  98. int operator %(const ColorRgba<T> &x) {
  99. return ColorRgb<T>::r * (int)x.r +
  100. ColorRgb<T>::g * (int)x.g +
  101. ColorRgb<T>::b * (int)x.b +
  102. a * (int)x.a;
  103. }
  104. bool operator ==(const ColorRgba<T> &x) {
  105. return ColorRgb<T>::r == x.r && ColorRgb<T>::g == x.g &&
  106. ColorRgb<T>::b == x.b && a == x.a;
  107. }
  108. bool operator !=(const ColorRgba<T> &x) {
  109. return ColorRgb<T>::r != x.r || ColorRgb<T>::g != x.g ||
  110. ColorRgb<T>::b != x.b || a != x.a;
  111. }
  112. void SetMin(const ColorRgba<T> &x) {
  113. ColorRgb<T>::SetMin(x);
  114. if (x.a < a) {
  115. a = x.a;
  116. }
  117. }
  118. void SetMax(const ColorRgba<T> &x) {
  119. ColorRgb<T>::SetMax(x);
  120. if (x.a > a) {
  121. a = x.a;
  122. }
  123. }
  124. };
  125. }