From: Bowon Ryu Date: Tue, 25 Feb 2025 12:02:20 +0000 (+0900) Subject: [NUI] Minimize system settings API calls in Text X-Git-Tag: submit/tizen_9.0/20250226.022024~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9f41df268369f1546bb09aaf18991c4ec9cbfc35;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [NUI] Minimize system settings API calls in Text Each text component's call to the system API takes a lot of time. Especially for FontType, initialization of FontConfig occurs natively and consumes most of the time. This patch updates through static classes only when a specific value is needed. TODO: manager should handle all events. Signed-off-by: Bowon Ryu --- diff --git a/src/Tizen.NUI/src/internal/Common/SystemFontSizeChangedManager.cs b/src/Tizen.NUI/src/internal/Common/SystemFontSizeChangedManager.cs index 52db73647..59b0564af 100644 --- a/src/Tizen.NUI/src/internal/Common/SystemFontSizeChangedManager.cs +++ b/src/Tizen.NUI/src/internal/Common/SystemFontSizeChangedManager.cs @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2025 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -58,10 +58,24 @@ namespace Tizen.NUI private static void SystemFontSizeChanged(object sender, FontSizeChangedEventArgs args) { + fontSize = args.Value; proxy.Invoke(sender, args); Finished?.Invoke(sender, args); } + public static SystemSettingsFontSize FontSize + { + get + { + if (fontSize == null) + { + fontSize = SystemSettings.FontSize; + } + return fontSize ?? SystemSettingsFontSize.Normal; + } + } + + private static SystemSettingsFontSize? fontSize = null; private static WeakEvent> proxy = new WeakEvent>(); } } \ No newline at end of file diff --git a/src/Tizen.NUI/src/internal/Common/SystemFontTypeChangedManager.cs b/src/Tizen.NUI/src/internal/Common/SystemFontTypeChangedManager.cs new file mode 100644 index 000000000..40e8eddf1 --- /dev/null +++ b/src/Tizen.NUI/src/internal/Common/SystemFontTypeChangedManager.cs @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +extern alias TizenSystemSettings; +using TizenSystemSettings.Tizen.System; + +using System; + +namespace Tizen.NUI +{ + /// + /// A static class which adds user handler to the SystemSettings.FontTypeChanged event. + /// This class also adds user handler to the last of the SystemSettings.FontTypeChanged event. + /// + internal static class SystemFontTypeChangedManager + { + static SystemFontTypeChangedManager() + { + SystemSettings.FontTypeChanged += SystemFontTypeChanged; + } + + /// + /// The handler invoked last after all handlers added to the SystemSettings.FontTypeChanged event are invoked. + /// + public static event EventHandler Finished; + + /// + /// Adds the given handler to the SystemSettings.FontTypeChanged event. + /// + /// A handler to be added to the event + public static void Add(EventHandler handler) + { + proxy.Add(handler); + } + + /// + /// Removes the given handler from the SystemSettings.FontTypeChanged event. + /// + /// A handler to be added to the event + public static void Remove(EventHandler handler) + { + proxy.Remove(handler); + } + + private static void SystemFontTypeChanged(object sender, FontTypeChangedEventArgs args) + { + fontType = args.Value; + proxy.Invoke(sender, args); + Finished?.Invoke(sender, args); + } + + public static string FontType + { + get + { + if (string.IsNullOrEmpty(fontType)) + { + fontType = SystemSettings.FontType; + } + return fontType; + } + } + + private static string fontType = string.Empty; + private static WeakEvent> proxy = new WeakEvent>(); + } +} \ No newline at end of file diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs b/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs index de14c9b91..547a1ab9d 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs @@ -1,5 +1,5 @@ /* - * Copyright(c) 2021 Samsung Electronics Co., Ltd. + * Copyright(c) 2025 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,7 +34,6 @@ namespace Tizen.NUI.BaseComponents { static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextEditor"; static private string defaultFontFamily = "TizenSans"; - private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged(); private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); private string textEditorTextSid = null; private string textEditorPlaceHolderTextSid = null; @@ -486,7 +485,7 @@ namespace Tizen.NUI.BaseComponents { try { - newFontFamily = SystemSettings.FontType; + newFontFamily = SystemFontTypeChangedManager.FontType; } catch (Exception e) { @@ -3427,7 +3426,7 @@ namespace Tizen.NUI.BaseComponents try { - systemSettingsFontSize = SystemSettings.FontSize; + systemSettingsFontSize = SystemFontSizeChangedManager.FontSize; } catch (Exception e) { @@ -3988,7 +3987,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Add(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Add(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = true; } catch (Exception e) @@ -4005,7 +4004,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Remove(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = false; } catch (Exception e) diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextField.cs b/src/Tizen.NUI/src/public/BaseComponents/TextField.cs index 638115f98..c74415b5b 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextField.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextField.cs @@ -1,5 +1,5 @@ /* - * Copyright(c) 2021 Samsung Electronics Co., Ltd. + * Copyright(c) 2025 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,6 @@ namespace Tizen.NUI.BaseComponents { static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextField"; static private string defaultFontFamily = "TizenSans"; - private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged(); private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); private string textFieldTextSid = null; private string textFieldPlaceHolderTextSid = null; @@ -636,7 +635,7 @@ namespace Tizen.NUI.BaseComponents { try { - newFontFamily = SystemSettings.FontType; + newFontFamily = SystemFontTypeChangedManager.FontType; } catch (Exception e) { @@ -3605,7 +3604,7 @@ namespace Tizen.NUI.BaseComponents try { - systemSettingsFontSize = SystemSettings.FontSize; + systemSettingsFontSize = SystemFontSizeChangedManager.FontSize; } catch (Exception e) { @@ -3985,7 +3984,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Add(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Add(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = true; } catch (Exception e) @@ -4002,7 +4001,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Remove(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = false; } catch (Exception e) diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs b/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs index d1e033ecd..4b47a5041 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs @@ -1,5 +1,5 @@ /* - * Copyright(c) 2023 Samsung Electronics Co., Ltd. + * Copyright(c) 2025 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -228,7 +228,6 @@ namespace Tizen.NUI.BaseComponents // Do nothing. Just call for load static values. } - private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged(); private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextLabel"; static private string defaultFontFamily = "BreezeSans"; @@ -555,7 +554,7 @@ namespace Tizen.NUI.BaseComponents { try { - newFontFamily = SystemSettings.FontType; + newFontFamily = SystemFontTypeChangedManager.FontType; } catch (Exception e) { @@ -2560,7 +2559,7 @@ namespace Tizen.NUI.BaseComponents try { - systemSettingsFontSize = SystemSettings.FontSize; + systemSettingsFontSize = SystemFontSizeChangedManager.FontSize; } catch (Exception e) { @@ -2908,7 +2907,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Add(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Add(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = true; } catch (Exception e) @@ -2925,7 +2924,7 @@ namespace Tizen.NUI.BaseComponents { try { - systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged); + SystemFontTypeChangedManager.Remove(SystemSettingsFontTypeChanged); hasSystemFontTypeChanged = false; } catch (Exception e) diff --git a/src/Tizen.NUI/src/public/Theme/DefaultThemeCommon.cs b/src/Tizen.NUI/src/public/Theme/DefaultThemeCommon.cs index b88af1f84..bf199be58 100644 --- a/src/Tizen.NUI/src/public/Theme/DefaultThemeCommon.cs +++ b/src/Tizen.NUI/src/public/Theme/DefaultThemeCommon.cs @@ -37,7 +37,7 @@ namespace Tizen.NUI // TextLabel style. theme.AddStyleWithoutClone("Tizen.NUI.BaseComponents.TextLabel", new TextLabelStyle() { - FontFamily = Tizen.NUI.FontFamily.UseSystemSetting, + FontFamily = "BreezeSans", PixelSize = 24, TextColor = new Color(0.04f, 0.05f, 0.13f, 1), FontStyle = new PropertyMap().Add("weight", new PropertyValue("regular")), @@ -52,7 +52,7 @@ namespace Tizen.NUI // TextField style. theme.AddStyleWithoutClone("Tizen.NUI.BaseComponents.TextField", new TextFieldStyle() { - FontFamily = Tizen.NUI.FontFamily.UseSystemSetting, + FontFamily = "BreezeSans", PixelSize = 24, TextColor = new Color(0.04f, 0.05f, 0.13f, 1), PlaceholderTextColor = new Vector4(0.79f, 0.79f, 0.79f, 1), @@ -89,7 +89,7 @@ namespace Tizen.NUI // TextEditor style. theme.AddStyleWithoutClone("Tizen.NUI.BaseComponents.TextEditor", new TextEditorStyle() { - FontFamily = Tizen.NUI.FontFamily.UseSystemSetting, + FontFamily = "BreezeSans", PixelSize = 24, TextColor = new Color(0.04f, 0.05f, 0.13f, 1), PlaceholderTextColor = new Color(0.79f, 0.79f, 0.79f, 1),