static gboolean param_fixed_validate (GParamSpec *pspec, GValue *value) { ClutterParamSpecFixed *fspec = CLUTTER_PARAM_SPEC_FIXED (pspec); gint oval = value->data[0].v_int; gint min, max, val; g_assert (CLUTTER_IS_PARAM_SPEC_FIXED (pspec)); /* we compare the integer part of the value because the minimum * and maximum values cover just that part of the representation */ min = fspec->minimum; max = fspec->maximum; val = (value->data[0].v_int); val = CLAMP (val, min, max); if (val != oval) { value->data[0].v_int = val; return TRUE; } return FALSE; }
static void param_fixed_init (GParamSpec *pspec) { ClutterParamSpecFixed *fspec = CLUTTER_PARAM_SPEC_FIXED (pspec); fspec->minimum = COGL_FIXED_MIN; fspec->maximum = COGL_FIXED_MAX; fspec->default_value = 0; }
static gboolean clutter_interval_real_validate (ClutterInterval *interval, GParamSpec *pspec) { GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec); /* check the GTypes we provide first */ if (pspec_gtype == COGL_TYPE_FIXED) { ClutterParamSpecFixed *pspec_fixed = CLUTTER_PARAM_SPEC_FIXED (pspec); CoglFixed a, b; a = b = 0; clutter_interval_get_interval (interval, &a, &b); if ((a >= pspec_fixed->minimum && a <= pspec_fixed->maximum) && (b >= pspec_fixed->minimum && b <= pspec_fixed->maximum)) return TRUE; else return FALSE; } /* then check the fundamental types */ switch (G_TYPE_FUNDAMENTAL (pspec_gtype)) { case G_TYPE_INT: { GParamSpecInt *pspec_int = G_PARAM_SPEC_INT (pspec); gint a, b; a = b = 0; clutter_interval_get_interval (interval, &a, &b); if ((a >= pspec_int->minimum && a <= pspec_int->maximum) && (b >= pspec_int->minimum && b <= pspec_int->maximum)) return TRUE; else return FALSE; } break; case G_TYPE_UINT: { GParamSpecUInt *pspec_uint = G_PARAM_SPEC_UINT (pspec); guint a, b; a = b = 0; clutter_interval_get_interval (interval, &a, &b); if ((a >= pspec_uint->minimum && a <= pspec_uint->maximum) && (b >= pspec_uint->minimum && b <= pspec_uint->maximum)) return TRUE; else return FALSE; } break; case G_TYPE_UCHAR: { GParamSpecUChar *pspec_uchar = G_PARAM_SPEC_UCHAR (pspec); guchar a, b; a = b = 0; clutter_interval_get_interval (interval, &a, &b); if ((a >= pspec_uchar->minimum && a <= pspec_uchar->maximum) && (b >= pspec_uchar->minimum && b <= pspec_uchar->maximum)) return TRUE; else return FALSE; } break; case G_TYPE_BOOLEAN: return TRUE; default: break; } return TRUE; }
static void param_fixed_set_default (GParamSpec *pspec, GValue *value) { value->data[0].v_int = CLUTTER_PARAM_SPEC_FIXED (pspec)->default_value; }