diff --git a/src/SemanticTree.zig b/src/SemanticTree.zig index e0cd0d8a..8e64b034 100644 --- a/src/SemanticTree.zig +++ b/src/SemanticTree.zig @@ -94,7 +94,7 @@ fn walk(self: @This(), node: *Node, xpath_buffer: *std.ArrayList(u8), parent_nam if (tag == .datalist or tag == .option or tag == .optgroup) return; // Check visibility using the engine's checkVisibility which handles CSS display: none - if (!el.checkVisibilityCached(self.page, css_cache)) { + if (!el.checkVisibilityCached(css_cache, self.page)) { return; } diff --git a/src/browser/interactive.zig b/src/browser/interactive.zig index 487032e9..ed3895cf 100644 --- a/src/browser/interactive.zig +++ b/src/browser/interactive.zig @@ -218,7 +218,7 @@ pub fn classifyInteractivity( listener_targets: ListenerTargetMap, cache: ?*Element.CssCache, ) ?InteractivityType { - if (el.hasPointerEventsNoneCached(page, cache)) return null; + if (el.hasPointerEventsNone(cache, page)) return null; // 1. Native interactive by tag switch (el.getTag()) { diff --git a/src/browser/webapi/Element.zig b/src/browser/webapi/Element.zig index 4a1d324e..d2d61451 100644 --- a/src/browser/webapi/Element.zig +++ b/src/browser/webapi/Element.zig @@ -1053,7 +1053,7 @@ pub const CssProperties = struct { pub const CssCache = std.AutoHashMapUnmanaged(*Element, CssProperties); -fn getCssProperties(el: *Element, page: *Page, doc_sheets: ?*StyleSheetList, cache: ?*CssCache) CssProperties { +fn getCssProperties(el: *Element, doc_sheets: ?*StyleSheetList, cache: ?*CssCache, page: *Page) CssProperties { if (cache) |c| { if (c.get(el)) |props| return props; } @@ -1144,27 +1144,23 @@ fn getCssProperties(el: *Element, page: *Page, doc_sheets: ?*StyleSheetList, cac return props; } -pub fn hasPointerEventsNoneCached(self: *Element, page: *Page, cache: ?*CssCache) bool { +pub fn hasPointerEventsNone(self: *Element, cache: ?*CssCache, page: *Page) bool { const doc_sheets = page.document.getStyleSheets(page) catch null; var current: ?*Element = self; while (current) |el| { - const props = el.getCssProperties(page, doc_sheets, cache); + const props = el.getCssProperties(doc_sheets, cache, page); if (props.pointer_events_none) return true; current = el.parentElement(); } return false; } -pub fn hasPointerEventsNone(self: *Element, page: *Page) bool { - return self.hasPointerEventsNoneCached(page, null); -} - -pub fn checkVisibilityCached(self: *Element, page: *Page, cache: ?*CssCache) bool { +pub fn checkVisibilityCached(self: *Element, cache: ?*CssCache, page: *Page) bool { const doc_sheets = page.document.getStyleSheets(page) catch null; var current: ?*Element = self; while (current) |el| { - const props = getCssProperties(el, page, doc_sheets, cache); + const props = getCssProperties(el, doc_sheets, cache, page); if (props.display_none or props.visibility_hidden or props.opacity_zero) return false; current = el.parentElement(); } @@ -1173,7 +1169,7 @@ pub fn checkVisibilityCached(self: *Element, page: *Page, cache: ?*CssCache) boo } pub fn checkVisibility(self: *Element, page: *Page) bool { - return self.checkVisibilityCached(page, null); + return self.checkVisibilityCached(null, page); } fn getElementDimensions(self: *Element, page: *Page) struct { width: f64, height: f64 } {