mirror of
https://github.com/servo/servo.git
synced 2025-07-28 17:50:37 +01:00
When laying out tables, store the boxes of non-anonymous table parts in their respective DOM objects. This is going to be important for incremental layout, but also for mapping from the DOM to the box tree (and eventually the fragment tree). For now, anonymous table parts are still lost to time and space, but in a followup change we hope to store them somewhere. Testing: This has no visible change to web rendering, so is covered by existing WPT. Co-authored-by: Oriol Brufau <obrufau@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
57 lines
1.1 KiB
Rust
57 lines
1.1 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
use std::fmt;
|
|
use std::ops::Deref;
|
|
|
|
use atomic_refcell::AtomicRefCell;
|
|
use servo_arc::Arc;
|
|
|
|
pub struct ArcRefCell<T> {
|
|
value: Arc<AtomicRefCell<T>>,
|
|
}
|
|
|
|
impl<T> ArcRefCell<T> {
|
|
pub fn new(value: T) -> Self {
|
|
Self {
|
|
value: Arc::new(AtomicRefCell::new(value)),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T> Clone for ArcRefCell<T> {
|
|
fn clone(&self) -> Self {
|
|
Self {
|
|
value: self.value.clone(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T> Default for ArcRefCell<T>
|
|
where
|
|
T: Default,
|
|
{
|
|
fn default() -> Self {
|
|
Self {
|
|
value: Arc::new(AtomicRefCell::new(Default::default())),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T> Deref for ArcRefCell<T> {
|
|
type Target = AtomicRefCell<T>;
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
&self.value
|
|
}
|
|
}
|
|
|
|
impl<T> fmt::Debug for ArcRefCell<T>
|
|
where
|
|
T: fmt::Debug,
|
|
{
|
|
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
self.value.fmt(formatter)
|
|
}
|
|
}
|