MCPcopy Create free account
hub / github.com/TheRedDeveloper/ply-engine / set_pointer_state

Method set_pointer_state

src/engine.rs:5206–5391  ·  view source on GitHub ↗
(&mut self, position: Vector2, is_down: bool)

Source from the content-addressed store, hash-verified

5204 }
5205
5206 pub fn set_pointer_state(&mut self, position: Vector2, is_down: bool) {
5207 if self.boolean_warnings.max_elements_exceeded {
5208 return;
5209 }
5210 self.pointer_info.position = position;
5211 self.pointer_over_ids.clear();
5212
5213 // Check which elements are under the pointer
5214 for root_index in (0..self.layout_element_tree_roots.len()).rev() {
5215 let root = self.layout_element_tree_roots[root_index];
5216 let mut dfs: Vec<i32> = vec![root.layout_element_index];
5217 let mut vis: Vec<bool> = vec![false];
5218 let mut found = false;
5219
5220 while !dfs.is_empty() {
5221 let idx = dfs.len() - 1;
5222 if vis[idx] {
5223 dfs.pop();
5224 vis.pop();
5225 continue;
5226 }
5227 vis[idx] = true;
5228 let current_idx = dfs[idx] as usize;
5229 let elem_id = self.layout_elements[current_idx].id;
5230
5231 // Copy data from map to avoid borrow issues with mutable access later
5232 let map_data = self.layout_element_map.get(&elem_id).map(|item| {
5233 (item.bounding_box, item.element_id.clone(), item.on_hover_fn.is_some())
5234 });
5235 if let Some((raw_box, elem_id_copy, has_hover)) = map_data {
5236 let mut elem_box = raw_box;
5237 elem_box.x -= root.pointer_offset.x;
5238 elem_box.y -= root.pointer_offset.y;
5239
5240 let clip_id =
5241 self.layout_element_clip_element_ids[current_idx] as u32;
5242 let clip_ok = clip_id == 0
5243 || self
5244 .layout_element_map
5245 .get(&clip_id)
5246 .map(|ci| {
5247 point_is_inside_rect(
5248 position,
5249 ci.bounding_box,
5250 )
5251 })
5252 .unwrap_or(false);
5253
5254 if point_is_inside_rect(position, elem_box) && clip_ok {
5255 // Call hover callbacks
5256 if has_hover {
5257 let pointer_data = self.pointer_info;
5258 if let Some(item) = self.layout_element_map.get_mut(&elem_id) {
5259 if let Some(ref mut callback) = item.on_hover_fn {
5260 callback(elem_id_copy.clone(), pointer_data);
5261 }
5262 }
5263 }

Callers 6

beginMethod · 0.80
pointer_stateMethod · 0.80
test_pressed_queryFunction · 0.80

Calls 8

point_is_inside_rectFunction · 0.85
is_emptyMethod · 0.80
getMethod · 0.80
cloneMethod · 0.80
element_has_configMethod · 0.80
change_focusMethod · 0.80