当前位置: 首页 > news >正文

Chromium 中chrome.fontSettings扩展接口定义c++

一、chrome.fontSettings

使用 chrome.fontSettings API 管理 Chrome 的字体设置。

权限

fontSettings

要使用 Font Settings API,您必须在扩展程序中声明 "fontSettings" 权限 清单。例如:

{"name": "My Font Settings Extension","description": "Customize your fonts","version": "0.2","permissions": ["fontSettings"],...
}

概念和用法

Chrome 允许某些字体设置取决于特定的常规字体系列和语言 脚本。例如, sans-serif 简体中文使用的字体可能与该字体不同 用于 serif 日语。

Chrome 支持的通用字体系列基于 CSS 通用字体系列, GenericReference下列出。当网页指定了通用字体系列时,Chrome 会选择 根据相应设置调整字体。如果未指定通用字体系列,则 Chrome 会使用 “包量”规则的通用字体系列。

当网页指定了语言时,Chrome 会根据 相应的语言脚本。如果未指定语言,则 Chrome 会使用默认设置 或全局、脚本。

支持的语言脚本由 ISO 15924 脚本代码指定,并列在下方 ScriptCode。从技术上讲,Chrome 设置并不是严格按脚本进行设置,还取决于 语言。例如,当 网页指定了俄语,并且该字体不仅用于西里尔文字, 字体覆盖的所有内容(如拉丁文)。

示例

以下代码可获取阿拉伯语标准字体。

chrome.fontSettings.getFont({ genericFamily: 'standard', script: 'Arab' },function(details) { console.log(details.fontId); }
);

下一个代码段用于设置日语的 sans-serif 字体。

chrome.fontSettings.setFont({ genericFamily: 'sansserif', script: 'Jpan', fontId: 'MS PGothic' }
);

若要试用此 API,请安装 chrome-extension-samples 中的 fontSettings API 示例 存储库

更多参考:chrome.fontSettings  |  API  |  Chrome for Developers

二、chrome.fontSettings c++接口定义:

1、font_settings.json 接口描述文件:

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.[{"namespace": "fontSettings","description": "Use the <code>chrome.fontSettings</code> API to manage Chrome's font settings.","types": [{"id": "FontName","type": "object","description": "Represents a font name.","properties": {"fontId": {"type": "string","description": "The font ID."},"displayName": {"type": "string","description": "The display name of the font."}}},{"id": "ScriptCode","type": "string","enum": [ "Afak", "Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Bass", "Batk","Beng", "Blis", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans","Cari", "Cham", "Cher", "Cirt", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva","Dsrt", "Dupl", "Egyd", "Egyh", "Egyp", "Elba", "Ethi", "Geor", "Geok","Glag", "Goth", "Gran", "Grek", "Gujr", "Guru", "Hang", "Hani", "Hano","Hans", "Hant", "Hebr", "Hluw", "Hmng", "Hung", "Inds", "Ital", "Java","Jpan", "Jurc", "Kali", "Khar", "Khmr", "Khoj", "Knda", "Kpel", "Kthi","Lana", "Laoo", "Latf", "Latg", "Latn", "Lepc", "Limb", "Lina", "Linb","Lisu", "Loma", "Lyci", "Lydi", "Mand", "Mani", "Maya", "Mend", "Merc","Mero", "Mlym", "Moon", "Mong", "Mroo", "Mtei", "Mymr", "Narb", "Nbat","Nkgb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Palm","Perm", "Phag", "Phli", "Phlp", "Phlv", "Phnx", "Plrd", "Prti", "Rjng","Roro", "Runr", "Samr", "Sara", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd","Sind", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Syre", "Syrj", "Syrn","Tagb", "Takr", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Teng","Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Tirh", "Ugar", "Vaii", "Visp","Wara", "Wole", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Zyyy" ],"description": "An ISO 15924 script code. The default, or global, script is represented by script code \"Zyyy\"."},{"id": "GenericFamily","type": "string","enum": ["standard", "sansserif", "serif", "fixed", "cursive", "fantasy", "math"],"description": "A CSS generic font family."},{"id": "LevelOfControl","description": "One of<br><var>not_controllable</var>: cannot be controlled by any extension<br><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence<br><var>controllable_by_this_extension</var>: can be controlled by this extension<br><var>controlled_by_this_extension</var>: controlled by this extension","type": "string","enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]}],"functions": [{"name": "clearFont","description": "Clears the font set by this extension, if any.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script for which the font should be cleared. If omitted, the global script font setting is cleared.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be cleared."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getFont","description": "Gets the font for a given script and generic font family.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script for which the font should be retrieved. If omitted, the font setting for the global script (script code \"Zyyy\") is retrieved.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be retrieved."}}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"fontId": {"type": "string","description": "The font ID. Rather than the literal font ID preference value, this may be the ID of the font that the system resolves the preference value to. So, <var>fontId</var> can differ from the font passed to <code>setFont</code>, if, for example, the font is not available on the system. The empty string signifies fallback to the global script font setting."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setFont","description": "Sets the font for a given script and generic font family.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script code which the font should be set. If omitted, the font setting for the global script (script code \"Zyyy\") is set.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be set."},"fontId": {"type": "string","description": "The font ID. The empty string means to fallback to the global script font setting."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getFontList","description": "Gets a list of fonts on the system.","parameters": [],"returns_async": {"name": "callback","parameters": [{"name": "results","type": "array","items": { "$ref": "FontName" }}]}},{"name": "clearDefaultFontSize","description": "Clears the default font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getDefaultFontSize","description": "Gets the default font size.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setDefaultFontSize","description": "Sets the default font size.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "clearDefaultFixedFontSize","description": "Clears the default fixed font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getDefaultFixedFontSize","description": "Gets the default size for fixed width fonts.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setDefaultFixedFontSize","description": "Sets the default size for fixed width fonts.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "clearMinimumFontSize","description": "Clears the minimum font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getMinimumFontSize","description": "Gets the minimum font size.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setMinimumFontSize","description": "Sets the minimum font size.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}}],"events": [{"name": "onFontChanged","description": "Fired when a font setting changes.","parameters": [{"type": "object","name": "details","properties": {"fontId": {"type": "string","description": "The font ID. See the description in <code>getFont</code>."},"script": {"$ref": "ScriptCode","description": "The script code for which the font setting has changed.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font setting has changed."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onDefaultFontSizeChanged","description": "Fired when the default font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onDefaultFixedFontSizeChanged","description": "Fired when the default fixed font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onMinimumFontSizeChanged","description": "Fired when the minimum font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}]}
]

2、font_settings.json生成的c++文件:

out\Debug\gen\chrome\common\extensions\api\font_settings.h

out\Debug\gen\chrome\common\extensions\api\font_settings.cc

3、font_settings api接口定义文件:

chrome\browser\extensions\api\font_settings\font_settings_api.h

chrome\browser\extensions\api\font_settings\font_settings_api.cc

namespace content {
class BrowserContext;
}namespace extensions {class FontSettingsEventRouter;// The profile-keyed service that manages the font_settings extension API.
// This is not an EventRouter::Observer (and does not lazily initialize) because
// doing so caused a regression in perf tests. See crbug.com/163466.
class FontSettingsAPI : public BrowserContextKeyedAPI {public:explicit FontSettingsAPI(content::BrowserContext* context);~FontSettingsAPI() override;// BrowserContextKeyedAPI implementation.static BrowserContextKeyedAPIFactory<FontSettingsAPI>* GetFactoryInstance();private:friend class BrowserContextKeyedAPIFactory<FontSettingsAPI>;// BrowserContextKeyedAPI implementation.static const char* service_name() {return "FontSettingsAPI";}static const bool kServiceIsNULLWhileTesting = true;std::unique_ptr<FontSettingsEventRouter> font_settings_event_router_;
};// fontSettings.clearFont API function.
class FontSettingsClearFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearFont", FONTSETTINGS_CLEARFONT)protected:// RefCounted types have non-public destructors, as with all extension// functions in this file.~FontSettingsClearFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.getFont API function.
class FontSettingsGetFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getFont", FONTSETTINGS_GETFONT)protected:~FontSettingsGetFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.setFont API function.
class FontSettingsSetFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setFont", FONTSETTINGS_SETFONT)protected:~FontSettingsSetFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.getFontList API function.
class FontSettingsGetFontListFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getFontList",FONTSETTINGS_GETFONTLIST)protected:~FontSettingsGetFontListFunction() override {}// ExtensionFunction:ResponseAction Run() override;private:void FontListHasLoaded(base::Value::List list);ResponseValue CopyFontsToResult(const base::Value::List& fonts);
};// Base class for extension API functions that clear a browser font pref.
class ClearFontPrefExtensionFunction : public ExtensionFunction {protected:~ClearFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to clear, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;
};// Base class for extension API functions that get a browser font pref.
class GetFontPrefExtensionFunction : public ExtensionFunction {protected:~GetFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to get, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;// Implementations should return the key for the value in the extension API,// like "pixelSize".virtual const char* GetKey() = 0;
};// Base class for extension API functions that set a browser font pref.
class SetFontPrefExtensionFunction : public ExtensionFunction {protected:~SetFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to set, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;// Implementations should return the key for the value in the extension API,// like "pixelSize".virtual const char* GetKey() = 0;
};// The following are get/set/clear API functions that act on a browser font
// pref.class FontSettingsClearDefaultFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFontSize",FONTSETTINGS_CLEARDEFAULTFONTSIZE)protected:~FontSettingsClearDefaultFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetDefaultFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFontSize",FONTSETTINGS_GETDEFAULTFONTSIZE)protected:~FontSettingsGetDefaultFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetDefaultFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFontSize",FONTSETTINGS_SETDEFAULTFONTSIZE)protected:~FontSettingsSetDefaultFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsClearDefaultFixedFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFixedFontSize",FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE)protected:~FontSettingsClearDefaultFixedFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetDefaultFixedFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFixedFontSize",FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE)protected:~FontSettingsGetDefaultFixedFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetDefaultFixedFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFixedFontSize",FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE)protected:~FontSettingsSetDefaultFixedFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsClearMinimumFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearMinimumFontSize",FONTSETTINGS_CLEARMINIMUMFONTSIZE)protected:~FontSettingsClearMinimumFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetMinimumFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getMinimumFontSize",FONTSETTINGS_GETMINIMUMFONTSIZE)protected:~FontSettingsGetMinimumFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetMinimumFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setMinimumFontSize",FONTSETTINGS_SETMINIMUMFONTSIZE)protected:~FontSettingsSetMinimumFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};}  // namespace extensions

三、总结:

http://www.lryc.cn/news/474947.html

相关文章:

  • 在Unity游戏开发在面试时会面试哪些内容?
  • 刘艳兵-DBA022-以下关于Oracle半连接的描述,哪些是正确的?
  • 人工智能与伦理:我们应该如何平衡科技与人性?
  • CRON组件一个复杂的一个简单的
  • 自定义日志打成jar包引入项目后不生效
  • RK3568平台开发系列讲解(中断篇)延迟工作实验
  • RabbitMQ 的集群
  • 整车功能架构 --- 智能座舱
  • java stream流的使用
  • (JVM)带你一起研究JVM的语法糖功能 和 JVM的即时编译器
  • 【Linux】ClickHouse 部署
  • js的小知识
  • 一些swift问题
  • Nginx安装配置详解
  • 汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动
  • 在ubuntu上安装最新版的clang
  • 使用Django REST framework构建RESTful API
  • 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
  • Kotlin协程suspend的理解
  • 基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发
  • 51单片机教程(二)- 创建项目
  • Rust 图形界面开发——使用 GTK 创建跨平台 GUI
  • Hellinger Distance(赫林格距离)
  • 【系统架构设计师】七、设计模式
  • 新工具可绕过 Google Chrome 的新 Cookie 加密系统
  • 模型拆解(三):EGNet、FMFINet、MJRBM
  • 齐次线性微分方程的解的性质与结构
  • Python-Celery-基础用法总结-安装-配置-启动
  • vue中的nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】
  • 5G学习笔记三之物理层、数据链路层、RRC层协议