diff options
author | Matthew Olsson <matthewcolsson@gmail.com> | 2020-10-05 16:13:26 -0700 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-10-10 23:28:41 +0200 |
commit | f2055bb509ec2580ca93a2886faeca92c79cf4d3 (patch) | |
tree | ea69a50151b08d0412eab1396c21e48d193cf489 /Libraries | |
parent | 0b3b6310ec6f582a13c1e27f8c152e30a46f822d (diff) | |
download | serenity-f2055bb509ec2580ca93a2886faeca92c79cf4d3.zip |
LibWeb: Add a basic SVGContext object, add to PaintContext
This will be used to transmit any svg-relevant data between svg nodes.
This is prep for moving a lot of the SVG logic into Layout nodes.
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibWeb/Painting/PaintContext.h | 6 | ||||
-rw-r--r-- | Libraries/LibWeb/SVG/SVGContext.h | 63 |
2 files changed, 69 insertions, 0 deletions
diff --git a/Libraries/LibWeb/Painting/PaintContext.h b/Libraries/LibWeb/Painting/PaintContext.h index 530338e605..f6ba50eb87 100644 --- a/Libraries/LibWeb/Painting/PaintContext.h +++ b/Libraries/LibWeb/Painting/PaintContext.h @@ -29,6 +29,7 @@ #include <LibGfx/Forward.h> #include <LibGfx/Palette.h> #include <LibGfx/Rect.h> +#include <LibWeb/SVG/SVGContext.h> namespace Web { @@ -44,6 +45,10 @@ public: Gfx::Painter& painter() const { return m_painter; } const Palette& palette() const { return m_palette; } + bool has_svg_context() const { return m_svg_context.has_value(); } + SVGContext& svg_context() { return m_svg_context.value(); } + void set_svg_context(SVGContext context) { m_svg_context = context; } + bool should_show_line_box_borders() const { return m_should_show_line_box_borders; } void set_should_show_line_box_borders(bool value) { m_should_show_line_box_borders = value; } @@ -58,6 +63,7 @@ public: private: Gfx::Painter& m_painter; Palette m_palette; + Optional<SVGContext> m_svg_context; Gfx::IntRect m_viewport_rect; Gfx::IntPoint m_scroll_offset; bool m_should_show_line_box_borders { false }; diff --git a/Libraries/LibWeb/SVG/SVGContext.h b/Libraries/LibWeb/SVG/SVGContext.h new file mode 100644 index 0000000000..5dfa282322 --- /dev/null +++ b/Libraries/LibWeb/SVG/SVGContext.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020, Matthew Olsson <matthewcolsson@gmail.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +namespace Web { + +class SVGContext { +public: + SVGContext() + { + push_state(); + } + + const Gfx::Color& fill_color() const { return state().fill_color; } + const Gfx::Color& stroke_color() const { return state().stroke_color; } + float stroke_width() const { return state().stroke_width; } + + void set_fill_color(Gfx::Color color) { state().fill_color = color; } + void set_stroke_color(Gfx::Color color) { state().stroke_color = color; } + void set_stroke_width(float width) { state().stroke_width = width; } + + void push_state() { m_states.append(State()); } + + void pop_state() { m_states.take_last(); } + +private: + struct State { + Gfx::Color fill_color { Gfx::Color::Black }; + Gfx::Color stroke_color { Gfx::Color::Transparent }; + float stroke_width { 1.0 }; + }; + + const State& state() const { return m_states.last(); } + State& state() { return m_states.last(); } + + Vector<State> m_states; +}; + +} |