From cac0909d8ca1027c98b3d7bb7285cafdf7da62fb Mon Sep 17 00:00:00 2001 From: "pengfei.zhou" Date: Fri, 6 Dec 2019 14:54:33 +0800 Subject: [PATCH] feat:add Input --- src/util/color.ts | 1 + src/widget/index.widget.ts | 3 +- src/widget/input.ts | 80 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/widget/input.ts diff --git a/src/util/color.ts b/src/util/color.ts index bac1f9c3..3e0e698c 100644 --- a/src/util/color.ts +++ b/src/util/color.ts @@ -63,6 +63,7 @@ export class Color implements Modeling { } alpha(v: number) { + v = v * 255 return new Color((this._value & 0xffffff) | ((v & 0xff) << 24)) } diff --git a/src/widget/index.widget.ts b/src/widget/index.widget.ts index 14449949..26428538 100644 --- a/src/widget/index.widget.ts +++ b/src/widget/index.widget.ts @@ -20,4 +20,5 @@ export * from './list' export * from './slider' export * from './scroller' export * from './refreshable' -export * from './flowlayout' \ No newline at end of file +export * from './flowlayout' +export * from './input' \ No newline at end of file diff --git a/src/widget/input.ts b/src/widget/input.ts new file mode 100644 index 00000000..f03080e4 --- /dev/null +++ b/src/widget/input.ts @@ -0,0 +1,80 @@ +/* + * Copyright [2019] [Doric.Pub] + * + * 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. + */ +import { View, IView, Property } from "../ui/view"; +import { Color } from "../util/color"; +import { Gravity } from "../util/gravity"; +import { BridgeContext } from "../runtime/global"; + +export interface IInput extends IView { + text?: string + textColor?: Color + textSize?: number + hintText?: string + hintTextColor?: Color + multilines?: boolean + textAlignment?: Gravity + onTextChange?: (text: string) => void + onFocusChange?: (focused: boolean) => void +} + +export class Input extends View implements IInput { + + @Property + text?: string + + @Property + textColor?: Color + + @Property + textSize?: number + + @Property + hintText?: string + + @Property + hintTextColor?: Color + + @Property + multiline?: boolean + + @Property + textAlignment?: Gravity + + @Property + onTextChange?: (text: string) => void + + @Property + onFocusChange?: (focused: boolean) => void + + getText(context: BridgeContext) { + return this.nativeChannel(context, 'getText')() as Promise + } + + setSelection(context: BridgeContext, start: number, end: number = start) { + return this.nativeChannel(context, 'setSelection')({ + start, + end, + }) as Promise + } + + requestFocus(context: BridgeContext) { + return this.nativeChannel(context, 'requestFocus')() + } + + releaseFocus(context: BridgeContext) { + return this.nativeChannel(context, 'releaseFocus')() + } +} \ No newline at end of file