diff options
author | Timm Bäder <mail@baedert.org> | 2018-11-29 10:39:28 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2019-02-14 06:57:23 +0100 |
commit | bcd6f0b75f8f02c476060e58ebec8ce93f111a5a (patch) | |
tree | c465d81b3f52966521da60ade05b087997476a40 | |
parent | 57cd3391f60267290a508df135b9692ca41fafa2 (diff) | |
download | gtk+-bcd6f0b75f8f02c476060e58ebec8ce93f111a5a.tar.gz |
testwidgettransforms: Set transformation in size_allocate
-rw-r--r-- | tests/testwidgettransforms.c | 90 |
1 files changed, 34 insertions, 56 deletions
diff --git a/tests/testwidgettransforms.c b/tests/testwidgettransforms.c index 1da36cc7b8..fe5e182353 100644 --- a/tests/testwidgettransforms.c +++ b/tests/testwidgettransforms.c @@ -106,8 +106,30 @@ gtk_transform_tester_size_allocate (GtkWidget *widget, int baseline) { GtkTransformTester *self = (GtkTransformTester *)widget; + int w, h; - gtk_widget_size_allocate (self->test_widget, &(GtkAllocation){ 0, 0, width, height }, -1); + if (!self->test_widget) + return; + + scale += 2.5f; + + gtk_widget_measure (self->test_widget, GTK_ORIENTATION_HORIZONTAL, -1, + &w, NULL, NULL, NULL); + gtk_widget_measure (self->test_widget, GTK_ORIENTATION_VERTICAL, w, + &h, NULL, NULL, NULL); + + graphene_matrix_init_identity (&global_transform); + graphene_matrix_translate (&global_transform, &(graphene_point3d_t){ -w/2.0f, -h/2.0f, 0}); + + graphene_matrix_rotate (&global_transform, scale, + graphene_vec3_z_axis ()); + + graphene_matrix_translate (&global_transform, &(graphene_point3d_t){ width / 2.0f, height / 2.0f, 0}); + + gtk_widget_size_allocate_transformed (self->test_widget, + w, h, + -1, + &global_transform); } static void @@ -234,6 +256,16 @@ gtk_transform_tester_class_init (GtkTransformTesterClass *klass) gtk_widget_class_set_css_name (widget_class, "test"); } +static gboolean +tick_cb (GtkWidget *widget, + GdkFrameClock *frame_clock, + gpointer user_data) +{ + gtk_widget_queue_allocate (widget); + + return G_SOURCE_CONTINUE; +} + static void gtk_transform_tester_set_test_widget (GtkTransformTester *self, GtkWidget *test_widget) @@ -242,60 +274,8 @@ gtk_transform_tester_set_test_widget (GtkTransformTester *self, self->test_widget = test_widget; gtk_widget_set_parent (test_widget, (GtkWidget *)self); -} - -static gboolean -transform_func (gpointer user_data) -{ - GtkAllocation alloc; - - scale += 2.5f; - gtk_widget_get_allocation (test_widget, &alloc); - - graphene_matrix_init_identity (&global_transform); - graphene_matrix_translate (&global_transform, - &(graphene_point3d_t){ - /*- alloc.width,*/ - /*0,*/ - - alloc.width / 2, - - alloc.height / 2, - 0} - ); - - graphene_matrix_rotate (&global_transform, scale, - graphene_vec3_z_axis ()); - - graphene_matrix_translate (&global_transform, - &(graphene_point3d_t){ - alloc.width / 2, - alloc.height /2, - 0} - ); - - /*graphene_matrix_init_scale (&global_transform, 2, 2, 1);*/ - - - gtk_widget_set_transform (test_widget, &global_transform); - - - - - - /*graphene_matrix_init_scale (&global_transform, 0.5, 1, 1);*/ - /*graphene_matrix_translate (&global_transform,*/ - /*&(graphene_point3d_t){*/ - /*alloc.width / 2, 0, 0*/ - /*});*/ - - - - /*gtk_widget_set_transform (test_child, &global_transform);*/ - - - gtk_widget_queue_draw (test_widget); - - return G_SOURCE_CONTINUE; + gtk_widget_add_tick_callback (GTK_WIDGET (self), tick_cb, NULL, NULL); } static void @@ -354,8 +334,6 @@ main (int argc, char **argv) gtk_transform_tester_set_test_widget (GTK_TRANSFORM_TESTER (transform_tester), test_widget); - g_timeout_add (16, transform_func, NULL); - gtk_widget_set_vexpand (transform_tester, TRUE); gtk_container_add (GTK_CONTAINER (box), transform_tester); gtk_container_add (GTK_CONTAINER (box), matrix_chooser); |