HTMLProgressElement.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (c) 2020-2022, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/HTML/HTMLProgressElement.h>
  7. #include <LibWeb/Layout/Progress.h>
  8. #include <stdlib.h>
  9. namespace Web::HTML {
  10. HTMLProgressElement::HTMLProgressElement(DOM::Document& document, DOM::QualifiedName qualified_name)
  11. : HTMLElement(document, move(qualified_name))
  12. {
  13. }
  14. HTMLProgressElement::~HTMLProgressElement()
  15. {
  16. }
  17. RefPtr<Layout::Node> HTMLProgressElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties> style)
  18. {
  19. return adopt_ref(*new Layout::Progress(document(), *this, move(style)));
  20. }
  21. double HTMLProgressElement::value() const
  22. {
  23. auto parsed_value = strtod(attribute(HTML::AttributeNames::value).characters(), nullptr);
  24. if (!isfinite(parsed_value) || parsed_value < 0)
  25. return 0;
  26. return min(parsed_value, max());
  27. }
  28. void HTMLProgressElement::set_value(double value)
  29. {
  30. if (value < 0)
  31. return;
  32. set_attribute(HTML::AttributeNames::value, String::number(value));
  33. if (layout_node())
  34. layout_node()->set_needs_display();
  35. }
  36. double HTMLProgressElement::max() const
  37. {
  38. auto parsed_value = strtod(attribute(HTML::AttributeNames::max).characters(), nullptr);
  39. if (!isfinite(parsed_value) || parsed_value <= 0)
  40. return 1;
  41. return parsed_value;
  42. }
  43. void HTMLProgressElement::set_max(double value)
  44. {
  45. if (value <= 0)
  46. return;
  47. set_attribute(HTML::AttributeNames::max, String::number(value));
  48. if (layout_node())
  49. layout_node()->set_needs_display();
  50. }
  51. double HTMLProgressElement::position() const
  52. {
  53. if (!is_determinate())
  54. return -1;
  55. return value() / max();
  56. }
  57. }