- switch (src->unit)
- {
- default:
- g_assert_not_reached();
- /* fall through */
- case GTK_CSS_PERCENT:
- case GTK_CSS_NUMBER:
- case GTK_CSS_PX:
- case GTK_CSS_DEG:
- dest->value = src->value;
- dest->unit = src->unit;
- break;
- case GTK_CSS_PT:
- dest->value = src->value * 96.0 / 72.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_PC:
- dest->value = src->value * 96.0 / 72.0 * 12.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_IN:
- dest->value = src->value * 96.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_CM:
- dest->value = src->value * 96.0 * 0.39370078740157477;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_MM:
- dest->value = src->value * 96.0 * 0.039370078740157477;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_EM:
- dest->value = src->value * g_value_get_double (_gtk_style_context_peek_property (context, "font-size"));
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_EX:
- /* for now we pretend ex is half of em */
- dest->value = src->value * g_value_get_double (_gtk_style_context_peek_property (context, "font-size"));
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_RAD:
- dest->value = 360 * src->value / (2 * G_PI);
- dest->unit = GTK_CSS_DEG;
- break;
- case GTK_CSS_GRAD:
- dest->value = 360 * src->value / 400.0;
- dest->unit = GTK_CSS_DEG;
- break;
- case GTK_CSS_TURN:
- dest->value = 360 * src->value;
- dest->unit = GTK_CSS_DEG;
- break;
- }
+ static const GtkCssChangeTranslation table[] = {
+ { GTK_CSS_CHANGE_CLASS, GTK_CSS_CHANGE_SIBLING_CLASS },
+ { GTK_CSS_CHANGE_NAME, GTK_CSS_CHANGE_SIBLING_NAME },
+ { GTK_CSS_CHANGE_POSITION, GTK_CSS_CHANGE_SIBLING_POSITION },
+ { GTK_CSS_CHANGE_STATE, GTK_CSS_CHANGE_SIBLING_STATE },
+ { GTK_CSS_CHANGE_SOURCE, 0 },
+ { GTK_CSS_CHANGE_ANIMATE, 0 }
+ };
+
+ return gtk_css_change_translate (match, table, G_N_ELEMENTS (table));