use cxx::{type_id, ExternType};
use std::fmt;
#[cxx::bridge]
mod ffi {
unsafe extern "C++" {
include!("cxx-qt-lib/qmargins.h");
type QMargins = crate::QMargins;
include!("cxx-qt-lib/qmarginsf.h");
type QMarginsF = super::QMarginsF;
include!("cxx-qt-lib/qstring.h");
type QString = crate::QString;
fn bottom(self: &QMarginsF) -> f64;
#[rust_name = "is_null"]
fn isNull(self: &QMarginsF) -> bool;
fn left(self: &QMarginsF) -> f64;
fn right(self: &QMarginsF) -> f64;
#[rust_name = "set_bottom"]
fn setBottom(self: &mut QMarginsF, bottom: f64);
#[rust_name = "set_left"]
fn setLeft(self: &mut QMarginsF, left: f64);
#[rust_name = "set_right"]
fn setRight(self: &mut QMarginsF, right: f64);
#[rust_name = "set_top"]
fn setTop(self: &mut QMarginsF, top: f64);
#[rust_name = "to_margins"]
fn toMargins(self: &QMarginsF) -> QMargins;
fn top(self: &QMarginsF) -> f64;
}
#[namespace = "rust::cxxqtlib1"]
unsafe extern "C++" {
include!("cxx-qt-lib/common.h");
#[doc(hidden)]
#[rust_name = "qmarginsf_default"]
fn construct() -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_from_qmargin"]
fn construct(margins: &QMargins) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_new"]
fn construct(left: f64, top: f64, right: f64, bottom: f64) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_to_qstring"]
fn toQString(value: &QMarginsF) -> QString;
#[doc(hidden)]
#[rust_name = "qmarginsf_plus"]
fn operatorPlus(a: &QMarginsF, b: &QMarginsF) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_plus_f64"]
fn operatorPlus(a: &QMarginsF, b: &f64) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_minus"]
fn operatorMinus(a: &QMarginsF, b: &QMarginsF) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_minus_f64"]
fn operatorMinus(a: &QMarginsF, b: &f64) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_mul"]
fn operatorMul(a: f64, b: &QMarginsF) -> QMarginsF;
#[doc(hidden)]
#[rust_name = "qmarginsf_div"]
fn operatorDiv(a: f64, b: &QMarginsF) -> QMarginsF;
}
}
#[derive(Debug, Clone, PartialEq)]
#[repr(C)]
pub struct QMarginsF {
left: f64,
top: f64,
right: f64,
bottom: f64,
}
impl QMarginsF {
pub fn new(left: f64, top: f64, right: f64, bottom: f64) -> Self {
ffi::qmarginsf_new(left, top, right, bottom)
}
}
impl Default for QMarginsF {
fn default() -> Self {
ffi::qmarginsf_default()
}
}
impl fmt::Display for QMarginsF {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", ffi::qmarginsf_to_qstring(self))
}
}
impl std::ops::Add for QMarginsF {
type Output = Self;
fn add(self, other: Self) -> Self {
ffi::qmarginsf_plus(&self, &other)
}
}
impl std::ops::Add<f64> for QMarginsF {
type Output = Self;
fn add(self, other: f64) -> Self {
ffi::qmarginsf_plus_f64(&self, &other)
}
}
impl std::ops::Sub for QMarginsF {
type Output = Self;
fn sub(self, other: Self) -> Self {
ffi::qmarginsf_minus(&self, &other)
}
}
impl std::ops::Sub<f64> for QMarginsF {
type Output = Self;
fn sub(self, other: f64) -> Self {
ffi::qmarginsf_minus_f64(&self, &other)
}
}
impl std::ops::Mul<f64> for QMarginsF {
type Output = Self;
fn mul(self, rhs: f64) -> Self {
ffi::qmarginsf_mul(rhs, &self)
}
}
impl std::ops::Div<f64> for QMarginsF {
type Output = Self;
fn div(self, rhs: f64) -> Self {
ffi::qmarginsf_div(rhs, &self)
}
}
impl From<&ffi::QMargins> for QMarginsF {
fn from(margins: &ffi::QMargins) -> Self {
ffi::qmarginsf_from_qmargin(margins)
}
}
impl From<&QMarginsF> for ffi::QMargins {
fn from(value: &QMarginsF) -> Self {
value.to_margins()
}
}
unsafe impl ExternType for QMarginsF {
type Id = type_id!("QMarginsF");
type Kind = cxx::kind::Trivial;
}