Selaa lähdekoodia

LibGfx: Add BitmapPaintStyle

This is a simple paint style for filling a path with a bitmap.
MacDue 2 vuotta sitten
vanhempi
commit
064ca625df
1 muutettua tiedostoa jossa 27 lisäystä ja 0 poistoa
  1. 27 0
      Userland/Libraries/LibGfx/PaintStyle.h

+ 27 - 0
Userland/Libraries/LibGfx/PaintStyle.h

@@ -12,6 +12,7 @@
 #include <AK/RefCounted.h>
 #include <AK/RefPtr.h>
 #include <AK/Vector.h>
+#include <LibGfx/Bitmap.h>
 #include <LibGfx/Color.h>
 #include <LibGfx/Forward.h>
 #include <LibGfx/Gradients.h>
@@ -59,6 +60,32 @@ private:
     Color m_color;
 };
 
+class BitmapPaintStyle : public PaintStyle {
+public:
+    static ErrorOr<NonnullRefPtr<BitmapPaintStyle>> create(Bitmap const& bitmap, IntPoint offset = {})
+    {
+        return adopt_nonnull_ref_or_enomem(new (nothrow) BitmapPaintStyle(bitmap, offset));
+    }
+
+    virtual Color sample_color(IntPoint point) const override
+    {
+        point += m_offset;
+        if (m_bitmap->rect().contains(point))
+            return m_bitmap->get_pixel(point);
+        return Color();
+    }
+
+private:
+    BitmapPaintStyle(Bitmap const& bitmap, IntPoint offset)
+        : m_bitmap(bitmap)
+        , m_offset(offset)
+    {
+    }
+
+    NonnullRefPtr<Bitmap const> m_bitmap;
+    IntPoint m_offset;
+};
+
 class GradientPaintStyle : public PaintStyle {
 public:
     ErrorOr<void> add_color_stop(float position, Color color, Optional<float> transition_hint = {})