From e89def7104b55bdbc3940d5f5f7cdabe2969b563 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Fri, 8 Apr 2016 14:27:50 +0300 Subject: [PATCH] Style properties are now applied on Buttons when no other TextBase elements exist on the page Resolves #1902 --- ui/button/button.android.ts | 47 ++++++++++++++++++++++++ ui/text-base/text-base-styler.android.ts | 37 ++----------------- 2 files changed, 51 insertions(+), 33 deletions(-) diff --git a/ui/button/button.android.ts b/ui/button/button.android.ts index 35e294aa8..363879be8 100644 --- a/ui/button/button.android.ts +++ b/ui/button/button.android.ts @@ -1,6 +1,8 @@ import common = require("./button-common"); import utils = require("utils/utils") import dependencyObservable = require("ui/core/dependency-observable"); +import style = require("ui/styling/style"); +import { TextBaseStyler as TBS } from "ui/text-base/text-base-styler"; global.moduleMerge(common, exports); @@ -81,3 +83,48 @@ export class Button extends common.Button { } } } + +export class ButtonStyler implements style.Styler { + public static registerHandlers() { + // !!! IMPORTANT !!! This was moved here because of the following bug: https://github.com/NativeScript/NativeScript/issues/1902 + // If there is no TextBase on the Page, the TextBaseStyler.registerHandlers + // method was never called because the file it is called from was never required. + + // Register the same stylers for Button. + // It also derives from TextView but is not under TextBase in our View hierarchy. + var TextBaseStyler = TBS; + style.registerHandler(style.colorProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setColorProperty, + TextBaseStyler.resetColorProperty, + TextBaseStyler.getNativeColorValue), "Button"); + + style.registerHandler(style.fontInternalProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setFontInternalProperty, + TextBaseStyler.resetFontInternalProperty, + TextBaseStyler.getNativeFontInternalValue), "Button"); + + style.registerHandler(style.textAlignmentProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setTextAlignmentProperty, + TextBaseStyler.resetTextAlignmentProperty, + TextBaseStyler.getNativeTextAlignmentValue), "Button"); + + style.registerHandler(style.textDecorationProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setTextDecorationProperty, + TextBaseStyler.resetTextDecorationProperty), "Button"); + + style.registerHandler(style.textTransformProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setTextTransformProperty, + TextBaseStyler.resetTextTransformProperty), "Button"); + + style.registerHandler(style.whiteSpaceProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setWhiteSpaceProperty, + TextBaseStyler.resetWhiteSpaceProperty), "Button"); + + style.registerHandler(style.letterSpacingProperty, new style.StylePropertyChangedHandler( + TextBaseStyler.setLetterSpacingProperty, + TextBaseStyler.resetLetterSpacingProperty, + TextBaseStyler.getLetterSpacingProperty), "Button"); + } +} + +ButtonStyler.registerHandlers(); \ No newline at end of file diff --git a/ui/text-base/text-base-styler.android.ts b/ui/text-base/text-base-styler.android.ts index 339e88e8b..d8b2e127b 100644 --- a/ui/text-base/text-base-styler.android.ts +++ b/ui/text-base/text-base-styler.android.ts @@ -158,38 +158,9 @@ export class TextBaseStyler implements style.Styler { TextBaseStyler.resetLetterSpacingProperty, TextBaseStyler.getLetterSpacingProperty), "TextBase"); - // Register the same stylers for Button. - // It also derives from TextView but is not under TextBase in our View hierarchy. - style.registerHandler(style.colorProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setColorProperty, - TextBaseStyler.resetColorProperty, - TextBaseStyler.getNativeColorValue), "Button"); - - style.registerHandler(style.fontInternalProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setFontInternalProperty, - TextBaseStyler.resetFontInternalProperty, - TextBaseStyler.getNativeFontInternalValue), "Button"); - - style.registerHandler(style.textAlignmentProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setTextAlignmentProperty, - TextBaseStyler.resetTextAlignmentProperty, - TextBaseStyler.getNativeTextAlignmentValue), "Button"); - - style.registerHandler(style.textDecorationProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setTextDecorationProperty, - TextBaseStyler.resetTextDecorationProperty), "Button"); - - style.registerHandler(style.textTransformProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setTextTransformProperty, - TextBaseStyler.resetTextTransformProperty), "Button"); - - style.registerHandler(style.whiteSpaceProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setWhiteSpaceProperty, - TextBaseStyler.resetWhiteSpaceProperty), "Button"); - - style.registerHandler(style.letterSpacingProperty, new style.StylePropertyChangedHandler( - TextBaseStyler.setLetterSpacingProperty, - TextBaseStyler.resetLetterSpacingProperty, - TextBaseStyler.getLetterSpacingProperty), "Button"); + // !!! IMPORTANT !!! Button registrations were moved to button.android.ts to make sure they + // are executed when there is a Button on the page: https://github.com/NativeScript/NativeScript/issues/1902 + // If there is no TextBase on the Page, the TextBaseStyler.registerHandlers + // method was never called because the file it is called from was never required. } }