aboutsummaryrefslogblamecommitdiffstats
path: root/src/lib/evas/canvas/evas_canvas3d_primitive.c
blob: dce1bcfa06b4abfb295be470cde3daa674fba490 (plain) (tree)





















                                                 
                               


                  
                                                                                          
 
                                                   
                                                                           





                       
                                                                                                     
 
                                            

































































































                                                                                  

                                                 












                                                                  
#include "evas_common_private.h"
#include "evas_private.h"

#define MY_CLASS EVAS_CANVAS3D_PRIMITIVE_CLASS

static inline void
_primitive_init(Evas_Canvas3D_Primitive_Data *pd)
{
   pd->form = EVAS_CANVAS3D_MESH_PRIMITIVE_NONE;
   pd->ratio = 3.0;
   pd->precision = 10;
   pd->surface = NULL;
   pd->tex_scale.x = 1.0;
   pd->tex_scale.y = 1.0;
}

EAPI Evas_Canvas3D_Primitive *
evas_canvas3d_primitive_add(Evas *e)
{
   MAGIC_CHECK(e, Evas, MAGIC_EVAS);
   return NULL;
   MAGIC_CHECK_END();
   return efl_add(MY_CLASS, e);
}

EOLIAN static Eo *
_evas_canvas3d_primitive_efl_object_constructor(Eo *obj, Evas_Canvas3D_Primitive_Data *pd)
{
   obj = efl_constructor(efl_super(obj, MY_CLASS));
   evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_PRIMITIVE);
   _primitive_init(pd);

   return obj;
}

EOLIAN static void
_evas_canvas3d_primitive_efl_object_destructor(Eo *obj, Evas_Canvas3D_Primitive_Data *pd EINA_UNUSED)
{
   efl_destructor(efl_super(obj, MY_CLASS));
}

EOLIAN static void
_evas_canvas3d_primitive_form_set(Eo *obj EINA_UNUSED,
                            Evas_Canvas3D_Primitive_Data *pd,
                            Evas_Canvas3D_Mesh_Primitive form)
{
   if (form >= EVAS_CANVAS3D_MESH_PRIMITIVE_COUNT)
     {
        ERR("Wrong form of primitive.");
        return;
     }

   if (pd->form != form)
     pd->form = form;
}

EOLIAN static Evas_Canvas3D_Mesh_Primitive
_evas_canvas3d_primitive_form_get(Eo *obj EINA_UNUSED,
                            Evas_Canvas3D_Primitive_Data *pd)
{
   return pd->form;
}

EOLIAN static void
_evas_canvas3d_primitive_mode_set(Eo *obj EINA_UNUSED,
                            Evas_Canvas3D_Primitive_Data *pd,
                            Evas_Canvas3D_Primitive_Mode mode)
{
   if (pd->mode != mode)
     pd->mode = mode;
}

EOLIAN static Evas_Canvas3D_Primitive_Mode
_evas_canvas3d_primitive_mode_get(Eo *obj EINA_UNUSED,
                            Evas_Canvas3D_Primitive_Data *pd)
{
   return pd->mode;
}

EOLIAN static void
_evas_canvas3d_primitive_ratio_set(Eo *obj EINA_UNUSED,
                             Evas_Canvas3D_Primitive_Data *pd,
                             Evas_Real ratio)
{
   pd->ratio = ratio;
}

EOLIAN static Evas_Real
_evas_canvas3d_primitive_ratio_get(Eo *obj EINA_UNUSED,
                             Evas_Canvas3D_Primitive_Data *pd)
{
   return pd->ratio;
}

EOLIAN static void
_evas_canvas3d_primitive_precision_set(Eo *obj EINA_UNUSED,
                                 Evas_Canvas3D_Primitive_Data *pd,
                                 int precision)
{
   if ((precision < 3))
     {
        ERR("Precision of Evas_Canvas3D_Primitive cannot be less than 3.");
        return;
     }

   if ((precision >= 100))
     {
        ERR("%s\n%s",
            "Be careful with precision of Evas_Canvas3D_Primitive more than 100.",
            "It can give unacceptable result.");
     }

   if (pd->precision != precision)
     pd->precision = precision;
}

EOLIAN static int
_evas_canvas3d_primitive_precision_get(Eo *obj EINA_UNUSED,
                                 Evas_Canvas3D_Primitive_Data *pd)
{
   return pd->precision;
}

EOLIAN static void
_evas_canvas3d_primitive_surface_set(Eo *obj EINA_UNUSED,
                               Evas_Canvas3D_Primitive_Data *pd,
                               Evas_Canvas3D_Surface_Func surface_func)
{
   pd->surface = surface_func;
}

EOLIAN static void
_evas_canvas3d_primitive_tex_scale_set(Eo *obj EINA_UNUSED,
                                 Evas_Canvas3D_Primitive_Data *pd,
                                 Evas_Real x,
                                 Evas_Real y)
{
   if (!EINA_DBL_EQ(x, 0.0)) pd->tex_scale.x = x;
   if (!EINA_DBL_EQ(y, 0.0)) pd->tex_scale.y = y;
}

EOLIAN static void
_evas_canvas3d_primitive_tex_scale_get(Eo *obj EINA_UNUSED,
                                 Evas_Canvas3D_Primitive_Data *pd,
                                 Evas_Real *x,
                                 Evas_Real *y)
{
   if (x) *x = pd->tex_scale.x;
   if (y) *y = pd->tex_scale.y;
}

#include "canvas/evas_canvas3d_primitive.eo.c"