Skip to content

Commit 34d2045

Browse files
committed
refactor(qt): simplify impl_static_cast
1 parent ee8d566 commit 34d2045

8 files changed

Lines changed: 20 additions & 71 deletions

File tree

src/ui/qt/button.rs

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -162,37 +162,17 @@ unsafe impl ExternType for QtCheckState {
162162
type Kind = cxx::kind::Trivial;
163163
}
164164

165-
impl_static_cast!(
166-
ffi::QAbstractButton,
167-
ffi::QWidget,
168-
ffi::static_cast_QAbstractButton_QWidget,
169-
ffi::static_cast_mut_QAbstractButton_QWidget
170-
);
171-
172-
impl_static_cast!(
173-
ffi::QPushButton,
174-
ffi::QAbstractButton,
175-
ffi::static_cast_QPushButton_QAbstractButton,
176-
ffi::static_cast_mut_QPushButton_QAbstractButton
177-
);
165+
impl_static_cast!(ffi::QAbstractButton, ffi::QWidget);
166+
167+
impl_static_cast!(ffi::QPushButton, ffi::QAbstractButton);
178168

179169
impl_static_cast_propogate!(ffi::QPushButton, ffi::QAbstractButton, ffi::QWidget);
180170

181-
impl_static_cast!(
182-
ffi::QCheckBox,
183-
ffi::QAbstractButton,
184-
ffi::static_cast_QCheckBox_QAbstractButton,
185-
ffi::static_cast_mut_QCheckBox_QAbstractButton
186-
);
171+
impl_static_cast!(ffi::QCheckBox, ffi::QAbstractButton);
187172

188173
impl_static_cast_propogate!(ffi::QCheckBox, ffi::QAbstractButton, ffi::QWidget);
189174

190-
impl_static_cast!(
191-
ffi::QRadioButton,
192-
ffi::QAbstractButton,
193-
ffi::static_cast_QRadioButton_QAbstractButton,
194-
ffi::static_cast_mut_QRadioButton_QAbstractButton
195-
);
175+
impl_static_cast!(ffi::QRadioButton, ffi::QAbstractButton);
196176

197177
impl_static_cast_propogate!(ffi::QRadioButton, ffi::QAbstractButton, ffi::QWidget);
198178

src/ui/qt/combo_box.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,7 @@ impl<const E: bool> ComboBoxImpl<E> {
142142
pub type ComboBox = ComboBoxImpl<false>;
143143
pub type ComboEntry = ComboBoxImpl<true>;
144144

145-
impl_static_cast!(
146-
ffi::QComboBox,
147-
ffi::QWidget,
148-
ffi::static_cast_QComboBox_QWidget,
149-
ffi::static_cast_mut_QComboBox_QWidget
150-
);
145+
impl_static_cast!(ffi::QComboBox, ffi::QWidget);
151146

152147
#[cxx::bridge]
153148
mod ffi {

src/ui/qt/edit.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,19 +269,9 @@ unsafe impl ExternType for QLineEditEchoMode {
269269
type Kind = cxx::kind::Trivial;
270270
}
271271

272-
impl_static_cast!(
273-
ffi::QLineEdit,
274-
ffi::QWidget,
275-
ffi::static_cast_QLineEdit_QWidget,
276-
ffi::static_cast_mut_QLineEdit_QWidget
277-
);
278-
279-
impl_static_cast!(
280-
ffi::QTextEdit,
281-
ffi::QWidget,
282-
ffi::static_cast_QTextEdit_QWidget,
283-
ffi::static_cast_mut_QTextEdit_QWidget
284-
);
272+
impl_static_cast!(ffi::QLineEdit, ffi::QWidget);
273+
274+
impl_static_cast!(ffi::QTextEdit, ffi::QWidget);
285275

286276
#[cxx::bridge]
287277
mod ffi {

src/ui/qt/label.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,7 @@ impl Label {
9090
}
9191
}
9292

93-
impl_static_cast!(
94-
ffi::QLabel,
95-
ffi::QWidget,
96-
ffi::static_cast_QLabel_QWidget,
97-
ffi::static_cast_mut_QLabel_QWidget
98-
);
93+
impl_static_cast!(ffi::QLabel, ffi::QWidget);
9994

10095
#[cxx::bridge]
10196
mod ffi {

src/ui/qt/list_box.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,7 @@ impl ListBox {
126126
}
127127
}
128128

129-
impl_static_cast!(
130-
ffi::QListWidget,
131-
ffi::QWidget,
132-
ffi::static_cast_QListWidget_QWidget,
133-
ffi::static_cast_mut_QListWidget_QWidget
134-
);
129+
impl_static_cast!(ffi::QListWidget, ffi::QWidget);
135130

136131
#[cxx::bridge]
137132
mod ffi {

src/ui/qt/mod.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,18 @@ impl<T> StaticCastTo<T> for T {
6868
}
6969

7070
macro_rules! impl_static_cast {
71-
($t:ty, $tbase:ty, $f:expr, $fmut:expr) => {
71+
($t:ty, $tbase:ty) => {
7272
impl $crate::ui::StaticCastTo<$tbase> for $t {
7373
fn static_cast(&self) -> &$tbase {
74-
unsafe { std::mem::transmute(self) }
74+
unsafe { &*(self as *const Self).cast() }
7575
}
7676

7777
fn static_cast_mut(self: ::std::pin::Pin<&mut Self>) -> ::std::pin::Pin<&mut $tbase> {
78-
unsafe { std::mem::transmute(self) }
78+
unsafe {
79+
::std::pin::Pin::new_unchecked(
80+
&mut *(self.get_unchecked_mut() as *mut Self).cast(),
81+
)
82+
}
7983
}
8084
}
8185
};

src/ui/qt/progress.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,7 @@ impl Progress {
8585
}
8686
}
8787

88-
impl_static_cast!(
89-
ffi::QProgressBar,
90-
ffi::QWidget,
91-
ffi::static_cast_QProgressBar_QWidget,
92-
ffi::static_cast_mut_QProgressBar_QWidget
93-
);
88+
impl_static_cast!(ffi::QProgressBar, ffi::QWidget);
9489

9590
#[cxx::bridge]
9691
mod ffi {

src/ui/qt/window.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,7 @@ impl Drop for Window {
143143
}
144144
}
145145

146-
impl_static_cast!(
147-
ffi::QMainWindow,
148-
ffi::QWidget,
149-
ffi::static_cast_QMainWindow_QWidget,
150-
ffi::static_cast_mut_QMainWindow_QWidget
151-
);
146+
impl_static_cast!(ffi::QMainWindow, ffi::QWidget);
152147

153148
#[cxx::bridge]
154149
mod ffi {

0 commit comments

Comments
 (0)