MCPcopy Create free account
hub / github.com/BillyDM/Firewheel / ui

Method ui

examples/spatial_basic/src/ui.rs:364–412  ·  view source on GitHub ↗
(self, ui: &mut egui::Ui)

Source from the content-addressed store, hash-verified

362
363impl<'a> egui::Widget for XYPad<'a> {
364 fn ui(self, ui: &mut egui::Ui) -> egui::Response {
365 let (mut response, painter) = ui.allocate_painter(
366 egui::Vec2::new(self.width, self.width),
367 Sense::click_and_drag(),
368 );
369
370 let x_range_span = *self.x_range.end() - *self.x_range.start();
371 let y_range_span = *self.y_range.end() - *self.y_range.start();
372
373 let x_normal = (*self.x_value - *self.x_range.start()) / x_range_span;
374 let y_normal = (*self.y_value - *self.y_range.start()) / y_range_span;
375
376 let handle_pos = Pos2::new(
377 response.rect.left() + (response.rect.size().x * x_normal),
378 response.rect.top() + (response.rect.size().y * y_normal),
379 );
380
381 painter.rect_stroke(
382 response.rect.expand(-1.0),
383 0.0,
384 Stroke::new(1.0f32, Color32::DARK_GRAY),
385 StrokeKind::Middle,
386 );
387
388 painter.add(CircleShape::filled(
389 response.rect.center(),
390 3.0,
391 Color32::DARK_GRAY,
392 ));
393
394 painter.add(CircleShape::filled(handle_pos, 3.0, Color32::DARK_GREEN));
395
396 let point_id = response.id.with(0);
397 let point_response = ui.interact(response.rect, point_id, Sense::click_and_drag());
398
399 if let Some(point_pos) = point_response.interact_pointer_pos() {
400 let x_normal = (point_pos.x - response.rect.left()) / response.rect.size().x;
401 let y_normal = (point_pos.y - response.rect.top()) / response.rect.size().y;
402
403 *self.x_value = (*self.x_range.start() + (x_range_span * x_normal))
404 .clamp(*self.x_range.start(), *self.x_range.end());
405 *self.y_value = (*self.y_range.start() + (y_range_span * y_normal))
406 .clamp(*self.y_range.start(), *self.y_range.end());
407
408 response.mark_changed();
409 }
410
411 response
412 }
413}

Callers 5

updateMethod · 0.80
updateMethod · 0.80
updateMethod · 0.80
updateMethod · 0.80
updateMethod · 0.80

Calls 3

withMethod · 0.80
clampMethod · 0.80
addMethod · 0.45

Tested by

no test coverage detected