You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/04/26 08:50:54 UTC

incubator-weex git commit: + [android] Use TextDecorationSpan to implement "text-decoraion" instead of split spans.

Repository: incubator-weex
Updated Branches:
  refs/heads/0.13-dev cf755d4b5 -> 9b8709d4a


+ [android] Use TextDecorationSpan to implement "text-decoraion" instead of split spans.

This is just an optimization, the behavior of the .js code would not be affected.


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9b8709d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9b8709d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9b8709d4

Branch: refs/heads/0.13-dev
Commit: 9b8709d4aa3514462be1a98a5d53b97ae901bdc2
Parents: cf755d4
Author: YorkShen <sh...@gmail.com>
Authored: Mon Apr 24 16:07:48 2017 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Wed Apr 26 16:31:00 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/dom/TextDecorationSpan.java | 55 ++++++++++++++++++++
 .../main/java/com/taobao/weex/dom/WXStyle.java  | 32 ++++++++----
 .../com/taobao/weex/dom/WXTextDomObject.java    | 11 +---
 .../weex/ui/component/WXTextDecoration.java     |  1 +
 4 files changed, 79 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b8709d4/android/sdk/src/main/java/com/taobao/weex/dom/TextDecorationSpan.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/TextDecorationSpan.java b/android/sdk/src/main/java/com/taobao/weex/dom/TextDecorationSpan.java
new file mode 100644
index 0000000..c7d2579
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/TextDecorationSpan.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package com.taobao.weex.dom;
+
+
+import android.support.annotation.NonNull;
+import android.text.TextPaint;
+import android.text.style.CharacterStyle;
+import android.text.style.UpdateAppearance;
+
+import com.taobao.weex.ui.component.WXTextDecoration;
+
+public class TextDecorationSpan extends CharacterStyle
+    implements UpdateAppearance {
+
+  private final WXTextDecoration mTextDecoration;
+
+  public TextDecorationSpan(@NonNull WXTextDecoration wxTextDecoration) {
+    this.mTextDecoration = wxTextDecoration;
+  }
+
+  @Override
+  public void updateDrawState(TextPaint tp) {
+    switch (mTextDecoration) {
+      case LINETHROUGH:
+        tp.setUnderlineText(false);
+        tp.setStrikeThruText(true);
+        break;
+      case UNDERLINE:
+        tp.setUnderlineText(true);
+        tp.setStrikeThruText(false);
+        break;
+      case NONE:
+        tp.setUnderlineText(false);
+        tp.setStrikeThruText(false);
+        break;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b8709d4/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
index 6d45fd2..0573d77 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
@@ -71,18 +71,28 @@ public class WXStyle implements Map<String, Object>,Cloneable {
    * text-decoration
    **/
   public static WXTextDecoration getTextDecoration(Map<String, Object> style) {
-    Object obj = style.get(Constants.Name.TEXT_DECORATION);
-    if (obj == null) {
-      return WXTextDecoration.NONE;
-    }
-    String textDecoration = obj.toString();
-    if (textDecoration.equals("underline")) {
-      return WXTextDecoration.UNDERLINE;
-    }
-    if (textDecoration.equals("line-through")) {
-      return WXTextDecoration.LINETHROUGH;
+    Object obj;
+    WXTextDecoration ret;
+    if (style == null || (obj = style.get(Constants.Name.TEXT_DECORATION)) == null) {
+      ret = WXTextDecoration.NONE;
+    } else {
+      String textDecoration = obj.toString();
+      switch (textDecoration) {
+        case "underline":
+          ret = WXTextDecoration.UNDERLINE;
+          break;
+        case "line-through":
+          ret = WXTextDecoration.LINETHROUGH;
+          break;
+        case "none":
+          ret = WXTextDecoration.NONE;
+          break;
+        default:
+          ret = WXTextDecoration.INVALID;
+          break;
+      }
     }
-    return WXTextDecoration.NONE;
+    return ret;
   }
 
   public static String getTextColor(Map<String, Object> style) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b8709d4/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index 03b84a9..8a69f50 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -33,8 +33,6 @@ import android.text.TextUtils;
 import android.text.style.AbsoluteSizeSpan;
 import android.text.style.AlignmentSpan;
 import android.text.style.ForegroundColorSpan;
-import android.text.style.StrikethroughSpan;
-import android.text.style.UnderlineSpan;
 
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.common.Constants;
@@ -407,13 +405,8 @@ public class WXTextDomObject extends WXDomObject {
     List<SetSpanOperation> ops = new LinkedList<>();
     int start = 0;
     if (end >= start) {
-      if (mTextDecoration == WXTextDecoration.UNDERLINE) {
-        ops.add(new SetSpanOperation(start, end,
-                                     new UnderlineSpan(), spanFlag));
-      }
-      if (mTextDecoration == WXTextDecoration.LINETHROUGH) {
-        ops.add(new SetSpanOperation(start, end,
-                                     new StrikethroughSpan(), spanFlag));
+      if (mTextDecoration == WXTextDecoration.UNDERLINE || mTextDecoration == WXTextDecoration.LINETHROUGH) {
+        ops.add(new SetSpanOperation(start, end, new TextDecorationSpan(mTextDecoration), spanFlag));
       }
       if (mIsColorSet) {
         ops.add(new SetSpanOperation(start, end,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b8709d4/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
index d7a2471..44638ff 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
@@ -19,6 +19,7 @@
 package com.taobao.weex.ui.component;
 
 public enum WXTextDecoration {
+  INVALID,
   NONE,
   UNDERLINE,
   LINETHROUGH,