Browse Source

LibWeb: Make the ListItemMarkerBox index-aware.

In the ListItemBox we get the index of the current <li> element in the
parent and pass it to the ListItemMarkerBox.

This patch is work towards #2059
Tobias Christiansen 4 years ago
parent
commit
bfcfe84240

+ 3 - 1
Userland/Libraries/LibWeb/Layout/ListItemBox.cpp

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Tobias Christiansen <tobi@tobyase.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -49,7 +50,8 @@ void ListItemBox::layout_marker()
         return;
 
     if (!m_marker) {
-        m_marker = adopt(*new ListItemMarkerBox(document()));
+        int child_index = parent()->index_of_child<ListItemBox>(*this).value();
+        m_marker = adopt(*new ListItemMarkerBox(document(), computed_values().list_style_type(), child_index + 1));
         if (first_child())
             m_marker->set_inline(first_child()->is_inline());
         append_child(*m_marker);

+ 4 - 1
Userland/Libraries/LibWeb/Layout/ListItemMarkerBox.cpp

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Tobias Christiansen <tobi@tobyase.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,8 +30,10 @@
 
 namespace Web::Layout {
 
-ListItemMarkerBox::ListItemMarkerBox(DOM::Document& document)
+ListItemMarkerBox::ListItemMarkerBox(DOM::Document& document, CSS::ListStyleType style_type, size_t index)
     : Box(document, nullptr, CSS::StyleProperties::create())
+    , m_list_style_type(style_type)
+    , m_index(index)
 {
 }
 

+ 6 - 1
Userland/Libraries/LibWeb/Layout/ListItemMarkerBox.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Tobias Christiansen <tobi@tobyase.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -32,10 +33,14 @@ namespace Web::Layout {
 
 class ListItemMarkerBox final : public Box {
 public:
-    explicit ListItemMarkerBox(DOM::Document&);
+    explicit ListItemMarkerBox(DOM::Document&, CSS::ListStyleType, size_t index);
     virtual ~ListItemMarkerBox() override;
 
     virtual void paint(PaintContext&, PaintPhase) override;
+
+private:
+    CSS::ListStyleType m_list_style_type { CSS::ListStyleType::None };
+    size_t m_index;
 };
 
 }