static void _mouse_up_animation(void *data, const Efl_Event *event) { Efl_Ui_Pager_Data *pd = data; double p = ecore_loop_time_get() - pd->mouse_up_time; if (p >= 1.0) p = 1.0; p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0); if (pd->curr.pos < 0.0) { if (pd->curr.pos > -0.5) pd->curr.pos = pd->curr.pos * (1 - p); else pd->curr.pos = (-1) - (-1 - pd->curr.pos) * (1 - p); } else { if (pd->curr.pos < 0.5) pd->curr.pos = pd->curr.pos * (1 - p); else pd->curr.pos = 1 - (1 - pd->curr.pos) * (1 - p); } if (EINA_DBL_EQ(pd->curr.pos, 1.0)) { efl_page_transition_curr_page_change(pd->transition, 1); pd->curr.page = (pd->curr.page + 1 + pd->cnt) % pd->cnt; pd->curr.pos = 0.0; } else if (EINA_DBL_EQ(pd->curr.pos, -1.0)) { efl_page_transition_curr_page_change(pd->transition, -1); pd->curr.page = (pd->curr.page - 1 + pd->cnt) % pd->cnt; pd->curr.pos = 0.0; } _efl_ui_pager_update(pd); if (EINA_DBL_EQ(p, 1.0)) efl_event_callback_del(event->object, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd); }
END_TEST START_TEST(eina_matrix3) { Eina_Bool ret; Eina_Matrix3 m, m1, m2; double xx, xy, xz, yx, yy, yz, zx, zy, zz; eina_init(); eina_matrix3_values_set(&m, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 0, 1, 0, 0, 0, 1); fail_if(eina_matrix3_type_get(&m) != EINA_MATRIX_TYPE_IDENTITY); eina_matrix3_values_get(&m, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, zz) || !EINA_DBL_EQ(zz, 1)); fail_if(!EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, 0)); ret = eina_matrix3_equal(&m, &m1); fail_if(ret != EINA_TRUE); ret = eina_matrix3_equal(&m1, &m2); fail_if(ret != EINA_FALSE); eina_shutdown(); }
static void _page_set_animation(void *data, const Efl_Event *event) { Efl_Ui_Pager_Data *pd = data; double p = ecore_loop_time_get() - pd->change.start_time; double d, temp_pos; int temp_page; if (p >= 1.0) p = 1.0; p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0); d = pd->change.src + pd->change.delta * p; temp_page = d; temp_pos = d - temp_page; if ((temp_page < pd->curr.page) && (fabs(pd->curr.page - d) < 1.0)) { temp_page += 1; temp_pos -= 1.0; } if (pd->curr.page != temp_page) { if (pd->change.delta < 0) efl_page_transition_curr_page_change(pd->transition, -1); else efl_page_transition_curr_page_change(pd->transition, 1); temp_pos = 0.0; } pd->curr.page = temp_page; pd->curr.pos = temp_pos; ERR("page %d pos %lf", pd->curr.page, pd->curr.pos); _efl_ui_pager_update(pd); if (EINA_DBL_EQ(p, 1.0)) efl_event_callback_del(event->object, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _page_set_animation, pd); }
static void _mouse_up_cb(void *data, const Efl_Event *event) { Efl_Input_Pointer *ev = event->info; Eo *obj = data; EFL_UI_PAGER_DATA_GET(obj, pd); if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return; if (!pd->down.enabled) return; pd->down.enabled = EINA_FALSE; ELM_SAFE_FREE(pd->job, ecore_job_del); if (EINA_DBL_EQ(pd->curr.pos, 0.0)) return; pd->mouse_up_time = ecore_loop_time_get(); efl_event_callback_add(obj, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd); }
static void _create_data(E_Dialog *cfd, E_Client *ec) { E_Config_Dialog_Data *cfdata; char buf[4096]; cfdata = E_NEW(E_Config_Dialog_Data, 1); cfdata->client = ec; ec->border_prop_dialog = cfd; #define IFDUP(prop, dest) \ if (cfdata->client->prop) \ cfdata->dest = strdup(cfdata->client->prop) IFDUP(icccm.title, icccm.title); IFDUP(icccm.name, icccm.name); IFDUP(icccm.class, icccm.class); IFDUP(icccm.icon_name, icccm.icon_name); IFDUP(icccm.machine, icccm.machine); IFDUP(icccm.window_role, icccm.role); if (cfdata->client->icccm.min_w >= 0) { snprintf(buf, sizeof(buf), _("%i×%i"), cfdata->client->icccm.min_w, cfdata->client->icccm.min_h); cfdata->icccm.min = strdup(buf); } if (cfdata->client->icccm.max_w >= 0) { snprintf(buf, sizeof(buf), _("%i×%i"), cfdata->client->icccm.max_w, cfdata->client->icccm.max_h); cfdata->icccm.max = strdup(buf); } if (cfdata->client->icccm.base_w >= 0) { snprintf(buf, sizeof(buf), _("%i×%i"), cfdata->client->icccm.base_w, cfdata->client->icccm.base_h); cfdata->icccm.base = strdup(buf); } if (cfdata->client->icccm.step_w >= 0) { snprintf(buf, sizeof(buf), _("%i,%i"), cfdata->client->icccm.step_w, cfdata->client->icccm.step_h); cfdata->icccm.step = strdup(buf); } if ((cfdata->client->icccm.min_aspect > 0.0) && (cfdata->client->icccm.max_aspect > 0.0)) { if (EINA_DBL_EQ(cfdata->client->icccm.min_aspect, cfdata->client->icccm.max_aspect)) snprintf(buf, sizeof(buf), _("%1.3f"), cfdata->client->icccm.min_aspect); else snprintf(buf, sizeof(buf), _("%1.3f–%1.3f"), cfdata->client->icccm.min_aspect, cfdata->client->icccm.max_aspect); cfdata->icccm.aspect = strdup(buf); } #ifndef HAVE_WAYLAND_ONLY if (cfdata->client->icccm.initial_state != ECORE_X_WINDOW_STATE_HINT_NONE) { switch (cfdata->client->icccm.initial_state) { case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN: snprintf(buf, sizeof(buf), _("Withdrawn")); break; case ECORE_X_WINDOW_STATE_HINT_NORMAL: snprintf(buf, sizeof(buf), _("Normal")); break; case ECORE_X_WINDOW_STATE_HINT_ICONIC: snprintf(buf, sizeof(buf), _("Iconic")); break; default: buf[0] = 0; break; } cfdata->icccm.initial_state = strdup(buf); } if (cfdata->client->icccm.state != ECORE_X_WINDOW_STATE_HINT_NONE) { switch (cfdata->client->icccm.state) { case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN: snprintf(buf, sizeof(buf), _("Withdrawn")); break; case ECORE_X_WINDOW_STATE_HINT_NORMAL: snprintf(buf, sizeof(buf), _("Normal")); break; case ECORE_X_WINDOW_STATE_HINT_ICONIC: snprintf(buf, sizeof(buf), _("Iconic")); break; default: buf[0] = 0; break; } cfdata->icccm.state = strdup(buf); } #endif snprintf(buf, sizeof(buf), "0x%08x", (unsigned int)e_client_util_win_get(cfdata->client)); cfdata->icccm.window_id = strdup(buf); if (cfdata->client->icccm.window_group != 0) { snprintf(buf, sizeof(buf), "0x%08x", (unsigned int)cfdata->client->icccm.window_group); cfdata->icccm.window_group = strdup(buf); } if (cfdata->client->icccm.transient_for != 0) { snprintf(buf, sizeof(buf), "0x%08x", (unsigned int)cfdata->client->icccm.transient_for); cfdata->icccm.transient_for = strdup(buf); } if (cfdata->client->icccm.client_leader != 0) { snprintf(buf, sizeof(buf), "0x%08x", (unsigned int)cfdata->client->icccm.client_leader); cfdata->icccm.client_leader = strdup(buf); } #ifndef HAVE_WAYLAND_ONLY switch (cfdata->client->icccm.gravity) { case ECORE_X_GRAVITY_FORGET: snprintf(buf, sizeof(buf), _("Forget/Unmap")); break; case ECORE_X_GRAVITY_NW: snprintf(buf, sizeof(buf), _("Northwest")); break; case ECORE_X_GRAVITY_N: snprintf(buf, sizeof(buf), _("North")); break; case ECORE_X_GRAVITY_NE: snprintf(buf, sizeof(buf), _("Northeast")); break; case ECORE_X_GRAVITY_W: snprintf(buf, sizeof(buf), _("West")); break; case ECORE_X_GRAVITY_CENTER: snprintf(buf, sizeof(buf), _("Center")); break; case ECORE_X_GRAVITY_E: snprintf(buf, sizeof(buf), _("East")); break; case ECORE_X_GRAVITY_SW: snprintf(buf, sizeof(buf), _("Southwest")); break; case ECORE_X_GRAVITY_S: snprintf(buf, sizeof(buf), _("South")); break; case ECORE_X_GRAVITY_SE: snprintf(buf, sizeof(buf), _("Southeast")); break; case ECORE_X_GRAVITY_STATIC: snprintf(buf, sizeof(buf), _("Static")); break; default: buf[0] = 0; break; } cfdata->icccm.gravity = strdup(buf); #endif if (cfdata->client->icccm.command.argv) { int i; buf[0] = 0; for (i = 0; i < cfdata->client->icccm.command.argc; i++) { if ((sizeof(buf) - strlen(buf)) < (strlen(cfdata->client->icccm.command.argv[i]) - 2)) break; strcat(buf, cfdata->client->icccm.command.argv[i]); strcat(buf, " "); } cfdata->icccm.command = strdup(buf); } cfdata->icccm.take_focus = cfdata->client->icccm.take_focus; cfdata->icccm.accepts_focus = cfdata->client->icccm.accepts_focus; cfdata->icccm.urgent = cfdata->client->icccm.urgent; cfdata->icccm.delete_request = cfdata->client->icccm.delete_request; cfdata->icccm.request_pos = cfdata->client->icccm.request_pos; IFDUP(netwm.name, netwm.name); IFDUP(netwm.icon_name, netwm.icon_name); cfdata->netwm.modal = cfdata->client->netwm.state.modal; cfdata->netwm.sticky = cfdata->client->netwm.state.sticky; cfdata->netwm.shaded = cfdata->client->netwm.state.shaded; cfdata->netwm.skip_taskbar = cfdata->client->netwm.state.skip_taskbar; cfdata->netwm.skip_pager = cfdata->client->netwm.state.skip_pager; cfdata->netwm.hidden = cfdata->client->netwm.state.hidden; cfdata->netwm.fullscreen = cfdata->client->netwm.state.fullscreen; switch (cfdata->client->netwm.state.stacking) { case 0: cfdata->netwm.stacking = strdup(_("None")); break; case 1: cfdata->netwm.stacking = strdup(_("Above")); break; case 2: cfdata->netwm.stacking = strdup(_("Below")); break; } cfd->data = cfdata; }
END_TEST START_TEST(eina_matrix3_map_transform) { double x = 2, y = 3, x1, y1; Eina_Matrix3 m; Eina_Rectangle r; Eina_Quad q; Eina_Bool ret; eina_init(); eina_matrix3_values_set(&m, 0, 1, 0, 1, 0, 0, 0, 0, 1); eina_matrix3_point_transform(&m, x, y, &x1, &y1); fail_if(!EINA_DBL_EQ(x1, 3) || !EINA_DBL_EQ(y1, 2)); EINA_RECTANGLE_SET(&r, 0, 0, 3, 4); eina_matrix3_rectangle_transform(&m, &r, &q); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 0) || !EINA_DBL_EQ(q.y1, 3) || !EINA_DBL_EQ(q.x2, 4) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 4) || !EINA_DBL_EQ(q.y3, 0)); eina_quad_coords_set(&q, 0.0, 0.0, 3.0, 0.0, 3.0, 3.0, 0.0, 3.0); ret = eina_matrix3_square_quad_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!MATRIX3_CMP(m.xx, m.xy, m.xz, m.yx, m.yy, m.yz, m.zx, m.zy, m.zz, 3, 0, 0, 0, 3, 0, 0, 0, 1)); ret = eina_matrix3_quad_square_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 3) || !EINA_DBL_EQ(q.y1, 0) || !EINA_DBL_EQ(q.x2, 3) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 0) || !EINA_DBL_EQ(q.y3, 3)); eina_shutdown(); }
END_TEST START_TEST(eina_matrix2_operation) { Eina_Matrix2 m1, m2, m3; double xx, xy, yx, yy; double arr[] = {1, 1, 1, 1}; eina_matrix2_values_set(&m2, 2, 3, 3, 2); eina_matrix2_inverse(&m1, &m2); eina_matrix2_values_get(&m1, &xx, &xy, &yx, &yy); fail_if((xx - (-0.4) > DBL_EPSILON) || (xy - 0.6 > DBL_EPSILON) || (yx - 0.6 > DBL_EPSILON) || (yy - (-0.4) > DBL_EPSILON)); eina_matrix2_identity(&m1); eina_matrix2_values_get(&m1, &xx, &xy, &yx, &yy); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, 1)); fail_if(!EINA_DBL_EQ(xy, yx) || !EINA_DBL_EQ(xy, 0)); eina_matrix2_array_set(&m1, arr); eina_matrix2_values_get(&m1, &xx, &xy, &yx, &yy); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yx, xy) || !EINA_DBL_EQ(xy, 1)); eina_matrix2_copy(&m2, &m1); eina_matrix2_values_get(&m2, &xx, &xy, &yx, &yy); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yx, xy) || !EINA_DBL_EQ(xy, 1)); eina_matrix2_values_set(&m1, 2, 3, 3, 2); eina_matrix2_multiply_copy(&m3, &m1, &m2); eina_matrix2_values_get(&m3, &xx, &xy, &yx, &yy); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yx, xy) || !EINA_DBL_EQ(xy, 5)); eina_matrix2_multiply(&m3, &m1, &m2); eina_matrix2_values_get(&m3, &xx, &xy, &yx, &yy); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yx, xy) || !EINA_DBL_EQ(xy, 5)); }
END_TEST #define MATRIX3_CMP(XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ, AXX, AXY, AXZ, AYX, AYY, AYZ, AZX, AZY, AZZ) \ (EINA_DBL_EQ(XX, AXX) && \ EINA_DBL_EQ(XY, AXY) && \ EINA_DBL_EQ(XZ, AXZ) && \ EINA_DBL_EQ(YX, AYX) && \ EINA_DBL_EQ(YY, AYY) && \ EINA_DBL_EQ(YZ, AYZ) && \ EINA_DBL_EQ(ZX, AZX) && \ EINA_DBL_EQ(ZY, AZY) && \ EINA_DBL_EQ(ZZ, AZZ)) START_TEST(eina_matrix3_operations) { Eina_Matrix3 m1, m2, m3; double xx, xy, xz, yx, yy, yz, zx, zy, zz; double tx = 20, ty = 30, ret; const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_values_set(&m2, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_compose(&m1, &m2, &m3); eina_matrix3_values_get(&m3, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, xy) || !EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yy) || !EINA_DBL_EQ(yy, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, zz) || !EINA_DBL_EQ(zz, 1)); eina_matrix3_translate(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 0, tx, 0, 1, ty, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_scale(&m1, tx, ty); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, tx, 0, 0, 0, ty, 0, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 0, 0, 0, 1, 0, 0, 0, 1); eina_matrix3_rotate(&m1, M_PI/2); fail_if (!MATRIX3_CMP(round(m1.xx), round(m1.xy), round(m1.xz), round(m1.yx), round(m1.yy), round(m1.yz), round(m1.zx), round(m1.zy), round(m1.zz), 0, -1, 0, 1, 0, 0, 0, 0, 1)); eina_matrix3_values_set(&m1, 1, 1, 1, 1, 1, 1, 1, 1, 1); eina_matrix3_identity(&m1); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, zz) || !EINA_DBL_EQ(zz, 1)); fail_if(!EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, 0)); eina_matrix3_values_set(&m1, 1, 2, 1, 2, 1, 1, 1, 2, 2); ret = eina_matrix3_determinant(&m1); fail_if(!EINA_DBL_EQ(ret, -3)); eina_matrix3_values_set(&m1, 3, 3, 3, 3, 3, 3, 3, 3, 3); eina_matrix3_divide(&m1, 2); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, xy) || !EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(yx, yy) || !EINA_DBL_EQ(yy, yz) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, zz) || !EINA_DBL_EQ(zz, 1.5)); eina_matrix3_values_set(&m1, 0, 2, 0, 2, 2, 0, 2, 1, 2); eina_matrix3_inverse(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, -0.5, 0.5, 0.0, 0.5, 0.0, 0.0, 0.25, -0.5, 0.5)); eina_matrix3_values_set(&m1, 1, 2, 3, 4, 5, 6, 7, 8, 9); eina_matrix3_transpose(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 4, 7, 2, 5, 8, 3, 6, 9)); eina_matrix3_values_set(&m1, 1, 2, 3, 0, 4, 5, 1, 0, 6); eina_matrix3_cofactor(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 24, 5, -4, -12, 3, 2, -2, -5, 4)); eina_matrix3_adjoint(&m1, &m2); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 24, -12, -2, 5, 3, -5, -4, 2, 4)); eina_matrix3_values_set(&m2, 2, 2, 2, 1, 1, 1, 3, 3, 3); eina_matrix3_values_set(&m3, 3, 3, 3, 2, 2, 2, 1, 1, 1); eina_matrix3_multiply_copy(&m1, &m2, &m3); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 12, 12, 12, 6, 6, 6, 18, 18, 18)); eina_matrix3_values_set(&m2, 2, 2, 2, 1, 1, 1, 0, 0, 0); eina_matrix3_multiply(&m1, &m2, &m3); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 12, 12, 12, 6, 6, 6, 0, 0, 0)); eina_matrix3_copy(&m1, &m2); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 2, 2, 2, 1, 1, 1, 0, 0, 0)); eina_matrix3_array_set(&m1, arr); eina_matrix3_values_get(&m1, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if(!MATRIX3_CMP(xx, xy, xz, yx, yy, yz, zx, zy, zz, 1, 1, 1, 1, 1, 1, 1, 1, 1)); eina_matrix3_position_transform_set(&m3, 5, 3); eina_matrix3_values_get(&m3, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xz, 5) || !EINA_DBL_EQ(yz, 3)); eina_matrix3_scale_transform_set(&m2, 6, 7); eina_matrix3_values_get(&m2, &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); fail_if (!EINA_DBL_EQ(xx, 6) || !EINA_DBL_EQ(yy, 7)); }
END_TEST START_TEST(eina_matrix4_operation) { double det; double l=5, r=4, b=4, t=3, dn=3, df=2; Eina_Matrix4 m, m1, m2; double xx, xy, xz, xw, yx, yy, yz, yw, zx, zy, zz, zw, wx, wy, wz, ww; const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; eina_matrix4_values_set(&m, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0); det = eina_matrix4_determinant(&m); fail_if(!EINA_DBL_EQ(det, -16)); eina_matrix4_inverse(&m1, &m); eina_matrix4_values_get(&m1, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xy, 0.5) || !EINA_DBL_EQ(yw, xy) || !EINA_DBL_EQ(zx, yw) || !EINA_DBL_EQ(wz, zx)); eina_matrix4_identity(&m1); eina_matrix4_values_get(&m1, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, 1) || !EINA_DBL_EQ(yy, xx) || !EINA_DBL_EQ(zz, yy) || !EINA_DBL_EQ(ww, zz)); eina_matrix4_values_set(&m1, 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 2, 0); eina_matrix4_multiply_copy(&m2, &m1, &m); eina_matrix4_values_get(&m2, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, 4) || !EINA_DBL_EQ(xw, xx) || !EINA_DBL_EQ(yy, xw) || !EINA_DBL_EQ(yz, yy) || !EINA_DBL_EQ(zy, yz) || !EINA_DBL_EQ(zz, yy) || !EINA_DBL_EQ(wx, xx) || !EINA_DBL_EQ(ww, zy)); eina_matrix4_multiply(&m2, &m1, &m); eina_matrix4_values_get(&m2, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, 4) || !EINA_DBL_EQ(xw, xx) || !EINA_DBL_EQ(yy, xw) || !EINA_DBL_EQ(yz, yy) || !EINA_DBL_EQ(zy, yz) || !EINA_DBL_EQ(zz, yy) || !EINA_DBL_EQ(wx, xx) || !EINA_DBL_EQ(ww, zy)); eina_matrix4_array_set(&m1, arr); eina_matrix4_values_get(&m1, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, 1) || !EINA_DBL_EQ(xw, xx) || !EINA_DBL_EQ(yy, xw) || !EINA_DBL_EQ(yz, yy) || !EINA_DBL_EQ(zy, yz) || !EINA_DBL_EQ(zz, yy) || !EINA_DBL_EQ(wx, xx) || !EINA_DBL_EQ(ww, zy)); eina_matrix4_copy(&m, &m1); eina_matrix4_values_get(&m1, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, 1) || !EINA_DBL_EQ(xw, xx) || !EINA_DBL_EQ(yy, xw) || !EINA_DBL_EQ(yz, yy) || !EINA_DBL_EQ(zy, yz) || !EINA_DBL_EQ(zz, yy) || !EINA_DBL_EQ(wx, xx) || !EINA_DBL_EQ(ww, zy)); eina_matrix4_ortho_set(&m, l, r, b, t, dn, df); eina_matrix4_values_get(&m, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if (!EINA_DBL_EQ(xx, -2) || !EINA_DBL_EQ(yy, -2) || !EINA_DBL_EQ(zz, 2) || !EINA_DBL_EQ(wx, 9) || !EINA_DBL_EQ(wy, 7) || !EINA_DBL_EQ(wz, 5) || !EINA_DBL_EQ(ww, 1)); }
END_TEST START_TEST(eina_matrix4) { Eina_Matrix4 m; Eina_Matrix4 n; double xx, xy, xz, xw, yx, yy, yz, yw, zx, zy, zz, zw, wx, wy, wz, ww; eina_init(); eina_matrix4_values_set(&m, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); fail_if(eina_matrix4_type_get(&m) != EINA_MATRIX_TYPE_IDENTITY); fail_if(!eina_matrix4_normalized(&n, &m)); fail_if(eina_matrix4_type_get(&n) != EINA_MATRIX_TYPE_IDENTITY); fail_if(!eina_matrix4_inverse(&n, &m)); fail_if(eina_matrix4_type_get(&n) != EINA_MATRIX_TYPE_IDENTITY); eina_matrix4_values_get(&m, &xx, &xy, &xz, &xw, &yx, &yy, &yz, &yw, &zx, &zy, &zz, &zw, &wx, &wy, &wz, &ww); fail_if(!EINA_DBL_EQ(xx, yy) || !EINA_DBL_EQ(yy, zz) || !EINA_DBL_EQ(zz, ww) || !EINA_DBL_EQ(ww, 1)); fail_if(!EINA_DBL_EQ(xy, xz) || !EINA_DBL_EQ(xz, xw) || !EINA_DBL_EQ(xw, yx) || !EINA_DBL_EQ(yx, yz) || !EINA_DBL_EQ(yz, yw) || !EINA_DBL_EQ(yw, zx) || !EINA_DBL_EQ(zx, zy) || !EINA_DBL_EQ(zy, zw) || !EINA_DBL_EQ(zw, wx) || !EINA_DBL_EQ(wx, wy) || !EINA_DBL_EQ(wy, wz) || !EINA_DBL_EQ(wz, 0)); eina_matrix4_values_set(&m, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); eina_matrix4_transpose(&n, &m); fail_if(!EINA_DBL_EQ(n.xx, 1) || !EINA_DBL_EQ(n.xy, 5) || !EINA_DBL_EQ(n.xz, 9) || !EINA_DBL_EQ(n.xw, 13) || !EINA_DBL_EQ(n.yx, 2) || !EINA_DBL_EQ(n.yy, 6) || !EINA_DBL_EQ(n.yz, 10) || !EINA_DBL_EQ(n.yw, 14) || !EINA_DBL_EQ(n.zx, 3) || !EINA_DBL_EQ(n.zy, 7) || !EINA_DBL_EQ(n.zz, 11) || !EINA_DBL_EQ(n.zw, 15) || !EINA_DBL_EQ(n.wx, 4) || !EINA_DBL_EQ(n.wy, 8) || !EINA_DBL_EQ(n.wz, 12) || !EINA_DBL_EQ(n.ww, 16)); eina_shutdown(); }