scripts/TODO_LIST.md
258 Ergebnisse - 87-Dateien
api.json: 28226 "Check if this property affects layout (width, height, margin, etc.)", 28227: "TODO: Implement when CssProperty has this method" 28228 ],
old-opengl-example.rs:
133
134: // TODO: segfault when inserting the following line:
135 // let tx = ImageRef::gl_texture(texture.clone());
core/src/dom_table.rs: 42 ) -> Result<(), TableAnonymousError> { 43: // TODO: Implement the full 3-stage algorithm 44 // This is a complex task that requires:
core/src/dom.rs: 3010 pub fn is_focusable(&self) -> bool { 3011: // TODO: do some better analysis of next / first / item 3012 self.get_tab_index().is_some()
4698 pub fn from_xml<S: AsRef<str>>(xml_str: S) -> Self { 4699: // TODO: Implement full XML parsing 4700 // For now, just create a text node showing that XML was loaded
core/src/events.rs: 1967 DeviceDisconnected, 1968: // ... TODO: more events 1969 }
core/src/gl_fxaa.rs:
5 //!
6: //! Currently TODO: shader compilation (see GlContextPtrInner.fxaa_shader).
7 //!
core/src/gl.rs: 762 pub fn gl_textures_remove_epochs_from_pipeline(document_id: &DocumentId, epoch: Epoch) { 763: // TODO: Handle overflow of Epochs correctly (low priority) 764 unsafe {
3666 gl_context.disable(gl::MULTISAMPLE); 3667: gl_context.blend_func(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA); // TODO: enable / disable 3668 gl_context.use_program(shader_program_id);
core/src/gpu.rs: 139 .map(|t| { 140: // TODO: look up the parent nodes size properly to resolve animation of 141 // transforms with %
core/src/html.css: 791 overflow-wrap: break-word; 792: /* TODO : enable unicode-bidi, right now enable it would cause incorrect 793 display direction, maybe related with bug 1558431. */
core/src/icon.rs: 528 if replacement_len > 1 { 529: // TODO: Full subtree splicing requires inserting nodes into arrays 530 #[cfg(debug_assertions)]
core/src/id.rs: 545 { 546: // TODO if T: Send (which is usually the case), then we could use rayon here! 547 NodeDataContainer {
core/src/prop_cache.rs: 512 CssDeclaration::Static(s) => Some(s), 513: CssDeclaration::Dynamic(_d) => None, // TODO: No variable support yet! 514 }
core/src/resources.rs: 852 /// Direct mapping from font hash (from FontRef) to FontKey 853: /// TODO: This should become part of SharedFontRegistry 854 pub font_hash_map: FastHashMap<u64, FontKey>,
1235 /// 1236: /// TODO: autovectorization fails spectacularly, need to manually optimize! 1237 pub fn into_loaded_image_source(self) -> Option<(ImageData, ImageDescriptor)> {
1303
1304: // TODO: premultiply alpha!
1305: // TODO: check that this function is SIMD optimized
1306 for (pixel_index, greyalpha) in
1333
1334: // TODO: check that this function is SIMD optimized
1335 for (pixel_index, rgb) in pixels.as_ref().chunks_exact(THREE_CHANNELS).enumerate() {
1355
1356: // TODO: check that this function is SIMD optimized
1357 // no extra allocation necessary, but swizzling
1391
1392: // TODO: check that this function is SIMD optimized
1393 for (pixel_index, grey_u16) in pixels.as_ref().iter().enumerate() {
1412
1413: // TODO: check that this function is SIMD optimized
1414 for (pixel_index, greyalpha) in
1441
1442: // TODO: check that this function is SIMD optimized
1443 for (pixel_index, rgb) in pixels.as_ref().chunks_exact(THREE_CHANNELS).enumerate() {
1465
1466: // TODO: check that this function is SIMD optimized
1467 if premultiplied_alpha {
1520
1521: // TODO: check that this function is SIMD optimized
1522 for (pixel_index, bgr) in pixels.as_ref().chunks_exact(THREE_CHANNELS).enumerate() {
1572
1573: // TODO: check that this function is SIMD optimized
1574 for (pixel_index, rgb) in pixels.as_ref().chunks_exact(THREE_CHANNELS).enumerate() {
1596
1597: // TODO: check that this function is SIMD optimized
1598 if premultiplied_alpha {
core/src/style.rs:
316
317: /// TODO: This is wrong, but it's fast
318 #[inline]
core/src/svg.rs: 436 Some(s) => s, 437: None => return SvgRect::default(), // TODO: error? 438 };
core/src/transform.rs: 276 ) -> Self { 277: // TODO: use correct SIMD optimization! 278 let mut matrix = Self::IDENTITY;
core/src/ua_css.rs: 459 /// 3. Padding on <li> creates space between the marker and the text content 460: /// TODO: Change to PaddingInlineStart once logical property resolution is implemented 461 static PADDING_INLINE_START_40PX: CssProperty =
465
466: // TODO: Uncomment when TextDecoration is implemented in azul-css
467 // const TEXT_DECORATION_UNDERLINE: CssProperty = CssProperty::TextDecoration(
core/src/window.rs:
484
485: // TODO: returned by process_system_scroll
486 #[derive(Debug)]
core/src/xml.rs:
3569
3570: // TODO
3571 let matcher = CssMatcher {
4094 None => { 4095: // TODO 4096 // let node_text = format_args_for_rust_code(&xml_attribute_key);
4119
4120: // TODO
4121 // let node_text = format_args_for_rust_code(&node_text, &parent_xml_attributes.args);
4382 ) -> Result<String, CompileError> { 4383: Ok("Dom::create_div()".into()) // TODO!s 4384 }
css/src/dynamic_selector.rs: 388 os, 389: os_version: AzString::from_const_str("0.0"), // TODO: Version detection 390 desktop_env,
397 container_name: OptionString::None, 398: prefers_reduced_motion: BoolCondition::False, // TODO: Accessibility 399 prefers_high_contrast: BoolCondition::False,
505 // Simple string comparison for now 506: // TODO: Proper semantic version comparison 507 a.as_str().cmp(b.as_str()) as i32
702 /// Check if this property affects layout (width, height, margin, etc.) 703: /// TODO: Implement when CssProperty has this method 704 pub fn is_layout_affecting(&self) -> bool {
css/src/macros.rs: 1115 fn format_as_rust_code(&self, _tabs: usize) -> String { 1116: format!("{} {{ /* TODO */ }}", stringify!($struct_name)) 1117 }
css/src/parser2.rs:
406
407: // TODO: Test for "+"
408 let repeat = value
css/src/shape_parser.rs: 288 /// For now, only handles px and % values. 289: /// TODO: Handle em, rem, vh, vw, etc. (requires layout context) 290 fn parse_length(s: &str) -> Result<f32, ShapeParseError> {
302 .map_err(|_| ShapeParseError::InvalidNumber(s.to_string()))?; 303: // TODO: Percentage values need container size to resolve 304 // For now, treat as raw value (will need context later)
css/src/shape.rs: 548 } else { 549: // TODO: Handle border_radius for rounded corners 550 // For now, just return full width
css/src/props/layout/shape.rs: 61 Self::None => "none".to_string(), 62: Self::Shape(shape) => format!("{:?}", shape), // TODO: Proper CSS formatting 63 }
109 Self::None => "none".to_string(), 110: Self::Shape(shape) => format!("{:?}", shape), // TODO: Proper CSS formatting 111 }
157 Self::None => "none".to_string(), 158: Self::Shape(shape) => format!("{:?}", shape), // TODO: Proper CSS formatting 159 }
207 ShapeOutside::None => String::from("ShapeOutside::None"), 208: ShapeOutside::Shape(_s) => String::from("ShapeOutside::Shape(/* ... */)"), // TODO 209 }
216 ShapeInside::None => String::from("ShapeInside::None"), 217: ShapeInside::Shape(_s) => String::from("ShapeInside::Shape(/* ... */)"), // TODO 218 }
225 ClipPath::None => String::from("ClipPath::None"), 226: ClipPath::Shape(_s) => String::from("ClipPath::Shape(/* ... */)"), // TODO 227 }
dll/src/desktop/app.rs: 211 { 212: // TODO: Implement for Windows and macOS 213 MonitorVec::from_const_slice(&[])
dll/src/desktop/compositor2.rs: 1679 ); 1680: // TODO: Implement proper WebRender box shadow using builder.push_box_shadow() 1681 // For now, render a simplified shadow as an offset rectangle
1718 ); 1719: // TODO: Implement proper WebRender filter stacking context 1720 // For now, just push a simple stacking context
1742 ); 1743: // TODO: Implement proper WebRender backdrop filter 1744 // Backdrop filters require special handling in WebRender
1766 ); 1767: // TODO: Implement proper WebRender opacity stacking context 1768 let current_spatial_id = current_spatial!();
dll/src/desktop/logging.rs:
98
99: // TODO: invoke external app crash handler with the location to the log file
100 log::error!("{}", error_str);
dll/src/desktop/menu_renderer.rs: 170 // Create the submenu window 171: // TODO: Track the returned window ID and add to parent_menu_data.child_menu_ids 172 info.create_window(submenu_options);
422 MenuItemIcon::Image(_image_ref) => { 423: // TODO: Render image icon 424 // This requires image rendering support in Azul
447 // For now, just format the keys in the combo 448: // TODO: Proper formatting with modifiers 449 let key_strs: Vec<String> = combo
dll/src/desktop/mod.rs: 113 pub mod errors { 114: // TODO: re-export the sub-types of ClipboardError! 115 #[cfg(all(feature = "font_loading", feature = "std"))]
dll/src/desktop/wr_translate2.rs:
121
122: /// Shader cache (TODO: implement proper caching)
123 pub const WR_SHADER_CACHE: Option<&Rc<RefCellwebrender::Shaders>> = None;
370 point_relative_to_item, 371: is_focusable: false, // TODO: Determine from node data 372 is_iframe_hit: None, // IFrames handled via DisplayListItem::IFrame
562 let parent_rect = LogicalRect::new(node_pos, node_size); 563: let child_rect = parent_rect; // TODO: Calculate actual content bounds 564
748 // Content size is the child bounds 749: // TODO: Calculate actual content bounds from children 750 let child_rect = parent_rect;
841 ) -> azul_core::resources::ExternalImageId { 842: // TODO: Actually store the texture in gl_texture_cache 843 // For now, just generate a unique ID
1754
1755: // TODO: Synchronize transform values
1756 // This would work similarly:
dll/src/desktop/shell2/common/compositor.rs: 138 pub fn detect() -> Self { 139: // TODO: Implement actual detection 140 // For now, assume OpenGL is available on all platforms
144 has_d3d11: cfg!(target_os = "windows"), 145: has_vulkan: false, // TODO: Detect Vulkan 146 opengl_version: Some("3.3".into()),
dll/src/desktop/shell2/common/cpu_compositor.rs: 4 //! 5: //! TODO: Implement based on webrender's sw_compositor.rs 6 //! Reference: https://github.com/servo/webrender/blob/master/swgl/src/sw_compositor.rs
56 fn rasterize(&mut self, _display_list: &DisplayList) { 57: // TODO: Implement actual rasterization 58 // For now, just clear to white
dll/src/desktop/shell2/common/debug_server.rs: 2655 y: *y, 2656: node_id: None, // TODO: extract from hit_test 2657 node_tag: None,
4376 files, 4377: drag_data: None, // TODO: convert DragData to BTreeMap 4378: drag_effect: None, // TODO: convert DragEffect 4379 debug: alloc::format!("{:?}", drag_ctx),
dll/src/desktop/shell2/common/event_v2.rs:
278
279: // TODO: Scroll based on mouse distance from container edge
280 // The issue is that scroll_selection_into_view requires &mut LayoutWindow,
1286 let text_input_affected_nodes: BTreeMap<azul_core::dom::DomNodeId, (Vec<azul_core::events::EventFilter>, bool)> = if let Some(_layout_window) = self.get_layout_window_mut() { 1287: // TODO: Get actual text input from platform (IME, composed chars, etc.) 1288 // Platform layer needs to provide text_input: &str when available
1297 }; 1298: // TODO: Process accessibility events 1299 // if let Some(layout_window) = self.get_layout_window_mut() {
1408 PreCallbackSystemEvent::ArrowKeyNavigation { .. } => { 1409: // TODO: Implement arrow key navigation 1410 }
1417 if let Some(layout_window) = self.get_layout_window() { 1418: // TODO: Map target to correct DOM 1419 let dom_id = azul_core::dom::DomId { inner: 0 };
1432 if let Some(layout_window) = self.get_layout_window_mut() { 1433: // TODO: Map target to correct DOM 1434 let dom_id = azul_core::dom::DomId { inner: 0 };
1457 // Insert text at current cursor position 1458: // TODO: Implement paste operation through TextInputManager 1459 // For now, treat it like text input
1470 if let Some(layout_window) = self.get_layout_window_mut() { 1471: // TODO: Implement select_all operation 1472 // This should select all text in the focused contenteditable node
1497
1498: // TODO: Allow user callback to preventDefault
1499
1516 .to_string(), 1517: // TODO: Preserve original style 1518 style: Arc::new(StyleProperties::default()),
1552 { 1553: // TODO: Allow user callback to preventDefault 1554
1594 // For now, we directly call delete_selection 1595: // TODO: Integrate with TextInputManager changeset system 1596 // This should:
1744 azul_core::events::PostCallbackSystemEvent::ApplyTextChangeset => { 1745: // TODO: Apply text changesets from Phase 2 refactoring 1746 // This will be implemented when changesets are fully integrated
1794
1795: // TODO: Get actual monitor refresh rate from platform
1796 // For now, default to 60Hz (16.67ms per frame)
1877 for node in dirty_nodes { 1878: // TODO: Mark node as needing re-layout 1879 // This will be handled by the existing dirty tracking system
2269 DefaultAction::ScrollFocusedContainer { direction, amount } => { 2270: // TODO: Implement keyboard scrolling 2271 log_debug!(
2827 if !result.windows_created.is_empty() { 2828: // TODO: Signal to event loop to create new windows 2829 // For now, just log
2907 "[process_callback_result_v2] preventDefault called - text input will be rejected".to_string(), None); 2908: // TODO: Clear the pending changeset if rejected 2909 }
dll/src/desktop/shell2/ios/mod.rs: 270 ui_window: Id::as_ptr(&self.ui_window) as *mut c_void, 271: ui_view: ptr::null_mut(), // TODO 272: ui_view_controller: ptr::null_mut(), // TODO 273 })
dll/src/desktop/shell2/linux/gnome_menu/protocol_impl.rs: 241 if let Some(_group) = menu_groups.get(&group_id) { 242: // TODO: Serialize menu group to DBus format 243 // This requires building nested structs and dictionaries
449
450: // TODO: Properly serialize (bool, string, array) tuple
451 // For now, just return success
473
474: // TODO: Build dictionary of action descriptions
475 // For now, return empty dict
540 debug_log(&format!("Invoking callback for action: {}", action_name)); 541: callback(None); // TODO: Parse parameter from message 542 }
dll/src/desktop/shell2/linux/wayland/menu.rs: 122 pub fn calculate_menu_size(menu: &Menu, system_style: &SystemStyle) -> LogicalSize { 123: // TODO: Implement proper size calculation based on menu items 124 // For now, use reasonable defaults
dll/src/desktop/shell2/linux/wayland/mod.rs: 891 if self.current_window_state.flags.use_native_context_menus { 892: // TODO: Show native Wayland popup via xdg_popup protocol 893 log_debug!(
1207
1208: // TODO: Window positioning on Wayland
1209 // Wayland does not support programmatic window positioning - the compositor
1233 // but GNOME Shell may be able to find the window via app ID 1234: let app_id = None; // TODO: Extract from x11_wm_classes if needed 1235
1367 fn position_window_on_monitor(&mut self, _options: &WindowCreateOptions) { 1368: // TODO: Wayland limitation 1369 // Unlike X11/Windows/macOS, Wayland does not allow applications to position
2324 // Sync visibility 2325: // TODO: Wayland visibility control via xdg_toplevel methods 2326
3015 let _ = (cpu_state, width, height); 3016: // TODO: Implement CPU buffer resizing if needed 3017 }
3921
3922: // TODO: Signal to application that popup was dismissed
3923 // This would require storing a callback or channel in PopupListenerContext
dll/src/desktop/shell2/linux/x11/events.rs: 234 { 235: // TODO: Implement timer/thread management for X11 236 event_result = event_result.max(ProcessEventResult::ShouldReRenderCurrentWindow);
dll/src/desktop/shell2/linux/x11/menu.rs: 84 // Calculate menu size based on items 85: // TODO: Use actual font metrics for accurate sizing 86 let item_height = 25;
dll/src/desktop/shell2/linux/x11/mod.rs: 648 // For now, we default to monitor 0 649: let monitor_id = 0; // TODO: Get from options or detect primary monitor 650
2215 if self.current_window_state.flags.use_native_context_menus { 2216: // TODO: Show GNOME native menu via DBus 2217 log_debug!(
dll/src/desktop/shell2/macos/mod.rs:
2030
2031: // TODO: Re-enable once objc2-open-gl feature is properly configured
2032 // The issue is that msg_send! expects specific type encodings:
2433
2434: // TODO: Implement proper multi-monitor positioning after event loop starts
2435 // For now, user can move window manually or we can position it later
2721 layout_window: Some(layout_window), 2722: menu_state: menu::MenuState::new(), // TODO: build initial menu state from layout_window 2723 image_cache,
5362 ) { 5363: // TODO: Could call invalidateMarkable or similar if needed 5364 // For now, passive approach is sufficient
dll/src/desktop/shell2/windows/menu.rs:
198
199: let align = TPM_TOPALIGN | TPM_LEFTALIGN; // TODO: support menu.position
200
dll/src/desktop/shell2/windows/mod.rs: 413 // Set up menu bar if present 414: // TODO: Menu bar needs to be extracted from window state 415 let menu_bar = None;
417 // Handle size_to_content 418: // TODO: size_to_content needs to be implemented with new layout API 419 /*
443 // This can be done before showing 444: // TODO: Use monitor_id to look up actual Monitor from global state 445 position_window_on_monitor(
1265 // Apply scroll delta 1266: // TODO: ScrollManager API changed - need to update this 1267 /*
2928 fn set_properties(&mut self, _props: WindowProperties) -> Result<(), WindowError> { 2929: // TODO: Implement property setting (title, size, etc.) 2930 Ok(())
3490 ) { 3491: // TODO: Implement native Win32 TrackPopupMenu 3492 // For now, fall back to window-based menu
doc/guide/getting-started-python.md:
164
165: class TodoApp:
166 def init(self):
188 .with_inline_style("font-size: 24px; margin-bottom: 20px;")
189: .with_child(Dom.text("Todo List")))
190 .with_children(items) \
192
193: app = App(TodoApp(), AppConfig(layout))
194 app.run(WindowCreateOptions.default())
doc/guide/getting-started-rust.md: 105 ```rust 106: struct TodoApp { 107 items: Vec<String>,
110 extern "C" fn layout(data: &mut RefAny, _info: &mut LayoutCallbackInfo) -> StyledDom { 111: let app = data.downcast_ref::<TodoApp>().unwrap(); 112
doc/src/print.rs: 454 // For now, just check if we could retrieve the source 455: // TODO: More sophisticated signature matching 456 Ok(!source.is_empty())
doc/src/codegen/experimental/erlang_api.rs: 336 for (name, _) in &nif_funcs { 337: erl.push_str(&format!(",\n {}/TODO_ARITY", name)); // Real generator must calc arity 338 }
doc/src/codegen/v2/ir_builder.rs: 714 fn build_type_lookups(&mut self) -> Result<()> { 715: // TODO: Iterate through all modules and classes 716: // TODO: Build type_to_module map 717: // TODO: Build type_to_external map from class.external field 718
829 fn build_struct_fields(&self, class_data: &ClassData) -> Result<Vec<FieldDef>> { 830: // TODO: Iterate through class_data.struct_fields 831: // TODO: Build FieldDef for each field with proper type analysis 832
904 fn build_enum_variants(&self, class_data: &ClassData) -> Result<(Vec<EnumVariantDef>, bool)> { 905: // TODO: Parse enum_fields and determine variant kinds 906: // TODO: Return (variants, is_union) 907
1246 fn build_api_functions(&mut self) -> Result<()> { 1247: // TODO: Extract constructors and functions from api.json 1248: // TODO: Build FunctionDef for each 1249: // TODO: Handle fn_body from api.json 1250
1577 fn build_trait_functions(&mut self) -> Result<()> { 1578: // TODO: For each struct/enum with relevant traits, generate: 1579 // - _delete if has custom drop or !Copy
doc/src/codegen/v2/lang_python.rs: 1299 // For now, skip these - callbacks in Option<Callback> require more complex handling 1300: builder.line(" // TODO: callback type conversion"); 1301 builder.line(&format!(
doc/src/patch/parser.rs: 789 // If this is the first variant, initialize the enum as a parent 790: // TODO: This logic for replacing the enum leaf is incomplete and might not 791 // correctly handle multiple variants or preserve the original
examples/c/browser.c: 457 stylesheets_found++; 458: // TODO: Fetch and parse external CSS 459 printf(" [STYLESHEET] External CSS not yet supported\n");
examples/rust/src/opengl.rs:
133
134: // TODO: segfault when inserting the following line:
135 // let tx = ImageRef::gl_texture(texture.clone());
layout/src/callbacks.rs: 344 /// Move cursor to document start (Ctrl+Home) 345: MoveCursorToDocumentStart { 346 dom_id: DomId,
350 /// Move cursor to document end (Ctrl+End) 351: MoveCursorToDocumentEnd { 352 dom_id: DomId,
3371 pub fn move_cursor_to_document_start(&mut self, target: DomNodeId, extend_selection: bool) { 3372: self.push_change(CallbackChange::MoveCursorToDocumentStart { 3373 dom_id: target.dom,
3380 pub fn move_cursor_to_document_end(&mut self, target: DomNodeId, extend_selection: bool) { 3381: self.push_change(CallbackChange::MoveCursorToDocumentEnd { 3382 dom_id: target.dom,
layout/src/cpurender.rs: 421 } => { 422: // TODO: Implement IFrame rendering 423 // This would require looking up the child display list by child_dom_id
449 } => { 450: // TODO: Implement proper gradient rendering 451 // For now, render a placeholder with the first stop color
479 } => { 480: // TODO: Implement proper radial gradient rendering 481 let color = gradient
508 } => { 509: // TODO: Implement proper conic gradient rendering 510 let color = gradient
539 } => { 540: // TODO: Implement proper box shadow rendering 541 // For now, render a slightly offset rectangle with the shadow color
563 DisplayListItem::PushFilter { .. } => { 564: // TODO: Implement filter effects for CPU rendering 565 }
571 DisplayListItem::PushOpacity { bounds, opacity } => { 572: // TODO: Implement opacity layers for CPU rendering 573 }
934
935: // TODO: Implement actual image blitting using image_data
936 // This would require:
layout/src/font.rs: 1280 pub fn resolved_glyph_components(og: &mut OwnedGlyph, all_glyphs: &BTreeMap<u16, OwnedGlyph>) { 1281: // TODO: does not respect attachment points or anything like this 1282 // only checks whether we can resolve the glyph from the map
layout/src/fragmentation.rs:
753
754: // TODO: Create proper text DisplayListItem
755 // For now we'll need to integrate with text layout
layout/src/icu.rs: 636 // For now, fall back to simple comma join 637: // TODO: Use ListFormatter::try_new_unit when available 638 return AzString::from(str_items.join(", "));
layout/src/image.rs: 204 RawImageFormat::RGBA8 => image::ColorType::Rgba8, 205: RawImageFormat::BGR8 => image::ColorType::Rgb8, // TODO: ??? 206: RawImageFormat::BGRA8 => image::ColorType::Rgba8, // TODO: ??? 207 RawImageFormat::R16 => image::ColorType::L16,
layout/src/paged.rs: 107 pub struct LayoutBox { 108: // TODO: Define structure in later phases 109 }
layout/src/window.rs: 1345 for (_dom_id, layout_result) in &self.layout_results { 1346: // TODO: Scan styled_dom for font references 1347 // This requires accessing the CSS property cache and finding all font-family properties
1355 for (_dom_id, layout_result) in &self.layout_results { 1356: // TODO: Scan styled_dom for image references 1357 // This requires scanning background-image and content properties
2082 .move_cursor_to(range.start, dom_id, node_id); 2083: // TODO: Set selection range in SelectionManager 2084 // self.selection_manager.set_selection(dom_node_id, range);
2171 } 2172: CallbackChange::MoveCursorToDocumentStart { 2173 dom_id,
2196 } 2197: CallbackChange::MoveCursorToDocumentEnd { 2198 dom_id,
2464
2465: // TODO: Implement compute_hit_test() once we have the actual hit-testing logic
2466 // This would involve:
2995 } 2996: // TODO: Implement calculate_selection_bounding_rect 2997 // let ranges = self.selection_manager.get_selection();
3350 if timer_exists { 3351: // TODO: store the hit DOM of the timer? 3352 let hit_dom_node = match timer_node_id {
4403
4404: // TODO: Rewrite this test to use the new IFrameManager API once
4405 // we have a proper test setup for IFrames.
4413
4414: // TODO: Rewrite this test to use IFrameManager::mark_invoked
4415 // and IFrameManager::check_reinvoke.
4427
4428: // TODO: Rewrite this test to use LayoutWindow::calculate_scrollbar_opacity
4429 // with ScrollManager::get_last_activity_time.
4439
4440: // TODO: Rewrite to test IFrameManager::check_reinvoke with InitialRender.
4441 }
4484
4485: // TODO: If frame lifecycle tracking is needed, it should be
4486 // implemented at the LayoutWindow level, not in ScrollManager.
5034 if has_context_menu { 5035: // TODO: Generate synthetic right-click event to trigger context menu 5036 // This requires access to the event system which is not available here
5126 AccessibilityAction::ShowTooltip | AccessibilityAction::HideTooltip => { 5127: // TODO: Integrate with tooltip manager when implemented 5128 }
5130 AccessibilityAction::CustomAction(_id) => { 5131: // TODO: Allow custom action handlers 5132 }
5380 // For now, we use InWindow with approximate coordinates 5381: // TODO: Calculate proper screen coordinates from TextCursor 5382 Some(CursorPosition::InWindow(
5574 // For now, use default - full implementation would query CSS property cache 5575: // TODO: Query CSS property cache for font-family, font-size, font-weight, etc. 5576 Arc::new(Default::default())
5875 ) { 5876: // TODO: This should: 5877 // 1. Check if node is currently visible in viewport
5938 // For now, just use the node itself if it's scrollable 5939: // TODO: Walk up the DOM tree to find scrollable ancestor 5940
layout/src/managers/changeset.rs: 451 // For now, simplified: delete entire selection 452: // TODO: Actually extract text between range.start and range.end 453 let deleted = String::new(); // Placeholder
layout/src/managers/scroll_into_view.rs: 447 ScrollIntoViewBehavior::Auto => { 448: // TODO: Check CSS scroll-behavior property on the scroll container 449 // For now, default to instant
layout/src/managers/scroll_state.rs:
913
914: // TODO: Generate ScrollStart/ScrollEnd events
915 // Need to track when scroll starts/stops (first/last frame with delta)
layout/src/managers/selection.rs: 52 /// Maps DomId -> SelectionState 53: /// TODO: Deprecate once multi-node selection is fully implemented 54 pub selections: BTreeMap<DomId, SelectionState>,
layout/src/solver3/display_list.rs: 819 StyleBackgroundContent::Image(_image_id) => { 820: // TODO: Implement image backgrounds 821 }
870 StyleBackgroundContent::Image(_image_id) => { 871: // TODO: Implement image backgrounds for inline text 872 }
2199 // This is handled by the normal rendering flow for each element 2200: // TODO: Implement border-collapse conflict resolution using BorderInfo::resolve_conflict() 2201
2659 ) -> Result<()> { 2660: // TODO: This will always paint images over the glyphs 2661: // TODO: Handle z-index within inline content (e.g. background images) 2662: // TODO: Handle text decorations (underline, strikethrough, etc.) 2663: // TODO: Handle text shadows 2664: // TODO: Handle text overflowing (based on container_rect and overflow behavior) 2665
3171 ImageSource::Url(_url) => { 3172: // TODO: Look up in ImageCache 3173 // For now, CSS url() images are not yet supported
3176 ImageSource::Data() | ImageSource::Svg() | ImageSource::Placeholder(_) => { 3177: // TODO: Decode raw data / SVG to ImageRef 3178 None
layout/src/solver3/fc.rs:
2483
2484: // TODO: clip-path will be used for rendering clipping (not text layout)
2485
3495 element_size: None, 3496: // TODO: Get actual DPI scale from ctx 3497 viewport_size: PhysicalSize::new(0.0, 0.0),
3710 // All columns in this group should be collapsed 3711: // TODO: For now, just mark the group (actual column indices will be determined later) 3712 debug_log!(
3757 if matches!(cell.formatting_context, FormattingContext::TableCell) { 3758: // Get colspan and rowspan (TODO: from CSS properties) 3759: let colspan = 1; // TODO: Get from CSS 3760: let rowspan = 1; // TODO: Get from CSS 3761
3809 // Fixed layout: distribute width equally among non-collapsed columns 3810: // TODO: Respect column width properties and first-row cell widths 3811 let num_cols = table_ctx.columns.len();
4537 element_size: None, 4538: viewport_size: PhysicalSize::new(0.0, 0.0), // TODO: Get actual DPI scale from ctx 4539 };
5853 rect: LogicalRect::new(final_pos, child_margin_box_size), 5854: margin: EdgeSizes::default(), // TODO: Pass actual margin if this function is used 5855 };
layout/src/solver3/geometry.rs: 1: //! TODO: Move these to CSS module 2
285 /// Type alias for backwards compatibility. 286: /// TODO: Remove this once all code uses ResolvedBoxProps directly. 287 pub type BoxProps = ResolvedBoxProps;
layout/src/solver3/getters.rs: 768 pub fn get_z_index(styled_dom: &StyledDom, node_id: Option<NodeId>) -> i32 { 769: // TODO: Add get_z_index() method to CSS cache, then query it here 770 let _ = (styled_dom, node_id);
1344 // and typical item sizes. 1345: // TODO: Pass content bounds through from layout phase 1346
1451 element_size: None, 1452: viewport_size: PhysicalSize::new(0.0, 0.0), // TODO: Pass viewport from LayoutContext 1453 };
layout/src/solver3/layout_tree.rs:
468
469: // TODO: Also check children positions to get max content bounds
470 // For now, this handles the most common case (text overflowing)
layout/src/solver3/pagination.rs: 807 MarginBoxContent::NamedString(name) => { 808: // TODO: Look up named string from document context 809 format!("[string:{}]", name)
layout/src/solver3/sizing.rs: 835 /// STUB: Calculates intrinsic sizes for a node based on its children 836: /// TODO: Implement proper intrinsic size calculation logic 837 fn calculate_node_intrinsic_sizes_stub<T: ParsedFontTrait>(
layout/src/solver3/taffy_bridge.rs: 92 // Only accept absolute units (px, pt, in, cm, mm) - no %, em, rem 93: // TODO: Add proper context for em/rem resolution 94 match pv.metric {
247
248: // TODO: gap, grid, visibility, z_index, flex_basis, etc. analog ergänzen
249 // --- CSS <-> Taffy Übersetzungsfunktionen ---
793 FormattingContext::Grid => { 794: // TODO: Implement grid stretch detection 795 // Grid is more complex because:
layout/src/text3/cache.rs: 640 /// 2. [ISSUE] vertical_align only supports baseline 641: /// 3. [TODO] initial-letter (drop caps) not implemented 642 #[derive(Debug, Clone)]
2205 } 2206: // TODO: Parse SVG path data into PathSegments 2207 // For now, fall back to rectangle
4339 /// - Uses constraints from first fragment only 4340: /// - \u274c TODO: Should re-orient if fragments have different writing modes 4341 ///
5006 LogicalItem::Tab { source, style } => { 5007: // TODO: To get the space width accurately, we would need to shape 5008 // a space character with the current font.
5027 } => {
5028: // TODO: Implement Ruby layout. This is a major feature.
5029 // 1. Recursively call layout for the base_text to get its size.
5895 /// \u26a0\ufe0f PARTIAL: Basic punctuation handling 5896: /// - \u274c TODO: hanging-punctuation is declared in UnifiedConstraints but not used here 5897: /// - \u274c TODO: Should implement punctuation trimming at line edges 5898 ///
6436 // 6437: // KNOWN LIMITATION / TODO: 6438 //
7147 } 7148: ShapeBoundary::Path { .. } => Ok(vec![]), // TODO! 7149 }
7170
7171: // TODO: Dummy polygon function to make it compile
7172 fn polygon_line_intersection(
7227 /// Helper to get a hyphenator for a given language. 7228: /// TODO: In a real app, this would be cached. 7229 #[cfg(feature = "text_layout_hyphenation")]
layout/src/text3/edit.rs: 152 } else { 153: // TODO: Handle multi-run deletion 154 }
layout/src/text3/glyphs.rs: 237 text_decoration: text_decoration.clone(), 238: is_ime_preview: false, // TODO: Set from input context 239 });
249 text_decoration: text_decoration.clone(), 250: is_ime_preview: false, // TODO: Set from input context 251 });
254 // Advance the pen for the next glyph in the cluster/block. 255: // TODO: writing-mode support (vertical text) here 256 pen_x += glyph.advance;
layout/src/text3/knuth_plass.rs:
311
312: // TODO: Add demerits for consecutive lines with very different
313 // ratios (fitness classes).
layout/src/widgets/node_graph.rs: 856 let node_graph_local_dataset = RefAny::new(NodeGraphLocalDataset { 857: node_graph: self.clone(), // TODO: expensive 858 last_input_or_output_clicked: None,
3303
3304: Update::DoNothing // TODO
3305 }
layout/src/xml/svg.rs: 126 .with_miter_limit(e.miter_limit) 127: // TODO: e.apply_line_width - not present in lyon 17! 128 }
732 fn linestring_to_svg_path(ls: geo::LineString<f64>) -> SvgPath { 733: // TODO: bezier curves? 734 SvgPath {
777
778: // TODO: produces wrong results for curve curve intersection
779 pub fn svg_multi_polygon_union(a: &SvgMultiPolygon, b: &SvgMultiPolygon) -> SvgMultiPolygon {
1268
1269: // TODO: radii not respected on latest version of lyon
1270 #[cfg(feature = "svg")]
1733 pub fn apply_fxaa(texture: &mut Texture) -> Option<()> { 1734: // TODO 1735 Some(())
1988 SvgNode::Rect(r) => { 1989: // TODO: rounded edges! 1990 Some(SkPathBuilder::from_rect(SkRect::from_xywh(
1993 } 1994: // TODO: test? 1995 SvgNode::MultiShape(ms) => {
2063 line_cap: match ss.start_cap { 2064: // TODO: end_cap? 2065 SvgLineCap::Butt => SkLineCap::Butt,
2448 image_rendering: translate_to_usvg_imagerendering(e.image_rendering), 2449: resources_dir: None, // TODO 2450: default_size: usvg::Size::from_wh(100.0, 100.0).unwrap(), // TODO 2451: style_sheet: None, // TODO 2452: image_href_resolver: ImageHrefResolver::default(), // TODO 2453 ..Default::default()
layout/tests/flexbox_stretch_bugs.rs:
9
10: // TODO: These tests require integration testing infrastructure
11 // For now, tests are manual using the printpdf example
scripts/IMAGE_PIPELINE_ANALYSIS.md: 111 StyleBackgroundContent::Image(_image_id) => { 112: // TODO: Implement image backgrounds 113 }
191
192: ## Related TODO Items
193
195
196: | Location | TODO | Impact |
197 |----------|------|--------|
205
206: | Location | TODO | Impact |
207 |----------|------|--------|
216
217: | Location | TODO | Impact |
218 |----------|------|--------|
scripts/IMAGE_RENDERING_DEBUG_REPORT.md: 158 ImageSource::Url(url) => { 159: // TODO: Look up in ImageCache 160 None
scripts/report-selection.md:
382
383: ### Phase 4: Selection Rendering (TODO)
384
scripts/SCROLL_CURSOR_TEXT_INPUT_ARCHITECTURE.md: 526 pub fn add_cursor_at_next_occurrence(&mut self, _text_layout: &UnifiedLayout) { 527: // TODO: Find next occurrence of selection and add cursor 528 }
scripts/TEXT_INPUT_IMPLEMENTATION_PLAN_V3.md:
729
730: Replace the TODO stub with the full implementation from Part 4.2.
731
tests/src/xml.rs:
28
29: // TODO!
30 // assert_eq!(component_string, expected);
39
40: // TODO!
41 // assert_eq!(app_source, expected);