Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. pub mod cairo {
  2. pub struct Context();
  3. impl Drop for Context {
  4. fn drop(&mut self) {
  5. println!("Dropping cairo::Context");
  6. }
  7. }
  8. }
  9.  
  10. pub struct Surface<'a> {
  11. //this: cairo::ImageSurface,
  12. data: std::marker::PhantomData<&'a mut [u8]>,
  13. pub dimensions: (i32, i32),
  14. pub scale: i32,
  15. }
  16.  
  17. impl<'a> Surface<'a> {
  18. // XXX: Should we really hardcode the cairo::Format?
  19. pub fn new(data: &mut [u8], dimensions: (i32, i32), scale: i32) -> Result<Surface, ()> {
  20. /*let this = unsafe {
  21. cairo::ImageSurface::create_for_data::<&mut [u8]>(
  22. core::mem::transmute(data),
  23. cairo::Format::ARgb32,
  24. scale * dimensions.0,
  25. scale * dimensions.1,
  26. scale * dimensions.0 * 4,
  27. )?
  28. };*/
  29.  
  30. Ok(Surface{
  31. //this: this,
  32. data: std::marker::PhantomData,
  33. dimensions: dimensions,
  34. scale: scale,
  35. })
  36. }
  37.  
  38. pub fn make_context(&self) -> Context {
  39. Context::new(self)
  40. }
  41. }
  42.  
  43. impl<'a> Drop for Surface<'a> {
  44. fn drop(&mut self) {
  45. /*let pointer = self.this.to_raw_none();
  46. unsafe {
  47. let count = cairo_sys::cairo_surface_get_reference_count(pointer);
  48.  
  49. assert_eq!(count, 1, "multiple C references to surface remaining");
  50. drop(cairo::Surface::from_raw_none(pointer));
  51. }*/
  52. println!("Do stuff");
  53. }
  54. }
  55.  
  56. pub struct Context<'a> {
  57. pub this: cairo::Context,
  58. surface: std::marker::PhantomData<&'a Surface<'a>>,
  59. }
  60.  
  61. impl<'a> Context<'a> {
  62. fn new(surface: &'a Surface) -> Context<'a> {
  63. //let this = cairo::Context::new(&surface.this);
  64. //this.scale(surface.scale.into(), surface.scale.into());
  65.  
  66. Context {
  67. this: cairo::Context(),
  68. surface: std::marker::PhantomData,
  69. }
  70. }
  71. }
  72.  
  73. fn main() {
  74. let mut buf = [0; 4];
  75. let context: Context;
  76. {
  77. let surface = Surface::new(&mut buf, (32, 32), 1).expect("failed to create Cairo surface");
  78. context = surface.make_context();
  79.  
  80. //context.this.set_source_rgba(0.16, 0.16, 0.16, 0.50);
  81. //context.this.rectangle(0.0, 0.0, 32.0, 32.0);
  82. //context.this.fill();
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement