SVGGraphicsElement.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
  3. * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibGfx/Path.h>
  9. #include <LibWeb/DOM/Node.h>
  10. #include <LibWeb/SVG/AttributeParser.h>
  11. #include <LibWeb/SVG/SVGElement.h>
  12. #include <LibWeb/SVG/TagNames.h>
  13. namespace Web::SVG {
  14. class SVGGraphicsElement : public SVGElement {
  15. WEB_PLATFORM_OBJECT(SVGGraphicsElement, SVGElement);
  16. public:
  17. virtual void apply_presentational_hints(CSS::StyleProperties&) const override;
  18. virtual void parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value) override;
  19. Optional<Gfx::Color> fill_color() const;
  20. Gfx::Painter::WindingRule fill_rule() const;
  21. Optional<Gfx::Color> stroke_color() const;
  22. Optional<float> stroke_width() const;
  23. float visible_stroke_width() const
  24. {
  25. if (auto color = stroke_color(); color.has_value() && color->alpha() > 0)
  26. return stroke_width().value_or(0);
  27. return 0;
  28. }
  29. Gfx::AffineTransform get_transform() const;
  30. protected:
  31. SVGGraphicsElement(DOM::Document&, DOM::QualifiedName);
  32. virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
  33. Optional<float> m_fill_opacity = {};
  34. Gfx::AffineTransform m_transform = {};
  35. };
  36. Gfx::AffineTransform transform_from_transform_list(ReadonlySpan<Transform> transform_list);
  37. }