Bläddra i källkod

LibGfx: Support color blending in Painter::draw_bitmap

This method is commonly used by bitmap text rendering. Adding support
for color blending enables support in the browser for text opacity using
their color property.
Steven Schmoll 3 år sedan
förälder
incheckning
d345a3689f
1 ändrade filer med 5 tillägg och 3 borttagningar
  1. 5 3
      Userland/Libraries/LibGfx/Painter.cpp

+ 5 - 3
Userland/Libraries/LibGfx/Painter.cpp

@@ -655,7 +655,7 @@ void Painter::draw_bitmap(IntPoint const& p, GlyphBitmap const& bitmap, Color co
         for (int row = first_row; row <= last_row; ++row) {
             for (int j = 0; j <= (last_column - first_column); ++j) {
                 if (bitmap.bit_at(j + first_column, row))
-                    dst[j] = color.value();
+                    dst[j] = Color::from_rgba(dst[j]).blend(color).value();
             }
             dst += dst_skip;
         }
@@ -664,8 +664,10 @@ void Painter::draw_bitmap(IntPoint const& p, GlyphBitmap const& bitmap, Color co
             for (int j = 0; j <= (last_column - first_column); ++j) {
                 if (bitmap.bit_at((j + first_column), row)) {
                     for (int iy = 0; iy < scale; ++iy)
-                        for (int ix = 0; ix < scale; ++ix)
-                            dst[j * scale + ix + iy * dst_skip] = color.value();
+                        for (int ix = 0; ix < scale; ++ix) {
+                            auto pixel_index = j * scale + ix + iy * dst_skip;
+                            dst[pixel_index] = Color::from_rgba(dst[pixel_index]).blend(color).value();
+                        }
                 }
             }
             dst += dst_skip * scale;