📄 svg_properties.c
字号:
switch (att->tag) { case TAG_SVG_ATT_audio_level: case TAG_SVG_ATT_color: case TAG_SVG_ATT_color_rendering: case TAG_SVG_ATT_display: case TAG_SVG_ATT_display_align: case TAG_SVG_ATT_fill: case TAG_SVG_ATT_fill_opacity: case TAG_SVG_ATT_fill_rule: case TAG_SVG_ATT_font_family: case TAG_SVG_ATT_font_size: case TAG_SVG_ATT_font_style: case TAG_SVG_ATT_font_variant: case TAG_SVG_ATT_font_weight: case TAG_SVG_ATT_image_rendering: case TAG_SVG_ATT_line_increment: case TAG_SVG_ATT_opacity: case TAG_SVG_ATT_pointer_events: case TAG_SVG_ATT_shape_rendering: case TAG_SVG_ATT_solid_color: case TAG_SVG_ATT_solid_opacity: case TAG_SVG_ATT_stop_color: case TAG_SVG_ATT_stop_opacity: case TAG_SVG_ATT_stroke: case TAG_SVG_ATT_stroke_dasharray: case TAG_SVG_ATT_stroke_dashoffset: case TAG_SVG_ATT_stroke_linecap: case TAG_SVG_ATT_stroke_linejoin: case TAG_SVG_ATT_stroke_miterlimit: case TAG_SVG_ATT_stroke_opacity: case TAG_SVG_ATT_stroke_width: case TAG_SVG_ATT_text_align: case TAG_SVG_ATT_text_anchor: case TAG_SVG_ATT_text_rendering: case TAG_SVG_ATT_vector_effect: case TAG_SVG_ATT_viewport_fill: case TAG_SVG_ATT_viewport_fill_opacity: case TAG_SVG_ATT_visibility: return 1; default: return 0; } } #ifdef GPAC_ENABLE_SVG_SA else if ((tag>=GF_NODE_RANGE_FIRST_SVG_SA) && (tag<=GF_NODE_RANGE_LAST_SVG_SA)) { SVG_SA_Element *e = (SVG_SA_Element *)node; if (target_attribute->far_ptr == &e->properties->audio_level) return 1; else if (target_attribute->far_ptr == &e->properties->color) return 1; else if (target_attribute->far_ptr == &e->properties->color_rendering) return 1; else if (target_attribute->far_ptr == &e->properties->display) return 1; else if (target_attribute->far_ptr == &e->properties->display_align) return 1; else if (target_attribute->far_ptr == &e->properties->fill) return 1; else if (target_attribute->far_ptr == &e->properties->fill_opacity) return 1; else if (target_attribute->far_ptr == &e->properties->fill_rule) return 1; else if (target_attribute->far_ptr == &e->properties->font_family) return 1; else if (target_attribute->far_ptr == &e->properties->font_size) return 1; else if (target_attribute->far_ptr == &e->properties->font_style) return 1; else if (target_attribute->far_ptr == &e->properties->font_variant) return 1; else if (target_attribute->far_ptr == &e->properties->font_weight) return 1; else if (target_attribute->far_ptr == &e->properties->image_rendering) return 1; else if (target_attribute->far_ptr == &e->properties->line_increment) return 1; else if (target_attribute->far_ptr == &e->properties->opacity) return 1; else if (target_attribute->far_ptr == &e->properties->pointer_events) return 1; else if (target_attribute->far_ptr == &e->properties->shape_rendering) return 1; else if (target_attribute->far_ptr == &e->properties->solid_color) return 1; else if (target_attribute->far_ptr == &e->properties->solid_opacity) return 1; else if (target_attribute->far_ptr == &e->properties->stop_color) return 1; else if (target_attribute->far_ptr == &e->properties->stop_opacity) return 1; else if (target_attribute->far_ptr == &e->properties->stroke) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_dasharray) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_dashoffset) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_linecap) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_linejoin) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_miterlimit) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_opacity) return 1; else if (target_attribute->far_ptr == &e->properties->stroke_width) return 1; else if (target_attribute->far_ptr == &e->properties->text_align) return 1; else if (target_attribute->far_ptr == &e->properties->text_anchor) return 1; else if (target_attribute->far_ptr == &e->properties->text_rendering) return 1; else if (target_attribute->far_ptr == &e->properties->vector_effect) return 1; else if (target_attribute->far_ptr == &e->properties->viewport_fill) return 1; else if (target_attribute->far_ptr == &e->properties->viewport_fill_opacity) return 1; else if (target_attribute->far_ptr == &e->properties->visibility) return 1; else return 0; } #endif// else if ((tag>=GF_NODE_RANGE_FIRST_SVG_SANI) && (tag<=GF_NODE_RANGE_LAST_SVG_SANI)) {// return 0;// } else { return 0; }}/* TODO: Check that all possibly inherited types are treated */Bool gf_svg_is_inherit(GF_FieldInfo *a){ if (!a->far_ptr) return 1; switch (a->fieldType) { case SVG_Color_datatype: return (((SVG_Color *)a->far_ptr)->type == SVG_COLOR_INHERIT); break; case SVG_Paint_datatype: return (((SVG_Paint *)a->far_ptr)->type == SVG_PAINT_INHERIT); break; case SVG_FontSize_datatype: case SVG_Number_datatype: return (((SVG_Number *)a->far_ptr)->type == SVG_NUMBER_INHERIT); break; case SVG_RenderingHint_datatype: return (*((SVG_RenderingHint *)a->far_ptr) == SVG_RENDERINGHINT_INHERIT); break; case SVG_Display_datatype: return (*((SVG_Display *)a->far_ptr) == SVG_DISPLAY_INHERIT); break; case SVG_DisplayAlign_datatype: return (*((SVG_DisplayAlign *)a->far_ptr) == SVG_DISPLAYALIGN_INHERIT); break; case SVG_TextAlign_datatype: return (*((SVG_TextAlign *)a->far_ptr) == SVG_TEXTALIGN_INHERIT); break; case SVG_FillRule_datatype: return (*((SVG_FillRule *)a->far_ptr) == SVG_FILLRULE_INHERIT); break; case SVG_FontFamily_datatype: return (((SVG_FontFamily *)a->far_ptr)->type == SVG_FONTFAMILY_INHERIT); break; case SVG_FontStyle_datatype: return (*((SVG_FontStyle *)a->far_ptr) == SVG_FONTSTYLE_INHERIT); break; case SVG_FontWeight_datatype: return (*((SVG_FontWeight *)a->far_ptr) == SVG_FONTWEIGHT_INHERIT); break; case SVG_PointerEvents_datatype: return (*((SVG_PointerEvents *)a->far_ptr) == SVG_POINTEREVENTS_INHERIT); break; case SVG_StrokeDashArray_datatype: return (((SVG_StrokeDashArray *)a->far_ptr)->type == SVG_STROKEDASHARRAY_INHERIT); break; case SVG_StrokeLineCap_datatype: return (*((SVG_StrokeLineCap *)a->far_ptr) == SVG_STROKELINECAP_INHERIT); break; case SVG_StrokeLineJoin_datatype: return (*((SVG_StrokeLineJoin *)a->far_ptr) == SVG_STROKELINEJOIN_INHERIT); break; case SVG_TextAnchor_datatype: return (*((SVG_TextAnchor *)a->far_ptr) == SVG_TEXTANCHOR_INHERIT); break; case SVG_VectorEffect_datatype: return (*((SVG_VectorEffect *)a->far_ptr) == SVG_VECTOREFFECT_INHERIT); break; case SVG_Visibility_datatype: return (*((SVG_Visibility *)a->far_ptr) == SVG_VISIBILITY_INHERIT); break; case SVG_Overflow_datatype: return (*((SVG_Overflow *)a->far_ptr) == SVG_OVERFLOW_INHERIT); break; default: return 0; }}#ifdef GPAC_ENABLE_SVG_SAu32 gf_svg_sa_get_rendering_flag_if_modified(SVG_SA_Element *n, GF_FieldInfo *info){ if (n->properties) { if (&n->properties->audio_level == info->far_ptr) return 0; else if (&n->properties->color == info->far_ptr) return GF_SG_SVG_COLOR_DIRTY; else if (&n->properties->color_rendering == info->far_ptr) return 0; else if (&n->properties->display == info->far_ptr) return 0; else if (&n->properties->display_align == info->far_ptr) return GF_SG_SVG_DISPLAYALIGN_DIRTY; else if (&n->properties->fill == info->far_ptr) return GF_SG_SVG_FILL_DIRTY; else if (&n->properties->fill_opacity == info->far_ptr) return GF_SG_SVG_FILLOPACITY_DIRTY; else if (&n->properties->fill_rule == info->far_ptr) return GF_SG_SVG_FILLRULE_DIRTY; else if (&n->properties->font_family == info->far_ptr) return GF_SG_SVG_FONTFAMILY_DIRTY; else if (&n->properties->font_size == info->far_ptr) return GF_SG_SVG_FONTSIZE_DIRTY; else if (&n->properties->font_style == info->far_ptr) return GF_SG_SVG_FONTSTYLE_DIRTY; else if (&n->properties->font_variant == info->far_ptr) return GF_SG_SVG_FONTVARIANT_DIRTY; else if (&n->properties->font_weight == info->far_ptr) return GF_SG_SVG_FONTWEIGHT_DIRTY; else if (&n->properties->image_rendering == info->far_ptr) return 0; else if (&n->properties->line_increment == info->far_ptr) return GF_SG_SVG_LINEINCREMENT_DIRTY; else if (&n->properties->opacity == info->far_ptr) return GF_SG_SVG_OPACITY_DIRTY; else if (&n->properties->pointer_events == info->far_ptr) return 0; else if (&n->properties->shape_rendering == info->far_ptr) return 0; else if (&n->properties->solid_color == info->far_ptr) return GF_SG_SVG_SOLIDCOLOR_DIRTY; else if (&n->properties->solid_opacity == info->far_ptr) return GF_SG_SVG_SOLIDOPACITY_DIRTY; else if (&n->properties->stop_color == info->far_ptr) return GF_SG_SVG_STOPCOLOR_DIRTY; else if (&n->properties->stop_opacity == info->far_ptr) return GF_SG_SVG_STOPOPACITY_DIRTY; else if (&n->properties->stroke == info->far_ptr) return GF_SG_SVG_STROKE_DIRTY; else if (&n->properties->stroke_dasharray == info->far_ptr) return GF_SG_SVG_STROKEDASHARRAY_DIRTY; else if (&n->properties->stroke_dashoffset == info->far_ptr) return GF_SG_SVG_STROKEDASHOFFSET_DIRTY; else if (&n->properties->stroke_linecap == info->far_ptr) return GF_SG_SVG_STROKELINECAP_DIRTY; else if (&n->properties->stroke_linejoin == info->far_ptr) return GF_SG_SVG_STROKELINEJOIN_DIRTY; else if (&n->properties->stroke_miterlimit == info->far_ptr) return GF_SG_SVG_STROKEMITERLIMIT_DIRTY; else if (&n->properties->stroke_opacity == info->far_ptr) return GF_SG_SVG_STROKEOPACITY_DIRTY; else if (&n->properties->stroke_width == info->far_ptr) return GF_SG_SVG_STROKEWIDTH_DIRTY; else if (&n->properties->text_align == info->far_ptr) return GF_SG_SVG_TEXTALIGN_DIRTY; else if (&n->properties->text_anchor == info->far_ptr) return GF_SG_SVG_TEXTANCHOR_DIRTY; else if (&n->properties->text_rendering == info->far_ptr) return 0; else if (&n->properties->vector_effect == info->far_ptr) return GF_SG_SVG_VECTOREFFECT_DIRTY; else if (&n->properties->viewport_fill == info->far_ptr) return 0; else if (&n->properties->viewport_fill_opacity == info->far_ptr)return 0; else if (&n->properties->visibility == info->far_ptr) return 0; } /* this is not a property but a regular attribute, the animatable attributes are at the moment: focusable, focusHighlight, gradientUnits, nav-*, target, xlink:href, xlink:type, the following affect the geometry of the element (some affect the positioning): cx, cy, d, height, offset, pathLength, points, r, rx, ry, width, x, x1, x2, y, y1, y2, rotate the following affect the positioning and are computed at each frame: transform, viewBox, preserveAspectRatio */ switch (info->fieldType) { case SVG_Number_datatype: case SVG_Length_datatype: case SVG_Coordinate_datatype: case SVG_Numbers_datatype: case SVG_Points_datatype: case SVG_Coordinates_datatype: case SVG_PathData_datatype: case SVG_Rotate_datatype: return GF_SG_SVG_GEOMETRY_DIRTY; case XMLRI_datatype: return GF_SG_NODE_DIRTY; //case SVG_Matrix_datatype: //case SVG_Motion_datatype: //case SVG_ViewBox_datatype: default: return 0; }}#endifGF_EXPORTBool gf_svg_has_appearance_flag_dirty(u32 flags){#if 0 /* fill-related */ if (flags & GF_SG_SVG_FILL_DIRTY) return 1; if (flags & GF_SG_SVG_FILLOPACITY_DIRTY) return 1; if (flags & GF_SG_SVG_FILLRULE_DIRTY) return 1; /* stroke-related */ if (flags & GF_SG_SVG_STROKE_DIRTY) return 1; if (flags & GF_SG_SVG_STROKEDASHARRAY_DIRTY) return 1; if (flags & GF_SG_SVG_STROKEDASHOFFSET_DIRTY) return 1; if (flags & GF_SG_SVG_STROKELINECAP_DIRTY) return 1; if (flags & GF_SG_SVG_STROKELINEJOIN_DIRTY) return 1; if (flags & GF_SG_SVG_STROKEMITERLIMIT_DIRTY) return 1; if (flags & GF_SG_SVG_STROKEOPACITY_DIRTY) return 1; if (flags & GF_SG_SVG_STROKEWIDTH_DIRTY) return 1; if (flags & GF_SG_SVG_VECTOREFFECT_DIRTY) return 1; /* gradients stops and solidcolor do not affect appearance directly */ return 0;#else if (flags & (GF_SG_SVG_FILL_DIRTY | GF_SG_SVG_FILLOPACITY_DIRTY | GF_SG_SVG_FILLRULE_DIRTY | GF_SG_SVG_STROKE_DIRTY | GF_SG_SVG_STROKEDASHARRAY_DIRTY | GF_SG_SVG_STROKEDASHOFFSET_DIRTY | GF_SG_SVG_STROKELINECAP_DIRTY | GF_SG_SVG_STROKELINEJOIN_DIRTY | GF_SG_SVG_STROKEMITERLIMIT_DIRTY | GF_SG_SVG_STROKEOPACITY_DIRTY | GF_SG_SVG_STROKEWIDTH_DIRTY | GF_SG_SVG_VECTOREFFECT_DIRTY) ) return 1; return 0;#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -