use std::cell::Cell;
use std::rc::Rc;
#[allow(unused_imports)]
use std::marker::PhantomData;
#[allow(unused_imports)]
use std::os::raw::c_void;
#[allow(unused_imports)]
use std::mem::transmute;
#[allow(unused_imports)]
use std::ffi::{CString, CStr};
use rute_ffi_base::*;
#[allow(unused_imports)]
use auto::*;
#[derive(Clone)]
pub struct PainterPath<'a> {
pub data: Rc<Cell<Option<*const RUBase>>>,
pub all_funcs: *const RUPainterPathAllFuncs,
pub owned: bool,
pub _marker: PhantomData<::std::cell::Cell<&'a ()>>,
}
impl <'a>PainterPath<'a> {
pub fn new() -> PainterPath<'a> {
let data = Rc::new(Cell::new(None));
let ffi_data = unsafe {
((*rute_ffi_get()).create_painter_path)(
::std::ptr::null(),
transmute(rute_object_delete_callback as usize),
Rc::into_raw(data.clone()) as *const c_void)
};
data.set(Some(ffi_data.qt_data));
PainterPath {
data,
all_funcs: ffi_data.all_funcs,
owned: true,
_marker: PhantomData,
}
}
pub fn new_from_rc(ffi_data: RUPainterPath) -> PainterPath<'a> {
PainterPath {
data: unsafe { Rc::from_raw(ffi_data.host_data as *const Cell<Option<*const RUBase>>) },
all_funcs: ffi_data.all_funcs,
owned: false,
_marker: PhantomData,
}
}
pub fn new_from_owned(ffi_data: RUPainterPath) -> PainterPath<'a> {
PainterPath {
data: Rc::new(Cell::new(Some(ffi_data.qt_data as *const RUBase))),
all_funcs: ffi_data.all_funcs,
owned: true,
_marker: PhantomData,
}
}
pub fn new_from_temporary(ffi_data: RUPainterPath) -> PainterPath<'a> {
PainterPath {
data: Rc::new(Cell::new(Some(ffi_data.qt_data as *const RUBase))),
all_funcs: ffi_data.all_funcs,
owned: false,
_marker: PhantomData,
}
}
}
pub trait PainterPathType<'a> {
fn swap<P: PainterPathType<'a>>(&self, other: &P) -> &Self {
let (obj_other_1, _funcs) = other.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).swap)(obj_data, obj_other_1);
}
self
}
fn close_subpath(&self) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).close_subpath)(obj_data);
}
self
}
fn move_to<P: PointFType<'a>>(&self, p: &P) -> &Self {
let (obj_p_1, _funcs) = p.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).move_to)(obj_data, obj_p_1);
}
self
}
fn move_to(&self, x: f32, y: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).move_to)(obj_data, x, y);
}
self
}
fn line_to<P: PointFType<'a>>(&self, p: &P) -> &Self {
let (obj_p_1, _funcs) = p.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).line_to)(obj_data, obj_p_1);
}
self
}
fn line_to(&self, x: f32, y: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).line_to)(obj_data, x, y);
}
self
}
fn arc_move_to<R: RectFType<'a>>(&self, rect: &R, angle: f32) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).arc_move_to)(obj_data, obj_rect_1, angle);
}
self
}
fn arc_move_to(&self, x: f32, y: f32, w: f32, h: f32, angle: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).arc_move_to)(obj_data, x, y, w, h, angle);
}
self
}
fn arc_to<R: RectFType<'a>>(&self, rect: &R, start_angle: f32, arc_length: f32) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).arc_to)(obj_data, obj_rect_1, start_angle, arc_length);
}
self
}
fn arc_to(&self, x: f32, y: f32, w: f32, h: f32, start_angle: f32, arc_length: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).arc_to)(obj_data, x, y, w, h, start_angle, arc_length);
}
self
}
fn cubic_to<P: PointFType<'a>>(&self, ctrl_pt1: &P, ctrl_pt2: &P, end_pt: &P) -> &Self {
let (obj_ctrl_pt1_1, _funcs) = ctrl_pt1.get_point_f_obj_funcs();
let (obj_ctrl_pt2_2, _funcs) = ctrl_pt2.get_point_f_obj_funcs();
let (obj_end_pt_3, _funcs) = end_pt.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).cubic_to)(obj_data, obj_ctrl_pt1_1, obj_ctrl_pt2_2, obj_end_pt_3);
}
self
}
fn cubic_to(&self, ctrl_pt1x: f32, ctrl_pt1y: f32, ctrl_pt2x: f32, ctrl_pt2y: f32, end_ptx: f32, end_pty: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).cubic_to)(obj_data, ctrl_pt1x, ctrl_pt1y, ctrl_pt2x, ctrl_pt2y, end_ptx, end_pty);
}
self
}
fn quad_to<P: PointFType<'a>>(&self, ctrl_pt: &P, end_pt: &P) -> &Self {
let (obj_ctrl_pt_1, _funcs) = ctrl_pt.get_point_f_obj_funcs();
let (obj_end_pt_2, _funcs) = end_pt.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).quad_to)(obj_data, obj_ctrl_pt_1, obj_end_pt_2);
}
self
}
fn quad_to(&self, ctrl_ptx: f32, ctrl_pty: f32, end_ptx: f32, end_pty: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).quad_to)(obj_data, ctrl_ptx, ctrl_pty, end_ptx, end_pty);
}
self
}
fn current_position(&self) -> PointF {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).current_position)(obj_data);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PointF::new_from_rc(t);
} else {
ret_val = PointF::new_from_owned(t);
}
ret_val
}
}
fn add_rect<R: RectFType<'a>>(&self, rect: &R) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_rect)(obj_data, obj_rect_1);
}
self
}
fn add_rect(&self, x: f32, y: f32, w: f32, h: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_rect)(obj_data, x, y, w, h);
}
self
}
fn add_ellipse<R: RectFType<'a>>(&self, rect: &R) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_ellipse)(obj_data, obj_rect_1);
}
self
}
fn add_ellipse(&self, x: f32, y: f32, w: f32, h: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_ellipse)(obj_data, x, y, w, h);
}
self
}
fn add_ellipse<P: PointFType<'a>>(&self, center: &P, rx: f32, ry: f32) -> &Self {
let (obj_center_1, _funcs) = center.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_ellipse)(obj_data, obj_center_1, rx, ry);
}
self
}
fn add_polygon<P: PolygonFType<'a>>(&self, polygon: &P) -> &Self {
let (obj_polygon_1, _funcs) = polygon.get_polygon_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_polygon)(obj_data, obj_polygon_1);
}
self
}
fn add_text<F: FontType<'a>, P: PointFType<'a>>(&self, point: &P, f: &F, text: &str) -> &Self {
let (obj_point_1, _funcs) = point.get_point_f_obj_funcs();
let (obj_f_2, _funcs) = f.get_font_obj_funcs();
let str_in_text_3 = CString::new(text).unwrap();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_text)(obj_data, obj_point_1, obj_f_2, str_in_text_3.as_ptr());
}
self
}
fn add_text<F: FontType<'a>>(&self, x: f32, y: f32, f: &F, text: &str) -> &Self {
let (obj_f_3, _funcs) = f.get_font_obj_funcs();
let str_in_text_4 = CString::new(text).unwrap();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_text)(obj_data, x, y, obj_f_3, str_in_text_4.as_ptr());
}
self
}
fn add_path<P: PainterPathType<'a>>(&self, path: &P) -> &Self {
let (obj_path_1, _funcs) = path.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_path)(obj_data, obj_path_1);
}
self
}
fn add_region<R: RegionType<'a>>(&self, region: &R) -> &Self {
let (obj_region_1, _funcs) = region.get_region_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_region)(obj_data, obj_region_1);
}
self
}
fn add_rounded_rect<R: RectFType<'a>>(&self, rect: &R, x_radius: f32, y_radius: f32, mode: SizeMode) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let enum_mode_4 = mode as i32;
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_rounded_rect)(obj_data, obj_rect_1, x_radius, y_radius, enum_mode_4);
}
self
}
fn add_rounded_rect(&self, x: f32, y: f32, w: f32, h: f32, x_radius: f32, y_radius: f32, mode: SizeMode) -> &Self {
let enum_mode_7 = mode as i32;
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_rounded_rect)(obj_data, x, y, w, h, x_radius, y_radius, enum_mode_7);
}
self
}
fn add_round_rect<R: RectFType<'a>>(&self, rect: &R, x_rnd: i32, y_rnd: i32) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_round_rect)(obj_data, obj_rect_1, x_rnd, y_rnd);
}
self
}
fn add_round_rect(&self, x: f32, y: f32, w: f32, h: f32, x_rnd: i32, y_rnd: i32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_round_rect)(obj_data, x, y, w, h, x_rnd, y_rnd);
}
self
}
fn add_round_rect<R: RectFType<'a>>(&self, rect: &R, roundness: i32) -> &Self {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_round_rect)(obj_data, obj_rect_1, roundness);
}
self
}
fn add_round_rect(&self, x: f32, y: f32, w: f32, h: f32, roundness: i32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).add_round_rect)(obj_data, x, y, w, h, roundness);
}
self
}
fn connect_path<P: PainterPathType<'a>>(&self, path: &P) -> &Self {
let (obj_path_1, _funcs) = path.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).connect_path)(obj_data, obj_path_1);
}
self
}
fn contains<P: PointFType<'a>>(&self, pt: &P) -> bool {
let (obj_pt_1, _funcs) = pt.get_point_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).contains)(obj_data, obj_pt_1);
ret_val
}
}
fn contains<R: RectFType<'a>>(&self, rect: &R) -> bool {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).contains)(obj_data, obj_rect_1);
ret_val
}
}
fn intersects<R: RectFType<'a>>(&self, rect: &R) -> bool {
let (obj_rect_1, _funcs) = rect.get_rect_f_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).intersects)(obj_data, obj_rect_1);
ret_val
}
}
fn bounding_rect(&self) -> RectF {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).bounding_rect)(obj_data);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = RectF::new_from_rc(t);
} else {
ret_val = RectF::new_from_owned(t);
}
ret_val
}
}
fn fill_rule(&self) -> FillRule {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).fill_rule)(obj_data);
let ret_val = { transmute::<i32, FillRule>(ret_val) };
ret_val
}
}
fn set_fill_rule(&self, fill_rule: FillRule) -> &Self {
let enum_fill_rule_1 = fill_rule as i32;
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).set_fill_rule)(obj_data, enum_fill_rule_1);
}
self
}
fn is_empty(&self) -> bool {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).is_empty)(obj_data);
ret_val
}
}
fn to_reversed(&self) -> PainterPath {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_reversed)(obj_data);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PainterPath::new_from_rc(t);
} else {
ret_val = PainterPath::new_from_owned(t);
}
ret_val
}
}
fn to_subpath_polygons<M: MatrixType<'a>>(&self, matrix: &M) -> RefArray<PolygonF, WrapperRcOwn> {
let (obj_matrix_1, _funcs) = matrix.get_matrix_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_subpath_polygons)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn to_fill_polygons<M: MatrixType<'a>>(&self, matrix: &M) -> RefArray<PolygonF, WrapperRcOwn> {
let (obj_matrix_1, _funcs) = matrix.get_matrix_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_fill_polygons)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn to_fill_polygon<M: MatrixType<'a>>(&self, matrix: &M) -> PolygonF {
let (obj_matrix_1, _funcs) = matrix.get_matrix_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_fill_polygon)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn to_subpath_polygons<T: TransformType<'a>>(&self, matrix: &T) -> RefArray<PolygonF, WrapperRcOwn> {
let (obj_matrix_1, _funcs) = matrix.get_transform_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_subpath_polygons)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn to_fill_polygons<T: TransformType<'a>>(&self, matrix: &T) -> RefArray<PolygonF, WrapperRcOwn> {
let (obj_matrix_1, _funcs) = matrix.get_transform_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_fill_polygons)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn to_fill_polygon<T: TransformType<'a>>(&self, matrix: &T) -> PolygonF {
let (obj_matrix_1, _funcs) = matrix.get_transform_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).to_fill_polygon)(obj_data, obj_matrix_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PolygonF::new_from_rc(t);
} else {
ret_val = PolygonF::new_from_owned(t);
}
ret_val
}
}
fn element_count(&self) -> i32 {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).element_count)(obj_data);
ret_val
}
}
fn element_at(&self, i: i32) -> Element {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).element_at)(obj_data, i);
let ret_val = { transmute::<i32, Element>(ret_val) };
ret_val
}
}
fn set_element_position_at(&self, i: i32, x: f32, y: f32) -> &Self {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
((*funcs).set_element_position_at)(obj_data, i, x, y);
}
self
}
fn length(&self) -> f32 {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).length)(obj_data);
ret_val
}
}
fn percent_at_length(&self, t: f32) -> f32 {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).percent_at_length)(obj_data, t);
ret_val
}
}
fn point_at_percent(&self, t: f32) -> PointF {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).point_at_percent)(obj_data, t);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PointF::new_from_rc(t);
} else {
ret_val = PointF::new_from_owned(t);
}
ret_val
}
}
fn angle_at_percent(&self, t: f32) -> f32 {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).angle_at_percent)(obj_data, t);
ret_val
}
}
fn slope_at_percent(&self, t: f32) -> f32 {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).slope_at_percent)(obj_data, t);
ret_val
}
}
fn intersects<P: PainterPathType<'a>>(&self, p: &P) -> bool {
let (obj_p_1, _funcs) = p.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).intersects)(obj_data, obj_p_1);
ret_val
}
}
fn contains<P: PainterPathType<'a>>(&self, p: &P) -> bool {
let (obj_p_1, _funcs) = p.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).contains)(obj_data, obj_p_1);
ret_val
}
}
fn united<P: PainterPathType<'a>>(&self, r: &P) -> PainterPath {
let (obj_r_1, _funcs) = r.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).united)(obj_data, obj_r_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PainterPath::new_from_rc(t);
} else {
ret_val = PainterPath::new_from_owned(t);
}
ret_val
}
}
fn intersected<P: PainterPathType<'a>>(&self, r: &P) -> PainterPath {
let (obj_r_1, _funcs) = r.get_painter_path_obj_funcs();
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).intersected)(obj_data, obj_r_1);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PainterPath::new_from_rc(t);
} else {
ret_val = PainterPath::new_from_owned(t);
}
ret_val
}
}
fn simplified(&self) -> PainterPath {
let (obj_data, funcs) = self.get_painter_path_obj_funcs();
unsafe {
let ret_val = ((*funcs).simplified)(obj_data);
let t = ret_val;
let ret_val;
if t.host_data != ::std::ptr::null() {
ret_val = PainterPath::new_from_rc(t);
} else {
ret_val = PainterPath::new_from_owned(t);
}
ret_val
}
}
#[inline]
fn get_painter_path_obj_funcs(&self) -> (*const RUBase, *const RUPainterPathFuncs);
}
impl<'a> PainterPathType<'a> for PainterPath<'a> {
#[inline]
fn get_painter_path_obj_funcs(&self) -> (*const RUBase, *const RUPainterPathFuncs) {
let obj = self.data.get().unwrap();
unsafe {
(obj, (*self.all_funcs).painter_path_funcs)
}
}
}