Вызов getBBox для текстового элемента SVG в приложении Seed Rust
Я только что сделал свои первые шаги с WASM и Seed, что до сих пор было очень гладким опытом. Мне удалось создать SVG, используя
svg!
,
circle!
,
text!
,... и аналогичные макросы. Чтобы правильно сгенерировать SVG, мне нужно измерить текст. Моя идея состоит в том, чтобы сгенерировать текстовые узлы SVG и вызвать getBBox на узле. Я понял, что Seed использует web_sys и там реализован getBBox.
Моя проблема в том, как выйти из
Node
создан
text!
в SvgTextElement. Я пытался получить доступ к
node_ws
поле, но оно кажется "пустым". Возможно, он еще не был создан, но мне сейчас мало о внутреннем устройстве Seed.
Итак, как мне создать текстовый узел SVG, чтобы я мог вызвать на нем getBBox перед генерацией "основных" узлов SVG?
1 ответ
Вы можете использоватьel_ref
чтобы получить ссылку на элемент DOM. Что-то вроде этого должно работать:
struct Model {
element: ElRef<web_sys::SvgTextElement>,
}
fn view(model: &Model) -> Node<Msg> {
svg!![
text![
el_ref(&model.element),
// ...
],
// ...
]
}
fn init(orders: &mut impl Orders<Msg>) -> Model {
orders.after_next_render(|_| Msg::Rendered);
// ...
}
fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
match msg {
Msg::Rendered => {
let element = model.element.get().expect("no svg text element");
let b_box = element.get_b_box();
// ...
}
// ...
}
}