Subversion Repositories Kolibri OS

Rev

Rev 7422 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef INCLUDE_RGB_H
  2. #define INCLUDE_RGB_H
  3.  
  4. :struct _rgb
  5. {
  6.         byte b,g,r;
  7.         void DwordToRgb();
  8.         void SetRgb();
  9.         dword RgbToDword();
  10. } rgb;
  11.  
  12. :void _rgb::DwordToRgb(dword _dword)
  13. {
  14.         b = _dword & 0xFF; _dword >>= 8;
  15.         g = _dword & 0xFF; _dword >>= 8;
  16.         r = _dword & 0xFF; _dword >>= 8;
  17. }
  18.  
  19. :void _rgb::SetRgb(dword _r, _g, _b)
  20. {
  21.         r = _r;
  22.         g = _g;
  23.         b = _b;
  24. }
  25.  
  26. :dword _rgb::RgbToDword()
  27. {
  28.         /*
  29.         dword _r, _g, _b;
  30.         _r = r << 16;
  31.         _g = g << 8;
  32.         _b = b;
  33.         return _r + _g + _b;
  34.         */
  35.         EAX = r << 16;
  36.         EAX += g << 8;
  37.         EAX += b;
  38. }
  39.  
  40. :dword MixColors(dword _base, _overlying, dword a)
  41. {
  42.         _rgb rgb1, rgb2, rgb_final;
  43.         dword n_a;
  44.  
  45.         rgb1.DwordToRgb(_base);
  46.         rgb2.DwordToRgb(_overlying);
  47.  
  48.         n_a = 255 - a;
  49.  
  50.         rgb_final.b = calc(rgb1.b*a/255) + calc(rgb2.b*n_a/255);
  51.         rgb_final.g = calc(rgb1.g*a/255) + calc(rgb2.g*n_a/255);
  52.         rgb_final.r = calc(rgb1.r*a/255) + calc(rgb2.r*n_a/255);
  53.  
  54.         return rgb_final.RgbToDword();
  55. }
  56.  
  57. #endif