Skip to content

Instantly share code, notes, and snippets.

View federicomenaquintero's full-sized avatar
💭
Not happy that Github supports La Migra

Federico Mena Quintero federicomenaquintero

💭
Not happy that Github supports La Migra
View GitHub Profile
@federicomenaquintero
federicomenaquintero / dummy.rs
Created September 20, 2017 15:43
gobject_gen!() syntax example
gobject_gen! {
class Dummy {
struct DummyPrivate {
foo: RefCell<MyStruct>
}
private_init() -> DummyPrivate {
DummyPrivate {
foo: RefCell::new(MyStruct::new())
}
@federicomenaquintero
federicomenaquintero / drop-gen.rs
Created September 20, 2017 15:01
Call to gobject_gen!()
gobject_gen! {
class Dummy {
struct DummyPrivate {
dc: RefCell<DropCounter>
}
private_init() -> DummyPrivate {
DummyPrivate {
dc: RefCell::new(DropCounter::new())
}
@federicomenaquintero
federicomenaquintero / drop.rs
Created September 20, 2017 15:00
Generated code
/********************************************************************************/
pub mod DummyMod {
extern crate glib_sys as glib_ffi ;
extern crate gobject_sys as gobject_ffi ;
extern crate glib ;
extern crate libc ;
use glib::{IsA, Value};
use glib::object::Downcast;
use glib::signal::connect;
use glib::translate::*;
fn emit_marker_at_start_of_segment<E> (some args...,
emit_fn: E) where E: Fn(MarkerType, f64, f64, f64) { ... }
fn emit_markers_for_path_builder<E> (builder: &RsvgPathBuilder,
emit_fn: E) where E: Fn(MarkerType, f64, f64, f64) {
for ... {
... multiple calls to functions which take in emit_fn ...
emit_marker_at_start_of_segment (..., emit_fn);
enum MarkerType {
Start,
Middle,
End
}
type RenderMarkerFn = fn (MarkerType,
f64, // xpos
f64, // ypos
f64); // computed_angle
use nom::{double};
named! (pub comma,
tag! (b","));
// Parse a viewBox attribute
// https://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute
//
// viewBox: double [,] double [,] double [,] double [,]
//
pub struct Node {
...
}
pub type RsvgNode = Weak<Node>;
/* This one works */
#[no_mangle]
pub unsafe extern fn rsvg_node_ref (raw_node: *mut RsvgNode) -> *const RsvgNode {
assert! (!raw_node.is_null ());
@federicomenaquintero
federicomenaquintero / gist:b479eafe88ba43b427269c6d8d1ffa91
Created February 10, 2017 14:55
How to cast a &trait to a &ConcreteType
// Trait for node implementations (bezier paths, circles, etc.)
pub trait NodeTrait {
fn set_atts (&self, ...);
fn draw (&self, ...);
}
// Node in the tree of SVG elements
pub struct Node {
node_type: NodeType,
parent: Option<Weak<Node>>,
pub struct Node<'a> {
node_type: NodeType,
parent: RefCell<Option<Weak<Node<'a>>>>, // cell for interior mutability; optional; weak ref to parent
children: Vec<Rc<Node<'a>>>, // strong references to children
state: *mut RsvgState,
node_impl: &'a NodeTrait
}
impl<'a> Node<'a> {
// ...

Keybase proof

I hereby claim:

  • I am federicomenaquintero on github.
  • I am federico (https://keybase.io/federico) on keybase.
  • I have a public key whose fingerprint is 263F 590F 7E0F E1CB 3EA2 74B0 1676 37EB 6FB8 DCCE

To claim this, I am signing this object: