gboolean
is_absolute_length (SvgUnit unit)
{ switch ((unsignedint) unit)
{ case SVG_UNIT_PX: case SVG_UNIT_PT: case SVG_UNIT_IN: case SVG_UNIT_CM: case SVG_UNIT_MM: returnTRUE; default: returnFALSE;
}
}
double
absolute_length_to_px (double value,
SvgUnit unit)
{ switch ((unsignedint) unit)
{ case SVG_UNIT_PX: return value; case SVG_UNIT_PT: return value * 96 / 72; case SVG_UNIT_IN: return value * 96; case SVG_UNIT_CM: return value * 96 / 2.54; case SVG_UNIT_MM: return value * 96 / 25.4; default: g_assert_not_reached ();
}
}
double
angle_to_deg (double value,
SvgUnit unit)
{ switch ((unsignedint) unit)
{ case SVG_UNIT_DEG: return value; case SVG_UNIT_RAD: return value * 180.0 / M_PI; case SVG_UNIT_GRAD: return value * 360.0 / 400.0; case SVG_UNIT_TURN: return value * 360.0; default: g_assert_not_reached ();
}
}
double
viewport_relative_to_px (double value,
SvgUnit unit, const graphene_rect_t *viewport)
{ switch ((unsignedint) unit)
{ case SVG_UNIT_VW: return value * viewport->size.width / 100; case SVG_UNIT_VH: return value * viewport->size.height / 100; case SVG_UNIT_VMIN: return value * MIN (viewport->size.width,
viewport->size.height) / 100; case SVG_UNIT_VMAX: return value * MAX (viewport->size.width,
viewport->size.height) / 100; default: g_assert_not_reached ();
}
}
return svg_number_new (n->value * parent_size / 100);
} break; case SVG_PROPERTY_OPACITY: case SVG_PROPERTY_FILL_OPACITY: case SVG_PROPERTY_STROKE_OPACITY: case SVG_PROPERTY_STOP_OFFSET: return svg_number_new (CLAMP (n->value / 100, 0, 1)); case SVG_PROPERTY_FILTER: return svg_number_new (n->value / 100); case SVG_PROPERTY_STROKE_WIDTH: case SVG_PROPERTY_R: if (type != SVG_ELEMENT_RADIAL_GRADIENT) return svg_number_new_full (SVG_UNIT_PX, n->value * normalized_diagonal (context->viewport) / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_CX: case SVG_PROPERTY_RX: if (type != SVG_ELEMENT_RADIAL_GRADIENT) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.width / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_CY: case SVG_PROPERTY_RY: if (type != SVG_ELEMENT_RADIAL_GRADIENT) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.height / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_Y: case SVG_PROPERTY_HEIGHT: if (type != SVG_ELEMENT_FILTER &&
type != SVG_ELEMENT_PATTERN &&
(type != SVG_ELEMENT_MASK ||
svg_enum_get (svg_element_get_current_value (shape, SVG_PROPERTY_BOUND_UNITS)) != COORD_UNITS_OBJECT_BOUNDING_BOX)) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.height / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_X: case SVG_PROPERTY_WIDTH: if (type != SVG_ELEMENT_FILTER &&
type != SVG_ELEMENT_PATTERN &&
(type != SVG_ELEMENT_MASK ||
svg_enum_get (svg_element_get_current_value (shape, SVG_PROPERTY_BOUND_UNITS)) != COORD_UNITS_OBJECT_BOUNDING_BOX)) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.width / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_X1: case SVG_PROPERTY_X2: if (type == SVG_ELEMENT_LINE) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.width / 100); else return svg_value_ref ((SvgValue *) value); case SVG_PROPERTY_Y1: case SVG_PROPERTY_Y2: if (type == SVG_ELEMENT_LINE) return svg_number_new_full (SVG_UNIT_PX, n->value * context->viewport->size.height / 100); else return svg_value_ref ((SvgValue *) value); default: return svg_value_ref ((SvgValue *) value);
} break; case SVG_UNIT_PT: case SVG_UNIT_IN: case SVG_UNIT_CM: case SVG_UNIT_MM: return svg_number_new_full (SVG_UNIT_PX, absolute_length_to_px (n->value, n->unit));
case SVG_UNIT_VW: case SVG_UNIT_VH: case SVG_UNIT_VMIN: case SVG_UNIT_VMAX: return svg_number_new_full (SVG_UNIT_PX, viewport_relative_to_px (n->value,
n->unit,
context->viewport));
case SVG_UNIT_RAD: case SVG_UNIT_DEG: case SVG_UNIT_GRAD: case SVG_UNIT_TURN: return svg_number_new_full (SVG_UNIT_DEG, angle_to_deg (n->value, n->unit));
case SVG_UNIT_S: case SVG_UNIT_MS: default:
g_assert_not_reached ();
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.