include/vcl/builder.hxx | 2 vcl/source/window/builder.cxx | 254 +++++++++++++++++++++--------------------- 2 files changed, 129 insertions(+), 127 deletions(-)
New commits: commit c38e3562e3d644011a09a2d71af5ce70c75f8830 Author: Arnaud VERSINI <arnaud.vers...@pm.me> AuthorDate: Tue Dec 31 14:59:33 2024 +0100 Commit: Arnaud Versini <arnaud.vers...@pm.me> CommitDate: Mon Feb 3 09:11:29 2025 +0100 vcl : use frozen unordered_map to avoid allocations Change-Id: I6b0ecd18fe3aa79211c5f1f28a2b87eece98d0e9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179581 Tested-by: Arnaud Versini <arnaud.vers...@pm.me> Reviewed-by: Arnaud Versini <arnaud.vers...@pm.me> Tested-by: Jenkins diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx index d501ef0192de..b69290ba41e9 100644 --- a/include/vcl/builder.hxx +++ b/include/vcl/builder.hxx @@ -304,7 +304,7 @@ namespace BuilderUtils void reorderWithinParent(vcl::Window &rWindow, sal_uInt16 nNewPosition); //Convert an accessibility role name to accessibility role number - sal_Int16 getRoleFromName(const OUString& roleName); + sal_Int16 getRoleFromName(std::u16string_view roleName); } //sID may not exist, but must be of type T if it does diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index b21d26bb5f1e..871a90a603d2 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -13,9 +13,11 @@ #include <memory> #include <string_view> -#include <unordered_map> #include <com/sun/star/accessibility/AccessibleRole.hpp> +#include <frozen/bits/elsa_std.h> +#include <frozen/unordered_map.h> + #include <comphelper/lok.hxx> #include <i18nutil/unicode.hxx> #include <jsdialog/enabled.hxx> @@ -2127,135 +2129,135 @@ namespace BuilderUtils } } - sal_Int16 getRoleFromName(const OUString& roleName) + sal_Int16 getRoleFromName(std::u16string_view roleName) { using namespace com::sun::star::accessibility; - static const std::unordered_map<OUString, sal_Int16> aAtkRoleToAccessibleRole = { + static constexpr frozen::unordered_map<std::u16string_view, sal_Int16, 123> aAtkRoleToAccessibleRole = { /* This is in atkobject.h's AtkRole order */ - { "invalid", AccessibleRole::UNKNOWN }, - { "accelerator label", AccessibleRole::UNKNOWN }, - { "alert", AccessibleRole::ALERT }, - { "animation", AccessibleRole::UNKNOWN }, - { "arrow", AccessibleRole::UNKNOWN }, - { "calendar", AccessibleRole::UNKNOWN }, - { "canvas", AccessibleRole::CANVAS }, - { "check box", AccessibleRole::CHECK_BOX }, - { "check menu item", AccessibleRole::CHECK_MENU_ITEM }, - { "color chooser", AccessibleRole::COLOR_CHOOSER }, - { "column header", AccessibleRole::COLUMN_HEADER }, - { "combo box", AccessibleRole::COMBO_BOX }, - { "date editor", AccessibleRole::DATE_EDITOR }, - { "desktop icon", AccessibleRole::DESKTOP_ICON }, - { "desktop frame", AccessibleRole::DESKTOP_PANE }, // ? - { "dial", AccessibleRole::UNKNOWN }, - { "dialog", AccessibleRole::DIALOG }, - { "directory pane", AccessibleRole::DIRECTORY_PANE }, - { "drawing area", AccessibleRole::UNKNOWN }, - { "file chooser", AccessibleRole::FILE_CHOOSER }, - { "filler", AccessibleRole::FILLER }, - { "font chooser", AccessibleRole::FONT_CHOOSER }, - { "frame", AccessibleRole::FRAME }, - { "glass pane", AccessibleRole::GLASS_PANE }, - { "html container", AccessibleRole::UNKNOWN }, - { "icon", AccessibleRole::ICON }, - { "image", AccessibleRole::GRAPHIC }, - { "internal frame", AccessibleRole::INTERNAL_FRAME }, - { "label", AccessibleRole::LABEL }, - { "layered pane", AccessibleRole::LAYERED_PANE }, - { "list", AccessibleRole::LIST }, - { "list item", AccessibleRole::LIST_ITEM }, - { "menu", AccessibleRole::MENU }, - { "menu bar", AccessibleRole::MENU_BAR }, - { "menu item", AccessibleRole::MENU_ITEM }, - { "option pane", AccessibleRole::OPTION_PANE }, - { "page tab", AccessibleRole::PAGE_TAB }, - { "page tab list", AccessibleRole::PAGE_TAB_LIST }, - { "panel", AccessibleRole::PANEL }, // or SHAPE or TEXT_FRAME ? - { "password text", AccessibleRole::PASSWORD_TEXT }, - { "popup menu", AccessibleRole::POPUP_MENU }, - { "progress bar", AccessibleRole::PROGRESS_BAR }, - { "push button", AccessibleRole::PUSH_BUTTON }, // or BUTTON_DROPDOWN or BUTTON_MENU - { "radio button", AccessibleRole::RADIO_BUTTON }, - { "radio menu item", AccessibleRole::RADIO_MENU_ITEM }, - { "root pane", AccessibleRole::ROOT_PANE }, - { "row header", AccessibleRole::ROW_HEADER }, - { "scroll bar", AccessibleRole::SCROLL_BAR }, - { "scroll pane", AccessibleRole::SCROLL_PANE }, - { "separator", AccessibleRole::SEPARATOR }, - { "slider", AccessibleRole::SLIDER }, - { "split pane", AccessibleRole::SPLIT_PANE }, - { "spin button", AccessibleRole::SPIN_BOX }, // ? - { "statusbar", AccessibleRole::STATUS_BAR }, - { "table", AccessibleRole::TABLE }, - { "table cell", AccessibleRole::TABLE_CELL }, - { "table column header", AccessibleRole::COLUMN_HEADER }, // approximate - { "table row header", AccessibleRole::ROW_HEADER }, // approximate - { "tear off menu item", AccessibleRole::UNKNOWN }, - { "terminal", AccessibleRole::UNKNOWN }, - { "text", AccessibleRole::TEXT }, - { "toggle button", AccessibleRole::TOGGLE_BUTTON }, - { "tool bar", AccessibleRole::TOOL_BAR }, - { "tool tip", AccessibleRole::TOOL_TIP }, - { "tree", AccessibleRole::TREE }, - { "tree table", AccessibleRole::TREE_TABLE }, - { "unknown", AccessibleRole::UNKNOWN }, - { "viewport", AccessibleRole::VIEW_PORT }, - { "window", AccessibleRole::WINDOW }, - { "header", AccessibleRole::HEADER }, - { "footer", AccessibleRole::FOOTER }, - { "paragraph", AccessibleRole::PARAGRAPH }, - { "ruler", AccessibleRole::RULER }, - { "application", AccessibleRole::UNKNOWN }, - { "autocomplete", AccessibleRole::UNKNOWN }, - { "edit bar", AccessibleRole::EDIT_BAR }, - { "embedded", AccessibleRole::EMBEDDED_OBJECT }, - { "entry", AccessibleRole::UNKNOWN }, - { "chart", AccessibleRole::CHART }, - { "caption", AccessibleRole::CAPTION }, - { "document frame", AccessibleRole::DOCUMENT }, - { "heading", AccessibleRole::HEADING }, - { "page", AccessibleRole::PAGE }, - { "section", AccessibleRole::SECTION }, - { "redundant object", AccessibleRole::UNKNOWN }, - { "form", AccessibleRole::FORM }, - { "link", AccessibleRole::HYPER_LINK }, - { "input method window", AccessibleRole::UNKNOWN }, - { "table row", AccessibleRole::UNKNOWN }, - { "tree item", AccessibleRole::TREE_ITEM }, - { "document spreadsheet", AccessibleRole::DOCUMENT_SPREADSHEET }, - { "document presentation", AccessibleRole::DOCUMENT_PRESENTATION }, - { "document text", AccessibleRole::DOCUMENT_TEXT }, - { "document web", AccessibleRole::DOCUMENT }, // approximate - { "document email", AccessibleRole::DOCUMENT }, // approximate - { "comment", AccessibleRole::COMMENT }, // or NOTE or END_NOTE or FOOTNOTE or SCROLL_PANE - { "list box", AccessibleRole::UNKNOWN }, - { "grouping", AccessibleRole::GROUP_BOX }, - { "image map", AccessibleRole::IMAGE_MAP }, - { "notification", AccessibleRole::NOTIFICATION }, - { "info bar", AccessibleRole::UNKNOWN }, - { "level bar", AccessibleRole::UNKNOWN }, - { "title bar", AccessibleRole::UNKNOWN }, - { "block quote", AccessibleRole::BLOCK_QUOTE }, - { "audio", AccessibleRole::UNKNOWN }, - { "video", AccessibleRole::UNKNOWN }, - { "definition", AccessibleRole::UNKNOWN }, - { "article", AccessibleRole::UNKNOWN }, - { "landmark", AccessibleRole::UNKNOWN }, - { "log", AccessibleRole::UNKNOWN }, - { "marquee", AccessibleRole::UNKNOWN }, - { "math", AccessibleRole::UNKNOWN }, - { "rating", AccessibleRole::UNKNOWN }, - { "timer", AccessibleRole::UNKNOWN }, - { "description list", AccessibleRole::UNKNOWN }, - { "description term", AccessibleRole::UNKNOWN }, - { "description value", AccessibleRole::UNKNOWN }, - { "static", AccessibleRole::STATIC }, - { "math fraction", AccessibleRole::UNKNOWN }, - { "math root", AccessibleRole::UNKNOWN }, - { "subscript", AccessibleRole::UNKNOWN }, - { "superscript", AccessibleRole::UNKNOWN }, - { "footnote", AccessibleRole::FOOTNOTE }, + { u"invalid", AccessibleRole::UNKNOWN }, + { u"accelerator label", AccessibleRole::UNKNOWN }, + { u"alert", AccessibleRole::ALERT }, + { u"animation", AccessibleRole::UNKNOWN }, + { u"arrow", AccessibleRole::UNKNOWN }, + { u"calendar", AccessibleRole::UNKNOWN }, + { u"canvas", AccessibleRole::CANVAS }, + { u"check box", AccessibleRole::CHECK_BOX }, + { u"check menu item", AccessibleRole::CHECK_MENU_ITEM }, + { u"color chooser", AccessibleRole::COLOR_CHOOSER }, + { u"column header", AccessibleRole::COLUMN_HEADER }, + { u"combo box", AccessibleRole::COMBO_BOX }, + { u"date editor", AccessibleRole::DATE_EDITOR }, + { u"desktop icon", AccessibleRole::DESKTOP_ICON }, + { u"desktop frame", AccessibleRole::DESKTOP_PANE }, // ? + { u"dial", AccessibleRole::UNKNOWN }, + { u"dialog", AccessibleRole::DIALOG }, + { u"directory pane", AccessibleRole::DIRECTORY_PANE }, + { u"drawing area", AccessibleRole::UNKNOWN }, + { u"file chooser", AccessibleRole::FILE_CHOOSER }, + { u"filler", AccessibleRole::FILLER }, + { u"font chooser", AccessibleRole::FONT_CHOOSER }, + { u"frame", AccessibleRole::FRAME }, + { u"glass pane", AccessibleRole::GLASS_PANE }, + { u"html container", AccessibleRole::UNKNOWN }, + { u"icon", AccessibleRole::ICON }, + { u"image", AccessibleRole::GRAPHIC }, + { u"internal frame", AccessibleRole::INTERNAL_FRAME }, + { u"label", AccessibleRole::LABEL }, + { u"layered pane", AccessibleRole::LAYERED_PANE }, + { u"list", AccessibleRole::LIST }, + { u"list item", AccessibleRole::LIST_ITEM }, + { u"menu", AccessibleRole::MENU }, + { u"menu bar", AccessibleRole::MENU_BAR }, + { u"menu item", AccessibleRole::MENU_ITEM }, + { u"option pane", AccessibleRole::OPTION_PANE }, + { u"page tab", AccessibleRole::PAGE_TAB }, + { u"page tab list", AccessibleRole::PAGE_TAB_LIST }, + { u"panel", AccessibleRole::PANEL }, // or SHAPE or TEXT_FRAME ? + { u"password text", AccessibleRole::PASSWORD_TEXT }, + { u"popup menu", AccessibleRole::POPUP_MENU }, + { u"progress bar", AccessibleRole::PROGRESS_BAR }, + { u"push button", AccessibleRole::PUSH_BUTTON }, // or BUTTON_DROPDOWN or BUTTON_MENU + { u"radio button", AccessibleRole::RADIO_BUTTON }, + { u"radio menu item", AccessibleRole::RADIO_MENU_ITEM }, + { u"root pane", AccessibleRole::ROOT_PANE }, + { u"row header", AccessibleRole::ROW_HEADER }, + { u"scroll bar", AccessibleRole::SCROLL_BAR }, + { u"scroll pane", AccessibleRole::SCROLL_PANE }, + { u"separator", AccessibleRole::SEPARATOR }, + { u"slider", AccessibleRole::SLIDER }, + { u"split pane", AccessibleRole::SPLIT_PANE }, + { u"spin button", AccessibleRole::SPIN_BOX }, // ? + { u"statusbar", AccessibleRole::STATUS_BAR }, + { u"table", AccessibleRole::TABLE }, + { u"table cell", AccessibleRole::TABLE_CELL }, + { u"table column header", AccessibleRole::COLUMN_HEADER }, // approximate + { u"table row header", AccessibleRole::ROW_HEADER }, // approximate + { u"tear off menu item", AccessibleRole::UNKNOWN }, + { u"terminal", AccessibleRole::UNKNOWN }, + { u"text", AccessibleRole::TEXT }, + { u"toggle button", AccessibleRole::TOGGLE_BUTTON }, + { u"tool bar", AccessibleRole::TOOL_BAR }, + { u"tool tip", AccessibleRole::TOOL_TIP }, + { u"tree", AccessibleRole::TREE }, + { u"tree table", AccessibleRole::TREE_TABLE }, + { u"unknown", AccessibleRole::UNKNOWN }, + { u"viewport", AccessibleRole::VIEW_PORT }, + { u"window", AccessibleRole::WINDOW }, + { u"header", AccessibleRole::HEADER }, + { u"footer", AccessibleRole::FOOTER }, + { u"paragraph", AccessibleRole::PARAGRAPH }, + { u"ruler", AccessibleRole::RULER }, + { u"application", AccessibleRole::UNKNOWN }, + { u"autocomplete", AccessibleRole::UNKNOWN }, + { u"edit bar", AccessibleRole::EDIT_BAR }, + { u"embedded", AccessibleRole::EMBEDDED_OBJECT }, + { u"entry", AccessibleRole::UNKNOWN }, + { u"chart", AccessibleRole::CHART }, + { u"caption", AccessibleRole::CAPTION }, + { u"document frame", AccessibleRole::DOCUMENT }, + { u"heading", AccessibleRole::HEADING }, + { u"page", AccessibleRole::PAGE }, + { u"section", AccessibleRole::SECTION }, + { u"redundant object", AccessibleRole::UNKNOWN }, + { u"form", AccessibleRole::FORM }, + { u"link", AccessibleRole::HYPER_LINK }, + { u"input method window", AccessibleRole::UNKNOWN }, + { u"table row", AccessibleRole::UNKNOWN }, + { u"tree item", AccessibleRole::TREE_ITEM }, + { u"document spreadsheet", AccessibleRole::DOCUMENT_SPREADSHEET }, + { u"document presentation", AccessibleRole::DOCUMENT_PRESENTATION }, + { u"document text", AccessibleRole::DOCUMENT_TEXT }, + { u"document web", AccessibleRole::DOCUMENT }, // approximate + { u"document email", AccessibleRole::DOCUMENT }, // approximate + { u"comment", AccessibleRole::COMMENT }, // or NOTE or END_NOTE or FOOTNOTE or SCROLL_PANE + { u"list box", AccessibleRole::UNKNOWN }, + { u"grouping", AccessibleRole::GROUP_BOX }, + { u"image map", AccessibleRole::IMAGE_MAP }, + { u"notification", AccessibleRole::NOTIFICATION }, + { u"info bar", AccessibleRole::UNKNOWN }, + { u"level bar", AccessibleRole::UNKNOWN }, + { u"title bar", AccessibleRole::UNKNOWN }, + { u"block quote", AccessibleRole::BLOCK_QUOTE }, + { u"audio", AccessibleRole::UNKNOWN }, + { u"video", AccessibleRole::UNKNOWN }, + { u"definition", AccessibleRole::UNKNOWN }, + { u"article", AccessibleRole::UNKNOWN }, + { u"landmark", AccessibleRole::UNKNOWN }, + { u"log", AccessibleRole::UNKNOWN }, + { u"marquee", AccessibleRole::UNKNOWN }, + { u"math", AccessibleRole::UNKNOWN }, + { u"rating", AccessibleRole::UNKNOWN }, + { u"timer", AccessibleRole::UNKNOWN }, + { u"description list", AccessibleRole::UNKNOWN }, + { u"description term", AccessibleRole::UNKNOWN }, + { u"description value", AccessibleRole::UNKNOWN }, + { u"static", AccessibleRole::STATIC }, + { u"math fraction", AccessibleRole::UNKNOWN }, + { u"math root", AccessibleRole::UNKNOWN }, + { u"subscript", AccessibleRole::UNKNOWN }, + { u"superscript", AccessibleRole::UNKNOWN }, + { u"footnote", AccessibleRole::FOOTNOTE }, }; auto it = aAtkRoleToAccessibleRole.find(roleName);