Module graphics

Source
Expand description

Graphic Device Operations

§Control an existing graphic device

TODO

§Implement a new graphic device

The following two things are needed to implement a graphic device.

  • DeviceDriver trait: the actual implementation of graphic device methods.
  • DeviceDescriptor struct: the parameters that might differ per device instance (e.g. sizes, and colors).

For example, the following code implements a simple graphic device that shows a message when it’s activated (and ignores everything else).

use extendr_api::{
    graphics::{DeviceDescriptor, DeviceDriver, DevDesc},
    prelude::*,
};

struct MyDevice<'a> {
    welcome_message: &'a str,
}

impl<'a> DeviceDriver for MyDevice<'a> {
    fn activate(&mut self, _dd: DevDesc) {
        let welcome_message = self.welcome_message;
        rprintln!("message from device: {welcome_message}");
    }
}

/// Create a new device.
///
/// @export
#[extendr]
fn my_device(welcome_message: String) {
    let device_driver = MyDevice {
        welcome_message: welcome_message.as_str(),
    };
     
    let device_descriptor = DeviceDescriptor::new();
    let device = device_driver.create_device::<MyDevice>(device_descriptor, "my device");
}

This can be called from R.

my_device("I'm so active!!!")
#> message from device: I'm so active!!!

Re-exports§

pub use device_descriptor::*;
pub use device_driver::*;

Modules§

color
device_descriptor
device_driver

Structs§

Context
Device
Pattern
R_GE_gcontext
A structure containing graphical parameters
Raster
A row-major array of pixels. One pixel is 32-bit, whose each byte represents alpha, blue, green, and red in the order.
TextMetric

Enums§

FontFace
LineEnd
LineJoin
LineType
Unit

Type Aliases§

DevDesc
——— New (in 1.4.0) device driver structure ——— NOTES: