Widget root{ui::null};
#define IMPL(T, F) template<> _IMPL(T, F)
-#define _IMPL(T, F) struct verify<T *> { using self = T; static self test(self it) { return self(F(it)); } }
+#define _IMPL(T, F) struct verify<T *> { using self = T; static self test(self it) { return self::from(F(it)); } }
template<class T>
struct verify;
template<class T> _IMPL(T,);
-#define this (verify<self>::test(*static_cast<self>(this)))
+ template<class T>
+ using pointer_remove_const = std::add_pointer<
+ typename std::remove_const<
+ typename std::remove_pointer<T>::type
+ >::type
+ >;
+
+#define this (verify<self>::test(*static_cast<self>(const_cast<pointer_remove_const<decltype(this)>::type>(this))))
IMPL(Editable, GTK_EDITABLE);
void IEditable::editable(bool value)
{
- gtk_editable_set_editable(GTK_EDITABLE(this), value);
+ gtk_editable_set_editable(this, value);
}
+ IMPL(TreeModel, GTK_TREE_MODEL);
+
IMPL(Widget, GTK_WIDGET);
Widget::Widget(ui::New_t) : Widget(nullptr)
delete data;
};
auto func = [](_GtkWidget *widget, GdkEventKey *event, user_data *args) -> bool {
- return args->f(Widget(widget), event, args->extra);
+ return args->f(Widget::from(widget), event, args->extra);
};
auto clos = g_cclosure_new(G_CALLBACK(+func), pass, reinterpret_cast<GClosureNotify>(+dtor));
return g_signal_connect_closure(G_OBJECT(this), "key-press-event", clos, false);
IMPL(ToggleButton, GTK_TOGGLE_BUTTON);
- bool IToggleButton::active()
+ bool IToggleButton::active() const
{
- return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(this)) != 0;
+ return gtk_toggle_button_get_active(this) != 0;
+ }
+
+ void IToggleButton::active(bool value)
+ {
+ gtk_toggle_button_set_active(this, value);
}
IMPL(CheckButton, GTK_CHECK_BUTTON);
gtk_list_store_append(this, nullptr);
}
+ IMPL(TreeStore, GTK_TREE_STORE);
+
// IMPL(TreePath, GTK_TREE_PATH);
TreePath::TreePath(ui::New_t) : TreePath(gtk_tree_path_new())
// Custom
+#if GTK_TARGET == 3
+
+ IMPL(GLArea, (void *));
+
+#elif GTK_TARGET == 2
+
+ IMPL(GLArea, GTK_DRAWING_AREA);
+
+#endif
+
guint IGLArea::on_render(GCallback pFunction, void *data)
{
#if GTK_TARGET == 3