Skip to main content

Paint

Struct Paint 

Source
pub struct Paint { /* private fields */ }
Expand description

Paint is Servo’s rendering subsystem. It has a few responsibilities:

  1. Maintain a WebRender instance for each RenderingContext that Servo knows about. RenderingContexts are per-WebView, but more than one WebView can use the same RenderingContext. This allows multiple WebViews to share the same WebRender instance which is more efficient. This is useful for tabbed web browsers.
  2. Receive display lists from the layout of all of the currently active Pipelines (frames). These display lists are sent to WebRender, and new frames are generated. Once the frame is ready the [Painter] for the WebRender instance will ask libservo to inform the embedder that a new frame is ready so that it can trigger a paint.
  3. Drive animation and animation callback updates. Animation updates should ideally be coordinated with the system vsync signal, so the RefreshDriver is exposed in the API to allow the embedder to do this. The [Painter] then asks its WebViews to update their rendering, which triggers layouts.
  4. Eagerly handle scrolling and touch events. In order to avoid latency when handling these kind of actions, each [Painter] will eagerly process touch events and perform panning and zooming operations on their WebRender contents – informing the WebView contents asynchronously.

Paint and all of its contained structs should never block on the Constellation, because sometimes the Constellation blocks on us.

Implementations§

Source§

impl Paint

Source

pub fn new(state: InitialPaintState) -> Rc<RefCell<Self>>

Source

pub fn register_rendering_context( &mut self, rendering_context: Rc<dyn RenderingContext>, ) -> PainterId

Source

pub fn painter_id(&self) -> PainterId

Source

pub fn rendering_context_size( &self, painter_id: PainterId, ) -> Size2D<u32, DevicePixel>

Source

pub fn webgl_threads(&self) -> WebGLThreads

Source

pub fn webrender_external_image_id_manager( &self, ) -> WebRenderExternalImageIdManager

Source

pub fn webxr_running(&self) -> bool

Source

pub fn webviews_needing_repaint(&self) -> Vec<WebViewId>

Source

pub fn finish_shutting_down(&self)

Source

pub fn remove_webview(&mut self, webview_id: WebViewId)

Source

pub fn add_webview( &self, webview: Box<dyn WebViewTrait>, viewport_details: ViewportDetails, )

Source

pub fn show_webview(&self, webview_id: WebViewId) -> Result<(), UnknownWebView>

Source

pub fn hide_webview(&self, webview_id: WebViewId) -> Result<(), UnknownWebView>

Source

pub fn set_hidpi_scale_factor( &self, webview_id: WebViewId, new_scale_factor: Scale<f32, DeviceIndependentPixel, DevicePixel>, )

Source

pub fn resize_rendering_context( &self, webview_id: WebViewId, new_size: PhysicalSize<u32>, )

Source

pub fn set_page_zoom(&self, webview_id: WebViewId, new_zoom: f32)

Source

pub fn page_zoom(&self, webview_id: WebViewId) -> f32

Source

pub fn render(&self, webview_id: WebViewId)

Render the WebRender scene to the active RenderingContext.

Source

pub fn receiver(&self) -> &RoutedReceiver<PaintMessage>

Get the message receiver for this Paint.

Source

pub fn handle_messages(&self, messages: Vec<PaintMessage>)

Source

pub fn perform_updates(&self) -> bool

Source

pub fn toggle_webrender_debug(&self, option: WebRenderDebugOption)

Source

pub fn capture_webrender(&self, webview_id: WebViewId)

Source

pub fn notify_input_event( &self, webview_id: WebViewId, event: InputEventAndId, ) -> bool

Returning false means this is not going to reach the Constellation, and we need to directly notify the embedder that input event is handled.

Source

pub fn notify_scroll_event( &self, webview_id: WebViewId, scroll: Scroll, point: WebViewPoint, )

Source

pub fn adjust_pinch_zoom( &self, webview_id: WebViewId, pinch_zoom_delta: f32, center: DevicePoint, )

Source

pub fn pinch_zoom(&self, webview_id: WebViewId) -> f32

Source

pub fn device_pixels_per_page_pixel( &self, webview_id: WebViewId, ) -> Scale<f32, CSSPixel, DevicePixel>

Source

pub fn request_screenshot( &self, webview_id: WebViewId, rect: Option<WebViewRect>, callback: Box<dyn FnOnce(Result<RgbaImage, ScreenshotCaptureError>) + 'static>, )

Source

pub fn notify_input_event_handled( &self, webview_id: WebViewId, input_event_id: InputEventId, result: InputEventResult, )

Auto Trait Implementations§

§

impl Freeze for Paint

§

impl !RefUnwindSafe for Paint

§

impl !Send for Paint

§

impl !Sync for Paint

§

impl Unpin for Paint

§

impl UnsafeUnpin for Paint

§

impl !UnwindSafe for Paint

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> MaybeBoxed<Box<T>> for T

Source§

fn maybe_boxed(self) -> Box<T>

Convert
Source§

impl<T> MaybeBoxed<T> for T

Source§

fn maybe_boxed(self) -> T

Convert
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T