Пример #1
0
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);
}
Пример #2
0
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();
}
Пример #3
0
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);
}
Пример #4
0
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);
}
Пример #5
0
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;
}
Пример #6
0
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();
}
Пример #7
0
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));

}
Пример #8
0
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));
}
Пример #9
0
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));
}
Пример #10
0
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();
}