diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp')
-rw-r--r-- | Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp b/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp new file mode 100644 index 0000000000..e2ff5039e9 --- /dev/null +++ b/Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <LibWeb/Painting/CanvasPaintable.h> + +namespace Web::Painting { + +NonnullOwnPtr<CanvasPaintable> CanvasPaintable::create(Layout::CanvasBox const& layout_box) +{ + return adopt_own(*new CanvasPaintable(layout_box)); +} + +CanvasPaintable::CanvasPaintable(Layout::CanvasBox const& layout_box) + : Paintable(layout_box) +{ +} + +Layout::CanvasBox const& CanvasPaintable::layout_box() const +{ + return static_cast<Layout::CanvasBox const&>(m_layout_box); +} + +void CanvasPaintable::paint(PaintContext& context, PaintPhase phase) const +{ + if (!layout_box().is_visible()) + return; + + Paintable::paint(context, phase); + + if (phase == PaintPhase::Foreground) { + // FIXME: This should be done at a different level. Also rect() does not include padding etc! + if (!context.viewport_rect().intersects(enclosing_int_rect(absolute_rect()))) + return; + + if (layout_box().dom_node().bitmap()) + context.painter().draw_scaled_bitmap(rounded_int_rect(absolute_rect()), *layout_box().dom_node().bitmap(), layout_box().dom_node().bitmap()->rect(), 1.0f, to_gfx_scaling_mode(computed_values().image_rendering())); + } +} + +} |