Chromium HTML5 <svg>对应c++接口说明

一、SVG:可缩放矢量图形

开始学习 SVG

可缩放矢量图形 (Scalable Vector Graphics,SVG )基于 XML 标记语言,用于描述二维的矢量图形。

作为一个基于文本的开放网络标准,SVG 能够优雅而简洁地渲染不同大小的图形,并和 CSS、DOM、JavaScript 和 SMIL 等其他网络标准无缝衔接。本质上,SVG 相对于图像,就好比 HTML 相对于文本。

SVG 图像及其相关行为被定义于 XML 文本文件之中,这意味着可以对它们进行搜索、索引、编写脚本以及压缩。此外,这也意味着可以使用任何文本编辑器和绘图软件来创建和编辑它们。

和传统的点阵图像模式(如 JPEG 和 PNG)不同的是,SVG 格式提供的是矢量图,这意味着它的图像能够被无限放大而不失真或降低质量,并且可以方便地修改内容,无需图形编辑器。通过使用合适的库进行配合,SVG 文件甚至可以随时进行本地化。

SVG 是由万维网联盟(W3C)自 1999 年开始开发的开放标准。

其他内容请查阅 SVG 教程。

文档

SVG 元素参考

了解每一种 SVG 元素的细节。

SVG 属性参考

了解每一种 SVG 属性的细节。

SVG DOM 接口参考

了解有关 SVG DOM API 的全部细节。

SVG:可缩放矢量图形 | MDN (mozilla.org)

前端测试用例:

html 复制代码
<!DOCTYPE html>
<html>
<body>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
   <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
   <line x1="0" y1="80" x2="100" y2="20" stroke="black" />
</svg> 
 
</body>
</html>

二、<svg>对应c++接口定义:

1、<svg>对应svg_tag_names.json5

third_party\blink\renderer\core\svg\svg_tag_names.json5 文件里面定义了所有对象元素:

cpp 复制代码
{
  metadata: {
    namespace: "SVG",
    namespaceURI: "http://www.w3.org/2000/svg",
    fallbackInterfaceName: "SVGUnknownElement",
    fallbackJSInterfaceName: "SVGElement",
    export: "CORE_EXPORT",
  },

  data: [
    "a",
    {
      name: "animate",
      noTypeHelpers: true,
    },
    {
      name: "animateColor",
      JSInterfaceName: "SVGElement",
      interfaceName: "SVGUnknownElement",
      noConstructor: true,
    },
    "animateMotion",
    "animateTransform",
    "set",
    "circle",
    "clipPath",
    "defs",
    "desc",
    "ellipse",
    "feBlend",
    "feColorMatrix",
    "feComponentTransfer",
    "feComposite",
    "feConvolveMatrix",
    "feDiffuseLighting",
    "feDisplacementMap",
    "feDistantLight",
    "feDropShadow",
    "feFlood",
    "feFuncA",
    "feFuncB",
    "feFuncG",
    "feFuncR",
    "feGaussianBlur",
    "feImage",
    "feMerge",
    "feMergeNode",
    "feMorphology",
    "feOffset",
    "fePointLight",
    "feSpecularLighting",
    "feSpotLight",
    "feTile",
    "feTurbulence",
    "filter",
    "foreignObject",
    "g",
    "image",
    "line",
    "linearGradient",
    "marker",
    "mask",
    "metadata",
    {
      name: "mpath",
      interfaceName: "SVGMPathElement",
    },
    "path",
    "pattern",
    "polygon",
    "polyline",
    "radialGradient",
    "rect",
    {
      name: "script",
      constructorNeedsCreateElementFlags: true,
    },
    "stop",
    {
      name: "style",
      constructorNeedsCreateElementFlags: true,
    },
    {
      name: "svg",
      interfaceName: "SVGSVGElement",
    },
    "switch",
    "symbol",
    "text",
    "textPath",
    "title",
    {
      name: "tspan",
      interfaceName: "SVGTSpanElement",
    },
    "use",
    "view",
  ],
}

2、元素对应都在以下两个文件下 包含"svg"关键字的。

src\third_party\blink\renderer\core\svg

src\out\Debug\gen\third_party\blink\renderer\bindings\core\v8

三、本文以<line>和<circle>为例:

1、<line>接口定义:

third_party\blink\renderer\core\svg\svg_line_element.idl

cpp 复制代码
// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGLineElement

[Exposed=Window]
interface SVGLineElement : SVGGeometryElement {
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x1;
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength y1;
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x2;
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength y2;
};

third_party\blink\renderer\core\svg\svg_line_element.h

third_party\blink\renderer\core\svg\svg_line_element.cc

out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_svg_line_element.h

out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_svg_line_element.cc

2、<circle>接口定义:

third_party\blink\renderer\core\svg\svg_circle_element.idl

cpp 复制代码
// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGCircleElement

[Exposed=Window]
interface SVGCircleElement : SVGGeometryElement {
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cx;
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cy;
    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength r;
};

third_party\blink\renderer\core\svg\svg_circle_element.h

third_party\blink\renderer\core\svg\svg_circle_element.cc

out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_svg_circle_element.h

out\Debug\gen\third_party\blink\renderer\bindings\core\v8\v8_svg_circle_element.cc

相关推荐
zhangzeyuaaa15 分钟前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
weiabc26 分钟前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++
默_笙42 分钟前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯1 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
灯澜忆梦2 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
一个风轻云淡2 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026753 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
aqiu1111113 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
福兮说3 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa3 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端