# HG changeset patch # User Goffi # Date 1729975337 -7200 # Node ID 00837fa13e5aafe40ef821eb73da5bde92ae9883 # Parent 2246eeeccc744a6b29bb1ba82019dc3dd1612f6c tools (common/template), cli (call/gui): use font-awesome instead of fontello: following change in Libervia Media, code has been updated to use font-awesome now instead of fontello. diff -r 2246eeeccc74 -r 00837fa13e5a libervia/backend/tools/common/template.py --- a/libervia/backend/tools/common/template.py Mon Sep 30 14:15:47 2024 +0200 +++ b/libervia/backend/tools/common/template.py Sat Oct 26 22:42:17 2024 +0200 @@ -516,7 +516,7 @@ self.env.filters["media_type_sub"] = self.media_type_sub # custom tests self.env.tests["in_the_past"] = self._in_the_past - self.icons_path = os.path.join(host.media_dir, "fonts/fontello/svg") + self.fa_svgs_path = Path(host.media_dir, "fonts/fontawesome/svgs") # policies self.env.policies["ext.i18n.trimmed"] = True @@ -998,7 +998,6 @@ def _icon_defs(self, *names): """Define svg icons which will be used in the template. - Their name is used as id """ svg_elt = etree.Element( @@ -1010,13 +1009,47 @@ ) defs_elt = etree.SubElement(svg_elt, "defs") for name in names: - path = os.path.join(self.icons_path, name + ".svg") - icon_svg_elt = etree.parse(path).getroot() - # we use icon name as id, so we can retrieve them easily - icon_svg_elt.set("id", name) + if "/" in name: + raise ValueError("SVG name must not have a `/` in it.") + if name.startswith("regular "): + name = name[8:] + path = self.fa_svgs_path / f"regular/{name}.svg" + else: + if name.startswith("solid "): + # "solid" can be explicitely specified, and it's the default value. + name = name[6:] + path = self.fa_svgs_path / f"solid/{name}.svg" + + # Parse the source SVG + try: + icon_svg_elt = etree.parse(path).getroot() + except OSError: + log.exception(f"Can't load icon at {path}.") + return safe("") + if not icon_svg_elt.tag == "{http://www.w3.org/2000/svg}svg": raise exceptions.DataError("invalid SVG element") - defs_elt.append(icon_svg_elt) + + # Extract the viewBox and path data + viewbox = icon_svg_elt.get("viewBox") + path_element = icon_svg_elt.find(".//{http://www.w3.org/2000/svg}path") + + # Create a new symbol element + symbol = etree.SubElement( + defs_elt, + "symbol", + id=name, + viewBox=viewbox, + ) + + # Add the path to the symbol + if path_element is not None: + path = etree.SubElement( + symbol, + "path", + d=path_element.get("d"), + ) + return safe(etree.tostring(svg_elt, encoding="unicode")) def _icon_use(self, name: str, cls: str = "", **kwargs: str) -> safe: @@ -1024,7 +1057,7 @@ extra_attrs = " ".join(f'{k}="{html.escape(str(v))}"' for k, v in kwargs.items()) return safe( '\n' + 'width="1em" height="1em" fill="currentColor" >\n' ' ' "\n".format( name=name, diff -r 2246eeeccc74 -r 00837fa13e5a libervia/cli/call_gui.py --- a/libervia/cli/call_gui.py Mon Sep 30 14:15:47 2024 +0200 +++ b/libervia/cli/call_gui.py Sat Oct 26 22:42:17 2024 +0200 @@ -205,7 +205,7 @@ async def run(cls, parent, call_data): """Run PyQt loop and show the app""" media_dir = Path(await parent.host.bridge.config_get("", "media_dir")) - icons_path = media_dir / "fonts/fontello/svg" + icons_path = media_dir / "fonts/fontawesome/svgs/solid" app = QApplication([]) av_call_gui = cls(parent.host, icons_path) av_call_gui.show() @@ -255,8 +255,8 @@ fullscreen_layout.addStretch() self.fullscreen_btn = QPushButton("", self) self.fullscreen_btn.setFixedSize(BUTTON_SIZE) - self.fullscreen_icon_normal = QIcon(str(self.icons_path / "resize-full.svg")) - self.fullscreen_icon_fullscreen = QIcon(str(self.icons_path / "resize-small.svg")) + self.fullscreen_icon_normal = QIcon(str(self.icons_path / "maximize.svg")) + self.fullscreen_icon_fullscreen = QIcon(str(self.icons_path / "minimize.svg")) self.fullscreen_btn.setIcon(self.fullscreen_icon_normal) self.fullscreen_btn.setIconSize(ICON_SIZE) self.fullscreen_btn.clicked.connect(self.toggle_fullscreen) @@ -266,13 +266,13 @@ self.control_buttons_layout = QHBoxLayout() self.control_buttons_layout.setSpacing(40) self.toggle_video_btn = cast( - ActivableButton, self.add_control_button("videocam", self.toggle_video) + ActivableButton, self.add_control_button("video", self.toggle_video) ) self.toggle_audio_btn = cast( - ActivableButton, self.add_control_button("volume-up", self.toggle_audio) + ActivableButton, self.add_control_button("volume-high", self.toggle_audio) ) self.share_desktop_btn = cast( - ActivableButton, self.add_control_button("desktop", self.share_desktop) + ActivableButton, self.add_control_button("display", self.share_desktop) ) self.share_desktop_btn.deactivated_colour = "#47c68e" self.share_desktop_btn.activated_colour = "#f24468"