diff options
author | Reizner Evgeniy <razrfalcon@gmail.com> | 2018-02-11 20:35:55 +0200 |
---|---|---|
committer | Reizner Evgeniy <razrfalcon@gmail.com> | 2018-02-11 20:35:55 +0200 |
commit | 74e62ab2722a6385f0c1d2c0558dc793361b5be9 (patch) | |
tree | 1cf4acd0ceba8f4636f614afe47df7ded97ba787 /capi | |
parent | 4513492c512d117a3964b321e3187c73dd2abe02 (diff) |
New method arguments order.
Removed `dpi` field from the tree::Svg struct.
Methods rename.
Diffstat (limited to 'capi')
-rw-r--r-- | capi/include/resvg.h | 54 | ||||
-rw-r--r-- | capi/src/lib.rs | 82 |
2 files changed, 72 insertions, 64 deletions
diff --git a/capi/include/resvg.h b/capi/include/resvg.h index 2c27697..8bfd4ac 100644 --- a/capi/include/resvg.h +++ b/capi/include/resvg.h @@ -10,62 +10,64 @@ #endif -struct resvg_document; -typedef struct resvg_document resvg_document; +struct resvg_render_tree; +typedef struct resvg_render_tree resvg_render_tree; + +typedef struct resvg_rect { + double x; + double y; + double width; + double height; +} resvg_rect; + void resvg_init_log(); /** - * @brief Creates <b>resvg_document</b> from file. + * @brief Creates <b>resvg_render_tree</b> from file. * * .svg and .svgz files are supported. * * @param file_path UTF-8 file path. Will panic on NULL value. * @param dpi Target DPI. Impact units converting and text rendering. * @param error The error string if NULL is returned. Should be destroyed via resvg_error_msg_destroy. - * @return Parsed document. NULL on error. Should be destroyed via resvg_doc_destroy. + * @return Parsed render tree. NULL on error. Should be destroyed via resvg_rtree_destroy. */ -resvg_document *resvg_parse_doc_from_file(const char *file_path, - double dpi, - char **error); +resvg_render_tree *resvg_parse_rtree_from_file(const char *file_path, + double dpi, + char **error); /** - * @brief Creates <b>resvg_document</b> from UTF-8 string. + * @brief Creates <b>resvg_render_tree</b> from UTF-8 string. * * @param text UTF-8 string. Will panic on NULL value. * @param dpi Target DPI. Impact units converting and text rendering. * @param error The error string if NULL is returned. Should be destroyed via resvg_error_msg_destroy. - * @return Parsed document. NULL on error. Should be destroyed via resvg_doc_destroy. + * @return Parsed render tree. NULL on error. Should be destroyed via resvg_rtree_destroy. */ -resvg_document *resvg_parse_doc_from_data(const char *text, - double dpi, - char **error); +resvg_render_tree *resvg_parse_rtree_from_data(const char *text, + double dpi, + char **error); -void resvg_get_image_size(resvg_document *doc, +void resvg_get_image_size(resvg_render_tree *rtree, double *width, double *height); -void resvg_doc_destroy(resvg_document *doc); +void resvg_rtree_destroy(resvg_render_tree *rtree); void resvg_error_msg_destroy(char *msg); #ifdef RESVG_CAIRO_BACKEND -void resvg_cairo_render_to_canvas(cairo_t *cr, - double x, - double y, - double width, - double height, - resvg_document *doc); +void resvg_cairo_render_to_canvas(resvg_render_tree *rtree, + resvg_rect view, + cairo_t *cr); #endif #ifdef RESVG_QT_BACKEND -void resvg_qt_render_to_canvas(void *painter, - double x, - double y, - double width, - double height, - resvg_document *doc); +void resvg_qt_render_to_canvas(resvg_render_tree *rtree, + resvg_rect view, + void *painter); #endif #endif // RESVG_H diff --git a/capi/src/lib.rs b/capi/src/lib.rs index 5630166..bac7491 100644 --- a/capi/src/lib.rs +++ b/capi/src/lib.rs @@ -29,10 +29,16 @@ use resvg::cairo; use resvg::RectExt; +#[repr(C)] +pub struct Rect { + x: f64, + y: f64, + width: f64, + height: f64, +} -// TODO: rename to resvg_render_tree (_t ?) #[repr(C)] -pub struct resvg_document(resvg::tree::RenderTree); +pub struct resvg_render_tree(resvg::tree::RenderTree); macro_rules! on_err { ($err:expr, $msg:expr) => ({ @@ -86,11 +92,11 @@ fn log_format(out: fern::FormatCallback, message: &fmt::Arguments, record: &log: } #[no_mangle] -pub extern fn resvg_parse_doc_from_file( +pub extern fn resvg_parse_rtree_from_file( file_path: *const c_char, dpi: f64, error: *mut *mut c_char, -) -> *mut resvg_document { +) -> *mut resvg_render_tree { let file_path = from_raw_str!( file_path, error, @@ -103,21 +109,21 @@ pub extern fn resvg_parse_doc_from_file( .. resvg::Options::default() }; - let doc = match resvg::parse_doc_from_file(file_path, &opt) { - Ok(doc) => doc, + let rtree = match resvg::parse_rtree_from_file(file_path, &opt) { + Ok(rtree) => rtree, Err(e) => on_err!(error, e.to_string()), }; - let doc_box = Box::new(resvg_document(doc)); - Box::into_raw(doc_box) + let rtree_box = Box::new(resvg_render_tree(rtree)); + Box::into_raw(rtree_box) } #[no_mangle] -pub extern fn resvg_parse_doc_from_data( +pub extern fn resvg_parse_rtree_from_data( text: *const c_char, dpi: f64, error: *mut *mut c_char, -) -> *mut resvg_document { +) -> *mut resvg_render_tree { let text = from_raw_str!( text, error, @@ -129,13 +135,13 @@ pub extern fn resvg_parse_doc_from_data( .. resvg::Options::default() }; - let doc = match resvg::parse_doc_from_data(text, &opt) { - Ok(doc) => doc, + let rtree = match resvg::parse_rtree_from_data(text, &opt) { + Ok(rtree) => rtree, Err(e) => on_err!(error, e.to_string()), }; - let doc_box = Box::new(resvg_document(doc)); - Box::into_raw(doc_box) + let rtree_box = Box::new(resvg_render_tree(rtree)); + Box::into_raw(rtree_box) } #[no_mangle] @@ -147,66 +153,66 @@ pub extern fn resvg_error_msg_destroy(msg: *mut c_char) { } #[no_mangle] -pub extern fn resvg_doc_destroy(doc: *mut resvg_document) { +pub extern fn resvg_rtree_destroy(rtree: *mut resvg_render_tree) { unsafe { - assert!(!doc.is_null()); - Box::from_raw(doc) + assert!(!rtree.is_null()); + Box::from_raw(rtree) }; } #[cfg(feature = "qt-backend")] #[no_mangle] pub extern fn resvg_qt_render_to_canvas( + rtree: *mut resvg_render_tree, + view: Rect, painter: *mut qt::qtc_qpainter, - x: f64, - y: f64, - width: f64, - height: f64, - doc: *mut resvg_document, ) { let rtree = unsafe { - assert!(!doc.is_null()); - &mut *doc + assert!(!rtree.is_null()); + &mut *rtree }; let painter = unsafe { qt::Painter::from_raw(painter) }; - let rect = resvg::Rect::from_xywh(x, y, width, height); + let rect = resvg::Rect::from_xywh(view.x, view.y, view.width, view.height); - resvg::render_qt::render_to_canvas(&painter, rect, &rtree.0); + // TODO: to a proper options + let opt = resvg::Options::default(); + + resvg::render_qt::render_to_canvas(&rtree.0, &opt, rect, &painter); } #[cfg(feature = "cairo-backend")] #[no_mangle] pub extern fn resvg_cairo_render_to_canvas( + rtree: *mut resvg_render_tree, + view: Rect, cr: *mut cairo_sys::cairo_t, - x: f64, - y: f64, - width: f64, - height: f64, - doc: *mut resvg_document, ) { let rtree = unsafe { - assert!(!doc.is_null()); - &mut *doc + assert!(!rtree.is_null()); + &mut *rtree }; use glib::translate::FromGlibPtrNone; let cr = unsafe { cairo::Context::from_glib_none(cr) }; - let rect = resvg::Rect::from_xywh(x, y, width, height); + let rect = resvg::Rect::from_xywh(view.x, view.y, view.width, view.height); + + // TODO: to a proper options + let opt = resvg::Options::default(); - resvg::render_cairo::render_to_canvas(&cr, rect, &rtree.0); + resvg::render_cairo::render_to_canvas(&rtree.0, &opt, rect, &cr); } #[no_mangle] pub extern fn resvg_get_image_size( - doc: *mut resvg_document, + rtree: *mut resvg_render_tree, width: *mut f64, height: *mut f64, ) { let rtree = unsafe { - assert!(!doc.is_null()); - &mut *doc + assert!(!rtree.is_null()); + &mut *rtree }; let size = rtree.0.svg_node().size; |