CanvasPattern.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (c) 2023, MacDue <macdue@dueutil.tech>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibGfx/PaintStyle.h>
  8. #include <LibWeb/Bindings/PlatformObject.h>
  9. #include <LibWeb/HTML/Canvas/CanvasDrawImage.h>
  10. namespace Web::HTML {
  11. class CanvasPatternPaintStyle final : public Gfx::PaintStyle {
  12. public:
  13. enum class Repetition {
  14. Repeat,
  15. RepeatX,
  16. RepeatY,
  17. NoRepeat
  18. };
  19. static ErrorOr<NonnullRefPtr<CanvasPatternPaintStyle>> create(Gfx::Bitmap const& bitmap, Repetition repetition)
  20. {
  21. return adopt_nonnull_ref_or_enomem(new (nothrow) CanvasPatternPaintStyle(bitmap, repetition));
  22. }
  23. virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override;
  24. private:
  25. CanvasPatternPaintStyle(Gfx::Bitmap const& bitmap, Repetition repetition)
  26. : m_bitmap(bitmap)
  27. , m_repetition(repetition)
  28. {
  29. }
  30. NonnullRefPtr<Gfx::Bitmap const> m_bitmap;
  31. Repetition m_repetition { Repetition::Repeat };
  32. };
  33. class CanvasPattern final : public Bindings::PlatformObject {
  34. WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject);
  35. public:
  36. static WebIDL::ExceptionOr<JS::GCPtr<CanvasPattern>> create(JS::Realm&, CanvasImageSource const& image, StringView repetition);
  37. ~CanvasPattern();
  38. NonnullRefPtr<Gfx::PaintStyle> to_gfx_paint_style() { return m_pattern; }
  39. private:
  40. CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&);
  41. virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
  42. NonnullRefPtr<CanvasPatternPaintStyle> m_pattern;
  43. };
  44. }