From 5328610be8b9c061562f70378b5dc8885e3f42ff Mon Sep 17 00:00:00 2001 From: ruifanyuan Date: Tue, 26 Dec 2023 20:46:40 +0800 Subject: [PATCH 01/39] fix(ios): return weight of zero for invalid font --- renderer/native/ios/renderer/HippyFont.mm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/renderer/native/ios/renderer/HippyFont.mm b/renderer/native/ios/renderer/HippyFont.mm index 0f33cea1114..18a66983f2e 100644 --- a/renderer/native/ios/renderer/HippyFont.mm +++ b/renderer/native/ios/renderer/HippyFont.mm @@ -65,6 +65,9 @@ static NativeRenderFontWeight weightOfFont(UIFont *font) { }; NSString *fontName = font.fontName; + if(fontName == nil){ + return 0.0; + } CFStringCompareFlags options = kCFCompareCaseInsensitive | kCFCompareAnchored | kCFCompareBackwards; for(int i = 0; i < sizeof(suffixToWeight) / sizeof(suffixToWeight[0]); ++i){ struct SuffixWeight item = suffixToWeight[i]; @@ -78,11 +81,11 @@ static NativeRenderFontWeight weightOfFont(UIFont *font) { } static BOOL isItalicFont(UIFont *font) { - return (CTFontGetSymbolicTraits((CTFontRef)font) & kCTFontTraitItalic) != 0; + return font != nil && (CTFontGetSymbolicTraits((CTFontRef)font) & kCTFontTraitItalic) != 0; } static BOOL isCondensedFont(UIFont *font) { - return (CTFontGetSymbolicTraits((CTFontRef)font) & kCTFontTraitCondensed) != 0; + return font != nil && (CTFontGetSymbolicTraits((CTFontRef)font) & kCTFontTraitCondensed) != 0; } static UIFont *cachedSystemFont(CGFloat size, NativeRenderFontWeight weight) { From 3196083348442ecd2f014ab3aeecf2e05d00e689 Mon Sep 17 00:00:00 2001 From: ruifanyuan Date: Wed, 27 Dec 2023 17:11:20 +0800 Subject: [PATCH 02/39] chore(docs): update demo docs --- docs/assets/img/3.0-demo-create.png | Bin 0 -> 126112 bytes docs/assets/img/3.0-demo-helloworld.png | Bin 0 -> 84699 bytes docs/assets/img/3.0-demo-home.png | Bin 0 -> 492952 bytes docs/assets/img/3.0-demo-page-management.png | Bin 0 -> 99402 bytes docs/assets/img/3.0-demo.png | Bin 0 -> 102310 bytes docs/development/demo.md | 259 ++++++++++++++----- 6 files changed, 189 insertions(+), 70 deletions(-) create mode 100644 docs/assets/img/3.0-demo-create.png create mode 100644 docs/assets/img/3.0-demo-helloworld.png create mode 100644 docs/assets/img/3.0-demo-home.png create mode 100644 docs/assets/img/3.0-demo-page-management.png create mode 100644 docs/assets/img/3.0-demo.png diff --git a/docs/assets/img/3.0-demo-create.png b/docs/assets/img/3.0-demo-create.png new file mode 100644 index 0000000000000000000000000000000000000000..23585f0848d53ec6126b7ee2e586b4a9555b1f14 GIT binary patch literal 126112 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%0D1JWFdq>IToJj*d-^n#%03C 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/3.0-demo-helloworld.png b/docs/assets/img/3.0-demo-helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..14dbe00df104e33881708e96879b95aecf41c3c9 GIT binary patch literal 84699 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/3.0-demo-home.png b/docs/assets/img/3.0-demo-home.png new file mode 100644 index 0000000000000000000000000000000000000000..42637ec745439a0f31751d3413d57dd7a036b425 GIT binary patch literal 492952 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

dAGE2u;8&LWai}um-oV?y6hN|F)~+|7 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

{$75q8f`yw*hV~8Quop)O|I9A8UW>etEco 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

Lly=?i-{ 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℞1bp01U^Debs+x{xV7`C{N|MN%;Og`KwD@ln4= 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�^!ouS8Oty%IefP7p$zMob5XWvSS& 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 npm 最低要求 v7 版本, nodejs 最低要求 v16 版本 +首先,通过Homebrew包管理工具安装git, git-lfs, node(v16) and npm(v7) -Hippy 仓库根目录运行 `git clone https://github.com/Tencent/Hippy.git` 和 `npm install` 命令。 +```shell +brew install git git-lfs node@16 xcodegen cmake +``` -!> Hippy 仓库应用了 [git-lfs](https://git-lfs.github.com/) 来管理 so、gz、otf 文件, 请确保你已安装 [git-lfs](https://git-lfs.github.com/)。 +#### 编译iOS Demo环境准备 -对于 macOS 开发者: +1. Xcode -* [Xcode](https://developer.apple.com/xcode/) 和 iOS SDK: 用于构建 iOS App。 -* [Cocoapods](https://cocoapods.org/): 用于管理iOS工程文件。 -* [Android Studio](https://developer.android.com/studio) 和 NDK: 用于构建 Android App。 + 通过Apple App Store安装[Xcode](https://apps.apple.com/cn/app/xcode/id497799835?l=en-GB&mt=12) -对 Windows 开发者: +2. 通过gem命令安装Cocoapods -* [Android Studio](https://developer.android.com/studio) 和 NDK: 用于构建 Android App。 + `sudo gem install cocoapods` -## 使用 js demo 构建 iOS App -对于首次进行 iOS 开发,我们推荐优先采用 iOS 模拟器。然而你也可以修改 Xcode 配置将 app 安装到 iPhone 上。 +#### 编译Android Demo环境准备 -1. 在Hippy driver/js目录执行命令 +1. Android Studio - ```bash - npm run init + 通过android开发者平台下载安装[Android Studio](https://developer.android.com/studio) - # 该命令由 `npm install && npx lerna bootstrap && npm run build` 组成,你也可以分别执行这几个命令。 - # - # npm install: 安装项目所需的脚本依赖。 - # - # `npx lerna bootstrap`: 安装每一个 JS 包的依赖。(Hippy 使用 [Lerna](https://lerna.js.org/) 管理多个 js 包) - # - # `npm run build`: 构建每一个 JS SDK 包。 - ``` - -2. 选择一个你想体验的 JS Demo,在 Hippy 项目 driver/js目录执行 - - ```bash - npm run buildexample [hippy-react-demo|hippy-vue-demo|hippy-vue-next-demo] +2. Android NDK + + 通过android开发者平台下载安装[NDK](https://developer.android.com/ndk?hl=en) + +### Windows开发环境 + +可以Windows上开发Android应用,请安装以下依赖。 + +1. Android Studio + + 通过android开发者平台下载安装[Android Studio](https://developer.android.com/studio) - # 方括号内选择你想构建的 JS Demo,执行后会将对应的 JS 相关资源文件生成到终端 Demo 目录下。 +2. Android NDK + + 通过android开发者平台下载安装[NDK](https://developer.android.com/ndk?hl=en) + +3. Git for Windows + + 通过(https://gitforwindows.org)下载安装Git for Windows + +4. Node和NPM + + 通过指引安装[nodejs和npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm),建议使用Node v16,NPM v7版本 + + +## 代码拉取 + +```shell +git clone https://github.com/Tencent/Hippy.git +``` + +## 编译运行Demo + +以下基于macOS平台,分别说明如何编译Android和iOS Demo。 + +### 编译运行iOS Demo + +```shell +# 进入Hippy源码目录 +cd ./framework/examples/ios-demo +# 执行xcodegen生成工程 +xcodegen +# 打开workspace,编译运行即可 +open HippyDemo.xcworkspace +``` + +### 编译运行Android Demo + +1. 使用 Android Studio 打开根目录 `Android Project` 项目。 +2. 使用 USB 线连接 Android 设备,并确保设备 USB 调试模式已经开启(电脑 Terminal 执行 `adb devices` 检查手机连接状态)。 +3. Android Studio 执行项目构建,并安装 APK运行。 + +### 效果预览 + +Demo运行起来后,可见Demo首页类似 + +Demo效果 + +点击"New Page",进入页面管理 + +Demo效果 + +点击"+"号创建新的Hippy页面 + +Demo效果 + +点击Create按钮后,显示出了Hippy渲染的页面 + +Demo效果 + + +## 动手尝试 + +如果你不满足于简单把Demo跑起来,还可以动手尝试修改前端代码,可以按照以下指引进行。 + +### 了解Demo项目代码 + +Demo项目Native代码位于framework/examples/,前端代码位于driver/js/examples目录 + +```shell +steven@STEVEN-MC Hippy % ls driver/js/examples +total 0 +drwxr-xr-x 8 steven staff 256 Oct 30 14:53 hippy-react-demo +drwxr-xr-x 9 steven staff 288 Oct 30 14:53 hippy-vue-demo +drwxr-xr-x 11 steven staff 352 Oct 30 14:53 hippy-vue-next-demo - # 如果该步骤出现异常,你也可以 `cd` 到 `examples` 下的任意一个 JS Demo 目录,执行 `npm install --legacy-peer-deps` 去安装 Demo 的依赖。 - ``` +``` -3. 打开`examples/ios-demo`目录, 使用`Cocoapods`生成工程项目文件 +其中前端hippy-react-demo、hippy-vue-demo、hippy-vue-next-demo这3者为前端项目Demo,分别演示基于hippy-react、hippy-vue、hippy-vue-next开发项目。 - ```bash - cd examples/ios-demo - pod install - ``` +### 修改前端工程 -4. 用`Xcode`打开上一步Cocoapods生成的 `HippyDemo.xcworkspace`工程文件,进行 iOS App 构建。 +以hippy-react-demo为例,打开hippy-react-demo/src/app.jsx,将内容替换为以下代码片段 -> 更多细节请参考 [iOS 集成章节](development/native-integration?id=ios). +```jsx +import React, { Component } from 'react'; +import { + View, + Text +} from '@hippy/react'; -## 使用 js demo 构建 Android App +export default class App extends Component { + render() { + return ( + + Hello World! + + ); + } +} +``` -1. Hippy driver/js 目录执行 `npm run init`。 +### 编译修改后的前端工程 - > 该命令由 `npm install && npx lerna bootstrap && npm run build` 组成,你也可以分别执行这几个命令。 - > - > `npm install`: 安装项目所需的脚本依赖。 - > - > `npx lerna bootstrap`: 安装每一个 JS 包的依赖。(Hippy 使用 [Lerna](https://lerna.js.org/) 管理多个 js 包) - > - > `npm run build`: 构建每一个 JS SDK 包。 +先在Hippy**根目录**执行命令 -2. 选择一个你想体验的 JS Demo,在 Hippy driver/js目录执行 `npm run buildexample [hippy-react-demo|hippy-vue-demo|hippy-vue-next-demo]`(方括号内选择你想构建的 JS Demo),执行后会将对应的 JS 相关资源文件生成到终端 Demo 目录下。 -3. 使用 Android Studio 打开根目录 `Android Project` 项目。 -4. 使用 USB 线连接 Android 设备,并确保设备 USB 调试模式已经开启(电脑 Terminal 执行 `adb devices` 检查手机连接状态)。 -5. Android Studio 执行项目构建,并安装 APK。 +```shell +npm install +``` -> 如果 `步骤二` 出现异常,你也可以 `cd` 到 `examples` 下的任意一个 JS Demo 目录,执行 `npm install --legacy-peer-deps` 去安装 Demo 的依赖。 -> -> 更多细节请参考 [Android 集成章节](development/native-integration?id=android)。 +以hippy-react-demo为例说明编译流程 -## 调试 js demo +```shell +cd driver/js/ +npm run init -1. 按照 `使用 js demo 构建 iOS App` 或 `使用 js demo 构建 Android App` 步骤构建 App。 -2. Hippy 项目driver/js目录执行 `npm run init:example [hippy-react-demo|hippy-vue-demo|hippy-vue-next-demo]`。 -3. Hippy 项目driver/js目录执行 `npm run debugexample [hippy-react-demo|hippy-vue-demo|hippy-vue-next-demo] dev`。 +# 该命令由 `npm install && npx lerna bootstrap && npm run build` 组成,你也可以分别执行这几个命令。 +# +# npm install: 安装项目所需的脚本依赖。 +# +# `npx lerna bootstrap`: 安装每一个 JS 包的依赖。(Hippy 使用 [Lerna](https://lerna.js.org/) 管理多个 js 包) +# +# `npm run build`: 构建每一个 JS SDK 包。 -> 或者你也可以 `cd` 到 `driver/js/examples` 下不同的 DEMO 目录执行 `npm run hippy:dev` 开启 JS Bundle 调试. -> -> 为了在 Demo 调试模式下便于修改SDK源码进行调试,@hippy/react、 @hippy/vue,、@hippy/vue-next 等 npm 包会链接到 `packages` > `[different package]` > `dist` 的生产文件下,所以一旦你修改了 JS SDK的源码并想要在目标 JS DEMO 里立即生效,请再次在 Hippy 项目driver/js目录执行 `npm run build`。 -> -> 更多调试细节请参考 [Hippy 调试文档](development/debug)。 +# 编译hippy-react-demo +npm run buildexample hippy-react-demo -## 构建生产环境 JS demo +# 如果上一条命令有异常,可以执行以下命令 +cd examples/hippy-react-demo +npm install --legacy-peer-deps +cd ../.. +npm run buildexample hippy-react-demo +``` -1. 按照 `使用 js demo 构建 iOS App` 或 `使用 js demo 构建 Android App` 步骤构建 App。 -2. `cd` 到 `examples` 下不同的 DEMO 目录(hippy-react-demo/hippy-vue-demo/hippy-vue-next-demo)。 -3. 执行 `npm install` 安装不同 DEMO 的依赖包。 -4. 执行 `npm run hippy:vendor` 和 `npm run hippy:build` 构建出生产环境所需的 `vendor.[android|ios].js` 和 `index.[android|ios].js`。 +执行完后,构建产物将会被打包放到examples/hippy-react-demo/dist目录中,目录内容类似 -> Hippy demo 使用 Webpack DllPlugin 分离出公共的 js common 包和业务包,以便多个业务能够复用 common 代码。 +```shell +driver/js/examples/hippy-react-demo/dist +├── android +│ ├── assets +│ │ ├── defaultSource.jpg +│ │ └── hippyLogoWhite.png +│ ├── asyncComponentFromHttp.android.js +│ ├── asyncComponentFromLocal.android.js +│ ├── index.android.js +│ ├── vendor-manifest.json +│ └── vendor.android.js +└── ios + ├── assets + │ ├── defaultSource.jpg + │ └── hippyLogoWhite.png + ├── asyncComponentFromHttp.ios.js + ├── asyncComponentFromLocal.ios.js + ├── index.ios.js + ├── vendor-manifest.json + └── vendor.ios.js +5 directories, 14 files +``` +### 运行前端编译产物 + +正常构建后产物会被拷贝到Android和iOS的res目录,如果发现未拷贝,可以手动执行。 +把examples/hippy-react-demo/dist/ios目录内容整体拷贝到ios demo的res/react目录,当用Android来跑时,注意拷贝到Android对应的目录。 + +```shell +cp -R driver/js/examples/hippy-react-demo/dist/ios/* framework/examples/ios-demo/res/react +cp -R driver/js/examples/hippy-react-demo/dist/android/* framework/examples/android-demo/res/react/ +``` + +接下来,按照[编译运行Demo](#编译运行demo)一节运行Demo。 +效果如图所示 + + +Demo效果 + +恭喜你完成了Hippy的初步体验,下一步参考[Native工程集成章节](development/native-integration)将Hippy接入到你现有的工程吧。 From 5440642d73f2271489a3ec34d4b8a9e186c27794 Mon Sep 17 00:00:00 2001 From: iPel Date: Fri, 11 Aug 2023 16:30:56 +0800 Subject: [PATCH 03/39] feat(android): complex border styles support --- .../tencent/renderer/component/Component.java | 2 +- .../drawable/BackgroundDrawable.java | 475 +++-------- .../component/drawable/BackgroundHolder.java | 25 +- .../drawable/BorderResolvedInfo.java | 745 ++++++++++++++++++ .../component/drawable/ContentDrawable.java | 13 +- .../component/drawable/TextDrawable.java | 40 +- 6 files changed, 874 insertions(+), 426 deletions(-) create mode 100644 renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BorderResolvedInfo.java diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/Component.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/Component.java index e0de48ada92..69c9b60d252 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/Component.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/Component.java @@ -182,7 +182,7 @@ public void onHostViewRemoved() { @Nullable public Path getContentRegionPath() { - return (mBackgroundDrawable != null) ? mBackgroundDrawable.getBorderRadiusPath() : null; + return (mBackgroundDrawable != null) ? mBackgroundDrawable.getBorderPath() : null; } /** diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundDrawable.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundDrawable.java index 5f8d604a7a7..a416d41f940 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundDrawable.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundDrawable.java @@ -18,21 +18,22 @@ import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PathEffect; import android.graphics.RectF; +import android.graphics.Region; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Px; import com.tencent.mtt.hippy.utils.LogUtils; -import com.tencent.mtt.hippy.utils.PixelUtil; import java.util.List; public class BackgroundDrawable extends BaseDrawable implements BackgroundHolder { private static final String TAG = "BackgroundDrawable"; + private final BorderResolvedInfo mResolvedInfo = new BorderResolvedInfo(); private int mBackgroundColor = Color.TRANSPARENT; private int mBorderWidth = 0; private int mBorderColor = Color.TRANSPARENT; @@ -49,14 +50,6 @@ public class BackgroundDrawable extends BaseDrawable implements BackgroundHolder @Nullable private BorderStyles mBorderStyles; @Nullable - private DashPathEffect mDashPathEffect; - @Nullable - private DashPathEffect mDotPathEffect; - @Nullable - private Path mBorderPath; - @Nullable - private Path mBorderRadiusPath; - @Nullable private GradientPaint mGradientPaint; public enum BorderArc { @@ -92,111 +85,68 @@ public void draw(@NonNull Canvas canvas) { } else { mPaint.reset(); } + mPaint.setAntiAlias(true); drawShadow(canvas); updatePath(); - if (hasBorderRadius()) { - drawBackgroundColorWithRadius(canvas); - drawBorderWithRadius(canvas); - } else { - drawBackgroundColor(canvas); - drawBorder(canvas); - } + drawBackgroundColor(canvas); + drawBorder(canvas); } public boolean shouldUpdatePath() { return mUpdatePathRequired; } + @NonNull @Override - public RectF getContentRectF() { - return mRect; - } - - @Nullable - public Path getBorderRadiusPath() { - return mBorderRadiusPath; + public RectF getContentRegion() { + updatePath(); + return mResolvedInfo.contentRegion; } - @SuppressWarnings("unused") @Nullable - public BorderRadius getBorderRadii() { - return mBorderRadii; - } - - @SuppressWarnings("unused") - public float getBorderRadius() { - return mBorderRadius; - } - @Override - public int getBorderWidth() { - return mBorderWidth; + public Path getContentPath() { + updatePath(); + return mResolvedInfo.hasContentRadius ? mResolvedInfo.borderInsidePath : null; } + @Nullable @Override - public boolean hasBorderRadius() { - if (mBorderRadius > 0) { - return true; - } - return mBorderRadii != null && (mBorderRadii.bottomRight > 0 || mBorderRadii.topRight > 0 - || mBorderRadii.bottomLeft > 0 || mBorderRadii.topLeft > 0); - } - - private boolean hasTransparentColorOnAllSides() { - if (mBorderColor == Color.TRANSPARENT && mBorderColors == null) { - return true; - } - return mBorderColors != null && mBorderColors.hasTransparentColorOnAllSides(); - } - - private boolean hasSameColorOnAllSides() { - return mBorderColors == null || mBorderColors.hasSameColorOnAllSides(); - } - - private boolean hasSameStyleOnAllSides() { - return mBorderStyles == null || mBorderStyles.hasSameStyleOnAllSides(); + public Path getBorderPath() { + updatePath(); + return mResolvedInfo.hasBorderRadius ? mResolvedInfo.borderOutsidePath : null; } protected void updatePath() { if (!mUpdatePathRequired) { return; } - if (mBorderRadiusPath == null) { - mBorderRadiusPath = new Path(); - } else { - mBorderRadiusPath.rewind(); - } - final RectF rect = new RectF(mRect); - if (mBorderWidth > 1) { - rect.inset(mBorderWidth, mBorderWidth); - } - final float topLeft = (mBorderRadii != null) ? mBorderRadii.topLeft : mBorderRadius; - final float topRight = (mBorderRadii != null) ? mBorderRadii.topRight : mBorderRadius; - final float bottomRight = (mBorderRadii != null) ? mBorderRadii.bottomRight : mBorderRadius; - final float bottomLeft = (mBorderRadii != null) ? mBorderRadii.bottomLeft : mBorderRadius; - mBorderRadiusPath.addRoundRect(rect, - new float[]{topLeft, topLeft, topRight, topRight, bottomRight, bottomRight, - bottomLeft, bottomLeft}, Path.Direction.CW); + mResolvedInfo.resolve(mRect, + mBorderWidth, mBorderWidths, + mBorderRadius, mBorderRadii, + mBorderColor, mBorderColors, + mBorderStyle, mBorderStyles); mUpdatePathRequired = false; } protected void drawBackgroundColor(@NonNull Canvas canvas) { + final Paint paint; if (mGradientPaint != null && mGradientPaint.initialize(mRect)) { - canvas.drawRect(mRect, mGradientPaint); - } else if (mPaint != null) { + paint = mGradientPaint; + } else if (mPaint != null && mBackgroundColor != Color.TRANSPARENT) { mPaint.setColor(mBackgroundColor); mPaint.setStyle(Paint.Style.FILL); - canvas.drawRect(mRect, mPaint); + paint = mPaint; + } else { + // no background + return; } - } - protected void drawBackgroundColorWithRadius(@NonNull Canvas canvas) { - if (mGradientPaint != null && mGradientPaint.initialize(mRect)) { - canvas.drawPath(mBorderRadiusPath, mGradientPaint); - } else if (mPaint != null) { - mPaint.setColor(mBackgroundColor); - mPaint.setStyle(Paint.Style.FILL); - canvas.drawPath(mBorderRadiusPath, mPaint); + if (mResolvedInfo.hasBorderRadius) { + assert mResolvedInfo.borderOutsidePath != null; + canvas.drawPath(mResolvedInfo.borderOutsidePath, paint); + } else { + canvas.drawRect(mRect, paint); } } @@ -234,305 +184,78 @@ protected void drawShadow(@NonNull Canvas canvas) { } protected void drawBorder(@NonNull Canvas canvas) { - final int leftWidth = (mBorderWidths == null) ? mBorderWidth : mBorderWidths.left; - final int topWidth = (mBorderWidths == null) ? mBorderWidth : mBorderWidths.top; - final int rightWidth = (mBorderWidths == null) ? mBorderWidth : mBorderWidths.right; - final int bottomWidth = (mBorderWidths == null) ? mBorderWidth : mBorderWidths.bottom; - if (hasSameColorOnAllSides()) { - final int borderColor = (mBorderColors == null) ? mBorderColor : mBorderColors.left; - drawBorderWithSingleColor(canvas, borderColor, leftWidth, topWidth, rightWidth, - bottomWidth); + if (!mResolvedInfo.hasVisibleBorder) { return; } - // Rectangles with different color borders currently do not support dash effect, - // so setDashPathEffect will not be called in the following drawing - // TODO: support dash effect with different border color of rectangle - final int leftColor = (mBorderColors == null) ? mBorderColor : mBorderColors.left; - final int topColor = (mBorderColors == null) ? mBorderColor : mBorderColors.top; - final int rightColor = (mBorderColors == null) ? mBorderColor : mBorderColors.right; - final int bottomColor = (mBorderColors == null) ? mBorderColor : mBorderColors.bottom; - if (mBorderPath == null) { - mBorderPath = new Path(); + canvas.save(); + if (mResolvedInfo.hasBorderRadius) { + canvas.clipPath(mResolvedInfo.borderOutsidePath); + if (mResolvedInfo.hasContentRadius) { + canvas.clipPath(mResolvedInfo.borderInsidePath, Region.Op.DIFFERENCE); + } } - assert mPaint != null; - if (leftWidth > 0 && leftColor != Color.TRANSPARENT) { - mPaint.setColor(leftColor); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left, mRect.top); - mBorderPath.lineTo(mRect.left + leftWidth, mRect.top + topWidth); - mBorderPath.lineTo(mRect.left + leftWidth, mRect.bottom - bottomWidth); - mBorderPath.lineTo(mRect.left, mRect.bottom); - mBorderPath.lineTo(mRect.left, mRect.top); - canvas.drawPath(mBorderPath, mPaint); - } - if (topWidth > 0 && topColor != Color.TRANSPARENT) { - mPaint.setColor(topColor); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left, mRect.top); - mBorderPath.lineTo(mRect.left + leftWidth, mRect.top + topWidth); - mBorderPath.lineTo(mRect.right - rightWidth, mRect.top + topWidth); - mBorderPath.lineTo(mRect.right, mRect.top); - mBorderPath.lineTo(mRect.left, mRect.top); - canvas.drawPath(mBorderPath, mPaint); - } - if (rightWidth > 0 && rightColor != Color.TRANSPARENT) { - mPaint.setColor(rightColor); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.right, mRect.top); - mBorderPath.lineTo(mRect.right, mRect.bottom); - mBorderPath.lineTo(mRect.right - rightWidth, mRect.bottom - bottomWidth); - mBorderPath.lineTo(mRect.right - rightWidth, mRect.top + topWidth); - mBorderPath.lineTo(mRect.right, mRect.top); - canvas.drawPath(mBorderPath, mPaint); - } - if (bottomWidth > 0 && bottomColor != Color.TRANSPARENT) { - mPaint.setColor(bottomColor); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left, mRect.bottom); - mBorderPath.lineTo(mRect.right, mRect.bottom); - mBorderPath.lineTo(mRect.right - rightWidth, mRect.bottom - bottomWidth); - mBorderPath.lineTo(mRect.left + leftWidth, mRect.bottom - bottomWidth); - mBorderPath.lineTo(mRect.left, mRect.bottom); - canvas.drawPath(mBorderPath, mPaint); - } - } - - protected void drawBorderWithSingleColor(@NonNull Canvas canvas, int borderColor, int leftWidth, - int topWidth, int rightWidth, int bottomWidth) { - if (borderColor == Color.TRANSPARENT) { + if (!mResolvedInfo.drawBorderSideBySide) { + assert mPaint != null; + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeWidth(mResolvedInfo.strokeWidth.left); + mPaint.setColor(mResolvedInfo.borderColor.left); + mPaint.setPathEffect(mResolvedInfo.pathEffect.left); + if (mResolvedInfo.hasContentRadius) { + canvas.drawPath(mResolvedInfo.borderMidlinePath, mPaint); + } else { + canvas.drawRect(mResolvedInfo.borderMidlineRect, mPaint); + } + } else { + drawBorderSideInternal(canvas, + mResolvedInfo.strokeWidth.left, + mResolvedInfo.borderColor.left, + mResolvedInfo.pathEffect.left, + mResolvedInfo.borderSideMidline.left, + mResolvedInfo.borderSideClip.left); + drawBorderSideInternal(canvas, + mResolvedInfo.strokeWidth.top, + mResolvedInfo.borderColor.top, + mResolvedInfo.pathEffect.top, + mResolvedInfo.borderSideMidline.top, + mResolvedInfo.borderSideClip.top); + drawBorderSideInternal(canvas, + mResolvedInfo.strokeWidth.right, + mResolvedInfo.borderColor.right, + mResolvedInfo.pathEffect.right, + mResolvedInfo.borderSideMidline.right, + mResolvedInfo.borderSideClip.right); + drawBorderSideInternal(canvas, + mResolvedInfo.strokeWidth.bottom, + mResolvedInfo.borderColor.bottom, + mResolvedInfo.pathEffect.bottom, + mResolvedInfo.borderSideMidline.bottom, + mResolvedInfo.borderSideClip.bottom); + } + canvas.restore(); + } + + private void drawBorderSideInternal(@NonNull Canvas canvas, int strokeWidth, int color, + @Nullable PathEffect pathEffect, Path borderPath, Path clipPath) { + if (strokeWidth <= 0) { return; } assert mPaint != null; - mPaint.setColor(borderColor); mPaint.setStyle(Paint.Style.STROKE); - if (leftWidth > 0) { - mPaint.setStrokeWidth(leftWidth); - setDashPathEffect(BorderSide.LEFT); - canvas.drawLine( - mRect.left + leftWidth / 2.0f, - mRect.top, - mRect.left + leftWidth / 2.0f, - mRect.bottom - bottomWidth, - mPaint); - } - if (topWidth > 0) { - mPaint.setStrokeWidth(topWidth); - setDashPathEffect(BorderSide.TOP); - canvas.drawLine( - mRect.left + leftWidth, - mRect.top + topWidth / 2.0f, - mRect.right, - mRect.top + topWidth / 2.0f, - mPaint); - } - if (rightWidth > 0) { - mPaint.setStrokeWidth(rightWidth); - setDashPathEffect(BorderSide.RIGHT); - canvas.drawLine( - mRect.right - rightWidth / 2.0f, - mRect.top + topWidth, - mRect.right - rightWidth / 2.0f, - mRect.bottom, - mPaint); - } - if (bottomWidth > 0) { - mPaint.setStrokeWidth(bottomWidth); - setDashPathEffect(BorderSide.BOTTOM); - canvas.drawLine( - mRect.left, - mRect.bottom - bottomWidth / 2.0f, - mRect.right - rightWidth, - mRect.bottom - bottomWidth / 2.0f, - mPaint); - } - } - - private void drawLeftBorderWithRadiusAndColor(@NonNull Canvas canvas, - float topLeft, float bottomLeft, int color, float halfWidth) { - if (color == Color.TRANSPARENT || mBorderPath == null) { - return; - } - assert mPaint != null; - mPaint.setColor(color); - setDashPathEffect(BorderSide.LEFT); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left + halfWidth, mRect.top + topLeft); - mBorderPath.lineTo(mRect.left + halfWidth, mRect.bottom - bottomLeft); - mBorderPath.addArc( - mRect.left + halfWidth, - mRect.top + halfWidth, - mRect.left + 2 * topLeft - halfWidth, - mRect.top + 2 * topLeft - halfWidth, - -180, 45); - mBorderPath.addArc( - mRect.left + halfWidth, - mRect.bottom - 2 * bottomLeft + halfWidth, - mRect.left + 2 * bottomLeft - halfWidth, - mRect.bottom - halfWidth, - 135, 45); - canvas.drawPath(mBorderPath, mPaint); - } - - private void drawTopBorderWithRadiusAndColor(@NonNull Canvas canvas, - float topLeft, float topRight, int color, float halfWidth) { - if (color == Color.TRANSPARENT || mBorderPath == null) { - return; - } - assert mPaint != null; - mPaint.setColor(color); - setDashPathEffect(BorderSide.TOP); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left + topLeft, mRect.top + halfWidth); - mBorderPath.lineTo(mRect.right - topRight, mRect.top + halfWidth); - mBorderPath.addArc( - mRect.left + halfWidth, - mRect.top + halfWidth, - mRect.left + 2 * topLeft - halfWidth, - mRect.top + 2 * topLeft - halfWidth, - -135, 45); - mBorderPath.addArc( - mRect.right - 2 * topRight + halfWidth, - mRect.top + halfWidth, - mRect.right - halfWidth, - mRect.top + 2 * topRight - halfWidth, - -90, 45); - canvas.drawPath(mBorderPath, mPaint); - } - - private void drawRightBorderWithRadiusAndColor(@NonNull Canvas canvas, - float topRight, float bottomRight, int color, float halfWidth) { - if (color == Color.TRANSPARENT || mBorderPath == null) { - return; - } - assert mPaint != null; + mPaint.setStrokeWidth(strokeWidth); mPaint.setColor(color); - setDashPathEffect(BorderSide.RIGHT); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.right - halfWidth, mRect.top + topRight); - mBorderPath.lineTo(mRect.right - halfWidth, mRect.bottom - bottomRight); - mBorderPath.addArc( - mRect.right - 2 * bottomRight + halfWidth, - mRect.bottom - 2 * bottomRight + halfWidth, - mRect.right - halfWidth, - mRect.bottom - halfWidth, - -0, 45); - mBorderPath.addArc( - mRect.right - 2 * topRight + halfWidth, - mRect.top + halfWidth, - mRect.right - halfWidth, - mRect.top + 2 * topRight - halfWidth, - -45, 45); - canvas.drawPath(mBorderPath, mPaint); - } - - private void drawBottomBorderWithRadiusAndColor(@NonNull Canvas canvas, - float bottomLeft, float bottomRight, int color, float halfWidth) { - if (color == Color.TRANSPARENT || mBorderPath == null) { - return; - } - assert mPaint != null; - mPaint.setColor(color); - setDashPathEffect(BorderSide.BOTTOM); - mBorderPath.rewind(); - mBorderPath.moveTo(mRect.left + bottomLeft, mRect.bottom - halfWidth); - mBorderPath.lineTo(mRect.right - bottomRight, mRect.bottom - halfWidth); - mBorderPath.addArc( - mRect.right - 2 * bottomRight + halfWidth, - mRect.bottom - 2 * bottomRight + halfWidth, - mRect.right - halfWidth, - mRect.bottom - halfWidth, - 45, 45); - mBorderPath.addArc( - mRect.left + halfWidth, - mRect.bottom - 2 * bottomLeft + halfWidth, - mRect.left + 2 * bottomLeft - halfWidth, - mRect.bottom - halfWidth, - 90, 45); - canvas.drawPath(mBorderPath, mPaint); - } - - private void drawBorderWithRadiusAndColor(@NonNull Canvas canvas) { - assert mBorderColors != null; - if (mBorderPath == null) { - mBorderPath = new Path(); - } - final float topLeft = (mBorderRadii == null) ? mBorderRadius : mBorderRadii.topLeft; - final float topRight = (mBorderRadii == null) ? mBorderRadius : mBorderRadii.topRight; - final float bottomRight = (mBorderRadii == null) ? mBorderRadius : mBorderRadii.bottomRight; - final float bottomLeft = (mBorderRadii == null) ? mBorderRadius : mBorderRadii.bottomLeft; - float halfWidth = mBorderWidth / 2.0f; - drawLeftBorderWithRadiusAndColor(canvas, topLeft, bottomLeft, - mBorderColors.left, halfWidth); - drawTopBorderWithRadiusAndColor(canvas, topLeft, topRight, - mBorderColors.top, halfWidth); - drawRightBorderWithRadiusAndColor(canvas, topRight, bottomRight, - mBorderColors.right, halfWidth); - drawBottomBorderWithRadiusAndColor(canvas, bottomLeft, bottomRight, - mBorderColors.bottom, halfWidth); - } - - protected void drawBorderWithRadius(@NonNull Canvas canvas) { - if (mBorderStyle == BorderStyle.NONE || mBorderWidth == 0 - || hasTransparentColorOnAllSides()) { - return; - } - assert mPaint != null; - mPaint.setStyle(Paint.Style.STROKE); - mPaint.setStrokeWidth(mBorderWidth); - if (hasSameColorOnAllSides() && hasSameStyleOnAllSides()) { - int borderColor = (mBorderColors != null) ? mBorderColors.left : mBorderColor; - mPaint.setColor(borderColor); - setDashPathEffect(BorderSide.ALL); - canvas.drawPath(mBorderRadiusPath, mPaint); - } else { - drawBorderWithRadiusAndColor(canvas); - } - } - - private void setDashPathEffect(BorderSide side) { - assert mPaint != null; - if (mBorderStyles == null && mBorderStyle == BorderStyle.SOLID) { - mPaint.setPathEffect(null); - return; - } - BorderStyle style = mBorderStyle; - if (mBorderStyles != null) { - switch (side) { - case LEFT: - style = mBorderStyles.left; - break; - case TOP: - style = mBorderStyles.top; - break; - case RIGHT: - style = mBorderStyles.right; - break; - case BOTTOM: - style = mBorderStyles.bottom; - break; - default: - LogUtils.w(TAG, "Unknown border side: " + side); - } - } - DashPathEffect effect = null; - if (style == BorderStyle.DOTTED) { - if (mDotPathEffect == null) { - final float dotWidth = PixelUtil.dp2px(2.0f); - mDotPathEffect = new DashPathEffect(new float[]{2 * dotWidth, 2 * dotWidth}, 0); - } - effect = mDotPathEffect; - } else if (style == BorderStyle.DASHED) { - if (mDashPathEffect == null) { - final float dashWidth = PixelUtil.dp2px(2.0f); - mDashPathEffect = new DashPathEffect(new float[]{4 * dashWidth, 2 * dashWidth}, 0); - } - effect = mDashPathEffect; - } - mPaint.setPathEffect(effect); + mPaint.setPathEffect(pathEffect); + canvas.save(); + canvas.clipPath(clipPath); + canvas.drawPath(borderPath, mPaint); + canvas.restore(); } public void setBorderStyle(BorderStyle style) { mBorderStyle = style; + if (mBorderStyles != null) { + mBorderStyles.setBorderStyle(style, BorderSide.ALL); + } + mUpdatePathRequired = true; } public void setBorderStyle(BorderStyle style, BorderSide side) { @@ -540,6 +263,7 @@ public void setBorderStyle(BorderStyle style, BorderSide side) { mBorderStyles = new BorderStyles(mBorderStyle); } mBorderStyles.setBorderStyle(style, side); + mUpdatePathRequired = true; } public void setBorderRadius(@Px float radius) { @@ -579,6 +303,7 @@ public void setBorderColor(@ColorInt int color) { if (mBorderColors != null) { mBorderColors.setBorderColor(color, BorderSide.ALL); } + mUpdatePathRequired = true; } public void setBorderColor(@ColorInt int color, BorderSide side) { @@ -586,6 +311,7 @@ public void setBorderColor(@ColorInt int color, BorderSide side) { mBorderColors = new BorderColor(mBorderColor); } mBorderColors.setBorderColor(color, side); + mUpdatePathRequired = true; } public void setBackgroundColor(@ColorInt int color) { @@ -735,13 +461,6 @@ public boolean hasSameColorOnAllSides() { return left == top && top == right && right == bottom; } - public boolean hasTransparentColorOnAllSides() { - return left == Color.TRANSPARENT - && top == Color.TRANSPARENT - && right == Color.TRANSPARENT - && bottom == Color.TRANSPARENT; - } - public void setBorderColor(@ColorInt int color, BorderSide side) { switch (side) { case LEFT: diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundHolder.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundHolder.java index 459cfec15d5..1d77609be1e 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundHolder.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BackgroundHolder.java @@ -18,17 +18,30 @@ import android.graphics.Path; import android.graphics.RectF; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; public interface BackgroundHolder { - @Nullable - RectF getContentRectF(); + /** + * the content region rect that excluded border width + */ + @NonNull + RectF getContentRegion(); + /** + * the content path that excluded border width + * + * @return a rectangle with rounded corners, or null if there are no rounded corners + */ @Nullable - Path getBorderRadiusPath(); - - int getBorderWidth(); + Path getContentPath(); - boolean hasBorderRadius(); + /** + * the component path that included border width + * + * @returna a rectangle with rounded corners, or null if there are no rounded corners + */ + @Nullable + Path getBorderPath(); } diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BorderResolvedInfo.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BorderResolvedInfo.java new file mode 100644 index 00000000000..2be592d7c47 --- /dev/null +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/BorderResolvedInfo.java @@ -0,0 +1,745 @@ +/* Tencent is pleased to support the open source community by making Hippy available. + * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved. + * + * 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. + */ + +package com.tencent.renderer.component.drawable; + +import android.graphics.Color; +import android.graphics.DashPathEffect; +import android.graphics.Path; +import android.graphics.PathDashPathEffect; +import android.graphics.PathEffect; +import android.graphics.RectF; +import com.tencent.mtt.hippy.utils.PixelUtil; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderColor; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderRadius; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderSide; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderStyle; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderStyles; +import com.tencent.renderer.component.drawable.BackgroundDrawable.BorderWidth; + +final class BorderResolvedInfo { + + static class BorderSideValue { + + T left; + T top; + T right; + T bottom; + } + + private static final ThreadLocal sTempFloatArray = new ThreadLocal() { + @Override + protected float[] initialValue() { + return new float[8]; + } + }; + /** + * region that excluded border width + */ + final RectF contentRegion = new RectF(); + final BorderWidth strokeWidth = new BorderWidth(0); + final BorderColor borderColor = new BorderColor(Color.TRANSPARENT); + final BorderSideValue borderSideClip = new BorderSideValue<>(); + final BorderSideValue borderSideMidline = new BorderSideValue<>(); + final BorderSideValue pathEffect = new BorderSideValue<>(); + boolean hasVisibleBorder; + boolean hasBorderRadius; + boolean hasContentRadius; + boolean drawBorderSideBySide; + Path borderOutsidePath; + Path borderInsidePath; + Path borderMidlinePath; + RectF borderMidlineRect; + private final BorderWidth borderWidth = new BorderWidth(0); + private final BorderRadius borderRadius = new BorderRadius(0); + private final BorderStyles borderStyles = new BorderStyles(BorderStyle.NONE); + + void resolve(RectF rect, int preferBorderWidth, BorderWidth preferBorderWidths, float preferBorderRadius, + BorderRadius preferBorderRadii, int preferBorderColor, BorderColor preferBorderColors, + BorderStyle preferBorderStyle, BorderStyles preferBorderStyles) { + final float width = rect.width(); + final float height = rect.height(); + // resolve border width + final boolean hasBorderWidth = resolveBorderWidth(width, height, preferBorderWidth, preferBorderWidths); + if (hasBorderWidth) { + contentRegion.set(rect.left + borderWidth.left, + rect.top + borderWidth.top, + rect.right - borderWidth.right, + rect.bottom - borderWidth.bottom); + } else { + contentRegion.set(rect); + } + + // resolve border radius + hasBorderRadius = resolveBorderRadius(width, height, preferBorderRadius, preferBorderRadii); + if (hasBorderRadius) { + if (borderOutsidePath == null) { + borderOutsidePath = new Path(); + } + if (borderInsidePath == null) { + borderInsidePath = new Path(); + } + buildRoundRectPath(rect, borderRadius, null, 0, borderOutsidePath); + if (hasBorderWidth) { + hasContentRadius = hasContentRadius(borderWidth, borderRadius); + if (hasContentRadius) { + buildRoundRectPath(contentRegion, borderRadius, borderWidth, 1, borderInsidePath); + } + } else { + hasContentRadius = true; + borderInsidePath.set(borderOutsidePath); + } + } else { + hasContentRadius = false; + } + + resolveBorderColor(preferBorderColor, preferBorderColors); + resolveBorderStyle(preferBorderStyle, preferBorderStyles); + if (!borderWidth.hasSameWidthOnAllSides() + || !borderColor.hasSameColorOnAllSides() + || !borderStyles.hasSameStyleOnAllSides() + || (borderStyles.left == BorderStyle.DOTTED && borderWidth.left > PixelUtil.dp2px(1))) { + // build side by side border stroke path + drawBorderSideBySide = hasVisibleBorder = updateBorderStrokeSides(rect); + } else { + drawBorderSideBySide = false; + hasVisibleBorder = isVisible(borderWidth.left, borderColor.left, borderStyles.left); + if (hasVisibleBorder) { + strokeWidth.setBorderWith(borderWidth.left, BorderSide.ALL); + pathEffect.left = pathEffect.top = pathEffect.right = pathEffect.bottom = buildPathEffect( + borderStyles.left, borderWidth.left, 0, false, false); + + // build border stroke path + if (borderMidlineRect == null) { + borderMidlineRect = new RectF(); + } + float inset = borderWidth.left * 0.5f; + borderMidlineRect.set(rect.left + inset, rect.top + inset, rect.right - inset, rect.bottom - inset); + if (hasContentRadius) { + if (borderMidlinePath == null) { + borderMidlinePath = new Path(); + } + buildRoundRectPath(borderMidlineRect, borderRadius, borderWidth, 0.5f, borderMidlinePath); + } + } else { + strokeWidth.setBorderWith(0, BorderSide.ALL); + pathEffect.left = pathEffect.top = pathEffect.right = pathEffect.bottom = null; + } + } + } + + private boolean resolveBorderWidth(float regionWidth, float regionHeight, int preferBorderWidth, + BorderWidth preferBorderWidths) { + final int left; + final int top; + final int right; + final int bottom; + final boolean hasBorderWidth; + if (preferBorderWidths == null) { + left = top = right = bottom = preferBorderWidth; + hasBorderWidth = preferBorderWidth > 0; + } else { + left = preferBorderWidths.left; + top = preferBorderWidths.top; + right = preferBorderWidths.right; + bottom = preferBorderWidths.bottom; + hasBorderWidth = left > 0 || top > 0 || right > 0 || bottom > 0; + } + boolean needScale = false; + float radio = 1; + if (hasBorderWidth) { + if (left + right > regionWidth) { + radio = regionWidth / (left + right); + needScale = true; + } + if (top + bottom > regionHeight) { + radio = Math.min(radio, regionHeight / (top + bottom)); + needScale = true; + } + } + if (needScale) { + borderWidth.left = (int) (left * radio); + borderWidth.top = (int) (top * radio); + borderWidth.right = (int) (right * radio); + borderWidth.bottom = (int) (bottom * radio); + } else { + borderWidth.left = left; + borderWidth.top = top; + borderWidth.right = right; + borderWidth.bottom = bottom; + } + return hasBorderWidth; + } + + private boolean resolveBorderRadius(float regionWidth, float regionHeight, float preferBorderRadius, + BorderRadius preferBorderRadii) { + final float topLeft; + final float topRight; + final float bottomRight; + final float bottomLeft; + final boolean hasBorderRadius; + if (preferBorderRadii == null) { + topLeft = topRight = bottomRight = bottomLeft = preferBorderRadius; + hasBorderRadius = preferBorderRadius > 0; + } else { + topLeft = preferBorderRadii.topLeft; + topRight = preferBorderRadii.topRight; + bottomRight = preferBorderRadii.bottomRight; + bottomLeft = preferBorderRadii.bottomLeft; + hasBorderRadius = topLeft > 0 || topRight > 0 || bottomRight > 0 || bottomLeft > 0; + } + boolean needScale = false; + float radio = 1; + if (hasBorderRadius) { + float preferTop = Math.max(topLeft, borderWidth.left) + Math.max(topRight, borderWidth.right); + float preferBottom = Math.max(bottomLeft, borderWidth.left) + Math.max(bottomRight, borderWidth.right); + if (preferTop > regionWidth || preferBottom > regionWidth) { + radio = regionWidth / Math.max(preferTop, preferBottom); + needScale = true; + } + float preferLeft = Math.max(topLeft, borderWidth.top) + Math.max(bottomLeft, borderWidth.bottom); + float preferRight = Math.max(topRight, borderWidth.top) + Math.max(bottomRight, borderWidth.bottom); + if (preferLeft > regionHeight || preferRight > regionHeight) { + radio = Math.min(radio, regionHeight / Math.max(preferLeft, preferRight)); + needScale = true; + } + } + if (needScale) { + borderRadius.topLeft = topLeft * radio; + borderRadius.topRight = topRight * radio; + borderRadius.bottomRight = bottomRight * radio; + borderRadius.bottomLeft = bottomLeft * radio; + } else { + borderRadius.topLeft = topLeft; + borderRadius.topRight = topRight; + borderRadius.bottomRight = bottomRight; + borderRadius.bottomLeft = bottomLeft; + } + return hasBorderRadius; + } + + private void resolveBorderColor(int preferBorderColor, BorderColor preferBorderColors) { + if (preferBorderColors == null) { + borderColor.setBorderColor(preferBorderColor, BorderSide.ALL); + } else { + borderColor.left = preferBorderColors.left; + borderColor.top = preferBorderColors.top; + borderColor.right = preferBorderColors.right; + borderColor.bottom = preferBorderColors.bottom; + } + } + + private void resolveBorderStyle(BorderStyle preferBorderStyle, BorderStyles preferBorderStyles) { + if (preferBorderStyles == null) { + borderStyles.setBorderStyle(preferBorderStyle, BorderSide.ALL); + } else { + borderStyles.left = preferBorderStyles.left; + borderStyles.top = preferBorderStyles.top; + borderStyles.right = preferBorderStyles.right; + borderStyles.bottom = preferBorderStyles.bottom; + } + } + + private boolean updateBorderStrokeSides(RectF rect) { + boolean hasVisible = false; + if (isVisible(borderWidth.left, borderColor.left, borderStyles.left)) { + updateBorderStrokeLeft(rect); + hasVisible = true; + } else { + pathEffect.left = null; + strokeWidth.left = 0; + } + + if (isVisible(borderWidth.top, borderColor.top, borderStyles.top)) { + updateBorderStrokeTop(rect); + hasVisible = true; + } else { + pathEffect.top = null; + strokeWidth.top = 0; + } + + if (isVisible(borderWidth.right, borderColor.right, borderStyles.right)) { + updateBorderStrokeRight(rect); + hasVisible = true; + } else { + pathEffect.right = null; + strokeWidth.right = 0; + } + + if (isVisible(borderWidth.bottom, borderColor.bottom, borderStyles.bottom)) { + updateBorderStrokeBottom(rect); + hasVisible = true; + } else { + pathEffect.bottom = null; + strokeWidth.bottom = 0; + } + return hasVisible; + } + + private PathEffect buildPathEffect(BorderStyle style, int borderSize, int pathLength, boolean roundStart, + boolean roundEnd) { + if (style == BorderStyle.DASHED) { + int fix = (int) PixelUtil.dp2px(5); + return new DashPathEffect(new float[]{2 * borderSize + fix, borderSize + fix}, 0); + } else if (style == BorderStyle.DOTTED) { + if (borderSize <= 2) { + return new DashPathEffect(new float[]{borderSize, borderSize}, 0); + } + Path circle = new Path(); + circle.addCircle(0, 0, borderSize * 0.5f, Path.Direction.CW); + final float advance; + if (pathLength < borderSize) { + advance = borderSize; + } else if (pathLength < borderSize * 2) { + advance = pathLength; + } else { + float weight = (roundStart ? 0 : 0.25f) + (roundEnd ? 0 : 0.25f); + int count = (int) Math.ceil(pathLength * 0.5 / borderSize + weight); + advance = (pathLength - count * borderSize) / (count - weight * 2) + borderSize; + } + float phase = roundStart ? -advance * 0.5f : -borderSize * 0.5f; + return new PathDashPathEffect(circle, advance, phase, PathDashPathEffect.Style.TRANSLATE); + } else { + return null; + } + } + + private void updateBorderStrokeLeft(RectF rect) { + Path clip = borderSideClip.left; + if (clip == null) { + borderSideClip.left = clip = new Path(); + } else { + clip.rewind(); + } + Path midline = borderSideMidline.left; + if (midline == null) { + borderSideMidline.left = midline = new Path(); + } else { + midline.rewind(); + } + BorderStyle style = borderStyles.left; + float startRadius = borderRadius.topLeft; + float endRadius = borderRadius.bottomLeft; + int strokeSize = borderWidth.left; + float strokeLength = rect.height(); + boolean roundStart = false; + boolean roundEnd = false; + clip.moveTo(rect.left, rect.top); + if (startRadius > borderWidth.left && startRadius > borderWidth.top) { + float startDiameter = 2 * startRadius; + // top-left inside arc + float startAngle = arcAngle(startRadius, borderWidth.left, borderWidth.top, 1); + clip.arcTo( + rect.left + borderWidth.left, + rect.top + borderWidth.top, + rect.left + startDiameter - borderWidth.left, + rect.top + startDiameter - borderWidth.top, + 180 + startAngle, -startAngle, false); + // top-left midline arc + float startMidlineAngle = style != BorderStyle.DOTTED ? 90 + : arcAngle(startRadius, borderWidth.left, borderWidth.top, 0.5f); + midline.addArc( + rect.left + borderWidth.left * 0.5f, + rect.top + borderWidth.top * 0.5f, + rect.left + startDiameter - borderWidth.left * 0.5f, + rect.top + startDiameter - borderWidth.top * 0.5f, + 180 + startMidlineAngle, -startMidlineAngle); + if (style == BorderStyle.DOTTED) { + roundStart = true; + strokeLength += arcLength(startRadius - borderWidth.left * 0.5f, startRadius - borderWidth.top * 0.5f, + startMidlineAngle) - startRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.top); + } + } else { + clip.lineTo(rect.left + borderWidth.left, rect.top + borderWidth.top); + midline.moveTo(rect.left + borderWidth.left * 0.5f, rect.top); + } + if (endRadius > borderWidth.left && endRadius > borderWidth.bottom) { + float endDiameter = 2 * endRadius; + // bottom-left inside arc + float endAngle = 90 - arcAngle(endRadius, borderWidth.bottom, borderWidth.left, 1); + clip.arcTo( + rect.left + borderWidth.left, + rect.bottom - endDiameter + borderWidth.bottom, + rect.left + endDiameter - borderWidth.left, + rect.bottom - borderWidth.bottom, + 180, -endAngle, false); + // bottom-left midline arc + float endMidlineAngle = style != BorderStyle.DOTTED ? 90 + : 90 - arcAngle(endRadius, borderWidth.bottom, borderWidth.left, 0.5f); + midline.arcTo( + rect.left + borderWidth.left * 0.5f, + rect.bottom - endDiameter + borderWidth.bottom * 0.5f, + rect.left + endDiameter - borderWidth.left * 0.5f, + rect.bottom - borderWidth.bottom * 0.5f, + 180, -endMidlineAngle, false); + if (style == BorderStyle.DOTTED) { + roundEnd = true; + strokeLength += arcLength(endRadius - borderWidth.left * 0.5f, endRadius - borderWidth.bottom * 0.5f, + endMidlineAngle) - endRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.bottom); + } + } else { + clip.lineTo(rect.left + borderWidth.left, rect.bottom - borderWidth.bottom); + midline.lineTo(rect.left + borderWidth.left * 0.5f, rect.bottom); + } + clip.lineTo(rect.left, rect.bottom); + clip.close(); + strokeWidth.left = strokeSize; + pathEffect.left = buildPathEffect(style, borderWidth.left, (int) strokeLength, roundStart, roundEnd); + } + + private void updateBorderStrokeTop(RectF rect) { + Path clip = borderSideClip.top; + if (clip == null) { + borderSideClip.top = clip = new Path(); + } else { + clip.rewind(); + } + Path midline = borderSideMidline.top; + if (midline == null) { + borderSideMidline.top = midline = new Path(); + } else { + midline.rewind(); + } + BorderStyle style = borderStyles.top; + float startRadius = borderRadius.topRight; + float endRadius = borderRadius.topLeft; + int strokeSize = borderWidth.top; + float strokeLength = rect.width(); + boolean roundStart = false; + boolean roundEnd = false; + clip.moveTo(rect.right, rect.top); + if (startRadius > borderWidth.right && startRadius > borderWidth.top) { + float startDiameter = 2 * startRadius; + // top-right inside arc + float startAngle = arcAngle(startRadius, borderWidth.top, borderWidth.right, 1); + clip.arcTo( + rect.right - startDiameter + borderWidth.right, + rect.top + borderWidth.top, + rect.right - borderWidth.right, + rect.top + startDiameter - borderWidth.top, + 270 + startAngle, -startAngle, false); + // top-right midline arc + float startMidlineAngle = style != BorderStyle.DOTTED ? 90 + : arcAngle(startRadius, borderWidth.top, borderWidth.right, 0.5f); + midline.addArc( + rect.right - startDiameter + borderWidth.right * 0.5f, + rect.top + borderWidth.top * 0.5f, + rect.right - borderWidth.right * 0.5f, + rect.top + startDiameter - borderWidth.top * 0.5f, + 270 + startMidlineAngle, -startMidlineAngle); + if (style == BorderStyle.DOTTED) { + roundStart = true; + strokeLength += arcLength(startRadius - borderWidth.right * 0.5f, startRadius - borderWidth.top * 0.5f, + startMidlineAngle) - startRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.right); + } + } else { + clip.lineTo(rect.right - borderWidth.right, rect.top + borderWidth.top); + midline.moveTo(rect.right, rect.top + borderWidth.top * 0.5f); + } + if (endRadius > borderWidth.top && endRadius > borderWidth.left) { + float endDiameter = 2 * endRadius; + // top-left inside arc + float endAngle = 90 - arcAngle(startRadius, borderWidth.left, borderWidth.top, 1); + clip.arcTo( + rect.left + borderWidth.left, + rect.top + borderWidth.top, + rect.left + endDiameter - borderWidth.left, + rect.top + endDiameter - borderWidth.top, + 270, -endAngle, false); + // top-left midline arc + float endMidlineAngle = style != BorderStyle.DOTTED ? 90 + : 90 - arcAngle(startRadius, borderWidth.left, borderWidth.top, 0.5f); + midline.arcTo( + rect.left + borderWidth.left * 0.5f, + rect.top + borderWidth.top * 0.5f, + rect.left + endDiameter - borderWidth.left * 0.5f, + rect.top + endDiameter - borderWidth.top * 0.5f, + 270, -endMidlineAngle, false); + if (style == BorderStyle.DOTTED) { + roundEnd = true; + strokeLength += arcLength(endRadius - borderWidth.left * 0.5f, endRadius - borderWidth.top * 0.5f, + endMidlineAngle) - endRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.left); + } + } else { + clip.lineTo(rect.left + borderWidth.left, rect.top + borderWidth.top); + midline.lineTo(rect.left, rect.top + borderWidth.top * 0.5f); + } + clip.lineTo(rect.left, rect.top); + clip.close(); + strokeWidth.top = strokeSize; + pathEffect.top = buildPathEffect(style, borderWidth.top, (int) strokeLength, roundStart, roundEnd); + } + + private void updateBorderStrokeRight(RectF rect) { + Path clip = borderSideClip.right; + if (clip == null) { + borderSideClip.right = clip = new Path(); + } else { + clip.rewind(); + } + Path midline = borderSideMidline.right; + if (midline == null) { + borderSideMidline.right = midline = new Path(); + } else { + midline.rewind(); + } + BorderStyle style = borderStyles.right; + float startRadius = borderRadius.bottomRight; + float endRadius = borderRadius.topRight; + int strokeSize = borderWidth.right; + float strokeLength = rect.height(); + boolean roundStart = false; + boolean roundEnd = false; + clip.moveTo(rect.right, rect.bottom); + if (startRadius > borderWidth.bottom && startRadius > borderWidth.right) { + float startDiameter = 2 * startRadius; + // bottom-right inside arc + float startAngle = arcAngle(startRadius, borderWidth.right, borderWidth.bottom, 1); + clip.arcTo( + rect.right - startDiameter + borderWidth.right, + rect.bottom - startDiameter + borderWidth.bottom, + rect.right - borderWidth.right, + rect.bottom - borderWidth.bottom, + startAngle, -startAngle, false); + // bottom-right midline arc + float startMidlineAngle = style != BorderStyle.DOTTED ? 90 + : arcAngle(startRadius, borderWidth.right, borderWidth.bottom, 0.5f); + midline.addArc( + rect.right - startDiameter + borderWidth.right * 0.5f, + rect.bottom - startDiameter + borderWidth.bottom * 0.5f, + rect.right - borderWidth.right * 0.5f, + rect.bottom - borderWidth.bottom * 0.5f, + startMidlineAngle, -startMidlineAngle); + if (style == BorderStyle.DOTTED) { + roundStart = true; + strokeLength += + arcLength(startRadius - borderWidth.right * 0.5f, startRadius - borderWidth.bottom * 0.5f, + startMidlineAngle) - startRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.bottom); + } + } else { + clip.lineTo(rect.right - borderWidth.right, rect.bottom - borderWidth.bottom); + midline.moveTo(rect.right - borderWidth.right * 0.5f, rect.bottom); + } + if (endRadius > borderWidth.top && endRadius > borderWidth.right) { + float endDiameter = 2 * endRadius; + // top-right inside arc + float endAngle = 90 - arcAngle(startRadius, borderWidth.top, borderWidth.right, 1); + clip.arcTo( + rect.right - endDiameter + borderWidth.right, + rect.top + borderWidth.top, + rect.right - borderWidth.right, + rect.top + endDiameter - borderWidth.top, + 0, -endAngle, false); + // top-right midline arc + float endMidlineAngle = style != BorderStyle.DOTTED ? 90 + : 90 - arcAngle(startRadius, borderWidth.top, borderWidth.right, 0.5f); + midline.arcTo( + rect.right - endDiameter + borderWidth.right * 0.5f, + rect.top + borderWidth.top * 0.5f, + rect.right - borderWidth.right * 0.5f, + rect.top + endDiameter - borderWidth.top * 0.5f, + 0, -endMidlineAngle, false); + if (style == BorderStyle.DOTTED) { + roundEnd = true; + strokeLength += arcLength(endRadius - borderWidth.right * 0.5f, endRadius - borderWidth.top * 0.5f, + endMidlineAngle) - endRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.top); + } + } else { + clip.lineTo(rect.right - borderWidth.right, rect.top + borderWidth.top); + midline.lineTo(rect.right - borderWidth.right * 0.5f, rect.top); + } + clip.lineTo(rect.right, rect.top); + clip.close(); + strokeWidth.right = strokeSize; + pathEffect.right = buildPathEffect(style, borderWidth.right, (int) strokeLength, roundStart, roundEnd); + } + + private void updateBorderStrokeBottom(RectF rect) { + Path clip = borderSideClip.bottom; + if (clip == null) { + borderSideClip.bottom = clip = new Path(); + } else { + clip.rewind(); + } + Path midline = borderSideMidline.bottom; + if (midline == null) { + borderSideMidline.bottom = midline = new Path(); + } else { + midline.rewind(); + } + BorderStyle style = borderStyles.bottom; + float startRadius = borderRadius.bottomLeft; + float endRadius = borderRadius.bottomRight; + int strokeSize = borderWidth.bottom; + float strokeLength = rect.width(); + boolean roundStart = false; + boolean roundEnd = false; + clip.moveTo(rect.left, rect.bottom); + if (startRadius > borderWidth.bottom && startRadius > borderWidth.left) { + float startDiameter = 2 * startRadius; + // bottom-left inside arc + float startAngle = arcAngle(startRadius, borderWidth.bottom, borderWidth.left, 1); + clip.arcTo( + rect.left + borderWidth.left, + rect.bottom - startDiameter + borderWidth.bottom, + rect.left + startDiameter - borderWidth.left, + rect.bottom - borderWidth.bottom, + 90 + startAngle, -startAngle, false); + // bottom-left midline arc + float startMidlineAngle = style != BorderStyle.DOTTED ? 90 + : arcAngle(startRadius, borderWidth.bottom, borderWidth.left, 0.5f); + midline.addArc( + rect.left + borderWidth.left * 0.5f, + rect.bottom - startDiameter + borderWidth.bottom * 0.5f, + rect.left + startDiameter - borderWidth.left * 0.5f, + rect.bottom - borderWidth.bottom * 0.5f, + 90 + startMidlineAngle, -startMidlineAngle); + if (style == BorderStyle.DOTTED) { + roundStart = true; + strokeLength += + arcLength(startRadius - borderWidth.left * 0.5f, startRadius - borderWidth.bottom * 0.5f, + startMidlineAngle) - startRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.left); + } + } else { + clip.lineTo(rect.left + borderWidth.left, rect.bottom - borderWidth.bottom); + midline.moveTo(rect.left, rect.bottom - borderWidth.bottom * 0.5f); + } + if (endRadius > borderWidth.bottom && endRadius > borderWidth.right) { + float endDiameter = 2 * endRadius; + // bottom-right inside arc + float endAngle = 90 - arcAngle(startRadius, borderWidth.right, borderWidth.bottom, 1); + clip.arcTo( + rect.right - endDiameter + borderWidth.right, + rect.bottom - endDiameter + borderWidth.bottom, + rect.right - borderWidth.right, + rect.bottom - borderWidth.bottom, + 90, -endAngle, false); + // bottom-right midline arc + float endMidlineAngle = style != BorderStyle.DOTTED ? 90 + : 90 - arcAngle(startRadius, borderWidth.right, borderWidth.bottom, 0.5f); + midline.arcTo( + rect.right - endDiameter + borderWidth.right * 0.5f, + rect.bottom - endDiameter + borderWidth.bottom * 0.5f, + rect.right - borderWidth.right * 0.5f, + rect.bottom - borderWidth.bottom * 0.5f, + 90, -endMidlineAngle, false); + if (style == BorderStyle.DOTTED) { + roundEnd = true; + strokeLength += arcLength(endRadius - borderWidth.right * 0.5f, endRadius - borderWidth.bottom * 0.5f, + endMidlineAngle) - endRadius; + } else { + strokeSize = Math.max(strokeSize, borderWidth.right); + } + } else { + clip.lineTo(rect.right - borderWidth.right, rect.bottom - borderWidth.bottom); + midline.lineTo(rect.right, rect.bottom - borderWidth.bottom * 0.5f); + } + clip.lineTo(rect.right, rect.bottom); + clip.close(); + strokeWidth.bottom = strokeSize; + pathEffect.bottom = buildPathEffect(style, borderWidth.bottom, (int) strokeLength, roundStart, roundEnd); + } + + private static boolean hasContentRadius(BorderWidth borderWidth, BorderRadius borderRadius) { + return borderRadius.topLeft > borderWidth.left || borderRadius.topLeft > borderWidth.top + || borderRadius.topRight > borderWidth.top || borderRadius.topRight > borderWidth.right + || borderRadius.bottomRight > borderWidth.right || borderRadius.bottomRight > borderWidth.bottom + || borderRadius.bottomLeft > borderWidth.bottom || borderRadius.bottomLeft > borderWidth.left; + } + + private static boolean isVisible(int borderWidth, int borderColor, BorderStyle borderStyle) { + return borderWidth > 0 && borderColor != Color.TRANSPARENT && borderStyle != BorderStyle.NONE; + } + + private static void buildRoundRectPath(RectF rect, BorderRadius src, BorderWidth insets, float weight, Path dst) { + float[] tmp = sTempFloatArray.get(); + assert tmp != null; + if (insets == null || weight == 0) { + tmp[0] = tmp[1] = src.topLeft; + tmp[2] = tmp[3] = src.topRight; + tmp[4] = tmp[5] = src.bottomRight; + tmp[6] = tmp[7] = src.bottomLeft; + } else { + tmp[0] = Math.max(0, src.topLeft - insets.left * weight); + tmp[1] = Math.max(0, src.topLeft - insets.top * weight); + tmp[2] = Math.max(0, src.topRight - insets.right * weight); + tmp[3] = Math.max(0, src.topRight - insets.top * weight); + tmp[4] = Math.max(0, src.bottomRight - insets.right * weight); + tmp[5] = Math.max(0, src.bottomRight - insets.bottom * weight); + tmp[6] = Math.max(0, src.bottomLeft - insets.left * weight); + tmp[7] = Math.max(0, src.bottomLeft - insets.bottom * weight); + } + dst.rewind(); + dst.addRoundRect(rect, tmp, Path.Direction.CW); + } + + /** + * calculate the eccentric anomaly of the top-left border radius (can be used for other corner after rotation), use + * with {@link Path#addArc} and {@link Path#arcTo} + * + * @param radius border outside radius + * @param insetX border width left, must > 0 + * @param insetY border width top, must >= 0 + * @param ovalWeight percentage of border path inset in range of [0, 1] + * @return eccentric anomaly in degrees in range of [0, 90) + */ + private static float arcAngle(float radius, float insetX, float insetY, float ovalWeight) { + // resolve the intersection point between: + // - line: (y - (-radius)) / insetY = (x - (-radius)) / insetX + // - ellipse: x^2 / radiusA^2 + y^2 / radiusB^2 = 1 + final float k = insetY / insetX; + final float radiusA = radius - insetX * ovalWeight; + final float radiusB = radius - insetY * ovalWeight; + final float sub = k * radius - radius; + // A, B, C are the coefficients of a quadratic equation + final float A = radiusB * radiusB + radiusA * radiusA * k * k; + final float B = 2 * radiusA * radiusA * k * sub; + final float C = radiusA * radiusA * (sub * sub - radiusB * radiusB); + // (x, y) is the intersection point that closest to the top-left + final double x = (-B - (float) Math.sqrt(B * B - 4 * A * C)) / (2 * A); + final double y = k * (x + radius) - radius; + // convert to eccentric anomaly in degrees + return 180 + (float) (Math.atan2(y * radiusA / radiusB, x) * 180 / Math.PI); + } + + /** + * approximation value of ellipse arc length + * + * @param radiusA semi-major axis + * @param radiusB semi-minor axis + * @param degree eccentric anomaly in degrees + * @return arc length + */ + private static float arcLength(float radiusA, float radiusB, float degree) { + // length = radian * sqrt((a^2 + b^2) / 2) + return degree / 360f * (float) (Math.PI * Math.sqrt(2 * (radiusA * radiusA + radiusB * radiusB))); + } + +} diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java index 7ce72df7476..ca25a7857ab 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java @@ -136,11 +136,7 @@ public void setImageData(@NonNull ImageDataSupplier imageHolder) { private void updateContentRegionIfNeeded() { if (mBackgroundHolder != null) { - mContentRegion.set(mBackgroundHolder.getContentRectF()); - float borderWidth = mBackgroundHolder.getBorderWidth(); - if (borderWidth > 1.0f) { - mContentRegion.inset(borderWidth - 0.5f, borderWidth - 0.5f); - } + mContentRegion.set(mBackgroundHolder.getContentRegion()); } } @@ -150,11 +146,10 @@ public void draw(@NonNull Canvas canvas) { return; } updateContentRegionIfNeeded(); - final Path borderRadiusPath = - (mBackgroundHolder != null) ? mBackgroundHolder.getBorderRadiusPath() : null; + final Path contentPath = (mBackgroundHolder != null) ? mBackgroundHolder.getContentPath() : null; canvas.save(); - if (borderRadiusPath != null) { - canvas.clipPath(borderRadiusPath); + if (contentPath != null) { + canvas.clipPath(contentPath); } else { canvas.clipRect(mContentRegion); } diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/TextDrawable.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/TextDrawable.java index f5ec72d9826..91410e88048 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/TextDrawable.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/TextDrawable.java @@ -14,22 +14,6 @@ * limitations under the License. */ -/* Tencent is pleased to support the open source community by making Hippy available. - * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved. - * - * 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. - */ - package com.tencent.renderer.component.drawable; import android.graphics.Canvas; @@ -110,11 +94,7 @@ public Layout getTextLayout() { private void updateContentRegionIfNeeded() { if (mBackgroundHolder != null) { - mContentRegion.set(mBackgroundHolder.getContentRectF()); - float borderWidth = mBackgroundHolder.getBorderWidth(); - if (borderWidth > 1.0f) { - mContentRegion.inset(borderWidth, borderWidth); - } + mContentRegion.set(mBackgroundHolder.getContentRegion()); } } @@ -126,11 +106,10 @@ public void draw(@NonNull Canvas canvas) { return; } updateContentRegionIfNeeded(); - final Path borderRadiusPath = - (mBackgroundHolder != null) ? mBackgroundHolder.getBorderRadiusPath() : null; + final Path contentPath = (mBackgroundHolder != null) ? mBackgroundHolder.getContentPath() : null; canvas.save(); - if (borderRadiusPath != null) { - canvas.clipPath(borderRadiusPath); + if (contentPath != null) { + canvas.clipPath(contentPath); } else { canvas.clipRect(mContentRegion); } @@ -172,15 +151,13 @@ public float getTextLayoutOffsetX() { if (mLayout == null) { return 0; } - final int width = getBounds().width(); - final float borderWidth = (mBackgroundHolder != null) ? mBackgroundHolder.getBorderWidth() : 0.0f; switch (mLayout.getAlignment()) { case ALIGN_CENTER: - return (width - mLayout.getWidth()) / 2.0f; + return mContentRegion.centerX() - mLayout.getWidth() * 0.5f; case ALIGN_OPPOSITE: - return width - mRightPadding - borderWidth - mLayout.getWidth(); + return mContentRegion.right - mRightPadding - mLayout.getWidth(); default: - return mLeftPadding + borderWidth; + return mLeftPadding + mContentRegion.left; } } @@ -188,7 +165,6 @@ public float getTextLayoutOffsetY() { if (mLayout == null) { return 0; } - final float borderWidth = (mBackgroundHolder != null) ? mBackgroundHolder.getBorderWidth() : 0.0f; - return mTopPadding + borderWidth; + return mTopPadding + mContentRegion.top; } } From 5863fe7baf7c1422be3c937b55313caec7579e44 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 27 Dec 2023 20:24:37 +0800 Subject: [PATCH 04/39] fix(ios): optimize performance of getting components from viewRegistry --- .../native/ios/renderer/HippyComponentMap.h | 31 +++++++++--- .../native/ios/renderer/HippyComponentMap.mm | 49 ++++++++++++++----- .../native/ios/renderer/HippyUIManager.mm | 10 +++- 3 files changed, 71 insertions(+), 19 deletions(-) diff --git a/renderer/native/ios/renderer/HippyComponentMap.h b/renderer/native/ios/renderer/HippyComponentMap.h index 2b8ac6224ee..3d6d2cbc98c 100644 --- a/renderer/native/ios/renderer/HippyComponentMap.h +++ b/renderer/native/ios/renderer/HippyComponentMap.h @@ -56,6 +56,8 @@ typedef NS_ENUM(NSUInteger, HippyComponentReferenceType) { - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; +#pragma mark - Root Component + - (void)addRootComponent:(id)component rootNode:(std::weak_ptr)rootNode forTag:(NSNumber *)tag; @@ -70,18 +72,33 @@ typedef NS_ENUM(NSUInteger, HippyComponentReferenceType) { - (std::weak_ptr)rootNodeForTag:(NSNumber *)tag; -- (void)addComponent:(__kindof id)component - forRootTag:(NSNumber *)tag; -- (void)removeComponent:(__kindof id)component - forRootTag:(NSNumber *)tag; +#pragma mark - + +/// Add a component to ComponentMap +- (void)addComponent:(__kindof id)component forRootTag:(NSNumber *)tag; -- (void)removeComponentByComponentTag:(NSNumber *)componentTag onRootTag:(NSNumber *)rootTag; +/// Remove one component from ComponentMap +- (void)removeComponent:(__kindof id)component forRootTag:(NSNumber *)tag; - (NSDictionary> *)componentsForRootTag:(NSNumber *)tag; -- (__kindof id)componentForTag:(NSNumber *)componentTag - onRootTag:(NSNumber *)tag; +- (__kindof id)componentForTag:(NSNumber *)componentTag onRootTag:(NSNumber *)tag; + + +#pragma mark - Performance optimization + +/// Generate a dictionary cache for all the weak components. +/// +/// Calling componentsForRootTag methods is time-consuming, +/// and in particular, outside may call this in the loop, +/// so we optimize this with a temporary cache. +/// +/// The cache must be actively cleared after acquiring components +- (void)generateTempCacheBeforeAcquireAllStoredWeakComponents; + +/// Clear the temp dictionary cache for weak components. +- (void)clearTempCacheAfterAcquireAllStoredWeakComponents; @end diff --git a/renderer/native/ios/renderer/HippyComponentMap.mm b/renderer/native/ios/renderer/HippyComponentMap.mm index 6ef58deb851..db2e8257a6b 100644 --- a/renderer/native/ios/renderer/HippyComponentMap.mm +++ b/renderer/native/ios/renderer/HippyComponentMap.mm @@ -30,6 +30,9 @@ @interface HippyComponentMap () { NSMapTable> *_rootComponentsMap; NSMutableDictionary *_componentsMap; std::unordered_map> _rootNodesMap; + + BOOL _enableWeakComponentsTempCache; + NSDictionary *_cacheDictionaryForWeakComponents; } @end @@ -105,6 +108,10 @@ - (void)addComponent:(__kindof id)component forRootTag:(NSNumber if (component && tag) { id map = [_componentsMap objectForKey:tag]; [map setObject:component forKey:[component hippyTag]]; + if (!_isStrongHoldAllComponents && _enableWeakComponentsTempCache && _cacheDictionaryForWeakComponents) { + // see `generateTempCacheBeforeAcquireAllStoredWeakComponents` + _cacheDictionaryForWeakComponents = nil; + } } } @@ -115,16 +122,10 @@ - (void)removeComponent:(__kindof id)component forRootTag:(NSNum if (component && tag) { id map = [_componentsMap objectForKey:tag]; [map removeObjectForKey:[component hippyTag]]; - } -} - -- (void)removeComponentByComponentTag:(NSNumber *)componentTag onRootTag:(NSNumber *)rootTag { - NSAssert(componentTag, @"component and tag must not be null in method %@", NSStringFromSelector(_cmd)); - NSAssert(rootTag, @"component's tag must not be null in %@", NSStringFromSelector(_cmd)); - NSAssert([self threadCheck], @"%@ method needs run in main thread", NSStringFromSelector(_cmd)); - if (componentTag && rootTag) { - id map = [_componentsMap objectForKey:rootTag]; - [map removeObjectForKey:componentTag]; + if (!_isStrongHoldAllComponents && _enableWeakComponentsTempCache && _cacheDictionaryForWeakComponents) { + // see `generateTempCacheBeforeAcquireAllStoredWeakComponents` + _cacheDictionaryForWeakComponents = nil; + } } } @@ -136,7 +137,21 @@ - (void)removeComponentByComponentTag:(NSNumber *)componentTag onRootTag:(NSNumb if (_isStrongHoldAllComponents) { return map; } else { - return ((NSMapTable *)map).dictionaryRepresentation; + // Note: Performance optimization: + // Calling dictionaryRepresentation methods is time-consuming, + // and in particular, outside may call this in the loop, + // so we optimize this with a temporary cache. + // Remember: + // 1. The cache is automatically removed when a new component is inserted. + // 2. The cache must exist only temporarily, otherwise it will affect the lifecycle of the component. + if (_enableWeakComponentsTempCache) { + if (!_cacheDictionaryForWeakComponents) { + _cacheDictionaryForWeakComponents = ((NSMapTable *)map).dictionaryRepresentation; + } + return _cacheDictionaryForWeakComponents; + } else { + return ((NSMapTable *)map).dictionaryRepresentation; + } } } return nil; @@ -171,4 +186,16 @@ - (NSString *)description { return [description copy]; } + +#pragma mark - + +- (void)generateTempCacheBeforeAcquireAllStoredWeakComponents { + _enableWeakComponentsTempCache = YES; +} + +- (void)clearTempCacheAfterAcquireAllStoredWeakComponents { + _enableWeakComponentsTempCache = NO; + _cacheDictionaryForWeakComponents = nil; +} + @end diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index 1934390a705..b7824696acd 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -575,12 +575,14 @@ - (UIView *)createViewRecursiveFromRenderObjectWithNOLock:(HippyShadowView *)sha NSMutableSet *applierBlocks = [NSMutableSet set]; [shadowView amendLayoutBeforeMount:applierBlocks]; if (applierBlocks.count) { + [self.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; for (NativeRenderApplierBlock block in applierBlocks) { // Note: viewRegistry may be modified in the block, and it may be stored internally as NSMapTable // so to ensure that it is up-to-date, it can only be retrieved each time. NSDictionary *viewRegistry = [self.viewRegistry componentsForRootTag:shadowView.rootTag]; block(viewRegistry, view); } + [self.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; } } return view; @@ -728,6 +730,7 @@ - (void)flushUIBlocksOnRootNode:(std::weak_ptr)rootNode { __strong __typeof(weakSelf)strongSelf = weakSelf; if (strongSelf) { TDF_PERF_LOG("flushUIBlocksOnRootNode on main thread(random id:%u)",rand); + [strongSelf.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; for (HippyViewManagerUIBlock block in previousPendingUIBlocks) { @try { // Note: viewRegistry may be modified in the block, and it may be stored internally as NSMapTable @@ -738,6 +741,7 @@ - (void)flushUIBlocksOnRootNode:(std::weak_ptr)rootNode { HippyLogError(@"Exception thrown while executing UI block: %@", exception); } } + [strongSelf.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; TDF_PERF_LOG("flushUIBlocksOnRootNode done, block count:%d(random id:%u)", previousPendingUIBlocks.count, rand); } }); @@ -802,7 +806,6 @@ - (void)createRenderNodes:(std::vector> &&)nodes if ([view respondsToSelector:@selector(hippyBridgeDidFinishTransaction)]) { [uiManager->_componentTransactionListeners addObject:view]; } - [uiManager.viewRegistry addComponent:view forRootTag:shadowView.rootTag]; [tempCreatedViews addObject:view]; // TODO: hippy3 events binding handling, performance needs to be improved here. @@ -816,6 +819,11 @@ - (void)createRenderNodes:(std::vector> &&)nodes }]; } } + [self addUIBlock:^(HippyUIManager *uiManager, NSDictionary *viewRegistry) { + for (UIView *view in tempCreatedViews) { + [uiManager.viewRegistry addComponent:view forRootTag:rootNodeTag]; + } + }]; [manager enumerateViewsHierarchy:^(int32_t tag, const std::vector &subviewTags, const std::vector &subviewIndices) { auto subViewTags_ = subviewTags; auto subViewIndices_ = subviewIndices; From a1cba871d43bc330ed1262dcc80bb4967664685e Mon Sep 17 00:00:00 2001 From: wwwcg Date: Mon, 25 Dec 2023 14:55:05 +0800 Subject: [PATCH 05/39] fix(ios): revert rename hippy prefix for compatibility --- renderer/native/ios/renderer/HippyFont.mm | 24 +-- .../ios/renderer/NativeRenderManager.mm | 2 +- ...veRenderObjectText.h => HippyShadowText.h} | 20 +-- ...RenderObjectText.mm => HippyShadowText.mm} | 163 +++++++++--------- .../text/{NativeRenderText.h => HippyText.h} | 2 +- .../{NativeRenderText.mm => HippyText.mm} | 18 +- ...RenderTextManager.h => HippyTextManager.h} | 2 +- ...nderTextManager.mm => HippyTextManager.mm} | 54 +++--- .../textinput/NativeRenderTextView.mm | 12 +- .../renderer/component/view/HippyShadowView.h | 4 +- .../component/view/HippyViewManager.mm | 6 +- .../ios/utils/HippyConvert+NativeRender.h | 26 +-- .../ios/utils/HippyConvert+NativeRender.m | 26 +-- 13 files changed, 171 insertions(+), 188 deletions(-) rename renderer/native/ios/renderer/component/text/{NativeRenderObjectText.h => HippyShadowText.h} (86%) rename renderer/native/ios/renderer/component/text/{NativeRenderObjectText.mm => HippyShadowText.mm} (87%) rename renderer/native/ios/renderer/component/text/{NativeRenderText.h => HippyText.h} (96%) rename renderer/native/ios/renderer/component/text/{NativeRenderText.mm => HippyText.mm} (92%) rename renderer/native/ios/renderer/component/text/{NativeRenderTextManager.h => HippyTextManager.h} (93%) rename renderer/native/ios/renderer/component/text/{NativeRenderTextManager.mm => HippyTextManager.mm} (67%) diff --git a/renderer/native/ios/renderer/HippyFont.mm b/renderer/native/ios/renderer/HippyFont.mm index 18a66983f2e..a73e3aa41a3 100644 --- a/renderer/native/ios/renderer/HippyFont.mm +++ b/renderer/native/ios/renderer/HippyFont.mm @@ -25,24 +25,6 @@ #import "HippyFont.h" #import "HippyLog.h" -#if !defined(__IPHONE_8_2) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_2 - -// These constants are defined in iPhone SDK 8.2, but the app cannot run on -// iOS < 8.2 unless we redefine them here. If you target iOS 8.2 or above -// as a base target, the standard constants will be used instead. -// These constants can only be removed when Hippy Native drops iOS8 support. - -#define UIFontWeightUltraLight -0.8 -#define UIFontWeightThin -0.6 -#define UIFontWeightLight -0.4 -#define UIFontWeightRegular 0 -#define UIFontWeightMedium 0.23 -#define UIFontWeightSemibold 0.3 -#define UIFontWeightBold 0.4 -#define UIFontWeightHeavy 0.56 -#define UIFontWeightBlack 0.62 - -#endif static NSCache *fontCache; @@ -116,7 +98,7 @@ struct __attribute__((__packed__)) CacheKey { addObserverForName:(NSNotificationName)kCTFontManagerRegisteredFontsChangedNotification object:nil queue:nil - usingBlock:^(NSNotification *) { + usingBlock:^(NSNotification *note) { [cache removeAllObjects]; }]; }); @@ -277,7 +259,7 @@ + (UIFont *)updateFont:(UIFont *)font // Gracefully handle being given a font name rather than font family, for // example: "Helvetica Light Oblique" rather than just "Helvetica". - if (!didFindFont && familyName.length > 0 && fontNamesForFamilyName(familyName).count == 0) { + if (font && !didFindFont && familyName.length > 0 && fontNamesForFamilyName(familyName).count == 0) { familyName = font.familyName; fontWeight = weight ? fontWeight : weightOfFont(font); isItalic = style ? isItalic : isItalicFont(font); @@ -329,7 +311,7 @@ + (UIFont *)updateFont:(UIFont *)font } // Apply font variants to font object - if (variant) { + if (font && variant) { NSArray *fontFeatures = [HippyConvert NativeRenderFontVariantDescriptorArray:variant]; UIFontDescriptor *fontDescriptor = [font.fontDescriptor fontDescriptorByAddingAttributes: diff --git a/renderer/native/ios/renderer/NativeRenderManager.mm b/renderer/native/ios/renderer/NativeRenderManager.mm index 9e34a009df5..192eafe9d85 100644 --- a/renderer/native/ios/renderer/NativeRenderManager.mm +++ b/renderer/native/ios/renderer/NativeRenderManager.mm @@ -23,7 +23,7 @@ #import "HippyUIManager.h" #import "HippyUIManager+Private.h" #import "NativeRenderManager.h" -#import "NativeRenderObjectText.h" +#import "HippyShadowText.h" #import "RenderVsyncManager.h" #import "HippyAssert.h" diff --git a/renderer/native/ios/renderer/component/text/NativeRenderObjectText.h b/renderer/native/ios/renderer/component/text/HippyShadowText.h similarity index 86% rename from renderer/native/ios/renderer/component/text/NativeRenderObjectText.h rename to renderer/native/ios/renderer/component/text/HippyShadowText.h index 7a8cde14441..0ab41e6d889 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderObjectText.h +++ b/renderer/native/ios/renderer/component/text/HippyShadowText.h @@ -23,10 +23,10 @@ #import "HippyConvert+NativeRender.h" #import "HippyShadowView.h" -typedef NS_ENUM(NSInteger, NativeRenderSizeComparison) { - NativeRenderSizeTooLarge, - NativeRenderSizeTooSmall, - NativeRenderSizeWithinRange, +typedef NS_ENUM(NSInteger, HippySizeComparison) { + HippySizeTooLarge, + HippySizeTooSmall, + HippySizeWithinRange, }; namespace hippy { @@ -36,16 +36,16 @@ struct LayoutSize; } } -extern NSAttributedStringKey const NativeRenderIsHighlightedAttributeName; -extern NSAttributedStringKey const NativeRenderComponentTagAttributeName; -extern NSAttributedStringKey const NativeRenderRenderObjectAttributeName; +extern NSAttributedStringKey const HippyIsHighlightedAttributeName; +extern NSAttributedStringKey const HippyTagAttributeName; +extern NSAttributedStringKey const HippyShadowViewAttributeName; hippy::LayoutSize textMeasureFunc(float width, hippy::LayoutMeasureMode widthMeasureMode, __unused float height, __unused hippy::LayoutMeasureMode heightMeasureMode, void *layoutContext); -@interface NativeRenderObjectText : HippyShadowView { +@interface HippyShadowText : HippyShadowView { @protected NSTextStorage *_cachedTextStorage; CGFloat _cachedTextStorageWidth; @@ -73,7 +73,7 @@ hippy::LayoutSize textMeasureFunc(float width, hippy::LayoutMeasureMode widthMea @property (nonatomic, assign) NSTextAlignment textAlign; @property (nonatomic, strong) UIColor *textDecorationColor; @property (nonatomic, assign) NSUnderlineStyle textDecorationStyle; -@property (nonatomic, assign) NativeRenderTextDecorationLineType textDecorationLine; +@property (nonatomic, assign) HippyTextDecorationLineType textDecorationLine; @property (nonatomic, assign) CGFloat fontSizeMultiplier; @property (nonatomic, assign) BOOL allowFontScaling; @property (nonatomic, assign) CGFloat opacity; @@ -90,7 +90,7 @@ hippy::LayoutSize textMeasureFunc(float width, hippy::LayoutMeasureMode widthMea @end /// Style information passed when generating attributedString -@interface NativeRenderAttributedStringStyleInfo : NSObject +@interface HippyAttributedStringStyleInfo : NSObject @property (nonatomic, strong) NSString *fontFamily; @property (nonatomic, strong) NSNumber *fontSize; diff --git a/renderer/native/ios/renderer/component/text/NativeRenderObjectText.mm b/renderer/native/ios/renderer/component/text/HippyShadowText.mm similarity index 87% rename from renderer/native/ios/renderer/component/text/NativeRenderObjectText.mm rename to renderer/native/ios/renderer/component/text/HippyShadowText.mm index 2beb9e88431..c8971a9444d 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderObjectText.mm +++ b/renderer/native/ios/renderer/component/text/HippyShadowText.mm @@ -24,8 +24,8 @@ #import "HippyI18nUtils.h" #import "HippyUtils.h" #import "HippyFont.h" -#import "NativeRenderObjectText.h" -#import "NativeRenderText.h" +#import "HippyShadowText.h" +#import "HippyText.h" #import "NativeRenderTextView.h" #import "NativeRenderUtils.h" @@ -33,22 +33,23 @@ #include "dom/dom_node.h" #include "dom/layout_node.h" + // Text Attachment use this key to ref shadow view, HippyShadowView value -NSAttributedStringKey const NativeRenderRenderObjectAttributeName = @"NativeRenderRenderObjectAttributeName"; +NSAttributedStringKey const HippyShadowViewAttributeName = @"HippyShadowViewAttributeName"; // Highlighted or not -NSAttributedStringKey const NativeRenderIsHighlightedAttributeName = @"IsHighlightedAttributeName"; +NSAttributedStringKey const HippyIsHighlightedAttributeName = @"IsHighlightedAttributeName"; // Hippy Tag Key -NSAttributedStringKey const NativeRenderComponentTagAttributeName = @"NativeRenderTagAttributeName"; +NSAttributedStringKey const HippyTagAttributeName = @"HippyTagAttributeName"; // VerticalAlign of Text or nested Text, NSNumber value -NSAttributedStringKey const NativeRenderTextVerticalAlignAttributeName = @"NativeRenderTextVerticalAlignAttributeName"; +NSAttributedStringKey const HippyTextVerticalAlignAttributeName = @"HippyTextVerticalAlignAttributeName"; // Distance to the bottom of the baseline, for text attachment baseline layout, NSNumber value -NSAttributedStringKey const NativeRenderVerticalAlignBaselineOffsetAttributeName = @"NativeRenderVerticalAlignBaselineOffsetAttributeName"; +NSAttributedStringKey const HippyVerticalAlignBaselineOffsetAttributeName = @"HippyVerticalAlignBaselineOffsetAttributeName"; -CGFloat const NativeRenderTextAutoSizeWidthErrorMargin = 0.05f; -CGFloat const NativeRenderTextAutoSizeHeightErrorMargin = 0.025f; -CGFloat const NativeRenderTextAutoSizeGranularity = 0.001f; -static const CGFloat gDefaultFontSize = 14.f; +CGFloat const HippyTextAutoSizeWidthErrorMargin = 0.05; +CGFloat const HippyTextAutoSizeHeightErrorMargin = 0.025; +CGFloat const HippyTextAutoSizeGranularity = 0.001; +static const CGFloat gDefaultFontSize = 14.0; static BOOL DirtyTextEqual(BOOL v1, BOOL v2) { return v1 == v2; @@ -74,16 +75,16 @@ static BOOL DirtyTextEqual(NSObject *v1, NSObject *v2) { return [v1 isEqual:v2]; } -#pragma mark - NativeRenderAttributedStringStyleInfo +#pragma mark - HippyAttributedStringStyleInfo -@implementation NativeRenderAttributedStringStyleInfo +@implementation HippyAttributedStringStyleInfo @end #pragma mark - HippyShadowText -@interface NativeRenderObjectText () +@interface HippyShadowText () { BOOL _isNestedText; // Indicates whether Text is nested, for speeding up typesetting calculations BOOL _needRelayoutText; // special styles require two layouts, eg. verticalAlign etc @@ -92,13 +93,13 @@ @interface NativeRenderObjectText () @end -@implementation NativeRenderObjectText +@implementation HippyShadowText hippy::LayoutSize textMeasureFunc( - NativeRenderObjectText *weakShadowText, float width,hippy::LayoutMeasureMode widthMeasureMode, + HippyShadowText *weakShadowText, float width,hippy::LayoutMeasureMode widthMeasureMode, float height, hippy::LayoutMeasureMode heightMeasureMode, void *layoutContext) { hippy::LayoutSize retSize; - NativeRenderObjectText *strongShadowText = weakShadowText; + HippyShadowText *strongShadowText = weakShadowText; if (strongShadowText) { NSTextStorage *textStorage = [strongShadowText buildTextStorageForWidth:width widthMode:widthMeasureMode]; [strongShadowText calculateTextFrame:textStorage]; @@ -189,7 +190,7 @@ - (void)contentSizeMultiplierDidChange:(__unused NSNotification *)note { - (NSDictionary *)processUpdatedProperties:(NSMutableSet *)applierBlocks parentProperties:(NSDictionary *)parentProperties { - if ([[self parent] isKindOfClass:[NativeRenderObjectText class]]) { + if ([[self parent] isKindOfClass:[HippyShadowText class]]) { return parentProperties; } @@ -204,8 +205,8 @@ - (void)contentSizeMultiplierDidChange:(__unused NSNotification *)note { CGRect textFrame = [self calculateTextFrame:textStorage]; UIColor *color = self.color ?: [UIColor blackColor]; [applierBlocks addObject:^(NSDictionary *viewRegistry, UIView * _Nullable lazyCreatedView) { - NativeRenderText *view = (NativeRenderText *)(lazyCreatedView ?: viewRegistry[self.hippyTag]); - if (![view isKindOfClass:NativeRenderText.class]) { + HippyText *view = (HippyText *)(lazyCreatedView ?: viewRegistry[self.hippyTag]); + if (![view isKindOfClass:HippyText.class]) { return; } view.textFrame = textFrame; @@ -214,10 +215,10 @@ - (void)contentSizeMultiplierDidChange:(__unused NSNotification *)note { /** * NOTE: this logic is included to support rich text editing inside multiline * `` controls. It is required in order to ensure that the - * textStorage (aka attributed string) is copied over from the NativeRenderShadowText - * to the NativeRenderText view in time to be used to update the editable text content. + * textStorage (aka attributed string) is copied over from the HippyShadowText + * to the HippyText view in time to be used to update the editable text content. * TODO: we should establish a delegate relationship betweeen NativeRenderTextView - * and its contaned NativeRenderText element when they get inserted and get rid of this + * and its contaned HippyText element when they get inserted and get rid of this */ UIView *parentView = viewRegistry[parentTag]; if ([parentView respondsToSelector:@selector(performTextUpdate)]) { @@ -238,7 +239,7 @@ - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks NSTextContainer *textContainer = layoutManager.textContainers.firstObject; NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer]; NSRange characterRange = [layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL]; - [textStorage enumerateAttribute:NativeRenderRenderObjectAttributeName inRange:characterRange options:0 usingBlock:^( + [textStorage enumerateAttribute:HippyShadowViewAttributeName inRange:characterRange options:0 usingBlock:^( HippyShadowView *child, NSRange range, __unused BOOL *_) { if (child) { float width = child.width, height = child.height; @@ -263,26 +264,26 @@ - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks CGFloat roundedHeightWithMargin = NativeRenderRoundPixelValue(height + marginV); CGFloat positionY = .0f; - NSNumber *verticalAlignType = [textStorage attribute:NativeRenderTextVerticalAlignAttributeName + NSNumber *verticalAlignType = [textStorage attribute:HippyTextVerticalAlignAttributeName atIndex:range.location effectiveRange:nil]; switch (verticalAlignType.integerValue) { - case NativeRenderTextVerticalAlignBottom: { + case HippyTextVerticalAlignBottom: { positionY = CGRectGetMaxY(lineRect) - roundedHeightWithMargin; break; } - case NativeRenderTextVerticalAlignUndefined: - case NativeRenderTextVerticalAlignBaseline: { - // get baseline-bottom distance from NativeRenderVerticalAlignBaselineOffsetAttributeName - NSNumber *baselineToBottom = [textStorage attribute:NativeRenderVerticalAlignBaselineOffsetAttributeName + case HippyTextVerticalAlignUndefined: + case HippyTextVerticalAlignBaseline: { + // get baseline-bottom distance from HippyVerticalAlignBaselineOffsetAttributeName + NSNumber *baselineToBottom = [textStorage attribute:HippyVerticalAlignBaselineOffsetAttributeName atIndex:range.location effectiveRange:nullptr]; positionY = CGRectGetMaxY(lineRect) - roundedHeightWithMargin - baselineToBottom.doubleValue; break; } - case NativeRenderTextVerticalAlignTop: { + case HippyTextVerticalAlignTop: { positionY = CGRectGetMinY(lineRect); break; } - case NativeRenderTextVerticalAlignMiddle: { + case HippyTextVerticalAlignMiddle: { positionY = CGRectGetMinY(lineRect) + (CGRectGetHeight(lineRect) - roundedHeightWithMargin) / 2.0f - child.verticalAlignOffset; break; @@ -306,7 +307,7 @@ - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks if (NativeRenderUpdateLifecycleComputed != _propagationLifecycle) { _propagationLifecycle = NativeRenderUpdateLifecycleComputed; for (HippyShadowView *shadowView in self.subcomponents) { - if (![shadowView isKindOfClass:NativeRenderObjectText.class]) { + if (![shadowView isKindOfClass:HippyShadowText.class]) { [shadowView amendLayoutBeforeMount:blocks]; } } @@ -431,7 +432,7 @@ - (void)recomputeText { #pragma mark - AttributeString - (NSAttributedString *)attributedString { - NativeRenderAttributedStringStyleInfo *info = [NativeRenderAttributedStringStyleInfo new]; + HippyAttributedStringStyleInfo *info = [HippyAttributedStringStyleInfo new]; info.foregroundColor = self.color ?: [UIColor blackColor]; info.backgroundColor = self.backgroundColor; info.opacity = self.opacity; @@ -440,7 +441,7 @@ - (NSAttributedString *)attributedString { return [self _attributedStringWithStyleInfo:info]; } -- (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedStringStyleInfo *)styleInfo { +- (NSAttributedString *)_attributedStringWithStyleInfo:(HippyAttributedStringStyleInfo *)styleInfo { if (!_textAlignSet) { if ([self isLayoutSubviewsRTL]) { self.textAlign = NSTextAlignmentRight; @@ -492,9 +493,9 @@ - (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedSt CGFloat heightOfTallestSubview = 0.0; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.text ?: @""]; for (HippyShadowView *child in [self subcomponents]) { - if ([child isKindOfClass:[NativeRenderObjectText class]]) { - NativeRenderObjectText *shadowText = (NativeRenderObjectText *)child; - NativeRenderAttributedStringStyleInfo *childInfo = [NativeRenderAttributedStringStyleInfo new]; + if ([child isKindOfClass:[HippyShadowText class]]) { + HippyShadowText *shadowText = (HippyShadowText *)child; + HippyAttributedStringStyleInfo *childInfo = [HippyAttributedStringStyleInfo new]; childInfo.fontFamily = styleInfo.fontFamily; childInfo.fontSize = styleInfo.fontSize; childInfo.fontWeight = styleInfo.fontWeight; @@ -547,11 +548,11 @@ - (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedSt [attachmentString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:0] range:(NSRange) { 0, attachmentString.length }]; - [attachmentString addAttribute:NativeRenderRenderObjectAttributeName + [attachmentString addAttribute:HippyShadowViewAttributeName value:child range:(NSRange) { 0, attachmentString.length }]; - if (NativeRenderTextVerticalAlignUndefined != child.verticalAlignType) { - [attachmentString addAttribute:NativeRenderTextVerticalAlignAttributeName + if (HippyTextVerticalAlignUndefined != child.verticalAlignType) { + [attachmentString addAttribute:HippyTextVerticalAlignAttributeName value:@(child.verticalAlignType) range:(NSRange) { 0, attachmentString.length }]; } @@ -559,7 +560,7 @@ - (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedSt if (height > heightOfTallestSubview) { heightOfTallestSubview = height; } - // Don't call setTextComputed on this child. NativeRenderTextManager takes care of + // Don't call setTextComputed on this child. HippyTextManager takes care of // processing inline UIViews. } } @@ -570,7 +571,7 @@ - (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedSt toAttributedString:attributedString]; if (_isHighlighted) { - [self _addAttribute:NativeRenderIsHighlightedAttributeName withValue:@YES toAttributedString:attributedString]; + [self _addAttribute:HippyIsHighlightedAttributeName withValue:@YES toAttributedString:attributedString]; } if (styleInfo.useBackgroundColor && styleInfo.backgroundColor) { [self _addAttribute:NSBackgroundColorAttributeName @@ -581,9 +582,9 @@ - (NSAttributedString *)_attributedStringWithStyleInfo:(NativeRenderAttributedSt [self _addAttribute:NSFontAttributeName withValue:font toAttributedString:attributedString]; [self _addAttribute:NSKernAttributeName withValue:styleInfo.letterSpacing toAttributedString:attributedString]; - [self _addAttribute:NativeRenderComponentTagAttributeName withValue:self.hippyTag toAttributedString:attributedString]; - if (NativeRenderTextVerticalAlignUndefined != self.verticalAlignType) { - [self _addAttribute:NativeRenderTextVerticalAlignAttributeName + [self _addAttribute:HippyTagAttributeName withValue:self.hippyTag toAttributedString:attributedString]; + if (HippyTextVerticalAlignUndefined != self.verticalAlignType) { + [self _addAttribute:HippyTextVerticalAlignAttributeName withValue:@(self.verticalAlignType) toAttributedString:attributedString]; } @@ -698,7 +699,7 @@ - (void)_setParagraphStyleOnAttributedString:(NSMutableAttributedString *)attrib * is in NSLayoutManagerDelegate's imp */ if (!isNestedText && (lineHeight > fontLineHeight) - && NativeRenderTextVerticalAlignUndefined == self.verticalAlignType) { + && HippyTextVerticalAlignUndefined == self.verticalAlignType) { CGFloat baselineOffset = (newLineHeight - maximumFontLineHeight) / 2.0f; if (baselineOffset > .0f) { [attributedString addAttribute:NSBaselineOffsetAttributeName @@ -709,12 +710,12 @@ - (void)_setParagraphStyleOnAttributedString:(NSMutableAttributedString *)attrib } // Text decoration - if (_textDecorationLine == NativeRenderTextDecorationLineTypeUnderline || - _textDecorationLine == NativeRenderTextDecorationLineTypeUnderlineStrikethrough) { + if (_textDecorationLine == HippyTextDecorationLineTypeUnderline || + _textDecorationLine == HippyTextDecorationLineTypeUnderlineStrikethrough) { [self _addAttribute:NSUnderlineStyleAttributeName withValue:@(_textDecorationStyle) toAttributedString:attributedString]; } - if (_textDecorationLine == NativeRenderTextDecorationLineTypeStrikethrough || - _textDecorationLine == NativeRenderTextDecorationLineTypeUnderlineStrikethrough) { + if (_textDecorationLine == HippyTextDecorationLineTypeStrikethrough || + _textDecorationLine == HippyTextDecorationLineTypeUnderlineStrikethrough) { [self _addAttribute:NSStrikethroughStyleAttributeName withValue:@(_textDecorationStyle) toAttributedString:attributedString]; } if (_textDecorationColor) { @@ -775,24 +776,24 @@ - (CGSize)calculateOptimumScaleInFrame:(CGRect)frame maxScale:(CGFloat)maxScale prevMid:(CGFloat)prevMid { CGFloat midScale = (minScale + maxScale) / 2.0f; - if (round((prevMid / NativeRenderTextAutoSizeGranularity)) == round((midScale / NativeRenderTextAutoSizeGranularity))) { + if (round((prevMid / HippyTextAutoSizeGranularity)) == round((midScale / HippyTextAutoSizeGranularity))) { // Bail because we can't meet error margin. return [self calculateSize:textStorage]; } else { - NativeRenderSizeComparison comparison = [self attemptScale:midScale inStorage:textStorage forFrame:frame]; - if (comparison == NativeRenderSizeWithinRange) { + HippySizeComparison comparison = [self attemptScale:midScale inStorage:textStorage forFrame:frame]; + if (comparison == HippySizeWithinRange) { return [self calculateSize:textStorage]; - } else if (comparison == NativeRenderSizeTooLarge) { - return [self calculateOptimumScaleInFrame:frame forStorage:textStorage minScale:minScale maxScale:midScale - NativeRenderTextAutoSizeGranularity + } else if (comparison == HippySizeTooLarge) { + return [self calculateOptimumScaleInFrame:frame forStorage:textStorage minScale:minScale maxScale:midScale - HippyTextAutoSizeGranularity prevMid:midScale]; } else { - return [self calculateOptimumScaleInFrame:frame forStorage:textStorage minScale:midScale + NativeRenderTextAutoSizeGranularity maxScale:maxScale + return [self calculateOptimumScaleInFrame:frame forStorage:textStorage minScale:midScale + HippyTextAutoSizeGranularity maxScale:maxScale prevMid:midScale]; } } } -- (NativeRenderSizeComparison)attemptScale:(CGFloat)scale inStorage:(NSTextStorage *)textStorage forFrame:(CGRect)frame { +- (HippySizeComparison)attemptScale:(CGFloat)scale inStorage:(NSTextStorage *)textStorage forFrame:(CGRect)frame { NSLayoutManager *layoutManager = [textStorage.layoutManagers firstObject]; NSTextContainer *textContainer = [layoutManager.textContainers firstObject]; @@ -817,14 +818,14 @@ - (NativeRenderSizeComparison)attemptScale:(CGFloat)scale inStorage:(NSTextStora BOOL fitLines = linesRequired <= textContainer.maximumNumberOfLines || textContainer.maximumNumberOfLines == 0; if (fitLines && fitSize) { - if ((requiredSize.width + (CGRectGetWidth(frame) * NativeRenderTextAutoSizeWidthErrorMargin)) > CGRectGetWidth(frame) - && (requiredSize.height + (CGRectGetHeight(frame) * NativeRenderTextAutoSizeHeightErrorMargin)) > CGRectGetHeight(frame)) { - return NativeRenderSizeWithinRange; + if ((requiredSize.width + (CGRectGetWidth(frame) * HippyTextAutoSizeWidthErrorMargin)) > CGRectGetWidth(frame) + && (requiredSize.height + (CGRectGetHeight(frame) * HippyTextAutoSizeHeightErrorMargin)) > CGRectGetHeight(frame)) { + return HippySizeWithinRange; } else { - return NativeRenderSizeTooSmall; + return HippySizeTooSmall; } } else { - return NativeRenderSizeTooLarge; + return HippySizeTooLarge; } } @@ -886,7 +887,7 @@ -(void)set##setProp : (type)value \ NATIVE_RENDER_TEXT_PROPERTY(NumberOfLines, _numberOfLines, NSUInteger) NATIVE_RENDER_TEXT_PROPERTY(EllipsizeMode, _ellipsizeMode, NSLineBreakMode) NATIVE_RENDER_TEXT_PROPERTY(TextDecorationColor, _textDecorationColor, UIColor *); -NATIVE_RENDER_TEXT_PROPERTY(TextDecorationLine, _textDecorationLine, NativeRenderTextDecorationLineType); +NATIVE_RENDER_TEXT_PROPERTY(TextDecorationLine, _textDecorationLine, HippyTextDecorationLineType); NATIVE_RENDER_TEXT_PROPERTY(TextDecorationStyle, _textDecorationStyle, NSUnderlineStyle); NATIVE_RENDER_TEXT_PROPERTY(Opacity, _opacity, CGFloat) NATIVE_RENDER_TEXT_PROPERTY(TextShadowOffset, _textShadowOffset, CGSize); @@ -912,7 +913,7 @@ - (void)setDomManager:(std::weak_ptr)domManager { int32_t componentTag = [self.hippyTag intValue]; auto node = shared_domNode->GetNode(self.rootNode, componentTag); if (node) { - __weak NativeRenderObjectText *weakSelf = self; + __weak HippyShadowText *weakSelf = self; hippy::MeasureFunction measureFunc = [weakSelf](float width, hippy::LayoutMeasureMode widthMeasureMode, float height, hippy::LayoutMeasureMode heightMeasureMode, void *layoutContext){ @@ -962,8 +963,8 @@ - (void)setAllowFontScaling:(BOOL)allowFontScaling { } _allowFontScaling = allowFontScaling; for (HippyShadowView *child in [self subcomponents]) { - if ([child isKindOfClass:[NativeRenderObjectText class]]) { - ((NativeRenderObjectText *)child).allowFontScaling = allowFontScaling; + if ([child isKindOfClass:[HippyShadowText class]]) { + ((HippyShadowText *)child).allowFontScaling = allowFontScaling; } } _needDirtyText = YES; @@ -979,8 +980,8 @@ - (void)setFontSizeMultiplier:(CGFloat)fontSizeMultiplier { _fontSizeMultiplier = 1.0; } for (HippyShadowView *child in [self subcomponents]) { - if ([child isKindOfClass:[NativeRenderObjectText class]]) { - ((NativeRenderObjectText *)child).fontSizeMultiplier = fontSizeMultiplier; + if ([child isKindOfClass:[HippyShadowText class]]) { + ((HippyShadowText *)child).fontSizeMultiplier = fontSizeMultiplier; } } [self dirtyText:NO]; @@ -1015,7 +1016,7 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect lineFragmentUsedRect:(inout CGRect *)lineFragmentUsedRect baselineOffset:(inout CGFloat *)baselineOffset inTextContainer:(NSTextContainer *)textContainer forGlyphRange:(NSRange)glyphRange { NSTextStorage *textStorage = layoutManager.textStorage; - if (_isNestedText || NativeRenderTextVerticalAlignUndefined != self.verticalAlignType) { + if (_isNestedText || HippyTextVerticalAlignUndefined != self.verticalAlignType) { __block CGFloat maxAttachmentHeight = .0f; __block BOOL hasAttachment = NO; NSRange storageRange = [layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:nil]; @@ -1032,11 +1033,11 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect }]; __block BOOL hasBaselineAlign = NO; - [textStorage enumerateAttribute:NativeRenderTextVerticalAlignAttributeName + [textStorage enumerateAttribute:HippyTextVerticalAlignAttributeName inRange:storageRange options:0 usingBlock:^(NSNumber *type, NSRange range, BOOL * _Nonnull stop) { - if (NativeRenderTextVerticalAlignBaseline == type.integerValue || - NativeRenderTextVerticalAlignUndefined == type.integerValue) { + if (HippyTextVerticalAlignBaseline == type.integerValue || + HippyTextVerticalAlignUndefined == type.integerValue) { hasBaselineAlign = YES; *stop = YES; } @@ -1061,7 +1062,7 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect CGFloat maxTotalHeight = MAX((maxAttachmentHeight + textBaselineToBottom), maxFont.lineHeight); realBaselineOffset = (CGRectGetHeight(*lineFragmentUsedRect) - maxTotalHeight) / 2.f; if (hasAttachment) { - [textStorage addAttribute:NativeRenderVerticalAlignBaselineOffsetAttributeName + [textStorage addAttribute:HippyVerticalAlignBaselineOffsetAttributeName value:@(realBaselineOffset + textBaselineToBottom) range:storageRange]; } @@ -1071,7 +1072,7 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect options:kNilOptions usingBlock:^(NSDictionary * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) { - NSNumber *verticalAlignValue = attrs[NativeRenderTextVerticalAlignAttributeName]; + NSNumber *verticalAlignValue = attrs[HippyTextVerticalAlignAttributeName]; // Calculate position of text id offsetValue = [textStorage attribute:NSBaselineOffsetAttributeName atIndex:range.location effectiveRange:nil]; @@ -1080,23 +1081,23 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect CGFloat lineHeight = CGRectGetHeight(*lineFragmentUsedRect); CGFloat baselineToBottom = lineHeight - *baselineOffset; switch (verticalAlignValue.integerValue) { - case NativeRenderTextVerticalAlignTop: { + case HippyTextVerticalAlignTop: { UIFont *font = attrs[NSFontAttributeName]; offset = lineHeight - font.ascender - baselineToBottom; break; } - case NativeRenderTextVerticalAlignMiddle: { + case HippyTextVerticalAlignMiddle: { UIFont *font = attrs[NSFontAttributeName]; offset = (lineHeight - font.lineHeight) / 2.f - baselineToBottom + abs(font.descender) + abs(font.leading) + self.verticalAlignOffset; break; } - case NativeRenderTextVerticalAlignUndefined: - case NativeRenderTextVerticalAlignBaseline: { + case HippyTextVerticalAlignUndefined: + case HippyTextVerticalAlignBaseline: { offset = realBaselineOffset; break; } - case NativeRenderTextVerticalAlignBottom: { + case HippyTextVerticalAlignBottom: { UIFont *font = attrs[NSFontAttributeName]; offset = abs(font.descender) + abs(font.leading) - baselineToBottom; break; @@ -1104,7 +1105,7 @@ - (BOOL)layoutManager:(NSLayoutManager *)layoutManager shouldSetLineFragmentRect default: break; } - if (abs(offset) > .0f && !attrs[NativeRenderRenderObjectAttributeName]) { + if (abs(offset) > .0f && !attrs[HippyShadowViewAttributeName]) { // only set for Text [textStorage addAttribute:NSBaselineOffsetAttributeName value:@(offset) range:range]; _needRelayoutText = YES; diff --git a/renderer/native/ios/renderer/component/text/NativeRenderText.h b/renderer/native/ios/renderer/component/text/HippyText.h similarity index 96% rename from renderer/native/ios/renderer/component/text/NativeRenderText.h rename to renderer/native/ios/renderer/component/text/HippyText.h index f478de9f4ad..50399a4be8d 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderText.h +++ b/renderer/native/ios/renderer/component/text/HippyText.h @@ -23,7 +23,7 @@ #import #import "NativeRenderTouchesView.h" -@interface NativeRenderText : NativeRenderTouchesView { +@interface HippyText : NativeRenderTouchesView { @protected NSTextStorage *_textStorage; CAShapeLayer *_highlightLayer; diff --git a/renderer/native/ios/renderer/component/text/NativeRenderText.mm b/renderer/native/ios/renderer/component/text/HippyText.mm similarity index 92% rename from renderer/native/ios/renderer/component/text/NativeRenderText.mm rename to renderer/native/ios/renderer/component/text/HippyText.mm index 7b3ffdb0604..3dc00febcae 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderText.mm +++ b/renderer/native/ios/renderer/component/text/HippyText.mm @@ -20,23 +20,23 @@ * limitations under the License. */ -#import "NativeRenderText.h" -#import "NativeRenderObjectText.h" +#import "HippyText.h" +#import "HippyShadowText.h" #import "HippyUtils.h" #import "UIView+Hippy.h" #import "HippyLog.h" -static void collectNonTextDescendants(NativeRenderText *view, NSMutableArray *nonTextDescendants) { +static void collectNonTextDescendants(HippyText *view, NSMutableArray *nonTextDescendants) { for (UIView *child in view.subcomponents) { - if ([child isKindOfClass:[NativeRenderText class]]) { - collectNonTextDescendants((NativeRenderText *)child, nonTextDescendants); + if ([child isKindOfClass:[HippyText class]]) { + collectNonTextDescendants((HippyText *)child, nonTextDescendants); } else { [nonTextDescendants addObject:child]; } } } -@implementation NativeRenderText +@implementation HippyText - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { @@ -132,7 +132,7 @@ - (void)drawRect:(__unused CGRect)rect { __block UIBezierPath *highlightPath = nil; NSRange characterRange = [layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL]; - [layoutManager.textStorage enumerateAttribute:NativeRenderIsHighlightedAttributeName inRange:characterRange options:0 usingBlock:^( + [layoutManager.textStorage enumerateAttribute:HippyIsHighlightedAttributeName inRange:characterRange options:0 usingBlock:^( NSNumber *value, NSRange range, __unused BOOL *_) { if (!value.boolValue) { return; @@ -176,7 +176,7 @@ - (NSNumber *)hippyTagAtPoint:(CGPoint)point { // If the point is not before (fraction == 0.0) the first character and not // after (fraction == 1.0) the last character, then the attribute is valid. if (_textStorage.length > 0 && (fraction > 0 || characterIndex > 0) && (fraction < 1 || characterIndex < _textStorage.length - 1)) { - componentTag = [_textStorage attribute:NativeRenderComponentTagAttributeName atIndex:characterIndex effectiveRange:NULL]; + componentTag = [_textStorage attribute:HippyTagAttributeName atIndex:characterIndex effectiveRange:NULL]; } return componentTag; } @@ -222,7 +222,7 @@ - (NSString *)accessibilityLabel { } - (void)setBackgroundImageUrl:(NSString *)backgroundImageUrl { - HippyLogWarn(@"Warning: backgroundImage is not available in NativeRenderText."); + HippyLogWarn(@"Warning: backgroundImage is not available in HippyText."); } @end diff --git a/renderer/native/ios/renderer/component/text/NativeRenderTextManager.h b/renderer/native/ios/renderer/component/text/HippyTextManager.h similarity index 93% rename from renderer/native/ios/renderer/component/text/NativeRenderTextManager.h rename to renderer/native/ios/renderer/component/text/HippyTextManager.h index b99ae048c7b..edb0227e2ff 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderTextManager.h +++ b/renderer/native/ios/renderer/component/text/HippyTextManager.h @@ -22,6 +22,6 @@ #import "HippyViewManager.h" -@interface NativeRenderTextManager : HippyViewManager +@interface HippyTextManager : HippyViewManager @end diff --git a/renderer/native/ios/renderer/component/text/NativeRenderTextManager.mm b/renderer/native/ios/renderer/component/text/HippyTextManager.mm similarity index 67% rename from renderer/native/ios/renderer/component/text/NativeRenderTextManager.mm rename to renderer/native/ios/renderer/component/text/HippyTextManager.mm index 369de267217..e0fc959a344 100644 --- a/renderer/native/ios/renderer/component/text/NativeRenderTextManager.mm +++ b/renderer/native/ios/renderer/component/text/HippyTextManager.mm @@ -20,38 +20,38 @@ * limitations under the License. */ -#import "NativeRenderTextManager.h" +#import "HippyTextManager.h" +#import "HippyAssert.h" #import "HippyConvert.h" -#import "NativeRenderObjectText.h" -#import "NativeRenderText.h" -#import "NativeRenderTextView.h" +#import "HippyShadowText.h" +#import "HippyText.h" #import "UIView+Hippy.h" -static void collectDirtyNonTextDescendants(NativeRenderObjectText *renderObject, NSMutableArray *nonTextDescendants) { +static void collectDirtyNonTextDescendants(HippyShadowText *renderObject, NSMutableArray *nonTextDescendants) { for (HippyShadowView *child in renderObject.subcomponents) { - if ([child isKindOfClass:[NativeRenderObjectText class]]) { - collectDirtyNonTextDescendants((NativeRenderObjectText *)child, nonTextDescendants); + if ([child isKindOfClass:[HippyShadowText class]]) { + collectDirtyNonTextDescendants((HippyShadowText *)child, nonTextDescendants); } else if ([child isTextDirty]) { [nonTextDescendants addObject:child]; } } } -@interface NativeRenderObjectText (Private) +@interface HippyShadowText (Private) // hplayout - (NSTextStorage *)buildTextStorageForWidth:(CGFloat)width widthMode:(hippy::LayoutMeasureMode)widthMode; @end -@implementation NativeRenderTextManager +@implementation HippyTextManager HIPPY_EXPORT_MODULE(Text) - (UIView *)view { - return [NativeRenderText new]; + return [HippyText new]; } - (HippyShadowView *)hippyShadowView { - return [NativeRenderObjectText new]; + return [HippyShadowText new]; } #pragma mark - Shadow properties @@ -72,7 +72,7 @@ - (HippyShadowView *)hippyShadowView { HIPPY_EXPORT_SHADOW_PROPERTY(textAlign, NSTextAlignment) HIPPY_EXPORT_SHADOW_PROPERTY(textDecorationStyle, NSUnderlineStyle) HIPPY_EXPORT_SHADOW_PROPERTY(textDecorationColor, UIColor) -HIPPY_EXPORT_SHADOW_PROPERTY(textDecorationLine, NativeRenderTextDecorationLineType) +HIPPY_EXPORT_SHADOW_PROPERTY(textDecorationLine, HippyTextDecorationLineType) HIPPY_EXPORT_SHADOW_PROPERTY(allowFontScaling, BOOL) HIPPY_EXPORT_SHADOW_PROPERTY(opacity, CGFloat) HIPPY_EXPORT_SHADOW_PROPERTY(textShadowOffset, CGSize) @@ -97,38 +97,38 @@ - (HippyViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(NSDictionary *queue = [NSMutableArray arrayWithObject:rootView]; for (NSInteger i = 0; i < queue.count; i++) { - HippyShadowView *renderObject = queue[i]; - if (!renderObject) { - HippyLogWarn(@"renderObject is nil, please remain xcode state and call rainywan"); + HippyShadowView *shadowView = queue[i]; + if (!shadowView) { + HippyLogWarn(@"shadowView is nil"); continue; } -// NSAssert([renderObject isTextDirty], @"Don't process any nodes that don't have dirty text"); + HippyAssert([shadowView isTextDirty], @"Don't process any nodes that don't have dirty text"); - if ([renderObject isKindOfClass:[NativeRenderObjectText class]]) { - ((NativeRenderObjectText *)renderObject).fontSizeMultiplier = 1.0; - [(NativeRenderObjectText *)renderObject recomputeText]; - collectDirtyNonTextDescendants((NativeRenderObjectText *)renderObject, queue); + if ([shadowView isKindOfClass:[HippyShadowText class]]) { + ((HippyShadowText *)shadowView).fontSizeMultiplier = 1.0; + [(HippyShadowText *)shadowView recomputeText]; + collectDirtyNonTextDescendants((HippyShadowText *)shadowView, queue); } else { - for (HippyShadowView *child in [renderObject subcomponents]) { + for (HippyShadowView *child in [shadowView subcomponents]) { if ([child isTextDirty]) { [queue addObject:child]; } } } - [renderObject setTextComputed]; + [shadowView setTextComputed]; } } return nil; } -- (HippyViewManagerUIBlock)uiBlockToAmendWithShadowView:(NativeRenderObjectText *)renderObjectText { - NSNumber *componentTag = renderObjectText.hippyTag; - UIEdgeInsets padding = renderObjectText.paddingAsInsets; +- (HippyViewManagerUIBlock)uiBlockToAmendWithShadowView:(HippyShadowText *)shadowView { + NSNumber *componentTag = shadowView.hippyTag; + UIEdgeInsets padding = shadowView.paddingAsInsets; - return ^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderText *text = viewRegistry[componentTag]; + return ^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { + HippyText *text = viewRegistry[componentTag]; text.contentInset = padding; }; } diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm b/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm index 3df6575be09..1880a277e82 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm +++ b/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm @@ -23,8 +23,8 @@ #import "NativeRenderTextView.h" #import "HippyConvert.h" -#import "NativeRenderObjectText.h" -#import "NativeRenderText.h" +#import "HippyShadowText.h" +#import "HippyText.h" #import "HippyUtils.h" #import "NativeRenderTextSelection.h" #import "UIView+Hippy.h" @@ -78,7 +78,7 @@ @interface NativeRenderTextView () @implementation NativeRenderTextView { NSString *_placeholder; UITextView *_placeholderView; - NativeRenderText *_richTextView; + HippyText *_richTextView; NSAttributedString *_pendingAttributedText; UIScrollView *_scrollView; @@ -143,11 +143,11 @@ - (instancetype)initWithFrame:(CGRect)frame { - (void)insertHippySubview:(UIView *)subview atIndex:(NSInteger)index { [super insertHippySubview:subview atIndex:index]; - if ([subview isKindOfClass:[NativeRenderText class]]) { + if ([subview isKindOfClass:[HippyText class]]) { if (_richTextView) { HippyLogError(@"Tried to insert a second into - there can only be one."); } - _richTextView = (NativeRenderText *)subview; + _richTextView = (HippyText *)subview; if (subview.backgroundColor) { NSMutableDictionary *attrs = [_textView.typingAttributes mutableCopy]; @@ -196,7 +196,7 @@ - (void)performTextUpdate { return string; } else { NSMutableAttributedString *mutableString = [[NSMutableAttributedString alloc] initWithAttributedString:string]; - [mutableString removeAttribute:NativeRenderComponentTagAttributeName range:NSMakeRange(0, mutableString.length)]; + [mutableString removeAttribute:HippyTagAttributeName range:NSMakeRange(0, mutableString.length)]; return mutableString; } } diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.h b/renderer/native/ios/renderer/component/view/HippyShadowView.h index cee3312b6f2..2d607f9dec2 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.h +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.h @@ -132,7 +132,7 @@ extern NSString *const NativeRenderShadowViewDiffTag; /// Vertical Alignment for Text / Text Attachment, /// Note that this property only takes effect for Text Element. -@property (nonatomic, assign) NativeRenderTextVerticalAlignType verticalAlignType; +@property (nonatomic, assign) HippyTextVerticalAlignType verticalAlignType; /// Vertical Align Offset for Text / Text Attachment, /// Note that this property only takes effect for Text Element. @@ -190,7 +190,7 @@ extern NSString *const NativeRenderShadowViewDiffTag; /** * Return whether or not this node acts as a leaf node in the eyes of CSSLayout. For example - * NativeRenderShadowText has children which it does not want CSSLayout to lay out so in the eyes of + * HippyShadowText has children which it does not want CSSLayout to lay out so in the eyes of * CSSLayout it is a leaf node. */ - (BOOL)isCSSLeafNode; diff --git a/renderer/native/ios/renderer/component/view/HippyViewManager.mm b/renderer/native/ios/renderer/component/view/HippyViewManager.mm index af593c712c1..9896aea3beb 100644 --- a/renderer/native/ios/renderer/component/view/HippyViewManager.mm +++ b/renderer/native/ios/renderer/component/view/HippyViewManager.mm @@ -536,11 +536,11 @@ - (void)loadImageSource:(NSString *)path forView:(HippyView *)view { view.layoutDirection = ConvertDirection(json); } -HIPPY_CUSTOM_SHADOW_PROPERTY(verticalAlign, NativeRenderTextVerticalAlignType, HippyShadowView) { +HIPPY_CUSTOM_SHADOW_PROPERTY(verticalAlign, HippyTextVerticalAlignType, HippyShadowView) { if (json && [json isKindOfClass:NSString.class]) { - view.verticalAlignType = [HippyConvert NativeRenderTextVerticalAlignType:json]; + view.verticalAlignType = [HippyConvert HippyTextVerticalAlignType:json]; } else if ([json isKindOfClass:NSNumber.class]) { - view.verticalAlignType = NativeRenderTextVerticalAlignMiddle; + view.verticalAlignType = HippyTextVerticalAlignMiddle; view.verticalAlignOffset = [HippyConvert CGFloat:json]; } else { HippyLogError(@"Unsupported value for verticalAlign of Text: %@, type: %@", json, [json classForCoder]); diff --git a/renderer/native/ios/utils/HippyConvert+NativeRender.h b/renderer/native/ios/utils/HippyConvert+NativeRender.h index 1cca8b3a692..a8ba560adcf 100644 --- a/renderer/native/ios/utils/HippyConvert+NativeRender.h +++ b/renderer/native/ios/utils/HippyConvert+NativeRender.h @@ -73,30 +73,30 @@ typedef NS_ENUM(NSInteger, NativeRenderBorderStyle) { @end -typedef NS_ENUM(NSInteger, NativeRenderTextDecorationLineType) { - NativeRenderTextDecorationLineTypeNone = 0, - NativeRenderTextDecorationLineTypeUnderline, - NativeRenderTextDecorationLineTypeStrikethrough, - NativeRenderTextDecorationLineTypeUnderlineStrikethrough, +typedef NS_ENUM(NSInteger, HippyTextDecorationLineType) { + HippyTextDecorationLineTypeNone = 0, + HippyTextDecorationLineTypeUnderline, + HippyTextDecorationLineTypeStrikethrough, + HippyTextDecorationLineTypeUnderlineStrikethrough, }; /// Vertical alignment enum for text attachment, /// similar to vertical-align in CSS (layout is different) /// /// Default(Undefined)is baseline -typedef NS_ENUM(NSInteger, NativeRenderTextVerticalAlignType) { - NativeRenderTextVerticalAlignUndefined = 0, - NativeRenderTextVerticalAlignBaseline = 1, - NativeRenderTextVerticalAlignBottom = 2, - NativeRenderTextVerticalAlignMiddle = 3, - NativeRenderTextVerticalAlignTop = 4, +typedef NS_ENUM(NSInteger, HippyTextVerticalAlignType) { + HippyTextVerticalAlignUndefined = 0, + HippyTextVerticalAlignBaseline = 1, + HippyTextVerticalAlignBottom = 2, + HippyTextVerticalAlignMiddle = 3, + HippyTextVerticalAlignTop = 4, }; @interface HippyConvert (NativeRenderTextEnumDefines) -+ (NativeRenderTextDecorationLineType)NativeRenderTextDecorationLineType:(id)json; ++ (HippyTextDecorationLineType)HippyTextDecorationLineType:(id)json; -+ (NativeRenderTextVerticalAlignType)NativeRenderTextVerticalAlignType:(id)json; ++ (HippyTextVerticalAlignType)HippyTextVerticalAlignType:(id)json; @end diff --git a/renderer/native/ios/utils/HippyConvert+NativeRender.m b/renderer/native/ios/utils/HippyConvert+NativeRender.m index 4b1f3514cd4..174d483e011 100644 --- a/renderer/native/ios/utils/HippyConvert+NativeRender.m +++ b/renderer/native/ios/utils/HippyConvert+NativeRender.m @@ -201,19 +201,19 @@ @implementation HippyConvert (NativeRenderBorderStyle) @implementation HippyConvert (NativeRenderTextEnumDefines) -HP_ENUM_CONVERTER(NativeRenderTextDecorationLineType, (@{ - @"none": @(NativeRenderTextDecorationLineTypeNone), - @"underline": @(NativeRenderTextDecorationLineTypeUnderline), - @"line-through": @(NativeRenderTextDecorationLineTypeStrikethrough), - @"underline line-through": @(NativeRenderTextDecorationLineTypeUnderlineStrikethrough), +HP_ENUM_CONVERTER(HippyTextDecorationLineType, (@{ + @"none": @(HippyTextDecorationLineTypeNone), + @"underline": @(HippyTextDecorationLineTypeUnderline), + @"line-through": @(HippyTextDecorationLineTypeStrikethrough), + @"underline line-through": @(HippyTextDecorationLineTypeUnderlineStrikethrough), }), -NativeRenderTextDecorationLineTypeNone, integerValue) - -HP_ENUM_CONVERTER(NativeRenderTextVerticalAlignType, (@{ - @"middle": @(NativeRenderTextVerticalAlignMiddle), - @"top": @(NativeRenderTextVerticalAlignTop), - @"bottom": @(NativeRenderTextVerticalAlignBottom), - @"baseline": @(NativeRenderTextVerticalAlignBaseline), -}), NativeRenderTextVerticalAlignUndefined, integerValue) +HippyTextDecorationLineTypeNone, integerValue) + +HP_ENUM_CONVERTER(HippyTextVerticalAlignType, (@{ + @"middle": @(HippyTextVerticalAlignMiddle), + @"top": @(HippyTextVerticalAlignTop), + @"bottom": @(HippyTextVerticalAlignBottom), + @"baseline": @(HippyTextVerticalAlignBaseline), +}), HippyTextVerticalAlignUndefined, integerValue) @end From e37764723c74ebed67856b7ccd5745ad76ee2c89 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Tue, 26 Dec 2023 20:46:18 +0800 Subject: [PATCH 06/39] fix(ios): revert rename hippy prefix for compatibility part2 --- renderer/native/ios/renderer/HippyFont.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renderer/native/ios/renderer/HippyFont.mm b/renderer/native/ios/renderer/HippyFont.mm index a73e3aa41a3..4c0d7404f78 100644 --- a/renderer/native/ios/renderer/HippyFont.mm +++ b/renderer/native/ios/renderer/HippyFont.mm @@ -259,7 +259,7 @@ + (UIFont *)updateFont:(UIFont *)font // Gracefully handle being given a font name rather than font family, for // example: "Helvetica Light Oblique" rather than just "Helvetica". - if (font && !didFindFont && familyName.length > 0 && fontNamesForFamilyName(familyName).count == 0) { + if (!didFindFont && familyName.length > 0 && fontNamesForFamilyName(familyName).count == 0) { familyName = font.familyName; fontWeight = weight ? fontWeight : weightOfFont(font); isItalic = style ? isItalic : isItalicFont(font); @@ -311,7 +311,7 @@ + (UIFont *)updateFont:(UIFont *)font } // Apply font variants to font object - if (font && variant) { + if (variant) { NSArray *fontFeatures = [HippyConvert NativeRenderFontVariantDescriptorArray:variant]; UIFontDescriptor *fontDescriptor = [font.fontDescriptor fontDescriptorByAddingAttributes: From d3bff2625ea4e7cedfc74867b0b1abeb2d274bb4 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 3 Jan 2024 21:17:51 +0800 Subject: [PATCH 07/39] refactor(ios): revert rename Hippy prefix to NativeRender --- ...erFooterRefresh.h => HippyFooterRefresh.h} | 2 +- ...erFooterRefresh.m => HippyFooterRefresh.m} | 4 +- .../HippyFooterRefreshManager.h} | 2 +- ...Manager.mm => HippyFooterRefreshManager.m} | 8 +- ...erHeaderRefresh.h => HippyHeaderRefresh.h} | 2 +- ...erHeaderRefresh.m => HippyHeaderRefresh.m} | 4 +- .../HippyHeaderRefreshManager.h} | 2 +- ...Manager.mm => HippyHeaderRefreshManager.m} | 8 +- .../listview/NativeRenderBaseListView.mm | 12 +-- ...RefreshWrapper.h => HippyRefreshWrapper.h} | 2 +- ...RefreshWrapper.m => HippyRefreshWrapper.m} | 14 ++-- ...emView.h => HippyRefreshWrapperItemView.h} | 2 +- ...emView.m => HippyRefreshWrapperItemView.m} | 4 +- ...h => HippyRefreshWrapperItemViewManager.h} | 3 +- ...m => HippyRefreshWrapperItemViewManager.m} | 8 +- ...ger.h => HippyRefreshWrapperViewManager.h} | 3 +- ...er.mm => HippyRefreshWrapperViewManager.m} | 13 ++-- .../NativeRenderSmartViewPagerView.mm | 4 +- .../component/text/HippyShadowText.mm | 4 +- ...erBaseTextInput.h => HippyBaseTextInput.h} | 2 +- ...erBaseTextInput.m => HippyBaseTextInput.m} | 4 +- ...ObjectTextView.h => HippyShadowTextView.h} | 2 +- ...jectTextView.mm => HippyShadowTextView.mm} | 12 +-- ...tiveRenderTextField.h => HippyTextField.h} | 4 +- ...tiveRenderTextField.m => HippyTextField.m} | 10 +-- ...erTextSelection.h => HippyTextSelection.h} | 6 +- ...erTextSelection.m => HippyTextSelection.m} | 10 +-- ...NativeRenderTextView.h => HippyTextView.h} | 4 +- ...tiveRenderTextView.mm => HippyTextView.mm} | 12 +-- .../HippyTextViewManager.h} | 2 +- ...ViewManager.mm => HippyTextViewManager.mm} | 78 +++++++++---------- .../waterfalllist/NativeRenderWaterfallView.h | 6 +- .../NativeRenderWaterfallView.mm | 12 +-- ...erSimpleWebView.h => HippySimpleWebView.h} | 2 +- ...erSimpleWebView.m => HippySimpleWebView.m} | 4 +- ...wManager.h => HippySimpleWebViewManager.h} | 4 +- ...Manager.mm => HippySimpleWebViewManager.m} | 6 +- 37 files changed, 141 insertions(+), 140 deletions(-) rename renderer/native/ios/renderer/component/footerrefresh/{NativeRenderFooterRefresh.h => HippyFooterRefresh.h} (95%) rename renderer/native/ios/renderer/component/footerrefresh/{NativeRenderFooterRefresh.m => HippyFooterRefresh.m} (98%) rename renderer/native/ios/renderer/component/{textinput/NativeRenderTextViewManager.h => footerrefresh/HippyFooterRefreshManager.h} (93%) rename renderer/native/ios/renderer/component/footerrefresh/{NativeRenderFooterRefreshManager.mm => HippyFooterRefreshManager.m} (91%) rename renderer/native/ios/renderer/component/headerrefresh/{NativeRenderHeaderRefresh.h => HippyHeaderRefresh.h} (94%) rename renderer/native/ios/renderer/component/headerrefresh/{NativeRenderHeaderRefresh.m => HippyHeaderRefresh.m} (97%) rename renderer/native/ios/renderer/component/{footerrefresh/NativeRenderFooterRefreshManager.h => headerrefresh/HippyHeaderRefreshManager.h} (92%) rename renderer/native/ios/renderer/component/headerrefresh/{NativeRenderHeaderRefreshManager.mm => HippyHeaderRefreshManager.m} (91%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapper.h => HippyRefreshWrapper.h} (93%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapper.m => HippyRefreshWrapper.m} (88%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperItemView.h => HippyRefreshWrapperItemView.h} (91%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperItemView.m => HippyRefreshWrapperItemView.m} (90%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperViewManager.h => HippyRefreshWrapperItemViewManager.h} (92%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperItemViewManager.mm => HippyRefreshWrapperItemViewManager.m} (79%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperItemViewManager.h => HippyRefreshWrapperViewManager.h} (91%) rename renderer/native/ios/renderer/component/refreshview/{NativeRenderRefreshWrapperViewManager.mm => HippyRefreshWrapperViewManager.m} (81%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderBaseTextInput.h => HippyBaseTextInput.h} (95%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderBaseTextInput.m => HippyBaseTextInput.m} (93%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderObjectTextView.h => HippyShadowTextView.h} (94%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderObjectTextView.mm => HippyShadowTextView.mm} (92%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextField.h => HippyTextField.h} (95%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextField.m => HippyTextField.m} (97%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextSelection.h => HippyTextSelection.h} (86%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextSelection.m => HippyTextSelection.m} (79%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextView.h => HippyTextView.h} (95%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextView.mm => HippyTextView.mm} (98%) rename renderer/native/ios/renderer/component/{headerrefresh/NativeRenderHeaderRefreshManager.h => textinput/HippyTextViewManager.h} (92%) rename renderer/native/ios/renderer/component/textinput/{NativeRenderTextViewManager.mm => HippyTextViewManager.mm} (74%) rename renderer/native/ios/renderer/component/webview/{NativeRenderSimpleWebView.h => HippySimpleWebView.h} (93%) rename renderer/native/ios/renderer/component/webview/{NativeRenderSimpleWebView.m => HippySimpleWebView.m} (98%) rename renderer/native/ios/renderer/component/webview/{NativeRenderSimpleWebViewManager.h => HippySimpleWebViewManager.h} (89%) rename renderer/native/ios/renderer/component/webview/{NativeRenderSimpleWebViewManager.mm => HippySimpleWebViewManager.m} (88%) diff --git a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.h b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.h similarity index 95% rename from renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.h rename to renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.h index 2a330f66acc..f09ea7b68ec 100644 --- a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.h +++ b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.h @@ -23,7 +23,7 @@ #import "HippyRefresh.h" #import "HippyComponent.h" -@interface NativeRenderFooterRefresh : HippyRefresh +@interface HippyFooterRefresh : HippyRefresh @property (nonatomic, assign) BOOL refreshStick; @property (nonatomic, copy) HippyDirectEventBlock onFooterReleased; diff --git a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.m b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.m similarity index 98% rename from renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.m rename to renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.m index 5a253991269..cb3d0435a13 100644 --- a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefresh.m +++ b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefresh.m @@ -20,9 +20,9 @@ * limitations under the License. */ -#import "NativeRenderFooterRefresh.h" +#import "HippyFooterRefresh.h" -@implementation NativeRenderFooterRefresh +@implementation HippyFooterRefresh - (void)setScrollView:(UIScrollView *)scrollView { [super setScrollView:scrollView]; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.h b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.h similarity index 93% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.h rename to renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.h index 93a51ad916c..0f599259574 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.h +++ b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.h @@ -22,6 +22,6 @@ #import "HippyViewManager.h" -@interface NativeRenderTextViewManager : HippyViewManager +@interface HippyFooterRefreshManager : HippyViewManager @end diff --git a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.mm b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.m similarity index 91% rename from renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.mm rename to renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.m index c4a6d79b374..8887124ff67 100644 --- a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.mm +++ b/renderer/native/ios/renderer/component/footerrefresh/HippyFooterRefreshManager.m @@ -20,11 +20,11 @@ * limitations under the License. */ -#import "NativeRenderFooterRefreshManager.h" -#import "NativeRenderFooterRefresh.h" +#import "HippyFooterRefreshManager.h" +#import "HippyFooterRefresh.h" #import "HippyUIManager.h" -@implementation NativeRenderFooterRefreshManager +@implementation HippyFooterRefreshManager HIPPY_EXPORT_MODULE(PullFooterView); @@ -54,7 +54,7 @@ @implementation NativeRenderFooterRefreshManager } - (UIView *)view { - return [[NativeRenderFooterRefresh alloc] init]; + return [[HippyFooterRefresh alloc] init]; } @end diff --git a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.h b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.h similarity index 94% rename from renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.h rename to renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.h index d88aa6bcf9d..7870946e400 100644 --- a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.h +++ b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.h @@ -25,7 +25,7 @@ #import "HippyRefresh.h" #import "HippyComponent.h" -@interface NativeRenderHeaderRefresh : HippyRefresh +@interface HippyHeaderRefresh : HippyRefresh @property (nonatomic, copy) HippyDirectEventBlock onHeaderReleased; @property (nonatomic, copy) HippyDirectEventBlock onHeaderPulling; diff --git a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.m b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.m similarity index 97% rename from renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.m rename to renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.m index 71f356fcea7..a4a83164700 100644 --- a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefresh.m +++ b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefresh.m @@ -20,9 +20,9 @@ * limitations under the License. */ -#import "NativeRenderHeaderRefresh.h" +#import "HippyHeaderRefresh.h" -@implementation NativeRenderHeaderRefresh +@implementation HippyHeaderRefresh - (void)setFrame:(CGRect)frame { CGRect properFrame = frame; diff --git a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.h b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.h similarity index 92% rename from renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.h rename to renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.h index 482819adc04..302f211c3cc 100644 --- a/renderer/native/ios/renderer/component/footerrefresh/NativeRenderFooterRefreshManager.h +++ b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.h @@ -22,6 +22,6 @@ #import "HippyViewManager.h" -@interface NativeRenderFooterRefreshManager : HippyViewManager +@interface HippyHeaderRefreshManager : HippyViewManager @end diff --git a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.mm b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.m similarity index 91% rename from renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.mm rename to renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.m index a468d9f43d5..fcc76e76b5a 100644 --- a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.mm +++ b/renderer/native/ios/renderer/component/headerrefresh/HippyHeaderRefreshManager.m @@ -20,11 +20,11 @@ * limitations under the License. */ -#import "NativeRenderHeaderRefreshManager.h" -#import "NativeRenderHeaderRefresh.h" +#import "HippyHeaderRefreshManager.h" +#import "HippyHeaderRefresh.h" #import "HippyUIManager.h" -@implementation NativeRenderHeaderRefreshManager +@implementation HippyHeaderRefreshManager HIPPY_EXPORT_MODULE(PullHeaderView); @@ -53,7 +53,7 @@ @implementation NativeRenderHeaderRefreshManager } - (UIView *)view { - return [[NativeRenderHeaderRefresh alloc] init]; + return [[HippyHeaderRefresh alloc] init]; } @end diff --git a/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm b/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm index 46ba0c37ae1..fe85bc71517 100644 --- a/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm +++ b/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm @@ -25,8 +25,8 @@ #import "NativeRenderBaseListViewCell.h" #import "NativeRenderBaseListViewDataSource.h" #import "NativeRenderCollectionViewFlowLayout.h" -#import "NativeRenderFooterRefresh.h" -#import "NativeRenderHeaderRefresh.h" +#import "HippyFooterRefresh.h" +#import "HippyHeaderRefresh.h" #import "HippyUIManager.h" #import "HippyShadowView.h" #import "UIView+DirectionalLayout.h" @@ -157,18 +157,18 @@ - (void)reloadData { } - (void)insertHippySubview:(UIView *)subview atIndex:(NSInteger)atIndex { - if ([subview isKindOfClass:[NativeRenderHeaderRefresh class]]) { + if ([subview isKindOfClass:[HippyHeaderRefresh class]]) { if (_headerRefreshView) { [_headerRefreshView unsetFromScrollView]; } - _headerRefreshView = (NativeRenderHeaderRefresh *)subview; + _headerRefreshView = (HippyHeaderRefresh *)subview; [_headerRefreshView setScrollView:self.collectionView]; _headerRefreshView.delegate = self; - } else if ([subview isKindOfClass:[NativeRenderFooterRefresh class]]) { + } else if ([subview isKindOfClass:[HippyFooterRefresh class]]) { if (_footerRefreshView) { [_footerRefreshView unsetFromScrollView]; } - _footerRefreshView = (NativeRenderFooterRefresh *)subview; + _footerRefreshView = (HippyFooterRefresh *)subview; [_footerRefreshView setScrollView:self.collectionView]; _footerRefreshView.delegate = self; } diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.h b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.h similarity index 93% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.h rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.h index bb7fc27745a..979edefdba2 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.h +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.h @@ -25,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface NativeRenderRefreshWrapper : NativeRenderTouchesView +@interface HippyRefreshWrapper : NativeRenderTouchesView - (void)refreshCompleted; - (void)startRefresh; diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.m b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.m similarity index 88% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.m rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.m index ce5a67bb543..6215d72399f 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapper.m +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapper.m @@ -20,21 +20,21 @@ * limitations under the License. */ -#import "NativeRenderRefreshWrapper.h" +#import "HippyRefreshWrapper.h" #import "UIView+Hippy.h" -#import "NativeRenderRefreshWrapperItemView.h" +#import "HippyRefreshWrapperItemView.h" #import "HippyScrollableProtocol.h" -@interface NativeRenderRefreshWrapper () +@interface HippyRefreshWrapper () -@property (nonatomic, weak) NativeRenderRefreshWrapperItemView *wrapperItemView; +@property (nonatomic, weak) HippyRefreshWrapperItemView *wrapperItemView; @property (nonatomic, weak) id scrollableView; @property (nonatomic, copy) HippyDirectEventBlock onRefresh; @property (nonatomic, assign) CGFloat bounceTime; @end -@implementation NativeRenderRefreshWrapper +@implementation HippyRefreshWrapper - (void)addSubview:(UIView *)view { if (view != _wrapperItemView) { [super addSubview:view]; @@ -75,8 +75,8 @@ - (void)startRefresh { - (void)insertHippySubview:(UIView *)view atIndex:(NSInteger)index { [super insertHippySubview:view atIndex:index]; - if ([view isKindOfClass:[NativeRenderRefreshWrapperItemView class]]) { - _wrapperItemView = (NativeRenderRefreshWrapperItemView *)view; + if ([view isKindOfClass:[HippyRefreshWrapperItemView class]]) { + _wrapperItemView = (HippyRefreshWrapperItemView *)view; } else if ([view conformsToProtocol:@protocol(HippyScrollableProtocol)]) { _scrollableView = (id)view; [_scrollableView addScrollListener:self]; diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.h b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.h similarity index 91% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.h rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.h index 522f66855f9..cdab7f6bac4 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.h +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.h @@ -23,6 +23,6 @@ #import #import "NativeRenderTouchesView.h" -@interface NativeRenderRefreshWrapperItemView : NativeRenderTouchesView +@interface HippyRefreshWrapperItemView : NativeRenderTouchesView @end diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.m b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.m similarity index 90% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.m rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.m index 4039f7bf998..16a44704cc3 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemView.m +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemView.m @@ -19,10 +19,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#import "NativeRenderRefreshWrapperItemView.h" +#import "HippyRefreshWrapperItemView.h" #import "UIView+Hippy.h" -@implementation NativeRenderRefreshWrapperItemView +@implementation HippyRefreshWrapperItemView - (void)setFrame:(CGRect)frame { if ([self.superview isKindOfClass:[UIScrollView class]]) { diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.h b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.h similarity index 92% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.h rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.h index 86c05a704c4..72ae423e988 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.h +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.h @@ -24,7 +24,8 @@ NS_ASSUME_NONNULL_BEGIN -@interface NativeRenderRefreshWrapperViewManager : HippyViewManager +@interface HippyRefreshWrapperItemViewManager : HippyViewManager + @end NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.mm b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.m similarity index 79% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.mm rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.m index 28d6771c02f..761b9be72c2 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.mm +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperItemViewManager.m @@ -20,14 +20,14 @@ * limitations under the License. */ -#import "NativeRenderRefreshWrapperItemViewManager.h" -#import "NativeRenderRefreshWrapperItemView.h" +#import "HippyRefreshWrapperItemViewManager.h" +#import "HippyRefreshWrapperItemView.h" -@implementation NativeRenderRefreshWrapperItemViewManager +@implementation HippyRefreshWrapperItemViewManager HIPPY_EXPORT_MODULE(RefreshWrapperItemView) - (UIView *)view { - return [NativeRenderRefreshWrapperItemView new]; + return [HippyRefreshWrapperItemView new]; } @end diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.h b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.h similarity index 91% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.h rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.h index a316b903ca2..a7b1a9f58c2 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperItemViewManager.h +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.h @@ -24,8 +24,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface NativeRenderRefreshWrapperItemViewManager : HippyViewManager - +@interface HippyRefreshWrapperViewManager : HippyViewManager @end NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.mm b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.m similarity index 81% rename from renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.mm rename to renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.m index 505cc5a06a2..d1397c3ca42 100644 --- a/renderer/native/ios/renderer/component/refreshview/NativeRenderRefreshWrapperViewManager.mm +++ b/renderer/native/ios/renderer/component/refreshview/HippyRefreshWrapperViewManager.m @@ -20,32 +20,33 @@ * limitations under the License. */ -#import "NativeRenderRefreshWrapperViewManager.h" -#import "NativeRenderRefreshWrapper.h" +#import "HippyRefreshWrapperViewManager.h" +#import "HippyRefreshWrapper.h" #import "HippyComponent.h" #import "HippyUIManager.h" -@implementation NativeRenderRefreshWrapperViewManager +@implementation HippyRefreshWrapperViewManager HIPPY_EXPORT_MODULE(RefreshWrapper) HIPPY_EXPORT_VIEW_PROPERTY(onRefresh, HippyDirectEventBlock) HIPPY_EXPORT_VIEW_PROPERTY(bounceTime, CGFloat) + - (UIView *)view { - return [NativeRenderRefreshWrapper new]; + return [HippyRefreshWrapper new]; } HIPPY_EXPORT_METHOD(refreshComplected:(NSNumber *__nonnull)componentTag) { [self.bridge.uiManager addUIBlock:^(HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderRefreshWrapper *wrapperView = viewRegistry[componentTag]; + HippyRefreshWrapper *wrapperView = viewRegistry[componentTag]; [wrapperView refreshCompleted]; }]; } HIPPY_EXPORT_METHOD(startRefresh:(NSNumber *__nonnull)componentTag) { [self.bridge.uiManager addUIBlock:^(HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderRefreshWrapper *wrapperView = viewRegistry[componentTag]; + HippyRefreshWrapper *wrapperView = viewRegistry[componentTag]; [wrapperView startRefresh]; }]; } diff --git a/renderer/native/ios/renderer/component/smartViewPager/NativeRenderSmartViewPagerView.mm b/renderer/native/ios/renderer/component/smartViewPager/NativeRenderSmartViewPagerView.mm index 87e94c83394..91c53a9292d 100644 --- a/renderer/native/ios/renderer/component/smartViewPager/NativeRenderSmartViewPagerView.mm +++ b/renderer/native/ios/renderer/component/smartViewPager/NativeRenderSmartViewPagerView.mm @@ -22,8 +22,8 @@ #import "NativeRenderBaseListViewCell.h" #import "NativeRenderBaseListViewDataSource.h" -#import "NativeRenderFooterRefresh.h" -#import "NativeRenderHeaderRefresh.h" +#import "HippyFooterRefresh.h" +#import "HippyHeaderRefresh.h" #import "HippyUIManager.h" #import "HippyShadowView.h" #import "NativeRenderSmartViewPagerView.h" diff --git a/renderer/native/ios/renderer/component/text/HippyShadowText.mm b/renderer/native/ios/renderer/component/text/HippyShadowText.mm index c8971a9444d..b6b252981e2 100644 --- a/renderer/native/ios/renderer/component/text/HippyShadowText.mm +++ b/renderer/native/ios/renderer/component/text/HippyShadowText.mm @@ -26,7 +26,7 @@ #import "HippyFont.h" #import "HippyShadowText.h" #import "HippyText.h" -#import "NativeRenderTextView.h" +#import "HippyTextView.h" #import "NativeRenderUtils.h" #include "dom/dom_manager.h" @@ -222,7 +222,7 @@ - (void)contentSizeMultiplierDidChange:(__unused NSNotification *)note { */ UIView *parentView = viewRegistry[parentTag]; if ([parentView respondsToSelector:@selector(performTextUpdate)]) { - [(NativeRenderTextView *)parentView performTextUpdate]; + [(HippyTextView *)parentView performTextUpdate]; } }]; return parentProperties; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.h b/renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.h similarity index 95% rename from renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.h rename to renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.h index 8c3d0a4c844..3651f027112 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.h +++ b/renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.h @@ -22,7 +22,7 @@ #import "HippyView.h" -@interface NativeRenderBaseTextInput : HippyView +@interface HippyBaseTextInput : HippyView @property (nonatomic, strong) UIFont *font; @property (nonatomic, assign) UIEdgeInsets contentInset; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.m b/renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.m similarity index 93% rename from renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.m rename to renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.m index c69c7d432a2..88af7f79dbe 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderBaseTextInput.m +++ b/renderer/native/ios/renderer/component/textinput/HippyBaseTextInput.m @@ -20,9 +20,9 @@ * limitations under the License. */ -#import "NativeRenderBaseTextInput.h" +#import "HippyBaseTextInput.h" -@implementation NativeRenderBaseTextInput +@implementation HippyBaseTextInput - (void)focus { // base method, should be override } diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.h b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.h similarity index 94% rename from renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.h rename to renderer/native/ios/renderer/component/textinput/HippyShadowTextView.h index 1b24867f000..730a0748edb 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.h +++ b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.h @@ -22,7 +22,7 @@ #import "HippyShadowView.h" -@interface NativeRenderObjectTextView : HippyShadowView +@interface HippyShadowTextView : HippyShadowView @property (nonatomic, copy) NSString *text; @property (nonatomic, copy) NSString *placeholder; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.mm b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm similarity index 92% rename from renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.mm rename to renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm index 6c798928ef0..a8b8b50ddbe 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderObjectTextView.mm +++ b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm @@ -21,25 +21,25 @@ */ #import "HippyUtils.h" -#import "NativeRenderObjectTextView.h" +#import "HippyShadowTextView.h" #include "dom/dom_manager.h" #include "dom/dom_node.h" #include "dom/layout_node.h" -@interface NativeRenderObjectTextView () +@interface HippyShadowTextView () @property (nonatomic, strong) NSDictionary *dicAttributes; @end static hippy::LayoutSize x5MeasureFunc( - NativeRenderObjectTextView *weakShadowText, + HippyShadowTextView *weakShadowText, float width, hippy::LayoutMeasureMode widthMeasureMode, float height, hippy::LayoutMeasureMode heightMeasureMode, void *layoutContext) { hippy::LayoutSize result; if (weakShadowText) { - NativeRenderObjectTextView *strongShadowText = weakShadowText; + HippyShadowTextView *strongShadowText = weakShadowText; NSString *text = strongShadowText.text ?: strongShadowText.placeholder; if (nil == strongShadowText.dicAttributes) { if (strongShadowText.font == nil) { @@ -54,7 +54,7 @@ @interface NativeRenderObjectTextView () return result; } -@implementation NativeRenderObjectTextView +@implementation HippyShadowTextView - (instancetype)init { self = [super init]; @@ -70,7 +70,7 @@ - (void)setDomManager:(std::weak_ptr)domManager { int32_t componentTag = [self.hippyTag intValue]; auto node = shared_domNode->GetNode(self.rootNode, componentTag); if (node) { - __weak NativeRenderObjectTextView *weakSelf = self; + __weak HippyShadowTextView *weakSelf = self; hippy::MeasureFunction measureFunc = [weakSelf](float width, hippy::LayoutMeasureMode widthMeasureMode, float height, hippy::LayoutMeasureMode heightMeasureMode, void *layoutContext){ diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextField.h b/renderer/native/ios/renderer/component/textinput/HippyTextField.h similarity index 95% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextField.h rename to renderer/native/ios/renderer/component/textinput/HippyTextField.h index dee44d3737a..096ab974285 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextField.h +++ b/renderer/native/ios/renderer/component/textinput/HippyTextField.h @@ -23,7 +23,7 @@ #import #import "HippyView.h" #import "HippyComponent.h" -#import "NativeRenderBaseTextInput.h" +#import "HippyBaseTextInput.h" @protocol NativeRenderUITextFieldResponseDelegate @required @@ -40,7 +40,7 @@ @property (nonatomic, assign) BOOL editable; @end -@interface NativeRenderTextField : NativeRenderBaseTextInput +@interface HippyTextField : HippyBaseTextInput @property (nonatomic, copy) HippyDirectEventBlock onKeyPress; @property (nonatomic, assign) BOOL autoCorrect; //@property (nonatomic, assign) UIEdgeInsets contentInset; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextField.m b/renderer/native/ios/renderer/component/textinput/HippyTextField.m similarity index 97% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextField.m rename to renderer/native/ios/renderer/component/textinput/HippyTextField.m index 6159eea6b80..18391889e4a 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextField.m +++ b/renderer/native/ios/renderer/component/textinput/HippyTextField.m @@ -20,11 +20,11 @@ * limitations under the License. */ -#import "NativeRenderTextField.h" +#import "HippyTextField.h" #import "HippyConvert.h" #import "HippyUtils.h" -#import "NativeRenderTextSelection.h" +#import "HippyTextSelection.h" #import "UIView+Hippy.h" @implementation NativeRenderUITextField @@ -111,10 +111,10 @@ - (void)dealloc { @end -@interface NativeRenderTextField () +@interface HippyTextField () @end -@implementation NativeRenderTextField { +@implementation HippyTextField { UITextRange *_previousSelectionRange; NativeRenderUITextField *_textView; } @@ -257,7 +257,7 @@ - (void)textFieldBeginEditing { } - (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(__unused NativeRenderTextField *)textField + ofObject:(__unused HippyTextField *)textField change:(__unused NSDictionary *)change context:(__unused void *)context { if ([keyPath isEqualToString:@"selectedTextRange"]) { diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.h b/renderer/native/ios/renderer/component/textinput/HippyTextSelection.h similarity index 86% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.h rename to renderer/native/ios/renderer/component/textinput/HippyTextSelection.h index c485791639b..0edcb6f1e23 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.h +++ b/renderer/native/ios/renderer/component/textinput/HippyTextSelection.h @@ -25,7 +25,7 @@ /** * Object containing information about a TextInput's selection. */ -@interface NativeRenderTextSelection : NSObject +@interface HippyTextSelection : NSObject @property (nonatomic, assign, readonly) NSInteger start; @property (nonatomic, assign, readonly) NSInteger end; @@ -34,8 +34,8 @@ @end -@interface HippyConvert (NativeRenderTextSelection) +@interface HippyConvert (HippyTextSelection) -+ (NativeRenderTextSelection *)NativeRenderTextSelection:(id)json; ++ (HippyTextSelection *)HippyTextSelection:(id)json; @end diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.m b/renderer/native/ios/renderer/component/textinput/HippyTextSelection.m similarity index 79% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.m rename to renderer/native/ios/renderer/component/textinput/HippyTextSelection.m index 60cdb1ec47a..c6fa58725f4 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextSelection.m +++ b/renderer/native/ios/renderer/component/textinput/HippyTextSelection.m @@ -20,9 +20,9 @@ * limitations under the License. */ -#import "NativeRenderTextSelection.h" +#import "HippyTextSelection.h" -@implementation NativeRenderTextSelection +@implementation HippyTextSelection - (instancetype)initWithStart:(NSInteger)start end:(NSInteger)end { if (self = [super init]) { @@ -34,13 +34,13 @@ - (instancetype)initWithStart:(NSInteger)start end:(NSInteger)end { @end -@implementation HippyConvert (NativeRenderTextSelection) +@implementation HippyConvert (HippyTextSelection) -+ (NativeRenderTextSelection *)NativeRenderTextSelection:(id)json { ++ (HippyTextSelection *)HippyTextSelection:(id)json { if ([json isKindOfClass:[NSDictionary class]]) { NSInteger start = [self NSInteger:json[@"start"]]; NSInteger end = [self NSInteger:json[@"end"]]; - return [[NativeRenderTextSelection alloc] initWithStart:start end:end]; + return [[HippyTextSelection alloc] initWithStart:start end:end]; } return nil; diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.h b/renderer/native/ios/renderer/component/textinput/HippyTextView.h similarity index 95% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextView.h rename to renderer/native/ios/renderer/component/textinput/HippyTextView.h index 2e741e76e93..415ab01e44c 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.h +++ b/renderer/native/ios/renderer/component/textinput/HippyTextView.h @@ -23,7 +23,7 @@ #import #import "HippyView.h" -#import "NativeRenderBaseTextInput.h" +#import "HippyBaseTextInput.h" #import "UIView+Hippy.h" @protocol NativeRenderUITextViewResponseDelegate @@ -37,7 +37,7 @@ @property (nonatomic, weak) id responderDelegate; @end -@interface NativeRenderTextView : NativeRenderBaseTextInput { +@interface HippyTextView : HippyBaseTextInput { @protected NativeRenderUITextView *_textView; } diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm b/renderer/native/ios/renderer/component/textinput/HippyTextView.mm similarity index 98% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm rename to renderer/native/ios/renderer/component/textinput/HippyTextView.mm index 1880a277e82..ff13eb7228f 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextView.mm +++ b/renderer/native/ios/renderer/component/textinput/HippyTextView.mm @@ -20,13 +20,13 @@ * limitations under the License. */ -#import "NativeRenderTextView.h" +#import "HippyTextView.h" #import "HippyConvert.h" #import "HippyShadowText.h" #import "HippyText.h" #import "HippyUtils.h" -#import "NativeRenderTextSelection.h" +#import "HippyTextSelection.h" #import "UIView+Hippy.h" @implementation NativeRenderUITextView @@ -72,10 +72,10 @@ - (void)setCaretColor:(UIColor*)color{ } @end -@interface NativeRenderTextView () +@interface HippyTextView () @end -@implementation NativeRenderTextView { +@implementation HippyTextView { NSString *_placeholder; UITextView *_placeholderView; HippyText *_richTextView; @@ -249,7 +249,7 @@ - (void)performPendingTextUpdate { - (void)updateFrames { // Adjust the insets so that they are as close as possible to single-line - // NativeRenderTextField defaults, using the system defaults of font size 17 and a + // HippyTextField defaults, using the system defaults of font size 17 and a // height of 31 points. // // We apply the left inset to the frame since a negative left text-container @@ -385,7 +385,7 @@ - (NSString *)text { return _textView.text; } -- (void)setSelection:(NativeRenderTextSelection *)selection { +- (void)setSelection:(HippyTextSelection *)selection { if (!selection) { return; } diff --git a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.h b/renderer/native/ios/renderer/component/textinput/HippyTextViewManager.h similarity index 92% rename from renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.h rename to renderer/native/ios/renderer/component/textinput/HippyTextViewManager.h index 885bfa41f2c..fb5a10346ba 100644 --- a/renderer/native/ios/renderer/component/headerrefresh/NativeRenderHeaderRefreshManager.h +++ b/renderer/native/ios/renderer/component/textinput/HippyTextViewManager.h @@ -22,6 +22,6 @@ #import "HippyViewManager.h" -@interface NativeRenderHeaderRefreshManager : HippyViewManager +@interface HippyTextViewManager : HippyViewManager @end diff --git a/renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.mm b/renderer/native/ios/renderer/component/textinput/HippyTextViewManager.mm similarity index 74% rename from renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.mm rename to renderer/native/ios/renderer/component/textinput/HippyTextViewManager.mm index f2ffb65ec16..6dce3fdd917 100644 --- a/renderer/native/ios/renderer/component/textinput/NativeRenderTextViewManager.mm +++ b/renderer/native/ios/renderer/component/textinput/HippyTextViewManager.mm @@ -20,18 +20,18 @@ * limitations under the License. */ -#import "NativeRenderBaseTextInput.h" +#import "HippyBaseTextInput.h" #import "HippyFont.h" #import "HippyUIManager.h" -#import "NativeRenderObjectTextView.h" +#import "HippyShadowTextView.h" #import "HippyShadowView.h" -#import "NativeRenderTextField.h" -#import "NativeRenderTextView.h" -#import "NativeRenderTextViewManager.h" +#import "HippyTextField.h" +#import "HippyTextView.h" +#import "HippyTextViewManager.h" #import "HippyBridgeModule.h" -#import "NativeRenderTextSelection.h" +#import "HippyTextSelection.h" -@implementation NativeRenderTextViewManager +@implementation HippyTextViewManager HIPPY_EXPORT_MODULE(TextInput) @@ -41,11 +41,11 @@ - (UIView *)view { if ([keyboardType isKindOfClass:[NSString class]] && [keyboardType isEqual:@"password"]) { multiline = @(NO); } - NativeRenderBaseTextInput *theView; + HippyBaseTextInput *theView; if (multiline != nil && !multiline.boolValue) { - theView = [[NativeRenderTextField alloc] init]; + theView = [[HippyTextField alloc] init]; } else { - theView = [[NativeRenderTextView alloc] init]; + theView = [[HippyTextView alloc] init]; } if (self.props[@"onKeyboardWillShow"]) { [[NSNotificationCenter defaultCenter] addObserver:theView @@ -63,7 +63,7 @@ - (UIView *)view { } - (HippyShadowView *)hippyShadowView { - return [NativeRenderObjectTextView new]; + return [HippyShadowTextView new]; } HIPPY_EXPORT_VIEW_PROPERTY(value, NSString) @@ -77,10 +77,10 @@ - (HippyShadowView *)hippyShadowView { HIPPY_EXPORT_METHOD(focusTextInput:(nonnull NSNumber *)componentTag) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry){ - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; if (view == nil) return ; - if (![view isKindOfClass:[NativeRenderBaseTextInput class]]) { - HippyLogError(@"Invalid view returned from registry, expecting NativeRenderBaseTextInput, got: %@", view); + if (![view isKindOfClass:[HippyBaseTextInput class]]) { + HippyLogError(@"Invalid view returned from registry, expecting HippyBaseTextInput, got: %@", view); } [view focus]; }]; @@ -88,10 +88,10 @@ - (HippyShadowView *)hippyShadowView { HIPPY_EXPORT_METHOD(isFocused:(nonnull NSNumber *)componentTag callback:(HippyPromiseResolveBlock)callback) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; if (view == nil) return ; - if (![view isKindOfClass:[NativeRenderBaseTextInput class]]) { - HippyLogError(@"Invalid view returned from registry, expecting NativeRenderBaseTextInput, got: %@", view); + if (![view isKindOfClass:[HippyBaseTextInput class]]) { + HippyLogError(@"Invalid view returned from registry, expecting HippyBaseTextInput, got: %@", view); } BOOL isFocused = [view isFirstResponder]; callback([NSDictionary dictionaryWithObject:[NSNumber numberWithBool:isFocused] forKey:@"value"]); @@ -100,10 +100,10 @@ - (HippyShadowView *)hippyShadowView { HIPPY_EXPORT_METHOD(blurTextInput:(nonnull NSNumber *)componentTag) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry){ - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; if (view == nil) return ; - if (![view isKindOfClass:[NativeRenderBaseTextInput class]]) { - HippyLogError(@"Invalid view returned from registry, expecting NativeRenderBaseTextInput, got: %@", view); + if (![view isKindOfClass:[HippyBaseTextInput class]]) { + HippyLogError(@"Invalid view returned from registry, expecting HippyBaseTextInput, got: %@", view); } [view blur]; }]; @@ -111,31 +111,31 @@ - (HippyShadowView *)hippyShadowView { HIPPY_EXPORT_METHOD(clear:(nonnull NSNumber *)componentTag) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; if (view == nil) return ; - if (![view isKindOfClass:[NativeRenderBaseTextInput class]]) { - HippyLogError(@"Invalid view returned from registry, expecting NativeRenderBaseTextInput, got: %@", view); + if (![view isKindOfClass:[HippyBaseTextInput class]]) { + HippyLogError(@"Invalid view returned from registry, expecting HippyBaseTextInput, got: %@", view); } [view clearText]; }]; } HIPPY_EXPORT_METHOD(setValue:(nonnull NSNumber *)componentTag - text:(NSString *)text ) { + text:(NSString *)text ) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; if (view == nil) return ; - if (![view isKindOfClass:[NativeRenderBaseTextInput class]]) { - HippyLogError(@"Invalid view returned from registry, expecting NativeRenderBaseTextInput, got: %@", view); + if (![view isKindOfClass:[HippyBaseTextInput class]]) { + HippyLogError(@"Invalid view returned from registry, expecting HippyBaseTextInput, got: %@", view); } [view setValue: text]; }]; } HIPPY_EXPORT_METHOD(getValue:(nonnull NSNumber *)componentTag - callback:(HippyPromiseResolveBlock)callback ) { + callback:(HippyPromiseResolveBlock)callback ) { [self.bridge.uiManager addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { - NativeRenderBaseTextInput *view = (NativeRenderBaseTextInput *)viewRegistry[componentTag]; + HippyBaseTextInput *view = (HippyBaseTextInput *)viewRegistry[componentTag]; NSString *stringValue = [view value]; if (nil == stringValue) { stringValue = @""; @@ -168,46 +168,46 @@ - (HippyShadowView *)hippyShadowView { HIPPY_REMAP_VIEW_PROPERTY(secureTextEntry, textView.secureTextEntry, BOOL) HIPPY_REMAP_VIEW_PROPERTY(selectionColor, tintColor, UIColor) HIPPY_EXPORT_VIEW_PROPERTY(selectTextOnFocus, BOOL) -HIPPY_EXPORT_VIEW_PROPERTY(selection, NativeRenderTextSelection) +HIPPY_EXPORT_VIEW_PROPERTY(selection, HippyTextSelection) HIPPY_EXPORT_VIEW_PROPERTY(text, NSString) HIPPY_REMAP_VIEW_PROPERTY(caretColor, textView.caretColor, UIColor) -HIPPY_CUSTOM_SHADOW_PROPERTY(fontSize, NSNumber, NativeRenderObjectTextView) { +HIPPY_CUSTOM_SHADOW_PROPERTY(fontSize, NSNumber, HippyShadowTextView) { view.font = [HippyFont updateFont:view.font withSize:json]; } -HIPPY_CUSTOM_SHADOW_PROPERTY(fontWeight, NSString, NativeRenderObjectTextView) { +HIPPY_CUSTOM_SHADOW_PROPERTY(fontWeight, NSString, HippyShadowTextView) { view.font = [HippyFont updateFont:view.font withWeight:json]; } -HIPPY_CUSTOM_SHADOW_PROPERTY(fontStyle, NSString, NativeRenderObjectTextView) { +HIPPY_CUSTOM_SHADOW_PROPERTY(fontStyle, NSString, HippyShadowTextView) { view.font = [HippyFont updateFont:view.font withStyle:json]; // defaults to normal } -HIPPY_CUSTOM_SHADOW_PROPERTY(fontFamily, NSString, NativeRenderObjectTextView) { +HIPPY_CUSTOM_SHADOW_PROPERTY(fontFamily, NSString, HippyShadowTextView) { view.font = [HippyFont updateFont:view.font withFamily:json]; } -HIPPY_CUSTOM_VIEW_PROPERTY(fontSize, NSNumber, NativeRenderBaseTextInput) { +HIPPY_CUSTOM_VIEW_PROPERTY(fontSize, NSNumber, HippyBaseTextInput) { UIFont *theFont = [HippyFont updateFont:view.font withSize:json ?: @(defaultView.font.pointSize)]; view.font = theFont; } -HIPPY_CUSTOM_VIEW_PROPERTY(fontWeight, NSString, __unused NativeRenderBaseTextInput) { +HIPPY_CUSTOM_VIEW_PROPERTY(fontWeight, NSString, __unused HippyBaseTextInput) { UIFont *theFont = [HippyFont updateFont:view.font withWeight:json]; // defaults to normal view.font = theFont; } -HIPPY_CUSTOM_VIEW_PROPERTY(fontStyle, NSString, __unused NativeRenderBaseTextInput) { +HIPPY_CUSTOM_VIEW_PROPERTY(fontStyle, NSString, __unused HippyBaseTextInput) { UIFont *theFont = [HippyFont updateFont:view.font withStyle:json]; view.font = theFont; // defaults to normal } -HIPPY_CUSTOM_VIEW_PROPERTY(fontFamily, NSString, NativeRenderBaseTextInput) { +HIPPY_CUSTOM_VIEW_PROPERTY(fontFamily, NSString, HippyBaseTextInput) { view.font = [HippyFont updateFont:view.font withFamily:json ?: defaultView.font.familyName]; } - (HippyViewManagerUIBlock)uiBlockToAmendWithShadowView:(HippyShadowView *)hippyShadowView { NSNumber *componentTag = hippyShadowView.hippyTag; UIEdgeInsets padding = hippyShadowView.paddingAsInsets; - return ^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { + return ^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { viewRegistry[componentTag].contentInset = padding; }; } diff --git a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.h b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.h index 06bfc5629ed..49698365b84 100644 --- a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.h +++ b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.h @@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN -@class NativeRenderWaterfallViewDataSource, NativeRenderHeaderRefresh, NativeRenderFooterRefresh, WaterfallItemChangeContext, HippyShadowView; +@class NativeRenderWaterfallViewDataSource, HippyHeaderRefresh, HippyFooterRefresh, WaterfallItemChangeContext, HippyShadowView; typedef NS_ENUM(NSInteger, NativeRenderScrollState) { ScrollStateStop, @@ -50,8 +50,8 @@ typedef NS_ENUM(NSInteger, NativeRenderScrollState) { NSMapTable *_cachedWeakCellViews; - NativeRenderHeaderRefresh *_headerRefreshView; - NativeRenderFooterRefresh *_footerRefreshView; + HippyHeaderRefresh *_headerRefreshView; + HippyFooterRefresh *_footerRefreshView; BOOL _allowNextScrollNoMatterWhat; } diff --git a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm index dc15d726d7b..c6f962116f3 100644 --- a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm +++ b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm @@ -21,8 +21,8 @@ */ #import "NativeRenderWaterfallView.h" -#import "NativeRenderHeaderRefresh.h" -#import "NativeRenderFooterRefresh.h" +#import "HippyHeaderRefresh.h" +#import "HippyFooterRefresh.h" #import "NativeRenderWaterfallItemView.h" #import "UIView+Hippy.h" #import "HippyRefresh.h" @@ -224,19 +224,19 @@ - (void)reloadData { } - (void)insertHippySubview:(UIView *)subview atIndex:(NSInteger)atIndex { - if ([subview isKindOfClass:[NativeRenderHeaderRefresh class]]) { + if ([subview isKindOfClass:[HippyHeaderRefresh class]]) { if (_headerRefreshView) { [_headerRefreshView removeFromSuperview]; } - _headerRefreshView = (NativeRenderHeaderRefresh *)subview; + _headerRefreshView = (HippyHeaderRefresh *)subview; [_headerRefreshView setScrollView:self.collectionView]; _headerRefreshView.delegate = self; _headerRefreshView.frame = subview.hippyShadowView.frame; - } else if ([subview isKindOfClass:[NativeRenderFooterRefresh class]]) { + } else if ([subview isKindOfClass:[HippyFooterRefresh class]]) { if (_footerRefreshView) { [_footerRefreshView removeFromSuperview]; } - _footerRefreshView = (NativeRenderFooterRefresh *)subview; + _footerRefreshView = (HippyFooterRefresh *)subview; [_footerRefreshView setScrollView:self.collectionView]; _footerRefreshView.delegate = self; _footerRefreshView.frame = subview.hippyShadowView.frame; diff --git a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.h b/renderer/native/ios/renderer/component/webview/HippySimpleWebView.h similarity index 93% rename from renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.h rename to renderer/native/ios/renderer/component/webview/HippySimpleWebView.h index e11311be301..1d4a88f4455 100644 --- a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.h +++ b/renderer/native/ios/renderer/component/webview/HippySimpleWebView.h @@ -25,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface NativeRenderSimpleWebView : WKWebView +@interface HippySimpleWebView : WKWebView @property (nonatomic, strong) NSString *userAgent; @property (nonatomic, strong) NSString *url; @property (nonatomic, strong) NSDictionary *source; diff --git a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.m b/renderer/native/ios/renderer/component/webview/HippySimpleWebView.m similarity index 98% rename from renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.m rename to renderer/native/ios/renderer/component/webview/HippySimpleWebView.m index 5a5552b3617..872195ceff8 100644 --- a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebView.m +++ b/renderer/native/ios/renderer/component/webview/HippySimpleWebView.m @@ -20,10 +20,10 @@ * limitations under the License. */ -#import "NativeRenderSimpleWebView.h" +#import "HippySimpleWebView.h" #import "HippyUtils.h" -@implementation NativeRenderSimpleWebView +@implementation HippySimpleWebView - (instancetype)init { self = [super init]; diff --git a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.h b/renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.h similarity index 89% rename from renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.h rename to renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.h index 99624461457..5a5089d05c1 100644 --- a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.h +++ b/renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.h @@ -21,11 +21,11 @@ */ #import "HippyViewManager.h" -#import "NativeRenderSimpleWebView.h" +#import "HippySimpleWebView.h" NS_ASSUME_NONNULL_BEGIN -@interface NativeRenderSimpleWebViewManager : HippyViewManager +@interface HippySimpleWebViewManager : HippyViewManager @end diff --git a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.mm b/renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.m similarity index 88% rename from renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.mm rename to renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.m index 3149de34a8b..4278baa308a 100644 --- a/renderer/native/ios/renderer/component/webview/NativeRenderSimpleWebViewManager.mm +++ b/renderer/native/ios/renderer/component/webview/HippySimpleWebViewManager.m @@ -20,9 +20,9 @@ * limitations under the License. */ -#import "NativeRenderSimpleWebViewManager.h" +#import "HippySimpleWebViewManager.h" -@implementation NativeRenderSimpleWebViewManager +@implementation HippySimpleWebViewManager HIPPY_EXPORT_MODULE(WebView) @@ -33,7 +33,7 @@ @implementation NativeRenderSimpleWebViewManager HIPPY_EXPORT_VIEW_PROPERTY(onLoad, HippyDirectEventBlock) - (UIView *)view { - return [NativeRenderSimpleWebView new]; + return [HippySimpleWebView new]; } @end From f7b019ffe3829cf1ac101fe3880292a88c0ad6c7 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 3 Jan 2024 16:14:28 +0800 Subject: [PATCH 08/39] fix(ios): optimize creation time of lazy-load list items --- .../native/ios/renderer/HippyUIManager.mm | 38 +++++++++++-------- .../component/text/HippyShadowText.mm | 4 ++ .../NativeRenderObjectWaterfallItem.mm | 4 ++ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index b7824696acd..cc40c04725f 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -510,7 +510,7 @@ - (UIView *)createViewFromShadowView:(HippyShadowView *)shadowView { return view; } -- (UIView *)createViewForShadowListItem:(HippyShadowView *)renderObject { +- (UIView *)createViewForShadowListItem:(HippyShadowView *)shadowView { AssertMainQueue(); std::lock_guard lock([self renderQueueLock]); // There was a timing problem here: @@ -519,13 +519,32 @@ - (UIView *)createViewForShadowListItem:(HippyShadowView *)renderObject { // until the next `cellForItemAtIndexPath` call. // we currently resolve this issue by setting the CreationType synchronously. // TODO: CreationType's further optimization is needed in the future - [renderObject synchronousRecusivelySetCreationTypeToInstant]; - return [self createViewRecursiveFromRenderObjectWithNOLock:renderObject]; + [shadowView synchronousRecusivelySetCreationTypeToInstant]; + UIView *listItemView = [self createViewRecursiveFromRenderObjectWithNOLock:shadowView]; + + [self.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; + NSMutableSet *applierBlocks = [NSMutableSet set]; + [shadowView amendLayoutBeforeMount:applierBlocks]; + if (applierBlocks.count) { + for (NativeRenderApplierBlock block in applierBlocks) { + // Note: viewRegistry may be modified in the block, and it may be stored internally as NSMapTable + // so to ensure that it is up-to-date, it can only be retrieved each time. + NSDictionary *viewRegistry = [self.viewRegistry componentsForRootTag:shadowView.rootTag]; + block(viewRegistry, nil); + } + } + [self.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; + + return listItemView; } - (UIView *)createViewRecursiveFromRenderObjectWithNOLock:(HippyShadowView *)shadowView { UIView *view = [self createViewFromShadowView:shadowView]; if (view) { + // First of all, mark shadowView as dirty recursively, + // so that we can collect ui blocks to amend correctly. + [shadowView dirtyPropagation:NativeRenderUpdateLifecycleAllDirtied]; + // Special handling of lazy list, which is a cellView // because lazy loading list needs to be re-layout if ([shadowView isKindOfClass:HippyShadowListView.class]) { @@ -571,19 +590,6 @@ - (UIView *)createViewRecursiveFromRenderObjectWithNOLock:(HippyShadowView *)sha [view clearSortedSubviews]; [view didUpdateHippySubviews]; - - NSMutableSet *applierBlocks = [NSMutableSet set]; - [shadowView amendLayoutBeforeMount:applierBlocks]; - if (applierBlocks.count) { - [self.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; - for (NativeRenderApplierBlock block in applierBlocks) { - // Note: viewRegistry may be modified in the block, and it may be stored internally as NSMapTable - // so to ensure that it is up-to-date, it can only be retrieved each time. - NSDictionary *viewRegistry = [self.viewRegistry componentsForRootTag:shadowView.rootTag]; - block(viewRegistry, view); - } - [self.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; - } } return view; } diff --git a/renderer/native/ios/renderer/component/text/HippyShadowText.mm b/renderer/native/ios/renderer/component/text/HippyShadowText.mm index b6b252981e2..0af31aa0fd0 100644 --- a/renderer/native/ios/renderer/component/text/HippyShadowText.mm +++ b/renderer/native/ios/renderer/component/text/HippyShadowText.mm @@ -206,7 +206,11 @@ - (void)contentSizeMultiplierDidChange:(__unused NSNotification *)note { UIColor *color = self.color ?: [UIColor blackColor]; [applierBlocks addObject:^(NSDictionary *viewRegistry, UIView * _Nullable lazyCreatedView) { HippyText *view = (HippyText *)(lazyCreatedView ?: viewRegistry[self.hippyTag]); + if (!view) { return; } if (![view isKindOfClass:HippyText.class]) { + // Going here indicates that there is a repeated refresh, + // Check the refresh logic to eliminate duplicates. + HippyLogError(@"Invalid View Type, Please Check!"); return; } view.textFrame = textFrame; diff --git a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderObjectWaterfallItem.mm b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderObjectWaterfallItem.mm index a8cc58155ba..fc7c295d4e1 100644 --- a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderObjectWaterfallItem.mm +++ b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderObjectWaterfallItem.mm @@ -42,6 +42,10 @@ - (void)setFrame:(CGRect)frame { } - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks { + if (NativeRenderCreationTypeLazily == self.creationType) { + // If item has not yet been created, then no need to collect blocks. + return; + } _layoutDirty = NO; if (NativeRenderUpdateLifecycleComputed == _propagationLifecycle) { return; From a4262e4f3369c1da4fe434a9e57025ed1cc59029 Mon Sep 17 00:00:00 2001 From: birdguo Date: Fri, 5 Jan 2024 17:51:57 +0800 Subject: [PATCH 09/39] fix(vue-next): remove vue prod devtools global sign for ios&android --- .../hippy-vue-next-demo/scripts/hippy-webpack.android-vendor.js | 1 + .../hippy-vue-next-demo/scripts/hippy-webpack.android.js | 1 + .../hippy-vue-next-demo/scripts/hippy-webpack.ios-vendor.js | 1 + .../js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios.js | 1 + 4 files changed, 4 insertions(+) diff --git a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android-vendor.js b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android-vendor.js index 54a2c99b29a..a8689aece99 100644 --- a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android-vendor.js +++ b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android-vendor.js @@ -23,6 +23,7 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), __PLATFORM__: JSON.stringify(platform), + __VUE_PROD_DEVTOOLS__: false, }), new CaseSensitivePathsPlugin(), new VueLoaderPlugin(), diff --git a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android.js b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android.js index d9810b35073..e137c500c08 100644 --- a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android.js +++ b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.android.js @@ -35,6 +35,7 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), __PLATFORM__: JSON.stringify(platform), + __VUE_PROD_DEVTOOLS__: false, }), new CaseSensitivePathsPlugin(), new VueLoaderPlugin(), diff --git a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios-vendor.js b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios-vendor.js index 7a383bda137..a23657ec9fb 100644 --- a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios-vendor.js +++ b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios-vendor.js @@ -23,6 +23,7 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), __PLATFORM__: JSON.stringify(platform), + __VUE_PROD_DEVTOOLS__: false, }), new CaseSensitivePathsPlugin(), new VueLoaderPlugin(), diff --git a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios.js b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios.js index 1791f9cf403..2adeed998d3 100644 --- a/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios.js +++ b/driver/js/examples/hippy-vue-next-demo/scripts/hippy-webpack.ios.js @@ -35,6 +35,7 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), __PLATFORM__: JSON.stringify(platform), + __VUE_PROD_DEVTOOLS__: false, }), new CaseSensitivePathsPlugin(), new VueLoaderPlugin(), From c518dd18491bd842fe12a19d35393cfff35aa978 Mon Sep 17 00:00:00 2001 From: maxli Date: Mon, 8 Jan 2024 16:12:53 +0800 Subject: [PATCH 10/39] feat(android): add bugly app id register --- .../com/tencent/mtt/hippy/HippyEngine.java | 4 +- .../bridge/libraryloader/LibraryLoader.java | 2 +- .../tencent/mtt/hippy/utils/BuglyUtils.java | 45 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java b/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java index 102ca590675..c020af46168 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngine.java @@ -52,6 +52,7 @@ import com.tencent.mtt.hippy.common.HippyJsException; import com.tencent.mtt.hippy.common.HippyMap; import com.tencent.mtt.hippy.modules.HippyModulePromise.BridgeTransferType; +import com.tencent.mtt.hippy.utils.BuglyUtils; import com.tencent.mtt.hippy.utils.ContextHolder; import com.tencent.mtt.hippy.utils.LogUtils; import com.tencent.mtt.hippy.utils.UIThreadUtils; @@ -89,11 +90,12 @@ public static HippyEngine create(EngineInitParams params) { throw new RuntimeException("Hippy: initParams must no be null"); } LogUtils.enableDebugLog(BuildConfig.DEBUG); - LibraryLoader.loadLibraryIfNeed(params.soLoader); + LibraryLoader.loadLibraryIfNeeded(params.soLoader); if (sLogAdapter == null && params.logAdapter != null) { setNativeLogHandler(params.logAdapter); } ContextHolder.initAppContext(params.context); + BuglyUtils.registerSdkAppIdIfNeeded(params.context); params.check(); HippyEngine hippyEngine; if (params.groupId == -1) { diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/libraryloader/LibraryLoader.java b/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/libraryloader/LibraryLoader.java index 1bf0bea8ec8..982445c5dac 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/libraryloader/LibraryLoader.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/libraryloader/LibraryLoader.java @@ -25,7 +25,7 @@ public class LibraryLoader { private static boolean hasLoaded = false; private final static String[] SO_NAME_LIST = new String[]{ "hippy" }; - public static void loadLibraryIfNeed(HippySoLoaderAdapter soLoaderAdapter) { + public static void loadLibraryIfNeeded(HippySoLoaderAdapter soLoaderAdapter) { if (hasLoaded || BuildConfig.ENABLE_SO_LOAD_EXTERNAL) { return; } diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java b/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java new file mode 100644 index 00000000000..3c121f11d1c --- /dev/null +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java @@ -0,0 +1,45 @@ +/* Tencent is pleased to support the open source community by making Hippy available. + * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved. + * + * 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. + */ + +package com.tencent.mtt.hippy.utils; + +import android.content.Context; +import android.content.SharedPreferences; +import androidx.annotation.Nullable; +import com.openhippy.framework.BuildConfig; + +public class BuglyUtils { + + private static final String BUGLY_KEY = "BuglySdkInfos"; + private static final String SDK_APP_ID = "8aa644f958"; + private static boolean sHasCommitted = false; + + public static void registerSdkAppIdIfNeeded(@Nullable Context context) { + if (sHasCommitted || context == null) { + return; + } + Context appContext = context.getApplicationContext(); + SharedPreferences settings = appContext.getSharedPreferences(BUGLY_KEY, Context.MODE_PRIVATE); + String version = settings.getString(SDK_APP_ID, null); + if (!BuildConfig.LIBRARY_VERSION.equals(version)) { + SharedPreferences.Editor editor = settings.edit(); + editor.putString(SDK_APP_ID, BuildConfig.LIBRARY_VERSION); + sHasCommitted = editor.commit(); + } else { + sHasCommitted = true; + } + } +} From 2e48ffe2ad7a1805bce3a1739de336d1b5bca426 Mon Sep 17 00:00:00 2001 From: maxli Date: Tue, 9 Jan 2024 16:40:39 +0800 Subject: [PATCH 11/39] fix(android): add shouldNotifyNonBatchingChange for render node --- .../viewpager/HippyViewPagerController.java | 10 +++++- .../com/tencent/renderer/node/RenderNode.java | 14 ++++++++ .../renderer/node/ViewPagerRenderNode.java | 34 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 renderer/native/android/src/main/java/com/tencent/renderer/node/ViewPagerRenderNode.java diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java index 06493a63a8e..e8e0eefdf84 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java @@ -21,6 +21,7 @@ import com.tencent.mtt.hippy.common.HippyArray; import com.tencent.mtt.hippy.dom.node.NodeProps; import com.tencent.mtt.hippy.modules.Promise; +import com.tencent.mtt.hippy.uimanager.ControllerManager; import com.tencent.mtt.hippy.uimanager.HippyViewController; import com.tencent.mtt.hippy.utils.LogUtils; import com.tencent.mtt.hippy.utils.PixelUtil; @@ -32,7 +33,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.tencent.mtt.hippy.views.hippypager.HippyPager; +import com.tencent.renderer.node.RenderNode; +import com.tencent.renderer.node.ViewPagerRenderNode; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,6 +71,12 @@ protected View createViewImpl(@NonNull Context context, @Nullable Map props, + @NonNull String className, @NonNull ControllerManager controllerManager, boolean isLazy) { + return new ViewPagerRenderNode(rootId, id, props, className, controllerManager, isLazy); + } + protected HippyViewPager buildViewPager(@NonNull Context context, boolean isVertical) { HippyViewPager viewPager = new HippyViewPager(context, isVertical); viewPager.setPageChangeListener(new ViewPagerPageChangeListener(viewPager)); diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java b/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java index fb136787b72..a0cfaf0daa9 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java @@ -501,6 +501,11 @@ public void mountHostViewRecursive() { for (RenderNode renderNode : mChildren) { renderNode.mountHostViewRecursive(); } + // Due to the delayed loading of list view items and their child elements, non first screen elements + // may need to manually call batch complete when created, such as nested view pagers within list view items + if (shouldNotifyNonBatchingChange()) { + batchComplete(); + } } public boolean shouldSticky() { @@ -737,12 +742,21 @@ public int compare(RenderNode n1, RenderNode n2) { } } + public boolean isBatching() { + RenderManager renderManager = mControllerManager.getRenderManager(); + return renderManager != null && renderManager.isBatching(); + } + public void batchStart() { if (!isDeleted() && !isLazyLoad()) { mControllerManager.onBatchStart(mRootId, mId, mClassName); } } + protected boolean shouldNotifyNonBatchingChange() { + return false; + } + public void batchComplete() { if (!isDeleted() && !isLazyLoad()) { mControllerManager.onBatchComplete(mRootId, mId, mClassName); diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/node/ViewPagerRenderNode.java b/renderer/native/android/src/main/java/com/tencent/renderer/node/ViewPagerRenderNode.java new file mode 100644 index 00000000000..c7f82c0ef11 --- /dev/null +++ b/renderer/native/android/src/main/java/com/tencent/renderer/node/ViewPagerRenderNode.java @@ -0,0 +1,34 @@ +/* Tencent is pleased to support the open source community by making Hippy available. + * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved. + * + * 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. + */ + +package com.tencent.renderer.node; + +import androidx.annotation.Nullable; +import com.tencent.mtt.hippy.uimanager.ControllerManager; +import java.util.Map; + +public class ViewPagerRenderNode extends RenderNode { + + public ViewPagerRenderNode(int rootId, int id, @Nullable Map props, + String className, ControllerManager componentManager, boolean isLazyLoad) { + super(rootId, id, props, className, componentManager, isLazyLoad); + } + + @Override + protected boolean shouldNotifyNonBatchingChange() { + return !isBatching(); + } +} From dc78bf9ac0c66f76223fa8560c051c525d9cb90a Mon Sep 17 00:00:00 2001 From: ruifanyuan Date: Mon, 25 Dec 2023 16:23:52 +0800 Subject: [PATCH 12/39] fix(ios): improve image rendering performance in main thread --- modules/ios/image/HippyDefaultImageProvider.m | 78 +++++++++++++++++-- .../ios/image/HippyImageProviderProtocol.h | 3 + modules/ios/image/NSData+DataType.m | 10 +-- .../component/image/HippyImageViewManager.mm | 15 +++- 4 files changed, 90 insertions(+), 16 deletions(-) diff --git a/modules/ios/image/HippyDefaultImageProvider.m b/modules/ios/image/HippyDefaultImageProvider.m index d870be66fd1..8242a3236ae 100644 --- a/modules/ios/image/HippyDefaultImageProvider.m +++ b/modules/ios/image/HippyDefaultImageProvider.m @@ -54,9 +54,70 @@ - (void)setImageData:(NSData *)imageData { } } +- (dispatch_queue_t)prepareQueue{ + return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); +} + +- (void)prepareForDisplay:(void (^)(UIImage *_Nullable))completionHandler{ + UIImage *theImage = [self image]; + BOOL fallback = YES; + + if(theImage){ + __weak typeof(self) weakSelf = self; + if (@available(iOS 15.0, *)) { + CFStringRef ut = CGImageGetUTType(theImage.CGImage); + // prepareForDisplayWithCompletionHandler support jpeg and heif only + if(ut != nil && (kCFCompareEqualTo == CFStringCompare(ut, kUTTypeJPEG, 0) || + kCFCompareEqualTo == CFStringCompare(ut, (__bridge CFStringRef)@"public.heif", 0))){ + fallback = NO; + + [theImage prepareForDisplayWithCompletionHandler:^(UIImage * _Nullable prepared) { + typeof(self) strongSelf = weakSelf; + if(strongSelf){ + @synchronized(strongSelf){ + if(prepared){ + strongSelf->_image = prepared; + } + completionHandler(prepared); + } + } + }]; + return; + } + } + + + dispatch_async([self prepareQueue], ^{ + UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] + initWithSize:theImage.size + format:[UIGraphicsImageRendererFormat preferredFormat]]; + UIImage *prepared = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { + [theImage drawAtPoint:CGPointZero]; + }]; + + typeof(self) strongSelf = weakSelf; + if(strongSelf){ + @synchronized(strongSelf){ + if(prepared){ + strongSelf->_image = prepared; + } + completionHandler(prepared); + } + } + }); + return; + } + + + if(fallback){ + completionHandler(nil); + } +} + - (UIImage *)image { CGFloat scale = [UIScreen mainScreen].scale; if (!_image) { + UIImage *tmp; if (_data) { CGFloat view_width = _imageViewSize.width; CGFloat view_height = _imageViewSize.height; @@ -82,7 +143,7 @@ - (UIImage *)image { (NSString *)kCGImageSourceThumbnailMaxPixelSize: @(maxDimensionInPixels) }; CGImageRef downsampleImageRef = CGImageSourceCreateThumbnailAtIndex(ref, 0, (__bridge CFDictionaryRef)downsampleOptions); - _image = [UIImage imageWithCGImage:downsampleImageRef scale:scale orientation:UIImageOrientationUp]; + tmp = [UIImage imageWithCGImage:downsampleImageRef scale:scale orientation:UIImageOrientationUp]; CGImageRelease(downsampleImageRef); } CFRelease(properties); @@ -91,13 +152,20 @@ - (UIImage *)image { } } } else { - _image = [self imageAtFrame:0]; + tmp = [self imageAtFrame:0]; + } + if(!tmp){ + tmp = [UIImage imageWithData:_data scale:scale]; + } + @synchronized (self) { + if(_image == nil){ + _image = tmp; + } } } - if (!_image) { - _image = [UIImage imageWithData:_data scale:scale]; + @synchronized (self) { + return _image; } - return _image; } - (UIImage *)imageAtFrame:(NSUInteger)index { diff --git a/modules/ios/image/HippyImageProviderProtocol.h b/modules/ios/image/HippyImageProviderProtocol.h index 60877dec7f4..9a7b86d3c7c 100644 --- a/modules/ios/image/HippyImageProviderProtocol.h +++ b/modules/ios/image/HippyImageProviderProtocol.h @@ -49,6 +49,9 @@ */ - (UIImage *)image; +/** prepare the image for display */ +- (void)prepareForDisplay:(void (^_Nullable)(UIImage *_Nullable))completionHandler; + // for animated Image @optional diff --git a/modules/ios/image/NSData+DataType.m b/modules/ios/image/NSData+DataType.m index 226240d1110..fefe3183dac 100644 --- a/modules/ios/image/NSData+DataType.m +++ b/modules/ios/image/NSData+DataType.m @@ -62,15 +62,7 @@ - (BOOL)datatype_isAPNG { } - (BOOL)datatype_isAnimatedImage { - do { - if ([self datatype_isGif]) { - return YES; - } - if ([self datatype_isAPNG]) { - return YES; - } - } while (0); - return NO; + return [self datatype_isGif] || [self datatype_isAPNG]; } @end diff --git a/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm b/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm index 69dc1227d1a..116fd0d2c71 100644 --- a/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm +++ b/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm @@ -83,13 +83,24 @@ - (void)loadImageSource:(NSString *)path forView:(HippyImageView *)view { HippyAssert(imageProvider, @"Image Provider is required"); imageProvider.imageDataPath = standardizeAssetUrlString; [imageProvider setImageData:data]; - dispatch_async(dispatch_get_main_queue(), ^{ + + void (^reloadImageInMain)(void) = ^{ HippyImageView *strongView = weakView; if (strongView) { [strongView setImageProvider:imageProvider]; [strongView reloadImage]; } - }); + }; + + if([imageProvider imageCount] <= 1){ + // prepare the still image for display before setting it to the imageview + [imageProvider prepareForDisplay:^(UIImage * _Nullable _) { + // subsequent call to the image provider will return the prepared image + dispatch_async(dispatch_get_main_queue(), reloadImageInMain); + }]; + }else{ + dispatch_async(dispatch_get_main_queue(), reloadImageInMain); + } } }); } From c703dd08d3f4ed8d1e24d8c7e1c49db06f84090f Mon Sep 17 00:00:00 2001 From: wwwcg Date: Thu, 11 Jan 2024 17:32:17 +0800 Subject: [PATCH 13/39] chore(ios): fix demo build problem --- framework/examples/ios-demo/HippyDemo/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/examples/ios-demo/HippyDemo/Info.plist b/framework/examples/ios-demo/HippyDemo/Info.plist index b381cdad8cd..b04de4df03d 100644 --- a/framework/examples/ios-demo/HippyDemo/Info.plist +++ b/framework/examples/ios-demo/HippyDemo/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(PRODUCT_NAME) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier From ed7c8dfe7ae538708032715b2ab89be0b399b77a Mon Sep 17 00:00:00 2001 From: maxli Date: Fri, 12 Jan 2024 14:56:45 +0800 Subject: [PATCH 14/39] feat(android): add ENABLE_BUGLY_REPORT config --- framework/android/build.gradle | 1 + framework/android/gradle.properties | 2 ++ .../src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/framework/android/build.gradle b/framework/android/build.gradle index e83dffc6d65..e1501eb6b89 100644 --- a/framework/android/build.gradle +++ b/framework/android/build.gradle @@ -66,6 +66,7 @@ android { consumerProguardFiles 'proguard-rules.pro' buildConfigField("boolean", "ENABLE_SO_LOAD_EXTERNAL", ENABLE_SO_LOAD_EXTERNAL) + buildConfigField("boolean", "ENABLE_BUGLY_REPORT", ENABLE_BUGLY_REPORT) buildConfigField("String", "LIBRARY_VERSION", "String.valueOf(\"$VERSION_NAME\")") packagingOptions { diff --git a/framework/android/gradle.properties b/framework/android/gradle.properties index 5182f9e96a5..ecf75727ea2 100644 --- a/framework/android/gradle.properties +++ b/framework/android/gradle.properties @@ -103,6 +103,8 @@ EXCLUDE_LIBRARY_FILES= #features ENABLE_SO_LOAD_EXTERNAL=false +ENABLE_BUGLY_REPORT=false + # # Specifies maven publish artifact ID # diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java b/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java index 3c121f11d1c..bff2a636dc0 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/utils/BuglyUtils.java @@ -28,7 +28,7 @@ public class BuglyUtils { private static boolean sHasCommitted = false; public static void registerSdkAppIdIfNeeded(@Nullable Context context) { - if (sHasCommitted || context == null) { + if (!BuildConfig.ENABLE_BUGLY_REPORT || sHasCommitted || context == null) { return; } Context appContext = context.getApplicationContext(); From 6893636e998985a88cae8c79106750569f95969a Mon Sep 17 00:00:00 2001 From: wwwcg Date: Tue, 26 Dec 2023 16:44:04 +0800 Subject: [PATCH 15/39] fix(ios): showScrollIndicator not working on horizontal list --- .../listview/NativeRenderBaseListView.mm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm b/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm index fe85bc71517..58191a5be31 100644 --- a/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm +++ b/renderer/native/ios/renderer/component/listview/NativeRenderBaseListView.mm @@ -117,11 +117,19 @@ - (BOOL)bounces { } - (void)setShowScrollIndicator:(BOOL)show { - [self.collectionView setShowsVerticalScrollIndicator:show]; + if (self.horizontal) { + [self.collectionView setShowsHorizontalScrollIndicator:show]; + } else { + [self.collectionView setShowsVerticalScrollIndicator:show]; + } } - (BOOL)showScrollIndicator { - return [self.collectionView showsVerticalScrollIndicator]; + if (self.horizontal) { + return [self.collectionView showsHorizontalScrollIndicator]; + } else { + return [self.collectionView showsVerticalScrollIndicator]; + } } - (void)setScrollEnabled:(BOOL)value { @@ -384,6 +392,7 @@ - (CGFloat)collectionView:(UICollectionView *)collectionView - (void)setHorizontal:(BOOL)horizontal { if (_horizontal != horizontal) { + BOOL previousShowScrollIndicator = self.showScrollIndicator; _horizontal = horizontal; UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout; layout.scrollDirection = horizontal ? UICollectionViewScrollDirectionHorizontal : UICollectionViewScrollDirectionVertical; @@ -395,6 +404,9 @@ - (void)setHorizontal:(BOOL)horizontal { [self.collectionView setAlwaysBounceVertical:YES]; [self.collectionView setAlwaysBounceHorizontal:NO]; } + if (self.showScrollIndicator != previousShowScrollIndicator) { + [self setShowScrollIndicator:previousShowScrollIndicator]; + } } } From 8ad0c88450f3a83c431713bd229fda597f1fbe9a Mon Sep 17 00:00:00 2001 From: wwwcg Date: Fri, 5 Jan 2024 21:03:19 +0800 Subject: [PATCH 16/39] fix(ios): showsXXXScrollIndicator property of scrollview not working --- .../component/scrollview/HippyScrollView.mm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/renderer/native/ios/renderer/component/scrollview/HippyScrollView.mm b/renderer/native/ios/renderer/component/scrollview/HippyScrollView.mm index 68fb850269c..157590b7998 100644 --- a/renderer/native/ios/renderer/component/scrollview/HippyScrollView.mm +++ b/renderer/native/ios/renderer/component/scrollview/HippyScrollView.mm @@ -187,7 +187,7 @@ @interface HippyScrollView () { CGFloat _lastNonZeroTranslationAlongAxis; NSMutableDictionary *_contentOffsetCache; BOOL _didSetContentOffset; - BOOL _showScrollIndicator[2]; + int _recordedScrollIndicatorSwitchValue[2]; // default -1 } @end @@ -201,6 +201,8 @@ - (instancetype)initWithFrame:(CGRect)frame { _scrollEventThrottle = 0.0; _lastScrollDispatchTime = 0; + _recordedScrollIndicatorSwitchValue[0] = -1; + _recordedScrollIndicatorSwitchValue[1] = -1; _scrollListeners = [NSHashTable weakObjectsHashTable]; _contentOffsetCache = [NSMutableDictionary dictionaryWithCapacity:32]; @@ -679,16 +681,19 @@ - (void)didSetProps:(NSArray *)changedProps { - (void)applyLayoutDirectionIfNeeded { if ([self isLayoutSubviewsRTL]) { _scrollView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI); - _showScrollIndicator[0] = _scrollView.showsHorizontalScrollIndicator; - _showScrollIndicator[1] = _scrollView.showsVerticalScrollIndicator; + _recordedScrollIndicatorSwitchValue[0] = _scrollView.showsHorizontalScrollIndicator ? 1 : 0; + _recordedScrollIndicatorSwitchValue[1] = _scrollView.showsVerticalScrollIndicator ? 1 : 0; _scrollView.showsVerticalScrollIndicator = NO; _scrollView.showsHorizontalScrollIndicator = NO; _contentView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI); - } - else { + } else { _scrollView.transform = CGAffineTransformIdentity; - _scrollView.showsHorizontalScrollIndicator = _showScrollIndicator[0]; - _scrollView.showsVerticalScrollIndicator = _showScrollIndicator[1]; + if (_recordedScrollIndicatorSwitchValue[0] > -1) { + _scrollView.showsHorizontalScrollIndicator = _recordedScrollIndicatorSwitchValue[0]; + } + if (_recordedScrollIndicatorSwitchValue[1] > -1) { + _scrollView.showsVerticalScrollIndicator = _recordedScrollIndicatorSwitchValue[1]; + } _contentView.transform = CGAffineTransformIdentity; } [self applyContentViewFrame]; From 62fff3fff2d5e10b350efb04a23d6e86843670e8 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 3 Jan 2024 17:42:37 +0800 Subject: [PATCH 17/39] refactor(ios): eliminate code warnings and resolve architectural issues --- framework/ios/module/dev/HippyRedBox.h | 4 +- renderer/native/ios/renderer/HippyComponent.h | 4 +- renderer/native/ios/renderer/HippyRootView.h | 26 +++-- .../native/ios/renderer/HippyUIManager.mm | 1 + .../modal/HippyModalHostViewManager.mm | 2 + .../component/text/HippyShadowText.mm | 1 + .../textinput/HippyShadowTextView.mm | 1 + .../component/view/HippyShadowView+Internal.h | 104 ++++++++++++++++++ .../renderer/component/view/HippyShadowView.h | 65 ++--------- .../component/view/HippyShadowView.mm | 20 +--- .../component/view/HippyViewManager.mm | 1 + .../NativeRenderWaterfallView.mm | 1 - 12 files changed, 139 insertions(+), 91 deletions(-) create mode 100644 renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h diff --git a/framework/ios/module/dev/HippyRedBox.h b/framework/ios/module/dev/HippyRedBox.h index 87f0e397950..c209450e2bf 100644 --- a/framework/ios/module/dev/HippyRedBox.h +++ b/framework/ios/module/dev/HippyRedBox.h @@ -26,6 +26,8 @@ #import "HippyBridgeModule.h" #import "HippyErrorCustomizer.h" +NS_ASSUME_NONNULL_BEGIN + @interface HippyRedBox : NSObject @property (nonatomic, assign) BOOL showEnabled; @@ -59,4 +61,4 @@ @end - +NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/HippyComponent.h b/renderer/native/ios/renderer/HippyComponent.h index 4ca9063dd46..4929256c067 100644 --- a/renderer/native/ios/renderer/HippyComponent.h +++ b/renderer/native/ios/renderer/HippyComponent.h @@ -44,10 +44,10 @@ typedef void (^HippyDirectEventBlock)(NSDictionary *body); @property (nonatomic, assign) CGRect frame; /// The parent of current component -@property (nonatomic, weak) id parent; +@property (nonatomic, weak) __kindof id parent; /// Subviews of current component -- (NSArray> *)subcomponents; +- (NSArray<__kindof id> *)subcomponents; /// Inset /// - Parameters: diff --git a/renderer/native/ios/renderer/HippyRootView.h b/renderer/native/ios/renderer/HippyRootView.h index 57b730f7775..33a8aba604d 100644 --- a/renderer/native/ios/renderer/HippyRootView.h +++ b/renderer/native/ios/renderer/HippyRootView.h @@ -25,6 +25,8 @@ @class HippyBridge; +NS_ASSUME_NONNULL_BEGIN + /** * This enum is used to define size flexibility type of the root view. * If a dimension is flexible, the view will recalculate that dimension @@ -75,7 +77,7 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; /// Set this property only on the main thread. /// /// Note: `runHippyApplication` is automatically called internally. -@property (nonatomic, copy, readwrite) NSDictionary *appProperties; +@property (nonatomic, copy, nullable) NSDictionary *appProperties; /// The backing view controller of the root view. @property (nonatomic, weak) UIViewController *hippyViewController; @@ -93,8 +95,8 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; /// @param delegate HippyRootViewDelegate - (instancetype)initWithBridge:(HippyBridge *)bridge moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - delegate:(id)delegate; + initialProperties:(nullable NSDictionary *)initialProperties + delegate:(nullable id)delegate; /// Create HippyRootView instance, /// As above, add shareOptions parameters, compatible with hippy2 @@ -106,9 +108,9 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; /// @param delegate HippyRootViewDelegate - (instancetype)initWithBridge:(HippyBridge *)bridge moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - shareOptions:(NSDictionary *)shareOptions - delegate:(id)delegate; + initialProperties:(nullable NSDictionary *)initialProperties + shareOptions:(nullable NSDictionary *)shareOptions + delegate:(nullable id)delegate; /// Create HippyRootView instance /// & Load the business BundleURL @@ -122,8 +124,8 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; - (instancetype)initWithBridge:(HippyBridge *)bridge businessURL:(NSURL *)businessURL moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - delegate:(id)delegate; + initialProperties:(nullable NSDictionary *)initialProperties + delegate:(nullable id)delegate; /// Create HippyRootView instance /// & Load the business BundleURL @@ -143,9 +145,9 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; - (instancetype)initWithBridge:(HippyBridge *)bridge businessURL:(NSURL *)businessURL moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - shareOptions:(NSDictionary *)shareOptions - delegate:(id)delegate; + initialProperties:(nullable NSDictionary *)initialProperties + shareOptions:(nullable NSDictionary *)shareOptions + delegate:(nullable id)delegate; /// Run Hippy! @@ -184,3 +186,5 @@ extern NSString *const HippySecondaryBundleDidLoadNotification; - (void)cancelTouches; @end + +NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index cc40c04725f..20047fddc4b 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -34,6 +34,7 @@ #import "HippyUIManager+Private.h" #import "NativeRenderObjectRootView.h" #import "HippyShadowView.h" +#import "HippyShadowView+Internal.h" #import "NativeRenderUtils.h" #import "HippyView.h" #import "HippyViewManager.h" diff --git a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm index f459b0267e9..e3bc7bcde7e 100644 --- a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm +++ b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm @@ -25,6 +25,7 @@ #import "HippyModalHostViewManager.h" #import "HippyModalTransitioningDelegate.h" #import "HippyShadowView.h" +#import "HippyShadowView+Internal.h" #import "NativeRenderUtils.h" @interface HippyModalHostShadowView : HippyShadowView @@ -38,6 +39,7 @@ - (void)insertHippySubview:(HippyShadowView *)subview atIndex:(NSInteger)atIndex CGRect frame = { .origin = CGPointZero, .size = NativeRenderScreenSize() }; [subview setLayoutFrame:frame]; } + - (void)setDomManager:(std::weak_ptr)domManager { [super setDomManager:domManager]; CGRect frame = { .origin = CGPointZero, .size = NativeRenderScreenSize() }; diff --git a/renderer/native/ios/renderer/component/text/HippyShadowText.mm b/renderer/native/ios/renderer/component/text/HippyShadowText.mm index 0af31aa0fd0..a3a083713d3 100644 --- a/renderer/native/ios/renderer/component/text/HippyShadowText.mm +++ b/renderer/native/ios/renderer/component/text/HippyShadowText.mm @@ -25,6 +25,7 @@ #import "HippyUtils.h" #import "HippyFont.h" #import "HippyShadowText.h" +#import "HippyShadowView+Internal.h" #import "HippyText.h" #import "HippyTextView.h" #import "NativeRenderUtils.h" diff --git a/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm index a8b8b50ddbe..f2e63f35691 100644 --- a/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm +++ b/renderer/native/ios/renderer/component/textinput/HippyShadowTextView.mm @@ -22,6 +22,7 @@ #import "HippyUtils.h" #import "HippyShadowTextView.h" +#import "HippyShadowView+Internal.h" #include "dom/dom_manager.h" #include "dom/dom_node.h" diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h b/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h new file mode 100644 index 00000000000..ededc056ec8 --- /dev/null +++ b/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h @@ -0,0 +1,104 @@ +/*! + * iOS SDK + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * 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 "HippyShadowView.h" +#include "dom/layout_node.h" +#include "dom/render_manager.h" +#include +#include + + +NS_ASSUME_NONNULL_BEGIN + +namespace hippy { +inline namespace dom { +class DomManager; +class DomNode; +class RootNode; +struct LayoutResult; +enum class Direction; +} +} + + +@interface HippyShadowView () { + __weak HippyShadowView *_superview; + NSMutableArray *_objectSubviews; + BOOL _recomputePadding; + BOOL _recomputeMargin; + BOOL _recomputeBorder; + BOOL _didUpdateSubviews; + //TODO remove it + NSInteger _isDecendantOfLazilyRenderObject; + std::vector _eventNames; +} + +#pragma mark - DomNode Related + +/// The hippy::DomManager instance +@property (nonatomic, assign) std::weak_ptr domManager; + +/// The corresponding hippy::DomNode +@property (nonatomic, assign) std::weak_ptr domNode; + +/// The corresponding hippy::RootNode instance +@property (nonatomic, assign) std::weak_ptr rootNode; + + +#pragma mark - Event Related + +/// Add event to HippyShadowView +/// @param name event name +/// +/// @discussion In general, events are mounted directly on UIViews. +/// But for lazy-load UIViews, we have to record it temporarily, and mount to UIView when created. +- (void)addEventName:(const std::string &)name; + +/// Get all events name +- (const std::vector &)allEventNames; + +/// Clear all event names +- (void)clearEventNames; + + +#pragma mark - Layout Related + +/// The layout result +@property (nonatomic, assign) hippy::LayoutResult nodeLayoutResult; + +/// The layout direction +@property (nonatomic, assign) hippy::Direction layoutDirection; + +/// The final layout direction +@property (nonatomic, assign) hippy::Direction confirmedLayoutDirection; + +/// Set layout direction to subviews. +/// - Parameter confirmedLayoutDirection: hippy::Direction +- (void)applyConfirmedLayoutDirectionToSubviews:(hippy::Direction)confirmedLayoutDirection; + +/// Whether layout direction is RTL. +- (BOOL)isLayoutSubviewsRTL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.h b/renderer/native/ios/renderer/component/view/HippyShadowView.h index 2d607f9dec2..f77c2c75850 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.h +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.h @@ -24,20 +24,7 @@ #import "HippyComponent.h" #import "HippyConvert+NativeRender.h" -#ifdef __cplusplus - -#include - -namespace hippy { -inline namespace dom { -class DomManager; -class DomNode; -class RootNode; -struct LayoutResult; -enum class Direction; -} -} -#endif /* __cplusplus */ +NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSUInteger, NativeRenderUpdateLifecycle) { NativeRenderUpdateLifecycleUninitialized = 0, @@ -57,8 +44,8 @@ typedef NS_ENUM(NSUInteger, NativeRenderCreationType) { typedef void (^NativeRenderApplierBlock)(NSDictionary *viewRegistry, UIView * _Nullable lazyCreatedView); -typedef UIView *(^NativeRenderViewCreationBlock)(HippyShadowView *renderObject); -typedef void (^NativeRenderViewInsertionBlock)(UIView *container, NSArray *children); +typedef UIView *_Nullable(^HippyViewCreationBlock)(HippyShadowView *renderObject); +typedef void (^HippyViewInsertionBlock)(UIView *container, NSArray *children); //TODO remove unused string extern NSString *const NativeRenderShadowViewDiffInsertion; @@ -148,22 +135,13 @@ extern NSString *const NativeRenderShadowViewDiffTag; */ @property (nonatomic, assign) NativeRenderCreationType creationType; -#ifdef __cplusplus -@property (nonatomic, assign) std::weak_ptr domManager; - -@property (nonatomic, assign) std::weak_ptr domNode; - -@property (nonatomic, assign) std::weak_ptr rootNode; - -#endif - /** * set create type of itself and its all descendants to NativeRenderCreationTypeInstantly */ - (void)synchronousRecusivelySetCreationTypeToInstant; -- (UIView *)createView:(NativeRenderViewCreationBlock)creationBlock insertChildren:(NativeRenderViewInsertionBlock)insertionBlock; +- (UIView *)createView:(HippyViewCreationBlock)creationBlock insertChildren:(HippyViewInsertionBlock)insertionBlock; /** * reset layout frame to mark dirty and re-layout @@ -184,7 +162,7 @@ extern NSString *const NativeRenderShadowViewDiffTag; * that add additional propagating properties should override this method. */ - (NSDictionary *)processUpdatedProperties:(NSMutableSet *)applierBlocks - parentProperties:(NSDictionary *)parentProperties; + parentProperties:(nullable NSDictionary *)parentProperties; - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks; @@ -210,35 +188,6 @@ extern NSString *const NativeRenderShadowViewDiffTag; - (NSDictionary *)mergeProps:(NSDictionary *)props; -#ifdef __cplusplus -/** - * Add event to NativeRenderObject - * @param name event name - * @discussion In general, events are mounted directly on UIViews. - * But for the lazy loading UIViews, UIViews may not be created when events requires to mount on UIViews. - * So we have to mount on RenderObject temparily, and mount on UIViews when UIViews are created by NativeRenderObject - */ -- (void)addEventName:(const std::string &)name; - -/** - * Get all events name - * @return all events name - */ -- (const std::vector &)allEventNames; - -/** - * clear all event names - */ -- (void)clearEventNames; - - -@property(nonatomic, assign) hippy::LayoutResult nodeLayoutResult; - -@property(nonatomic, assign) hippy::Direction layoutDirection; -@property(nonatomic, assign) hippy::Direction confirmedLayoutDirection; -- (void)applyConfirmedLayoutDirectionToSubviews:(hippy::Direction)confirmedLayoutDirection; -- (BOOL)isLayoutSubviewsRTL; - -#endif - @end + +NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.mm b/renderer/native/ios/renderer/component/view/HippyShadowView.mm index 0a98ae07853..25e23443442 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.mm +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.mm @@ -26,9 +26,7 @@ #import "HippyShadowView.h" #import "UIView+DirectionalLayout.h" #import "UIView+Hippy.h" - -#include "dom/layout_node.h" -#include "dom/render_manager.h" +#import "HippyShadowView+Internal.h" static NSString *const NativeRenderBackgroundColorProp = @"backgroundColor"; @@ -38,20 +36,6 @@ NSString *const NativeRenderShadowViewDiffTag = @"NativeRenderShadowViewDiffTag"; -@interface HippyShadowView () { - __weak HippyShadowView *_superview; - NSMutableArray *_objectSubviews; - BOOL _recomputePadding; - BOOL _recomputeMargin; - BOOL _recomputeBorder; - BOOL _didUpdateSubviews; - //TODO remove it - NSInteger _isDecendantOfLazilyRenderObject; - std::vector _eventNames; -} - -@end - @implementation HippyShadowView @synthesize hippyTag = _hippyTag; @@ -189,7 +173,7 @@ - (void)synchronousRecusivelySetCreationTypeToInstant { } } -- (UIView *)createView:(NativeRenderViewCreationBlock)creationBlock insertChildren:(NativeRenderViewInsertionBlock)insertionBlock { +- (UIView *)createView:(HippyViewCreationBlock)creationBlock insertChildren:(HippyViewInsertionBlock)insertionBlock { UIView *container = creationBlock(self); NSMutableArray *children = [NSMutableArray arrayWithCapacity:[self.subcomponents count]]; for (HippyShadowView *subviews in self.subcomponents) { diff --git a/renderer/native/ios/renderer/component/view/HippyViewManager.mm b/renderer/native/ios/renderer/component/view/HippyViewManager.mm index 9896aea3beb..b8ec3d38d86 100644 --- a/renderer/native/ios/renderer/component/view/HippyViewManager.mm +++ b/renderer/native/ios/renderer/component/view/HippyViewManager.mm @@ -28,6 +28,7 @@ #import "NativeRenderGradientObject.h" #import "HippyUIManager.h" #import "HippyShadowView.h" +#import "HippyShadowView+Internal.h" #import "HippyViewManager.h" #import "HippyView.h" #import "UIView+DirectionalLayout.h" diff --git a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm index c6f962116f3..1efe1e8693b 100644 --- a/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm +++ b/renderer/native/ios/renderer/component/waterfalllist/NativeRenderWaterfallView.mm @@ -37,7 +37,6 @@ static NSString *kCellIdentifier = @"HippyWaterfallCellIdentifier"; static NSString *kWaterfallItemName = @"WaterfallItem"; -static const NSTimeInterval delayForPurgeView = 1.f; @interface NativeRenderWaterfallView () { NSHashTable> *_scrollListeners; From 9c5d0fca083f06bdf7a60e8709c6960e4631652f Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 3 Jan 2024 18:00:16 +0800 Subject: [PATCH 18/39] fix(ios): add missing notification and remove unused variables --- renderer/native/ios/renderer/HippyUIManager.mm | 5 +---- .../component/modal/HippyModalHostViewManager.h | 4 +++- .../component/modal/HippyModalHostViewManager.mm | 4 ++++ .../modal/HippyModalTransitioningDelegate.h | 6 +++--- .../modal/HippyModalTransitioningDelegate.m | 5 ++++- .../component/view/HippyShadowView+Internal.h | 3 +-- .../ios/renderer/component/view/HippyShadowView.h | 6 ------ .../ios/renderer/component/view/HippyShadowView.mm | 14 ++++---------- .../native/ios/utils/NativeRenderGradientObject.m | 5 ++--- 9 files changed, 22 insertions(+), 30 deletions(-) diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index 20047fddc4b..ef676804e60 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -640,10 +640,7 @@ - (void)updateView:(nonnull NSNumber *)componentTag return; } HippyComponentData *componentData = [self componentDataForViewName:renderObject.viewName]; - NSDictionary *newProps = props; - NSDictionary *virtualProps = props; - newProps = [renderObject mergeProps:props]; - virtualProps = renderObject.props; + NSDictionary *newProps = [renderObject mergeProps:props]; [componentData setProps:newProps forShadowView:renderObject]; [renderObject dirtyPropagation:NativeRenderUpdateLifecyclePropsDirtied]; [self addUIBlock:^(__unused HippyUIManager *uiManager, NSDictionary *viewRegistry) { diff --git a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.h b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.h index 80593c59554..31ea5126411 100644 --- a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.h +++ b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.h @@ -23,9 +23,11 @@ #import "HippyViewManager.h" #import "HippyModalHostView.h" +HIPPY_EXTERN NSString * const HippyModalHostViewDismissNotification; + @protocol HippyModalHostViewInteractor; -typedef void (^NativeRenderModalViewInteractionBlock)( +typedef void (^HippyModalViewInteractionBlock)( UIViewController *reactViewController, UIViewController *viewController, BOOL animated, dispatch_block_t completionBlock); @interface HippyModalHostViewManager : HippyViewManager diff --git a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm index e3bc7bcde7e..2d783118120 100644 --- a/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm +++ b/renderer/native/ios/renderer/component/modal/HippyModalHostViewManager.mm @@ -28,6 +28,10 @@ #import "HippyShadowView+Internal.h" #import "NativeRenderUtils.h" + +NSString * const HippyModalHostViewDismissNotification = @"HippyModalHostViewDismissNotification"; + + @interface HippyModalHostShadowView : HippyShadowView @end diff --git a/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.h b/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.h index 5a0c2d2a2ad..b3770241b90 100644 --- a/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.h +++ b/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.h @@ -27,7 +27,7 @@ @class HippyModalHostViewController; @protocol HippyModalHostViewInteractor; -typedef void (^NativeRenderModalViewInteractionBlock)( +typedef void (^HippyModalViewInteractionBlock)( UIViewController *hippyViewController, UIViewController *viewController, BOOL animated, dispatch_block_t completionBlock); @interface HippyModalTransitioningDelegate : NSObject @@ -36,8 +36,8 @@ typedef void (^NativeRenderModalViewInteractionBlock)( * e.g. in case you have a native navigator that has its own way to display a modal. * If these are not specified, it falls back to the UIViewController standard way of presenting. */ -@property (nonatomic, strong) NativeRenderModalViewInteractionBlock presentationBlock; -@property (nonatomic, strong) NativeRenderModalViewInteractionBlock dismissalBlock; +@property (nonatomic, strong) HippyModalViewInteractionBlock presentationBlock; +@property (nonatomic, strong) HippyModalViewInteractionBlock dismissalBlock; - (void)presentModalHostView:(HippyModalHostView *)modalHostView withViewController:(HippyModalHostViewController *)viewController diff --git a/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.m b/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.m index 0115e7c44c5..2656d70e85d 100644 --- a/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.m +++ b/renderer/native/ios/renderer/component/modal/HippyModalTransitioningDelegate.m @@ -24,12 +24,14 @@ #import "HippyModalCustomPresentationController.h" #import "HippyModalCustomAnimationTransition.h" #import "UIView+Hippy.h" +#import "HippyModalHostViewManager.h" + @implementation HippyModalTransitioningDelegate - (nullable UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(__unused UIViewController *)presenting - sourceViewController:(__unused UIViewController *)source NS_AVAILABLE_IOS(8_0) { + sourceViewController:(__unused UIViewController *)source { HippyModalCustomPresentationController *controller = [[HippyModalCustomPresentationController alloc] initWithPresentedViewController:presented presentingViewController:presenting]; return controller; @@ -76,6 +78,7 @@ - (void)dismissModalHostView:(HippyModalHostView *)modalHostView if (modalHostView.primaryKey.length != 0) { userInfo = @{ @"primaryKey": modalHostView.primaryKey }; } + [[NSNotificationCenter defaultCenter] postNotificationName:HippyModalHostViewDismissNotification object:self userInfo:userInfo]; if (modalHostView.onRequestClose) { modalHostView.onRequestClose(nil); } diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h b/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h index ededc056ec8..73b2ee80282 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h +++ b/renderer/native/ios/renderer/component/view/HippyShadowView+Internal.h @@ -48,8 +48,7 @@ enum class Direction; BOOL _recomputeMargin; BOOL _recomputeBorder; BOOL _didUpdateSubviews; - //TODO remove it - NSInteger _isDecendantOfLazilyRenderObject; + std::vector _eventNames; } diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.h b/renderer/native/ios/renderer/component/view/HippyShadowView.h index f77c2c75850..3501a9dc461 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.h +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.h @@ -47,12 +47,6 @@ typedef void (^NativeRenderApplierBlock)(NSDictionary *vie typedef UIView *_Nullable(^HippyViewCreationBlock)(HippyShadowView *renderObject); typedef void (^HippyViewInsertionBlock)(UIView *container, NSArray *children); -//TODO remove unused string -extern NSString *const NativeRenderShadowViewDiffInsertion; -extern NSString *const NativeRenderShadowViewDiffRemove; -extern NSString *const NativeRenderShadowViewDiffUpdate; -extern NSString *const NativeRenderShadowViewDiffTag; - /** * ShadowView tree mirrors Hippy view tree. Every node is highly stateful. * 1. A node is in one of three lifecycles: uninitialized, computed, dirtied. diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.mm b/renderer/native/ios/renderer/component/view/HippyShadowView.mm index 25e23443442..43bce5d049d 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.mm +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.mm @@ -28,13 +28,8 @@ #import "UIView+Hippy.h" #import "HippyShadowView+Internal.h" -static NSString *const NativeRenderBackgroundColorProp = @"backgroundColor"; - -NSString *const NativeRenderShadowViewDiffInsertion = @"NativeRenderShadowViewDiffInsertion"; -NSString *const NativeRenderShadowViewDiffRemove = @"NativeRenderShadowViewDiffRemove"; -NSString *const NativeRenderShadowViewDiffUpdate = @"NativeRenderShadowViewDiffUpdate"; -NSString *const NativeRenderShadowViewDiffTag = @"NativeRenderShadowViewDiffTag"; +static NSString *const HippyBackgroundColorPropKey = @"backgroundColor"; @implementation HippyShadowView @@ -74,7 +69,7 @@ - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks _confirmedLayoutDirectionDidUpdated = NO; } if (!_backgroundColor) { - UIColor *parentBackgroundColor = parentProperties[NativeRenderBackgroundColorProp]; + UIColor *parentBackgroundColor = parentProperties[HippyBackgroundColorPropKey]; if (parentBackgroundColor) { [applierBlocks addObject:^(NSDictionary *viewRegistry, UIView * _Nullable lazyCreatedView) { UIView *view = lazyCreatedView ?: viewRegistry[self->_hippyTag]; @@ -87,9 +82,9 @@ - (void)amendLayoutBeforeMount:(NSMutableSet *)blocks CGFloat alpha = CGColorGetAlpha(_backgroundColor.CGColor); if (alpha < 1.0) { // If bg is non-opaque, don't propagate further - properties[NativeRenderBackgroundColorProp] = [UIColor clearColor]; + properties[HippyBackgroundColorPropKey] = [UIColor clearColor]; } else { - properties[NativeRenderBackgroundColorProp] = _backgroundColor; + properties[HippyBackgroundColorPropKey] = _backgroundColor; } return properties; } @@ -103,7 +98,6 @@ - (instancetype)init { if ((self = [super init])) { _propagationLifecycle = NativeRenderUpdateLifecycleUninitialized; _frame = CGRectMake(0, 0, NAN, NAN); - _isDecendantOfLazilyRenderObject = -1; _objectSubviews = [NSMutableArray arrayWithCapacity:8]; _confirmedLayoutDirection = hippy::Direction::Inherit; _layoutDirection = hippy::Direction::Inherit; diff --git a/renderer/native/ios/utils/NativeRenderGradientObject.m b/renderer/native/ios/utils/NativeRenderGradientObject.m index eb7812b68dd..6e91f4b5c15 100644 --- a/renderer/native/ios/utils/NativeRenderGradientObject.m +++ b/renderer/native/ios/utils/NativeRenderGradientObject.m @@ -293,15 +293,14 @@ - (instancetype)initWithGradientObject:(NSDictionary *)object { } - (LinearGradientPoints)linearGradientPointsFromSize:(CGSize)size { - LinearGradientPoints points = {CGPointZero, CGPointZero}; + LinearGradientPoints points; if (self.drawnByDegree) { self.degree %= 360; if (self.degree < 0) { self.degree += 360; } points = gradientPointsWithSizeAndDegree(size, self.degree); - } - else { + } else { points = pointsFromDirection(self, size); } return points; From 8e510793d282b429063972b75243c02456d74ce6 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Fri, 12 Jan 2024 17:28:38 +0800 Subject: [PATCH 19/39] refactor(ios): optimize local file and base64 data's loading efficiency (#3701) * refactor(ios): optimize local file and base64 data's loading efficiency * refactor(ios): optimize local file and base64 data's loading efficiency2 * refactor(ios): add custom userInfo in vfs completion block In order to support third-party vfs implementations when returning images directly, rather than raw data Such as using SDWebImage to download resource --- framework/ios/base/bridge/HippyBridge.mm | 4 ++ .../HippyBundleLoadOperation.mm | 5 +- .../imageloader/HippyImageLoaderModule.mm | 13 ++-- .../module/loader/HippyBase64DataHandler.h | 38 +++++++++++ .../module/loader/HippyBase64DataHandler.mm | 53 +++++++++++++++ .../ios/module/loader/HippyBridge+VFSLoader.h | 5 +- .../module/loader/HippyBridge+VFSLoader.mm | 4 +- .../ios/module/loader/HippyFileHandler.mm | 41 +++++++----- framework/ios/module/network/HippyNetWork.mm | 3 +- modules/ios/image/HippyDefaultImageProvider.m | 6 ++ .../ios/image/HippyImageProviderProtocol.h | 12 ++++ .../ios/{VFSDefines.h => HippyVFSDefines.h} | 21 ++++-- modules/vfs/ios/NSURLSessionDataProgress.h | 2 +- modules/vfs/ios/NSURLSessionDataProgress.mm | 8 +-- modules/vfs/ios/VFSUriHandler.h | 2 +- modules/vfs/ios/VFSUriHandler.mm | 18 +++-- modules/vfs/ios/VFSUriLoader.h | 2 +- modules/vfs/ios/VFSUriLoader.mm | 12 ++-- .../component/image/HippyImageViewManager.mm | 26 ++++++-- .../component/view/HippyViewManager.mm | 65 ++++++++++++------- 20 files changed, 254 insertions(+), 86 deletions(-) create mode 100644 framework/ios/module/loader/HippyBase64DataHandler.h create mode 100644 framework/ios/module/loader/HippyBase64DataHandler.mm rename modules/vfs/ios/{VFSDefines.h => HippyVFSDefines.h} (64%) diff --git a/framework/ios/base/bridge/HippyBridge.mm b/framework/ios/base/bridge/HippyBridge.mm index 12984145be9..20ce7c6d909 100644 --- a/framework/ios/base/bridge/HippyBridge.mm +++ b/framework/ios/base/bridge/HippyBridge.mm @@ -50,6 +50,7 @@ #import "NSObject+Render.h" #import "TypeConverter.h" #import "VFSUriLoader.h" +#import "HippyBase64DataHandler.h" #include #include @@ -274,7 +275,10 @@ - (void)setUpNativeRenderManager { uriLoader->PushDefaultHandler(uriHandler); uriLoader->AddConvenientDefaultHandler(uriHandler); auto fileHandler = std::make_shared(self); + auto base64DataHandler = std::make_shared(); + uriLoader->RegisterConvenientUriHandler(@"file", fileHandler); uriLoader->RegisterConvenientUriHandler(@"hpfile", fileHandler); + uriLoader->RegisterConvenientUriHandler(@"data", base64DataHandler); _uriLoader = uriLoader; } return _uriLoader; diff --git a/framework/ios/base/bundleoperations/HippyBundleLoadOperation.mm b/framework/ios/base/bundleoperations/HippyBundleLoadOperation.mm index 7a8f876b9ea..02594550199 100644 --- a/framework/ios/base/bundleoperations/HippyBundleLoadOperation.mm +++ b/framework/ios/base/bundleoperations/HippyBundleLoadOperation.mm @@ -77,7 +77,10 @@ - (void)main { body:nil queue:_finishQueue progress:nil - completionHandler:^(NSData * _Nonnull data, NSURLResponse * _Nonnull response, NSError * _Nonnull error) { + completionHandler:^(NSData * _Nullable data, + NSDictionary * _Nullable userInfo, + NSURLResponse * _Nullable response, + NSError * _Nullable error) { HippyBundleLoadOperation *strongSelf = weakSelf; if (!strongSelf || strongSelf.cancelled) { strongSelf.finished = YES; diff --git a/framework/ios/module/imageloader/HippyImageLoaderModule.mm b/framework/ios/module/imageloader/HippyImageLoaderModule.mm index a74b776d5af..3f98dd65f05 100644 --- a/framework/ios/module/imageloader/HippyImageLoaderModule.mm +++ b/framework/ios/module/imageloader/HippyImageLoaderModule.mm @@ -26,6 +26,7 @@ #import "HippyImageLoaderModule.h" #import "HippyUtils.h" #import "HippyDefines.h" +#import "HippyLog.h" static NSString *const kImageLoaderModuleErrorDomain = @"kImageLoaderModuleErrorDomain"; static NSUInteger const ImageLoaderErrorParseError = 2; @@ -62,7 +63,7 @@ @implementation HippyImageLoaderModule body:nil queue:nil progress:nil - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + completionHandler:^(NSData *data, NSDictionary *userInfo, NSURLResponse *response, NSError *error) { if (!error) { id imageProvider = [self imageProviderForData:data]; if (!imageProvider) { @@ -78,15 +79,13 @@ @implementation HippyImageLoaderModule if (retImage) { NSDictionary *dic = @{@"width": @(retImage.size.width), @"height": @(retImage.size.height)}; resolve(dic); - } - else { + } else { NSError *error = [NSError errorWithDomain:kImageLoaderModuleErrorDomain code:ImageLoaderErrorParseError userInfo:@{@"reason": @"image parse error"}]; NSString *errorKey = [NSString stringWithFormat:@"%lu", ImageLoaderErrorParseError]; reject(errorKey, @"image parse error", error); } - } - else { + } else { NSString *errorKey = [NSString stringWithFormat:@"%lu", ImageLoaderErrorRequestError]; reject(errorKey, @"image request error", error); } @@ -100,8 +99,8 @@ @implementation HippyImageLoaderModule body:nil queue:nil progress:nil - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - + completionHandler:^(NSData *data, NSDictionary *userInfo, NSURLResponse *response, NSError *error) { + HippyLogInfo(@"prefetch %@ complete, err? %@", urlString, error.description); }]; } diff --git a/framework/ios/module/loader/HippyBase64DataHandler.h b/framework/ios/module/loader/HippyBase64DataHandler.h new file mode 100644 index 00000000000..64bea39a1fb --- /dev/null +++ b/framework/ios/module/loader/HippyBase64DataHandler.h @@ -0,0 +1,38 @@ +/* + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * 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 +#import "VFSUriHandler.h" + +NS_ASSUME_NONNULL_BEGIN + +class HippyBase64DataHandler : public VFSUriHandler { + +public: + void RequestUntrustedContent(NSURLRequest *request, + NSOperationQueue *queue, + VFSHandlerProgressBlock progress, + VFSHandlerCompletionBlock completion, VFSGetNextHandlerBlock next) override; + +}; + +NS_ASSUME_NONNULL_END diff --git a/framework/ios/module/loader/HippyBase64DataHandler.mm b/framework/ios/module/loader/HippyBase64DataHandler.mm new file mode 100644 index 00000000000..c1cc0634573 --- /dev/null +++ b/framework/ios/module/loader/HippyBase64DataHandler.mm @@ -0,0 +1,53 @@ +/* + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * 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 "HippyBase64DataHandler.h" + +void HippyBase64DataHandler::RequestUntrustedContent(NSURLRequest *request, + NSOperationQueue *queue, + VFSHandlerProgressBlock progress, + VFSHandlerCompletionBlock completion, + VFSGetNextHandlerBlock next) { + if (!completion) { + return; + } + NSURL *url = [request URL]; + if (!url) { + completion(nil, nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); + return; + } + + void (^opBlock)() = ^{ + NSError *error; + NSData *fileData = [NSData dataWithContentsOfURL:url options:kNilOptions error:&error]; + NSURLResponse *rsp = [[NSURLResponse alloc] initWithURL:url + MIMEType:nil + expectedContentLength:fileData.length + textEncodingName:nil]; + completion(fileData, nil, rsp, error); + }; + if (queue) { + [queue addOperationWithBlock:opBlock]; + } else { + opBlock(); + } +} diff --git a/framework/ios/module/loader/HippyBridge+VFSLoader.h b/framework/ios/module/loader/HippyBridge+VFSLoader.h index d6dfbbcfdf1..3fb132e9b5c 100644 --- a/framework/ios/module/loader/HippyBridge+VFSLoader.h +++ b/framework/ios/module/loader/HippyBridge+VFSLoader.h @@ -21,6 +21,7 @@ */ #import "HippyBridge.h" +#import "HippyVFSDefines.h" NS_ASSUME_NONNULL_BEGIN @@ -31,8 +32,8 @@ NS_ASSUME_NONNULL_BEGIN params:(NSDictionary *_Nullable)httpHeaders body:(NSData *_Nullable)body queue:(NSOperationQueue *_Nullable)queue - progress:(void(^ _Nullable)(NSUInteger current, NSUInteger total))progress - completionHandler:(void (^)(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error))completionHandler; + progress:(VFSHandlerProgressBlock _Nullable)progress + completionHandler:(VFSHandlerCompletionBlock)completionHandler; @end NS_ASSUME_NONNULL_END diff --git a/framework/ios/module/loader/HippyBridge+VFSLoader.mm b/framework/ios/module/loader/HippyBridge+VFSLoader.mm index b49adff215e..2a4bec80109 100644 --- a/framework/ios/module/loader/HippyBridge+VFSLoader.mm +++ b/framework/ios/module/loader/HippyBridge+VFSLoader.mm @@ -33,8 +33,8 @@ - (void)loadContentsAsynchronouslyFromUrl:(NSString *)urlString params:(NSDictionary *)httpHeaders body:(NSData *)body queue:(NSOperationQueue *_Nullable)queue - progress:(void(^)(NSUInteger current, NSUInteger total))progress - completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler { + progress:(VFSHandlerProgressBlock)progress + completionHandler:(VFSHandlerCompletionBlock)completionHandler { if (!urlString || !completionHandler) { return; } diff --git a/framework/ios/module/loader/HippyFileHandler.mm b/framework/ios/module/loader/HippyFileHandler.mm index c9605ca2517..91fd0827bca 100644 --- a/framework/ios/module/loader/HippyFileHandler.mm +++ b/framework/ios/module/loader/HippyFileHandler.mm @@ -52,27 +52,38 @@ } HippyBridge *bridge = bridge_; if (!bridge || !request) { - completion(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); + completion(nil, nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); return; } NSURL *url = [request URL]; if (!url) { - completion(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); + completion(nil, nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); return; } - static NSString *defaultHippyLocalFileURLPrefixString = @"hpfile://."; - NSURL *absoluteURL = nil; - if ([[url absoluteString] hasPrefix:defaultHippyLocalFileURLPrefixString]) { - NSString *path = [[url absoluteString] substringFromIndex:[defaultHippyLocalFileURLPrefixString length] - 1]; - absoluteURL = [NSURL fileURLWithPath:path - relativeToURL:bridge.sandboxDirectory]; + + NSURL *absoluteURL = url; + static NSString *defaultHippyLocalFileURLPrefix = @"hpfile://."; + if ([[url absoluteString] hasPrefix:defaultHippyLocalFileURLPrefix]) { + NSString *path = [[url absoluteString] substringFromIndex:[defaultHippyLocalFileURLPrefix length] - 1]; + absoluteURL = [NSURL fileURLWithPath:path relativeToURL:bridge.sandboxDirectory]; } - else { - FOOTSTONE_DLOG(ERROR) << "HippyFileHandler cannot load url " << [[url absoluteString] UTF8String]; - completion(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); - return; + if ([absoluteURL isFileURL] || [absoluteURL isFileReferenceURL]) { + void (^opBlock)() = ^{ + NSError *error; + NSData *fileData = [NSData dataWithContentsOfURL:absoluteURL options:kNilOptions error:&error]; + NSURLResponse *rsp = [[NSURLResponse alloc] initWithURL:url + MIMEType:nil + expectedContentLength:fileData.length + textEncodingName:nil]; + completion(fileData, nil, rsp, error); + }; + if (queue) { + [queue addOperationWithBlock:opBlock]; + } else { + opBlock(); + } + } else { + FOOTSTONE_DLOG(ERROR) << "HippyFileHandler cannot load url " << [[absoluteURL absoluteString] UTF8String]; + completion(nil, nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:nil]); } - NSMutableURLRequest *req = [request mutableCopy]; - [req setURL:absoluteURL]; - VFSUriHandler::RequestUntrustedContent(req, queue, progress, completion, next); } diff --git a/framework/ios/module/network/HippyNetWork.mm b/framework/ios/module/network/HippyNetWork.mm index d10ffd8d02f..5fb487e19b5 100644 --- a/framework/ios/module/network/HippyNetWork.mm +++ b/framework/ios/module/network/HippyNetWork.mm @@ -78,7 +78,8 @@ @implementation HippyNetWork body:data queue:nil progress:nil - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + completionHandler:^(NSData *data, NSDictionary *userInfo, + NSURLResponse *response, NSError *error) { NSStringEncoding encoding = GetStringEncodingFromURLResponse(response); NSString *dataStr = [[NSString alloc] initWithData:data encoding:encoding]; NSUInteger statusCode = 0; diff --git a/modules/ios/image/HippyDefaultImageProvider.m b/modules/ios/image/HippyDefaultImageProvider.m index 8242a3236ae..b8d1d5ebf74 100644 --- a/modules/ios/image/HippyDefaultImageProvider.m +++ b/modules/ios/image/HippyDefaultImageProvider.m @@ -54,6 +54,12 @@ - (void)setImageData:(NSData *)imageData { } } +- (void)setDecodedImage:(UIImage *)image { + if (_image != image) { + _image = image; + } +} + - (dispatch_queue_t)prepareQueue{ return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); } diff --git a/modules/ios/image/HippyImageProviderProtocol.h b/modules/ios/image/HippyImageProviderProtocol.h index 9a7b86d3c7c..406a11271b2 100644 --- a/modules/ios/image/HippyImageProviderProtocol.h +++ b/modules/ios/image/HippyImageProviderProtocol.h @@ -45,6 +45,18 @@ */ - (void)setImageData:(NSData *)data; +/** + * Set the decoded image + * image is returned by the `- (UIImage *)image` method + * + * When using third-party component to download the image, such as `SDWebImage`, + * the third-party component usually returns the final image, not just the raw data. + * + * In this scenario, hippyImageView calls this method to set the image directly + * and skip all other processing logic. + */ +- (void)setDecodedImage:(UIImage *)image; + /** return image.If it is an animated image,return first frame */ - (UIImage *)image; diff --git a/modules/vfs/ios/VFSDefines.h b/modules/vfs/ios/HippyVFSDefines.h similarity index 64% rename from modules/vfs/ios/VFSDefines.h rename to modules/vfs/ios/HippyVFSDefines.h index c859e77306a..7acd11e6517 100644 --- a/modules/vfs/ios/VFSDefines.h +++ b/modules/vfs/ios/HippyVFSDefines.h @@ -20,9 +20,10 @@ * */ -#ifndef VFSDefines_h -#define VFSDefines_h +#ifndef HippyVFSDefines_h +#define HippyVFSDefines_h +#import #include #include @@ -33,10 +34,16 @@ constexpr char kRequestFromOC[] = "kRequestFromOC"; constexpr char kHeaderBody[] = "kHeaderBody"; constexpr char kHeaderMethod[] = "kHeaderMethod"; -class VFSUriHandler; +// The image returned in userInfo of VFSHandlerCompletionBlock +FOUNDATION_EXPORT NSString *_Nonnull const HippyVFSHandlerUserInfoImageKey; + +typedef void(^VFSHandlerProgressBlock)(NSUInteger current, NSUInteger total); +typedef void(^VFSHandlerCompletionBlock)(NSData *_Nullable data, + NSDictionary *_Nullable userInfo, + NSURLResponse *_Nullable response, + NSError * _Nullable error); -typedef void(^VFSHandlerProgressBlock)(NSUInteger, NSUInteger); -typedef void(^VFSHandlerCompletionBlock)(NSData *, NSURLResponse *, NSError *); -typedef std::shared_ptr(^VFSGetNextHandlerBlock)(); +class VFSUriHandler; +typedef std::shared_ptr(^VFSGetNextHandlerBlock)(void); -#endif /* VFSDefines_h */ +#endif /* HippyVFSDefines_h */ diff --git a/modules/vfs/ios/NSURLSessionDataProgress.h b/modules/vfs/ios/NSURLSessionDataProgress.h index 7f083ffea47..926aa9162ad 100644 --- a/modules/vfs/ios/NSURLSessionDataProgress.h +++ b/modules/vfs/ios/NSURLSessionDataProgress.h @@ -25,7 +25,7 @@ #include #include -#include "VFSDefines.h" +#include "HippyVFSDefines.h" #include "vfs/handler/uri_handler.h" NS_ASSUME_NONNULL_BEGIN diff --git a/modules/vfs/ios/NSURLSessionDataProgress.mm b/modules/vfs/ios/NSURLSessionDataProgress.mm index bc86ff0c52b..a88bbf8eedf 100644 --- a/modules/vfs/ios/NSURLSessionDataProgress.mm +++ b/modules/vfs/ios/NSURLSessionDataProgress.mm @@ -69,8 +69,6 @@ return retCode; } -typedef void (^URLSessionDataProgress)(NSUInteger, NSUInteger); -typedef void (^URLSessionDataResult)(NSData *, NSURLResponse *, NSError *); @interface NSURLSessionDataProgress () { NSUInteger _totalCount; @@ -80,8 +78,8 @@ @interface NSURLSessionDataProgress () { std::function)> _cb; NSMutableData *_currentReceivedData; - URLSessionDataProgress _progress; - URLSessionDataResult _result; + VFSHandlerProgressBlock _progress; + VFSHandlerCompletionBlock _result; BOOL _cxxType; } @@ -130,7 +128,7 @@ - (void)URLSession:(NSURLSession *)session } else { if (_result) { - _result(_currentReceivedData, task.response, error); + _result(_currentReceivedData, nil, task.response, error); } } [session finishTasksAndInvalidate]; diff --git a/modules/vfs/ios/VFSUriHandler.h b/modules/vfs/ios/VFSUriHandler.h index 5981407b49d..d4b7eb3b12a 100644 --- a/modules/vfs/ios/VFSUriHandler.h +++ b/modules/vfs/ios/VFSUriHandler.h @@ -22,7 +22,7 @@ #pragma once -#include "VFSDefines.h" +#include "HippyVFSDefines.h" #include "vfs/handler/uri_handler.h" class VFSUriLoader; diff --git a/modules/vfs/ios/VFSUriHandler.mm b/modules/vfs/ios/VFSUriHandler.mm index c2d78d1e8b5..5fce5f6f2c3 100644 --- a/modules/vfs/ios/VFSUriHandler.mm +++ b/modules/vfs/ios/VFSUriHandler.mm @@ -35,6 +35,7 @@ #include "vfs/uri_loader.h" static char *progressKey = nullptr; +NSString *const HippyVFSHandlerUserInfoImageKey = @"HippyVFSHandlerUserInfoImageKey"; static bool CheckRequestFromCPP(const std::unordered_map &headers) { auto find = headers.find(kRequestOrigin); @@ -100,7 +101,7 @@ static bool CheckRequestFromCPP(const std::unordered_mapSetRetCode(RetCodeFromNSError(error)); NSString *errorMsg = [error localizedFailureReason]; @@ -115,7 +116,12 @@ static bool CheckRequestFromCPP(const std::unordered_mapRequestUntrustedContent(req, nil, ^(NSUInteger current, NSUInteger total) { request->GetProgressCallback()(current, total); - }, ^(NSData *data, NSURLResponse *resp, NSError *error) { + }, ^(NSData *data, NSDictionary *userInfo, NSURLResponse *resp, NSError *error) { RetCode code = RetCodeFromNSError(error); string_view errMsg = NSStringToU8StringView([error localizedFailureReason]); auto map = [resp toUnorderedMap]; @@ -186,7 +192,7 @@ static bool CheckRequestFromCPP(const std::unordered_map(hippy::JobResponse::RetCode::SchemeNotRegister); NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:code userInfo:userInfo]; - completion(nil, nil, error); + completion(nil, nil, nil, error); return; } NSURLSessionDataProgress *dataProgress = [[NSURLSessionDataProgress alloc] initWithProgress:progress result:completion]; @@ -206,7 +212,7 @@ static bool CheckRequestFromCPP(const std::unordered_map(hippy::JobResponse::RetCode::ResourceNotFound); NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:code userInfo:userInfo]; - completion(nil, nil, error); + completion(nil, nil, nil, error); return; } auto progressCallback = [progress](int64_t current, int64_t total){ @@ -233,7 +239,7 @@ static bool CheckRequestFromCPP(const std::unordered_map(cb->GetRetCode()); error = [NSError errorWithDomain:NSURLErrorDomain code:code userInfo:userInfo]; } - completion(data, response, error); + completion(data, nil, response, error); } }; loader->hippy::UriLoader::RequestUntrustedContent(requestJob, responseCallback); diff --git a/modules/vfs/ios/VFSUriLoader.h b/modules/vfs/ios/VFSUriLoader.h index 5e7f145b42d..4bc86e3ef82 100644 --- a/modules/vfs/ios/VFSUriLoader.h +++ b/modules/vfs/ios/VFSUriLoader.h @@ -22,7 +22,7 @@ #import -#include "VFSDefines.h" +#include "HippyVFSDefines.h" #include "vfs/uri_loader.h" extern NSString *const VFSErrorDomain; diff --git a/modules/vfs/ios/VFSUriLoader.mm b/modules/vfs/ios/VFSUriLoader.mm index 4f94e0dbf4a..9857317db85 100644 --- a/modules/vfs/ios/VFSUriLoader.mm +++ b/modules/vfs/ios/VFSUriLoader.mm @@ -129,8 +129,7 @@ auto &scheme_handler_list = find->second; cur_convenient_it = scheme_handler_list.begin(); end_convenient_it = scheme_handler_list.end(); - } - else { + } else { cur_convenient_it = default_convenient_handlers_.begin(); end_convenient_it = default_convenient_handlers_.end(); } @@ -143,7 +142,7 @@ if (cur_convenient) { auto startPoint = footstone::TimePoint::SystemNow(); auto weak_this = weak_from_this(); - VFSHandlerCompletionBlock callback = ^(NSData *data, NSURLResponse *response, NSError *error) { + VFSHandlerCompletionBlock callback = ^(NSData *data, NSDictionary *userInfo, NSURLResponse *response, NSError *error) { auto endPoint = footstone::TimePoint::SystemNow(); string_view uri(NSStringToU16StringView([[response URL] absoluteString])); string_view msg([error.localizedDescription UTF8String]?:""); @@ -152,12 +151,11 @@ DoRequestResultCallback(uri, startPoint, endPoint, static_cast(error.code), msg); } if (completion) { - completion(data, response, error); + completion(data, userInfo, response, error); } }; cur_convenient->RequestUntrustedContent(request, operationQueue, progress, callback, block); - } - else { + } else { string_view uri = NSStringToU8StringView([requestURL absoluteString]); auto meta = NSDictionaryToStringUnorderedMap([request allHTTPHeaderFields]); auto progressCallback = [progress, operationQueue](int64_t current, int64_t total){ @@ -184,7 +182,7 @@ NSInteger code = static_cast(cb->GetRetCode()); error = [NSError errorWithDomain:NSURLErrorDomain code:code userInfo:userInfo]; } - completion(data, response, error); + completion(data, nil, response, error); } }; RequestUntrustedContent(requestJob, responseCallback); diff --git a/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm b/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm index 116fd0d2c71..a333e650478 100644 --- a/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm +++ b/renderer/native/ios/renderer/component/image/HippyImageViewManager.mm @@ -58,6 +58,15 @@ @implementation HippyImageViewManager } } +static NSOperationQueue *imageLoadOperationQueue(void) { + static NSOperationQueue *opQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + opQueue = [[NSOperationQueue alloc] init]; + }); + return opQueue; +} + - (void)loadImageSource:(NSString *)path forView:(HippyImageView *)view { if (!path || !view) { return; @@ -69,12 +78,13 @@ - (void)loadImageSource:(NSString *)path forView:(HippyImageView *)view { return; } __weak __typeof(self)weakSelf = self; - loader->RequestUntrustedContent(path, nil, nil, ^(NSData *data, NSURLResponse *response, NSError *error) { + loader->RequestUntrustedContent(path, imageLoadOperationQueue(), nil, + ^(NSData *data, NSDictionary *userInfo, NSURLResponse *response, NSError *error) { __strong __typeof(weakSelf)strongSelf = weakSelf; - HippyUIManager *renderImpl = strongSelf.bridge.uiManager; - id imageProvider = nil; - if (renderImpl) { - for (Class cls in [strongSelf.bridge imageProviderClasses]) { + HippyBridge *bridge = strongSelf.bridge; + if (bridge) { + id imageProvider = nil; + for (Class cls in [bridge imageProviderClasses]) { if ([cls canHandleData:data]) { imageProvider = [[(Class)cls alloc] init]; break; @@ -83,6 +93,12 @@ - (void)loadImageSource:(NSString *)path forView:(HippyImageView *)view { HippyAssert(imageProvider, @"Image Provider is required"); imageProvider.imageDataPath = standardizeAssetUrlString; [imageProvider setImageData:data]; + // It is possible for User to return the image directly in userInfo, + // So we need to check and skip the data decoding process if needed. + UIImage *resultImage = userInfo ? userInfo[HippyVFSHandlerUserInfoImageKey] : nil; + if (resultImage) { + [imageProvider setDecodedImage:resultImage]; + } void (^reloadImageInMain)(void) = ^{ HippyImageView *strongView = weakView; diff --git a/renderer/native/ios/renderer/component/view/HippyViewManager.mm b/renderer/native/ios/renderer/component/view/HippyViewManager.mm index b8ec3d38d86..27ea9a88c91 100644 --- a/renderer/native/ios/renderer/component/view/HippyViewManager.mm +++ b/renderer/native/ios/renderer/component/view/HippyViewManager.mm @@ -38,11 +38,6 @@ #import "VFSUriLoader.h" #import "dom/layout_node.h" -@interface HippyViewManager () { - NSUInteger _sequence; -} - -@end @implementation HippyViewManager @@ -221,8 +216,7 @@ - (void)measureInAppWindow:(NSNumber *)componentTag if (json) { NSString *status = [HippyConvert NSString:json]; view.hidden = [status isEqualToString:@"hidden"]; - } - else { + } else { view.hidden = NO; } } @@ -231,12 +225,20 @@ - (void)measureInAppWindow:(NSNumber *)componentTag if (json) { NSString *imagePath = [HippyConvert NSString:json]; [self loadImageSource:imagePath forView:view]; - } - else { + } else { view.backgroundImage = nil; } } +static NSOperationQueue *imageLoadOperationQueue(void) { + static NSOperationQueue *opQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + opQueue = [[NSOperationQueue alloc] init]; + }); + return opQueue; +} + - (void)loadImageSource:(NSString *)path forView:(HippyView *)view { if (!path || !view) { return; @@ -248,26 +250,39 @@ - (void)loadImageSource:(NSString *)path forView:(HippyView *)view { return; } __weak __typeof(self)weakSelf = self; - loader->RequestUntrustedContent(path, nil, nil, ^(NSData *data, NSURLResponse *response, NSError *error) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - HippyUIManager *renderImpl = strongSelf.bridge.uiManager; - id imageProvider = nil; - if (renderImpl) { - for (Class cls in [strongSelf.bridge imageProviderClasses]) { - if ([cls canHandleData:data]) { - imageProvider = [[(Class)cls alloc] init]; - break; - } - } - imageProvider.imageDataPath = standardizeAssetUrlString; - [imageProvider setImageData:data]; - UIImage *backgroundImage = [imageProvider image]; + loader->RequestUntrustedContent(path, imageLoadOperationQueue(), nil, + ^(NSData *data, NSDictionary *userInfo, NSURLResponse *response, NSError *error) { + // It is possible for User to return the image directly in userInfo, + // So we need to check and skip the data decoding process if needed. + UIImage *resultImage = userInfo ? userInfo[HippyVFSHandlerUserInfoImageKey] : nil; + if (resultImage) { dispatch_async(dispatch_get_main_queue(), ^{ - HippyView *strongView = weakView; + __strong HippyView *strongView = weakView; if (strongView) { - strongView.backgroundImage = backgroundImage; + strongView.backgroundImage = resultImage; } }); + } else { + __strong __typeof(weakSelf)strongSelf = weakSelf; + HippyBridge *bridge = strongSelf.bridge; + if (bridge) { + id imageProvider = nil; + for (Class cls in [bridge imageProviderClasses]) { + if ([cls canHandleData:data]) { + imageProvider = [[(Class)cls alloc] init]; + break; + } + } + imageProvider.imageDataPath = standardizeAssetUrlString; + [imageProvider setImageData:data]; + UIImage *backgroundImage = [imageProvider image]; + dispatch_async(dispatch_get_main_queue(), ^{ + HippyView *strongView = weakView; + if (strongView) { + strongView.backgroundImage = backgroundImage; + } + }); + } } }); } From 61c52e9807e7d28187b6a41c7e8b5fd0dd538eb6 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Fri, 5 Jan 2024 20:50:38 +0800 Subject: [PATCH 20/39] fix(ios): optimize perf of ComponentMap and support multi-rootView --- .../native/ios/renderer/HippyComponentMap.h | 6 ++- .../native/ios/renderer/HippyComponentMap.mm | 42 ++++++++++++------- .../native/ios/renderer/HippyUIManager.mm | 8 ++-- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/renderer/native/ios/renderer/HippyComponentMap.h b/renderer/native/ios/renderer/HippyComponentMap.h index 3d6d2cbc98c..c44552530ad 100644 --- a/renderer/native/ios/renderer/HippyComponentMap.h +++ b/renderer/native/ios/renderer/HippyComponentMap.h @@ -95,10 +95,12 @@ typedef NS_ENUM(NSUInteger, HippyComponentReferenceType) { /// so we optimize this with a temporary cache. /// /// The cache must be actively cleared after acquiring components -- (void)generateTempCacheBeforeAcquireAllStoredWeakComponents; +/// - Parameter rootTag: Root component's tag +- (void)generateTempCacheBeforeAcquireAllStoredWeakComponentsForRootTag:(NSNumber *)rootTag; /// Clear the temp dictionary cache for weak components. -- (void)clearTempCacheAfterAcquireAllStoredWeakComponents; +/// - Parameter rootTag: Root component's tag +- (void)clearTempCacheAfterAcquireAllStoredWeakComponentsForRootTag:(NSNumber *)rootTag; @end diff --git a/renderer/native/ios/renderer/HippyComponentMap.mm b/renderer/native/ios/renderer/HippyComponentMap.mm index db2e8257a6b..1fb2aab5bd7 100644 --- a/renderer/native/ios/renderer/HippyComponentMap.mm +++ b/renderer/native/ios/renderer/HippyComponentMap.mm @@ -31,8 +31,8 @@ @interface HippyComponentMap () { NSMutableDictionary *_componentsMap; std::unordered_map> _rootNodesMap; - BOOL _enableWeakComponentsTempCache; - NSDictionary *_cacheDictionaryForWeakComponents; + NSMutableDictionary *_enableWeakComponentsTempCache; + NSMutableDictionary *_cacheDictionaryForWeakComponentsMap; } @end @@ -46,6 +46,8 @@ - (instancetype)initWithComponentsReferencedType:(HippyComponentReferenceType)ty _rootComponentsMap = [NSMapTable strongToWeakObjectsMapTable]; _componentsMap = [NSMutableDictionary dictionary]; _rootNodesMap.reserve(8); + _enableWeakComponentsTempCache = [NSMutableDictionary dictionary]; + _cacheDictionaryForWeakComponentsMap = [NSMutableDictionary dictionary]; } return self; } @@ -108,9 +110,9 @@ - (void)addComponent:(__kindof id)component forRootTag:(NSNumber if (component && tag) { id map = [_componentsMap objectForKey:tag]; [map setObject:component forKey:[component hippyTag]]; - if (!_isStrongHoldAllComponents && _enableWeakComponentsTempCache && _cacheDictionaryForWeakComponents) { + if (!_isStrongHoldAllComponents && _cacheDictionaryForWeakComponentsMap[tag]) { // see `generateTempCacheBeforeAcquireAllStoredWeakComponents` - _cacheDictionaryForWeakComponents = nil; + [_cacheDictionaryForWeakComponentsMap[tag] setObject:component forKey:[component hippyTag]]; } } } @@ -122,9 +124,9 @@ - (void)removeComponent:(__kindof id)component forRootTag:(NSNum if (component && tag) { id map = [_componentsMap objectForKey:tag]; [map removeObjectForKey:[component hippyTag]]; - if (!_isStrongHoldAllComponents && _enableWeakComponentsTempCache && _cacheDictionaryForWeakComponents) { + if (!_isStrongHoldAllComponents && _cacheDictionaryForWeakComponentsMap[tag]) { // see `generateTempCacheBeforeAcquireAllStoredWeakComponents` - _cacheDictionaryForWeakComponents = nil; + [_cacheDictionaryForWeakComponentsMap[tag] removeObjectForKey:[component hippyTag]]; } } } @@ -144,11 +146,11 @@ - (void)removeComponent:(__kindof id)component forRootTag:(NSNum // Remember: // 1. The cache is automatically removed when a new component is inserted. // 2. The cache must exist only temporarily, otherwise it will affect the lifecycle of the component. - if (_enableWeakComponentsTempCache) { - if (!_cacheDictionaryForWeakComponents) { - _cacheDictionaryForWeakComponents = ((NSMapTable *)map).dictionaryRepresentation; + if (_enableWeakComponentsTempCache[tag]) { + if (!_cacheDictionaryForWeakComponentsMap[tag]) { + _cacheDictionaryForWeakComponentsMap[tag] = ((NSMapTable *)map).dictionaryRepresentation.mutableCopy; } - return _cacheDictionaryForWeakComponents; + return _cacheDictionaryForWeakComponentsMap[tag]; } else { return ((NSMapTable *)map).dictionaryRepresentation; } @@ -189,13 +191,23 @@ - (NSString *)description { #pragma mark - -- (void)generateTempCacheBeforeAcquireAllStoredWeakComponents { - _enableWeakComponentsTempCache = YES; +- (void)generateTempCacheBeforeAcquireAllStoredWeakComponentsForRootTag:(NSNumber *)rootTag { + NSAssert([self threadCheck], @"%@ method needs run in main thread", NSStringFromSelector(_cmd)); + _enableWeakComponentsTempCache[rootTag] = @YES; } -- (void)clearTempCacheAfterAcquireAllStoredWeakComponents { - _enableWeakComponentsTempCache = NO; - _cacheDictionaryForWeakComponents = nil; +- (void)clearTempCacheAfterAcquireAllStoredWeakComponentsForRootTag:(NSNumber *)rootTag { + NSAssert([self threadCheck], @"%@ method needs run in main thread", NSStringFromSelector(_cmd)); + [_enableWeakComponentsTempCache removeObjectForKey:rootTag]; + static BOOL pendingClear = NO; + if (pendingClear) { + return; + } + pendingClear = YES; + dispatch_async(dispatch_get_main_queue(), ^{ + [self->_cacheDictionaryForWeakComponentsMap removeObjectForKey:rootTag]; + pendingClear = NO; + }); } @end diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index ef676804e60..5862789c5b0 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -523,7 +523,7 @@ - (UIView *)createViewForShadowListItem:(HippyShadowView *)shadowView { [shadowView synchronousRecusivelySetCreationTypeToInstant]; UIView *listItemView = [self createViewRecursiveFromRenderObjectWithNOLock:shadowView]; - [self.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; + [self.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponentsForRootTag:shadowView.rootTag]; NSMutableSet *applierBlocks = [NSMutableSet set]; [shadowView amendLayoutBeforeMount:applierBlocks]; if (applierBlocks.count) { @@ -534,7 +534,7 @@ - (UIView *)createViewForShadowListItem:(HippyShadowView *)shadowView { block(viewRegistry, nil); } } - [self.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; + [self.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponentsForRootTag:shadowView.rootTag]; return listItemView; } @@ -734,7 +734,7 @@ - (void)flushUIBlocksOnRootNode:(std::weak_ptr)rootNode { __strong __typeof(weakSelf)strongSelf = weakSelf; if (strongSelf) { TDF_PERF_LOG("flushUIBlocksOnRootNode on main thread(random id:%u)",rand); - [strongSelf.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponents]; + [strongSelf.viewRegistry generateTempCacheBeforeAcquireAllStoredWeakComponentsForRootTag:@(rootTag)]; for (HippyViewManagerUIBlock block in previousPendingUIBlocks) { @try { // Note: viewRegistry may be modified in the block, and it may be stored internally as NSMapTable @@ -745,7 +745,7 @@ - (void)flushUIBlocksOnRootNode:(std::weak_ptr)rootNode { HippyLogError(@"Exception thrown while executing UI block: %@", exception); } } - [strongSelf.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponents]; + [strongSelf.viewRegistry clearTempCacheAfterAcquireAllStoredWeakComponentsForRootTag:@(rootTag)]; TDF_PERF_LOG("flushUIBlocksOnRootNode done, block count:%d(random id:%u)", previousPendingUIBlocks.count, rand); } }); From 2e8f9b3720f511b45fa1bf2a98eef8a69187787f Mon Sep 17 00:00:00 2001 From: wwwcg Date: Thu, 11 Jan 2024 19:38:36 +0800 Subject: [PATCH 21/39] chore(ios): fix demo build problem --- framework/examples/ios-demo/HippyDemo/Info.plist | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/framework/examples/ios-demo/HippyDemo/Info.plist b/framework/examples/ios-demo/HippyDemo/Info.plist index b04de4df03d..4ca21b866ac 100644 --- a/framework/examples/ios-demo/HippyDemo/Info.plist +++ b/framework/examples/ios-demo/HippyDemo/Info.plist @@ -12,6 +12,8 @@ $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 + CFBundleName + $(PRODUCT_NAME) CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString @@ -31,10 +33,6 @@ UILaunchStoryboardName LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - UIStatusBarHidden UIStatusBarStyle From 57face5c3ab0b40aa2a020558b59b5874c2ad8c5 Mon Sep 17 00:00:00 2001 From: lvfen <284437334@qq.com> Date: Tue, 16 Jan 2024 00:20:12 -0600 Subject: [PATCH 22/39] fix(voltron): resolve remoteServerUrl parse version id failed (#3720) * fix(voltron): resolve remoteServerUrl parse version id failed * fix(voltron): add license for flutter_render_test.dart --- framework/voltron/CHANGELOG.md | 4 +++ .../lib/inspector/dev_remote_server_data.dart | 8 ++---- framework/voltron/pubspec.yaml | 2 +- .../voltron/test/flutter_render_test.dart | 28 +++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/framework/voltron/CHANGELOG.md b/framework/voltron/CHANGELOG.md index d6663da7d66..bf8cc2ac537 100644 --- a/framework/voltron/CHANGELOG.md +++ b/framework/voltron/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.38 + +- resolve remoteServerUrl parse version id failed + ## 0.0.37 - resolve merge conflicts diff --git a/framework/voltron/lib/inspector/dev_remote_server_data.dart b/framework/voltron/lib/inspector/dev_remote_server_data.dart index be0c10322d4..4759987ed7d 100644 --- a/framework/voltron/lib/inspector/dev_remote_server_data.dart +++ b/framework/voltron/lib/inspector/dev_remote_server_data.dart @@ -53,12 +53,10 @@ class DevRemoteServerData { _wsUrl = url.queryParameters['debugUrl']; var tempPath = _path; if (tempPath != null && tempPath.startsWith("/")) { - if (tempPath.startsWith("/")) { - _path = tempPath.substring(1); // remove first character / - } - int index = tempPath.indexOf("/"); + _path = tempPath.substring(1); // remove first character / + int index = _path?.indexOf("/") ?? -1; if (index >= 0) { - _versionId = tempPath.substring(0, index); + _versionId = _path?.substring(0, index); } } LogUtils.i( diff --git a/framework/voltron/pubspec.yaml b/framework/voltron/pubspec.yaml index 4a4629e7e11..e2f23382aa6 100644 --- a/framework/voltron/pubspec.yaml +++ b/framework/voltron/pubspec.yaml @@ -22,7 +22,7 @@ name: voltron description: A flutter plugin project to render hippy page. -version: 0.0.37 +version: 0.0.38 homepage: https://hippyjs.org repository: https://github.com/Tencent/Hippy diff --git a/framework/voltron/test/flutter_render_test.dart b/framework/voltron/test/flutter_render_test.dart index a7e29218a13..867cb3a4fd3 100644 --- a/framework/voltron/test/flutter_render_test.dart +++ b/framework/voltron/test/flutter_render_test.dart @@ -1,4 +1,25 @@ +// +// Tencent is pleased to support the open source community by making +// Hippy available. +// +// Copyright (C) 2022 THL A29 Limited, a Tencent company. +// All rights reserved. +// +// 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 'package:flutter_test/flutter_test.dart'; +import 'package:voltron/inspector/dev_remote_server_data.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -15,4 +36,11 @@ void main() { Function function = addNum; expect(Function.apply(function, [1, 2]), 3); }); + + test('dev_server_data', () { + final data = DevRemoteServerData('http://1.1.1.1:8080/abcdefg/index.bundle?debugUrl=ws%3A%2F%2F0.0.0.0%3A8080%2Fdebugger-proxy'); + expect(data.isValid(), true); + expect(data.getVersionId(), 'abcdefg'); + expect(data.getHost(), '1.1.1.1:8080'); + }); } From 9e150d6c762fee6e904a813125d3157a004b60fe Mon Sep 17 00:00:00 2001 From: zealotchen <92966734+zealotchen0@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:07:57 +0800 Subject: [PATCH 23/39] feat(vue): update postcss dependencies (#3723) * feat(vue-loader): css scoped compile to class selector * feat(vue): update postcss dependencies --- driver/js/package.json | 3 ++- driver/js/packages/hippy-vue-loader/package.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/driver/js/package.json b/driver/js/package.json index 34f52399fe8..fdd44ef6111 100644 --- a/driver/js/package.json +++ b/driver/js/package.json @@ -77,7 +77,8 @@ "typescript": "^4.8.3", "typescript-transform-paths": "^3.3.1", "vue": "^2.6.14", - "watch": "^0.13.0" + "watch": "^0.13.0", + "postcss-class-prefix": "~0.3.0" }, "_moduleAliases": { "vue": "node_modules/vue/src/core/index", diff --git a/driver/js/packages/hippy-vue-loader/package.json b/driver/js/packages/hippy-vue-loader/package.json index e6b21e8c1ec..038336b1d41 100644 --- a/driver/js/packages/hippy-vue-loader/package.json +++ b/driver/js/packages/hippy-vue-loader/package.json @@ -28,7 +28,8 @@ "dependencies": { "@vue/component-compiler-utils": "^3.1.0", "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0" + "loader-utils": "^1.1.0", + "postcss-class-prefix": "~0.3.0" }, "devDependencies": { "cache-loader": "^2.0.1", From df6c5bf4ad54aa1de333cc6ea54ca87bb251684a Mon Sep 17 00:00:00 2001 From: birdguo Date: Fri, 19 Jan 2024 17:58:40 +0800 Subject: [PATCH 24/39] feature(vue-next): hippy vue next ssr for 3.0 (#3539) * feat(vue-next): commit ssr init version * feat(vue-next): remove unused method & fix ts type issue * feat(vue-next): optimize build file types & update doc * feat(vue-next): ssr support commit for library & demo * fix(vue-next): fix eslint issue * fix(vue-next): compatible hippy 3.x node operate method & ui * fix(vue-next): remove unused code * fix(vue-next): fix ssr demo issue * fix(vue-next): fix div demo issue & native background android issue * docs(vue-next): add new vue-next ssr docs --- docs/api/hippy-vue/vue3.md | 108 +++- .../assets/img/hippy-vue-next-ssr-arch-cn.png | Bin 0 -> 125756 bytes driver/js/.eslintrc.js | 3 + .../hippy-vue-next-demo/src/main-native.ts | 1 + .../hippy-vue-next-ssr-demo/.gitignore | 21 + .../examples/hippy-vue-next-ssr-demo/.npmrc | 1 + .../hippy-vue-next-ssr-demo/README.md | 46 ++ .../examples/hippy-vue-next-ssr-demo/app.d.ts | 10 + .../hippy-vue-next-ssr-demo/package.json | 83 +++ .../scripts/env-polyfill.js | 61 ++ .../scripts/hippy-webpack.dev.js | 179 ++++++ .../scripts/hippy-webpack.web-renderer.dev.js | 165 +++++ .../scripts/hippy-webpack.web-renderer.js | 166 +++++ .../webpack-ssr-config/client.android.js | 3 + .../client.android.vendor.js | 108 ++++ .../scripts/webpack-ssr-config/client.base.js | 181 ++++++ .../scripts/webpack-ssr-config/client.dev.js | 195 ++++++ .../webpack-ssr-config/client.entry.js | 97 +++ .../scripts/webpack-ssr-config/client.ios.js | 3 + .../webpack-ssr-config/client.ios.vendor.js | 108 ++++ .../scripts/webpack-ssr-config/server.dev.js | 186 ++++++ .../webpack-ssr-config/server.entry.js | 177 ++++++ .../scripts/webpack.ssr.build.js | 109 ++++ .../scripts/webpack.ssr.dev.js | 39 ++ .../hippy-vue-next-ssr-demo/server.ts | 83 +++ .../hippy-vue-next-ssr-demo/src/app.vue | 223 +++++++ .../src/assets/defaultSource.jpg | Bin 0 -> 42281 bytes .../src/assets/hippyLogoWhite.png | Bin 0 -> 24639 bytes .../src/assets/logo.png | Bin 0 -> 6849 bytes .../hippy-vue-next-ssr-demo/src/back-icon.png | Bin 0 -> 2166 bytes .../src/components/demo/demo-button.vue | 130 ++++ .../src/components/demo/demo-div.vue | 324 ++++++++++ .../components/demo/demo-dynamicimport.vue | 101 +++ .../src/components/demo/demo-iframe.vue | 126 ++++ .../src/components/demo/demo-img.vue | 165 +++++ .../src/components/demo/demo-input.vue | 268 ++++++++ .../src/components/demo/demo-list.vue | 322 ++++++++++ .../src/components/demo/demo-p.vue | 554 +++++++++++++++++ .../src/components/demo/demo-ripple-div.vue | 99 +++ .../components/demo/demo-set-native-props.vue | 123 ++++ .../src/components/demo/demo-shadow.vue | 205 ++++++ .../src/components/demo/demo-textarea.vue | 129 ++++ .../src/components/demo/demo-turbo.vue | 130 ++++ .../src/components/demo/demo-websocket.vue | 202 ++++++ .../src/components/demo/demoTurbo.ts | 29 + .../dynamicImport/async-component-http.vue | 36 ++ .../dynamicImport/async-component-local.vue | 33 + .../src/components/demo/index.ts | 65 ++ .../src/components/list-items/index.ts | 5 + .../src/components/list-items/mock.ts | 43 ++ .../src/components/list-items/style1.vue | 38 ++ .../src/components/list-items/style2.vue | 38 ++ .../src/components/list-items/style5.vue | 36 ++ .../native-demo/animations/color-change.vue | 104 ++++ .../native-demo/animations/cubic-bezier.vue | 100 +++ .../native-demo/animations/down-vote-face.png | Bin 0 -> 341 bytes .../native-demo/animations/loop.vue | 135 ++++ .../native-demo/animations/up-vote-eye.png | Bin 0 -> 333 bytes .../native-demo/animations/up-vote-mouth.png | Bin 0 -> 598 bytes .../native-demo/animations/vote-down.vue | 197 ++++++ .../native-demo/animations/vote-up.vue | 196 ++++++ .../components/native-demo/demo-animation.vue | 196 ++++++ .../components/native-demo/demo-dialog.vue | 223 +++++++ .../native-demo/demo-nested-scroll.vue | 155 +++++ .../native-demo/demo-pull-header-footer.vue | 416 +++++++++++++ .../components/native-demo/demo-swiper.vue | 181 ++++++ .../native-demo/demo-vue-native.vue | 588 ++++++++++++++++++ .../components/native-demo/demo-waterfall.vue | 302 +++++++++ .../src/components/native-demo/index.ts | 45 ++ .../hippy-vue-next-ssr-demo/src/env.ts | 19 + .../hippy-vue-next-ssr-demo/src/extend.ts | 28 + .../src/main-native.ts | 114 ++++ .../src/main-server.ts | 56 ++ .../hippy-vue-next-ssr-demo/src/main-web.ts | 22 + .../hippy-vue-next-ssr-demo/src/main.ts | 149 +++++ .../src/pages/menu.vue | 141 +++++ .../src/pages/remote-debug.vue | 162 +++++ .../hippy-vue-next-ssr-demo/src/routes.ts | 38 ++ .../src/ssr-node-ops.ts | 533 ++++++++++++++++ .../hippy-vue-next-ssr-demo/src/store.ts | 24 + .../hippy-vue-next-ssr-demo/src/util.ts | 60 ++ .../src/webpack-plugin.ts | 30 + .../hippy-vue-next-ssr-demo/tsconfig.json | 35 ++ driver/js/package.json | 5 +- .../hippy-vue-next-compiler-ssr/README.md | 6 + .../__test__/component.test.ts | 132 ++++ .../__test__/element.test.ts | 245 ++++++++ .../__test__/native-component.test.ts | 26 + .../__test__/setup.ts | 19 + .../__test__/slot-out.test.ts | 56 ++ .../__test__/utils.ts | 38 ++ .../__test__/vue-built-in.test.ts | 58 ++ .../api-extractor.json | 38 ++ .../package-lock.json | 115 ++++ .../hippy-vue-next-compiler-ssr/package.json | 49 ++ .../hippy-vue-next-compiler-ssr/src/errors.ts | 54 ++ .../hippy-vue-next-compiler-ssr/src/index.ts | 122 ++++ .../src/runtimeHelpers.ts | 70 +++ .../src/ssrCodegenTransform.ts | 262 ++++++++ .../src/transforms/ssrInjectCssVars.ts | 91 +++ .../transforms/ssrInjectFallthroughAttrs.ts | 111 ++++ .../src/transforms/ssrTransformComponent.ts | 400 ++++++++++++ .../src/transforms/ssrTransformElement.ts | 417 +++++++++++++ .../src/transforms/ssrTransformSlotOutlet.ts | 113 ++++ .../src/transforms/ssrTransformSuspense.ts | 102 +++ .../src/transforms/ssrTransformTeleport.ts | 93 +++ .../transforms/ssrTransformTransitionGroup.ts | 128 ++++ .../src/transforms/ssrVFor.ts | 70 +++ .../src/transforms/ssrVIf.ts | 102 +++ .../src/transforms/ssrVModel.ts | 184 ++++++ .../src/transforms/ssrVShow.ts | 54 ++ .../hippy-vue-next-server-renderer/README.md | 6 + .../__test__/native.test.ts | 102 +++ .../__test__/render-attr.test.ts | 51 ++ .../__test__/render-vnode.test.ts | 528 ++++++++++++++++ .../__test__/renderer.test.ts | 148 +++++ .../__test__/setup.ts | 19 + .../__test__/util.test.ts | 33 + .../api-extractor.json | 38 ++ .../package-lock.json | 435 +++++++++++++ .../package.json | 54 ++ .../src/index.ts | 117 ++++ .../src/native.ts | 103 +++ .../src/render-attrs.ts | 102 +++ .../src/render-component.ts | 48 ++ .../src/render-vnode.ts | 502 +++++++++++++++ .../src/renderer.ts | 430 +++++++++++++ .../src/util.ts | 80 +++ .../__test__/setup.ts | 80 +++ .../__test__/style-match/css-append.test.ts | 128 ++++ .../__test__/style-match}/index.test.ts | 119 +++- .../__test__/style-match}/parser.test.ts | 12 +- .../style-parser/color-parser.test.ts | 68 ++ .../__test__/style-parser/css-parser.test.ts | 118 ++++ .../hippy-vue-next-style-parser/package.json | 25 +- .../hippy-vue-next-style-parser/src/index.ts | 6 + .../src/style-match/css-append.ts | 385 ++++++++++++ .../src/style-match/css-map.ts | 247 ++++++++ .../src/style-match}/css-selectors-match.ts | 40 +- .../src/style-match}/css-selectors.ts | 119 ++-- .../src/style-match/index.ts | 71 +++ .../src/style-match}/parser.ts | 5 +- .../__test__/built-in-component.test.ts | 8 +- .../__test__/native-component/index.test.ts | 45 ++ .../hippy-vue-next/__test__/node-ops.test.ts | 7 +- .../__test__/patch-prop.test.ts | 7 +- .../__test__/runtime/component/index.test.ts | 7 +- .../runtime/document/hippy-document.test.ts | 7 +- .../before-render-to-native-hook.test.ts | 3 + .../element/hippy-comment-element.test.ts | 3 + .../runtime/element/hippy-element.test.ts | 76 ++- .../element/hippy-input-element.test.ts | 19 +- .../element/hippy-list-element.test.ts | 3 + .../__test__/runtime/event/event-bus.test.ts | 7 +- .../event/hippy-event-dispatcher.test.ts | 9 +- .../runtime/event/hippy-event-target.test.ts | 13 +- .../runtime/event/hippy-event.test.ts | 7 +- .../__test__/runtime/native/index.test.ts | 7 +- .../__test__/runtime/node/hipyy-node.test.ts | 34 +- .../__test__/runtime/render/index.test.ts | 8 +- .../__test__/runtime/text/hippy-text.test.ts | 4 + .../__test__/util/event.test.ts | 6 +- .../hippy-vue-next/__test__/util/i18n.test.ts | 7 +- .../__test__/util/index.test.ts | 13 +- .../util/{node-cache.test.ts => node.test.ts} | 6 +- .../hippy-vue-next/__test__/util/rem.test.ts | 7 +- .../__test__/util/screen.test.ts | 7 +- .../js/packages/hippy-vue-next/package.json | 7 +- .../hippy-vue-next/src/config/index.ts | 6 + .../packages/hippy-vue-next/src/hydration.ts | 80 +++ .../js/packages/hippy-vue-next/src/index.ts | 121 ++-- .../src/native-component/animation.ts | 8 + .../src/native-component/index.ts | 27 + .../src/native-component/swiper.ts | 11 +- .../runtime/element/hippy-comment-element.ts | 9 +- .../src/runtime/element/hippy-element.ts | 126 +++- .../runtime/element/hippy-input-element.ts | 16 - .../src/runtime/native/index.ts | 36 +- .../src/runtime/node/hippy-node.ts | 47 +- .../src/runtime/style/css-map.ts | 71 --- .../hippy-vue-next/src/runtime/style/index.ts | 136 ---- .../src/runtime/text/hippy-text.ts | 8 +- .../src/runtime/websocket/websocket.ts | 2 +- .../hippy-vue-next/src/types/index.ts | 32 + .../packages/hippy-vue-next/src/util/index.ts | 25 +- driver/js/scripts/vue-next-configs.js | 136 ++-- driver/js/tsconfig.json | 2 + 187 files changed, 17828 insertions(+), 583 deletions(-) create mode 100644 docs/assets/img/hippy-vue-next-ssr-arch-cn.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/.gitignore create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/.npmrc create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/README.md create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/app.d.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/package.json create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/server.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/assets/hippyLogoWhite.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/assets/logo.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/back-icon.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-img.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-input.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-list.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-p.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-ripple-div.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-set-native-props.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-shadow.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-textarea.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-turbo.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-websocket.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demoTurbo.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/dynamicImport/async-component-http.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/dynamicImport/async-component-local.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/index.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/list-items/index.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/list-items/mock.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/list-items/style1.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/list-items/style2.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/list-items/style5.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/color-change.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/cubic-bezier.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/down-vote-face.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/loop.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/up-vote-eye.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/up-vote-mouth.png create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/vote-down.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/vote-up.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-animation.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-dialog.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-nested-scroll.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-pull-header-footer.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-swiper.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-vue-native.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-waterfall.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/components/native-demo/index.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/env.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/extend.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/main-native.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/main-server.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/main-web.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/main.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/pages/menu.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/pages/remote-debug.vue create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/routes.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/ssr-node-ops.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/store.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/util.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/src/webpack-plugin.ts create mode 100644 driver/js/examples/hippy-vue-next-ssr-demo/tsconfig.json create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/README.md create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/component.test.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/element.test.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/native-component.test.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/setup.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/slot-out.test.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/utils.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/__test__/vue-built-in.test.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/api-extractor.json create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/package-lock.json create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/package.json create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/errors.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/index.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/runtimeHelpers.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/ssrCodegenTransform.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrInjectCssVars.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrInjectFallthroughAttrs.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformComponent.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformElement.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformSlotOutlet.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformSuspense.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformTeleport.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVFor.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVIf.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVModel.ts create mode 100644 driver/js/packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVShow.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/README.md create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/native.test.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/render-attr.test.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/render-vnode.test.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/renderer.test.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/setup.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/__test__/util.test.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/api-extractor.json create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/package-lock.json create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/package.json create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/index.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/native.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/render-attrs.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/render-component.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/render-vnode.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/renderer.ts create mode 100644 driver/js/packages/hippy-vue-next-server-renderer/src/util.ts create mode 100644 driver/js/packages/hippy-vue-next-style-parser/__test__/setup.ts create mode 100644 driver/js/packages/hippy-vue-next-style-parser/__test__/style-match/css-append.test.ts rename driver/js/packages/{hippy-vue-next/__test__/runtime/style => hippy-vue-next-style-parser/__test__/style-match}/index.test.ts (80%) rename driver/js/packages/{hippy-vue-next/__test__/runtime/style => hippy-vue-next-style-parser/__test__/style-match}/parser.test.ts (92%) create mode 100644 driver/js/packages/hippy-vue-next-style-parser/__test__/style-parser/color-parser.test.ts create mode 100644 driver/js/packages/hippy-vue-next-style-parser/__test__/style-parser/css-parser.test.ts create mode 100644 driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-append.ts create mode 100644 driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-map.ts rename driver/js/packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/css-selectors-match.ts (84%) rename driver/js/packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/css-selectors.ts (82%) create mode 100644 driver/js/packages/hippy-vue-next-style-parser/src/style-match/index.ts rename driver/js/packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/parser.ts (98%) create mode 100644 driver/js/packages/hippy-vue-next/__test__/native-component/index.test.ts rename driver/js/packages/hippy-vue-next/__test__/util/{node-cache.test.ts => node.test.ts} (96%) create mode 100644 driver/js/packages/hippy-vue-next/src/hydration.ts delete mode 100644 driver/js/packages/hippy-vue-next/src/runtime/style/css-map.ts delete mode 100644 driver/js/packages/hippy-vue-next/src/runtime/style/index.ts diff --git a/docs/api/hippy-vue/vue3.md b/docs/api/hippy-vue/vue3.md index cc199bb8215..f16edd989bd 100644 --- a/docs/api/hippy-vue/vue3.md +++ b/docs/api/hippy-vue/vue3.md @@ -154,6 +154,106 @@ const router: Router = createRouter({ }); ``` +# 服务端渲染 + +@hippy/vue-next 现已支持服务端渲染,具体代码可以查看[示例项目](https://github.com/Tencent/Hippy/tree/main/examples/hippy-vue-next-ssr-demo)中的 SSR +部分,关于 Vue SSR 的实现及原理,可以参考[官方文档](https://cn.vuejs.org/guide/scaling-up/ssr.html)。 + +## 如何使用SSR + +请参考[示例项目](https://github.com/Tencent/Hippy/tree/main/examples/hippy-vue-next-ssr-demo)说明文档中的 How To Use SSR + +## 实现原理 + +### SSR 架构图 + +hippy-vue-next SSR 架构图 + +### 详细说明 + +@hippy/vue-next SSR 的实现涉及到了编译时,客户端运行时,以及服务端运行时三个运行环境。在 vue-next ssr的基础上,我们开发了 @hippy/vue-next-server-renderer +用于服务端运行时节点的渲染,开发了 @hippy/vue-next-compiler-ssr 用于编译时 vue 模版文件的编译。以及 @hippy/vue-next-style-parser 用于服务端渲染得到的 +Native Node List 的样式插入。下面我们通过一个模版的编译和运行时过程来说明 @hippy/vue-next SSR 做了哪些事情 + +我们有形如`

`的一段模版 + +- 编译时 + + 模版经过 @hippy/vue-next-compiler-ssr 的处理,得到了形如 + + ```javascript + _push(`{"id":${ssrGetUniqueId()},"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[]},`) + ``` + + 的 render function + +- 服务端运行时 + + 在服务端运行时,编译时得到的 render function 执行后得到了对应节点的 json object。注意 render function 中的 + ssrGetUniqueId 方法,是在 @hippy/vue-next-server-renderer 中提供的,在这里 server-renderer 还会对 + 节点的属性值等进行处理,最后得到 Native Node 的 json object + + ```javascript + { "id":1,"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[] } + ``` + + > 对于手写的非 sfc 模版的渲染函数,在 compiler 中无法处理,也是在 server-renderer 中执行的 + +- 客户端运行时 + + 在客户端运行时,通过 @hippy/vue-next-style-parser,给服务端返回的节点插入样式,并直接调用 hippy native 提供的 + native API,将返回的 Native Node 对象作为参数传入,并完成节点的渲染上屏。 完成节点上屏之后,再通过系统提供的 + global.dynamicLoad 异步加载客户端异步版 jsBundle,完成客户端 Hydrate 并执行后续流程。 + +## 初始化差异 + +SSR 版本的 Demo 初始化与异步版的初始化有一些差异部分,这里对其中的差异部分做一个详细的说明 + +- src/main-native.ts 变更 + +1. 使用 createSSRApp 替换之前的 createApp,createApp 仅支持 CSR 渲染,而 createSSRApp 同时支持 CSR 和 SSR +2. 在初始化时候新增了 ssrNodeList 参数,作为 Hydrate 的初始化节点列表。这里我们服务端返回的初始化节点列表保存在了 global.hippySSRNodes 中,并将其作为参数在createSSRApp时传入 +3. 将 app.mount 放到 router.isReady 完成后调用,因为如果不等待路由完成,会与服务端渲染的节点有所不同,导致 Hydrate 时报错 + +```javascript +- import { createApp } from '@hippy/vue-next'; ++ import { createSSRApp } from '@hippy/vue-next'; +- const app: HippyApp = createApp(App, { ++ const app: HippyApp = createSSRApp(App, { + // ssr rendered node list, use for hydration ++ ssrNodeList: global.hippySSRNodes, +}); ++ router.isReady().then(() => { ++ // mount app ++ app.mount('#root'); ++ }); +``` + +- src/main-server.ts 新增 + +main-server.ts 是在服务端运行的业务 jsBundle,因此不需要做代码分割。整体构建为一个 bundle 即可。其核心功能就是在服务端完成首屏渲染逻辑,并将得到的首屏 Hippy 节点进行处理,插入节点属性和 store(如果存在)后返回, +以及返回当前已生成节点的最大 uniqueId 供客户端后续使用。 + +>注意,服务端代码是同步执行的,如果有数据请求走了异步方式,可能会出现还没有拿到数据,请求就已经返回了的情况。对于这个问题,Vue SSR 提供了专用 API 来处理这个问题: +>[onServerPrefetch](https://cn.vuejs.org/api/composition-api-lifecycle.html#onserverprefetch)。 +>在 [Demo](https://github.com/Tencent/Hippy/blob/main/examples/hippy-vue-next-ssr-demo/src/app.vue) 的 app.vue 中也有 onServerPrefetch 的使用示例 + +- server.ts 新增 + +server.ts 是服务端执行的入口文件,其作用是提供 Web Server,接收客户端的 SSR CGI 请求,并将结果作为响应数据返回给客户端,包括了渲染节点列表,store,以及全局的样式列表。 + +- src/main-client.ts 新增 + +main-client.ts 是客户端执行的入口文件,与之前纯客户端渲染不同,SSR的客户端入口文件仅包含了获取首屏节点请求、插入首屏节点样式、以及将节点插入终端完成渲染的相关逻辑。 + +- src/ssr-node-ops.ts 新增 + +ssr-node-ops.ts 封装了不依赖 @hippy/vue-next 运行时的 SSR 节点的插入,更新,删除等操作逻辑 + +- src/webpack-plugin.ts 新增 + +webpack-plugin.ts 封装了 SSR 渲染所需 Hippy App 的初始化逻辑 + # 其他差异说明 目前 `@hippy/vue-next` 与 `@hippy/vue` 功能上基本对齐,不过在 API 方面与 @hippy/vue 有一些区别,以及还有一些问题还没有解决,这里做些说明: @@ -266,7 +366,7 @@ const router: Router = createRouter({ } ``` - 更多信息可以参考 demo 里的 [extend.ts](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-next-demo/src/extend.ts). + 更多信息可以参考 demo 里的 [extend.ts](https://github.com/Tencent/Hippy/blob/main/examples/hippy-vue-next-demo/src/extend.ts). - whitespace 处理 @@ -305,6 +405,10 @@ const router: Router = createRouter({ `` 组件的第一个子元素不能设置 `{ position: absolute }` 样式,如果想将 `` 内容铺满全屏,可以给第一个子元素设置 `{ flex: 1 }` 样式或者显式设置 width 和 height 数值。这与 Hippy3.0 的逻辑保持一致。 +- 书写 SSR 友好的代码 + + 因 SSR 的渲染方式和生命周期等与客户端渲染方式有一些差异,因此需要在代码编写过程中注意,这里可以参考[Vue官方的SSR指引](https://cn.vuejs.org/guide/scaling-up/ssr.html#writing-ssr-friendly-code) + # 示例 -更多使用请参考 [示例项目](https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-demo). +更多使用请参考 [示例项目](https://github.com/Tencent/Hippy/tree/main/examples/hippy-vue-next-demo). diff --git a/docs/assets/img/hippy-vue-next-ssr-arch-cn.png b/docs/assets/img/hippy-vue-next-ssr-arch-cn.png new file mode 100644 index 0000000000000000000000000000000000000000..df95922560ea28ca27da9e9d024a30964e48eed4 GIT binary patch literal 125756 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 Because our server listening port 8080, so if you are using android device, you should run `adb reverse tcp:8080 tcp:8080` +> to forward mobile device port to pc port, iOS simulator doesn't need this step. + +ensure you were at `examples/hippy-vue-next-ssr-demo`. + +#### Development + +1. run `npm run ssr:dev-build` to build client entry & client bundle, then running hippy debug server +2. run `npm run ssr:dev-server` to build server bundle and start SSR web server to listen port **8080**. +3. debug your app with [reference](https://hippyjs.org/en-us/#/guide/debug) +> You can change server listen port 8080 in `server.ts` by your self, but you also need change request port 8080 in +> `src/main-client.ts` and modify the adb reverse port, ensure port is same at three place + +#### Production + +1. run `npm run ssr:prod-build` to build client entry, server bundle, client bundle +2. run `npm run ssr:prod-server` to start SSR web server to listen port **8080**. +3. test your app +> In production, you can use process manage tool to manage your NodeJs process, like pm2. +> +> And you should deploy you web server at real server with real domain, then you can request +> SSR cgi like https://xxx.com/getSsrFirstScreenData +> + +#### Tips +> Usage of non SSR is [here](https://hippyjs.org/en-us/#/guide/integration) diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/app.d.ts b/driver/js/examples/hippy-vue-next-ssr-demo/app.d.ts new file mode 100644 index 00000000000..d614236bf60 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/app.d.ts @@ -0,0 +1,10 @@ +declare module '*.jpg'; +declare module '*.png'; +declare module '*.vue' { + import { defineComponent } from 'vue'; + const Component: ReturnType; + export default Component; +} + +type NeedToTyped = any; + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/package.json b/driver/js/examples/hippy-vue-next-ssr-demo/package.json new file mode 100644 index 00000000000..367d4bffe81 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/package.json @@ -0,0 +1,83 @@ +{ + "name": "hippy-vue-next-demo", + "version": "3.0.0", + "description": "A SSR Demo Example For Hippy-Vue-Next Library To Show.", + "private": true, + "webMain": "./src/main-web.ts", + "nativeMain": "./src/main-native.ts", + "serverMain": "./src/main-server.ts", + "serverEntry": "./server.ts", + "ssrMain": "./src/main.ts", + "repository": "https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-demo", + "license": "Apache-2.0", + "author": "OpenHippy Team", + "scripts": { + "hippy:dev": "node ./scripts/env-polyfill.js hippy-dev -c ./scripts/hippy-webpack.dev.js", + "web:dev": "npm run hippy:dev & node ./scripts/env-polyfill.js webpack serve --config ./scripts/hippy-webpack.web-renderer.dev.js", + "web:build": "node ./scripts/env-polyfill.js webpack --config ./scripts/hippy-webpack.web-renderer.js", + "ssr:dev-client": "node ./scripts/env-polyfill.js hippy-dev -c ./scripts/webpack-ssr-config/client.dev.js", + "ssr:dev-server": "node ./scripts/env-polyfill.js && node ./scripts/webpack.ssr.dev.js", + "ssr:prod-build": "node ./scripts/webpack.ssr.build.js", + "ssr:prod-server": "node ./dist/server/index.js --mode production" + }, + "dependencies": { + "@hippy/vue-router-next-history": "latest", + "@hippy/web-renderer": "latest", + "@hippy/vue-next": "latest", + "@hippy/vue-next-server-renderer": "file:../../packages/hippy-vue-next-server-renderer", + "@hippy/vue-next-style-parser": "file:../../packages/hippy-vue-next-style-parser", + "@vue/runtime-core": "^3.2.46", + "@vue/shared": "^3.2.46", + "core-js": "^3.20.2", + "vue": "^3.2.46", + "vue-router": "^4.0.12", + "express": "^4.18.2", + "pinia": "2.0.30" + }, + "devDependencies": { + "@babel/core": "^7.12.0", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-decorators": "^7.10.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/polyfill": "^7.12.0", + "@babel/preset-env": "^7.12.0", + "@babel/runtime": "^7.16.0", + "@hippy/debug-server-next": "latest", + "@hippy/hippy-dynamic-import-plugin": "^2.0.0", + "@hippy/hippy-hmr-plugin": "^0.1.0", + "@hippy/rejection-tracking-polyfill": "^1.0.0", + "@hippy/vue-css-loader": "^2.0.1", + "@vitejs/plugin-vue": "^1.9.4", + "@hippy/vue-next-compiler-ssr": "file:../../packages/hippy-vue-next-compiler-ssr", + "@types/shelljs": "^0.8.5", + "@vue/cli-service": "^4.5.19", + "@vue/compiler-sfc": "^3.2.46", + "babel-loader": "^8.1.0", + "case-sensitive-paths-webpack-plugin": "^2.2.0", + "chokidar": "^3.5.3", + "clean-webpack-plugin": "^4.0.0", + "webpack-manifest-plugin": "^4.1.1", + "cross-env": "^7.0.3", + "cross-env-os": "^7.1.1", + "esbuild": "^0.13.14", + "esbuild-loader": "^2.18.0", + "file-loader": "^4.3.0", + "less": "^4.1.2", + "less-loader": "^7.1.0", + "shelljs": "^0.8.5", + "terser": "^4.8.0", + "ts-loader": "^8.4.0", + "@types/express": "^4.17.17", + "url-loader": "^4.0.0", + "vue-loader": "^17.0.0", + "webpack": "^4.46.0", + "webpack-cli": "^4.7.2" + }, + "engines": { + "node": ">=15" + } +} diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js new file mode 100644 index 00000000000..11a413eef85 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js @@ -0,0 +1,61 @@ +const { exec } = require('shelljs'); + +const runScript = (scriptStr) => { + console.log(`Full command execute: "${scriptStr}"`); + const result = exec(scriptStr, { stdio: 'inherit' }); + if (result.code !== 0) { + console.error(`❌ Execute cmd - "${scriptStr}" error: ${result.stderr}`); + process.exit(1); + } +}; + +const toNum = (originalNum) => { + const num = `${originalNum}`; + const versionList = num.split('.'); + const currentSplitLength = versionList.length; + if (currentSplitLength !== 4) { + let index = currentSplitLength; + while (index < 4) { + versionList.push('0'); + index += 1; + } + } + const r = ['0000', '000', '00', '0', '']; + for (let i = 0; i < versionList.length; i += 1) { + let len = versionList[i].length; + if (len > 4) { + len = 4; + versionList[i] = versionList[i].slice(0, 4); + } + versionList[i] = r[len] + versionList[i]; + } + return versionList.join(''); +}; + +const versionCompare = (targetVer, currentVer) => { + if (!targetVer || !currentVer) return 1; + const numA = toNum(currentVer); + const numB = toNum(targetVer); + if (numA === numB) { + return 0; + } + return numA < numB ? -1 : 1; +}; + +const LEGACY_OPENSSL_VERSION = '3.0.0'; +const scriptString = process.argv.slice(2).join(' '); +let envPrefixStr = ''; + +console.log(`Start to execute cmd: "${scriptString}"`); +console.log(`Current openssl version: ${process.versions.openssl}`); + +const result = /^(\d+\.\d+\.\d+).*$/.exec(process.versions.openssl.toString().trim()); +if (result && result[1]) { + const currentVersion = result[1]; + const compareResult = versionCompare(LEGACY_OPENSSL_VERSION, currentVersion); + if (compareResult >= 0) { + envPrefixStr += 'NODE_OPTIONS=--openssl-legacy-provider'; + } +} + +runScript(`${envPrefixStr} ${scriptString}`); // start to execute cmd diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js new file mode 100644 index 00000000000..1d5a65f07a7 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js @@ -0,0 +1,179 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const pkg = require('../package.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + + +module.exports = { + mode: 'development', + devtool: 'eval-source-map', + watch: true, + watchOptions: { + aggregateTimeout: 1500, + }, + devServer: { + // remote debug server address + remote: { + protocol: 'http', + host: '127.0.0.1', + port: 38989, + }, + // support inspect vue components, store and router, by default is disabled + vueDevtools: false, + // support debug multiple project with only one debug server, by default is set false. + multiple: false, + // by default hot and liveReload option are true, you could set only liveReload to true + // to use live reload + hot: true, + liveReload: true, + client: { + overlay: false, + }, + devMiddleware: { + writeToDisk: true, + }, + }, + entry: { + index: ['@hippy/rejection-tracking-polyfill', path.resolve(pkg.nativeMain)], + }, + output: { + filename: 'index.bundle', + // chunkFilename: '[name].[chunkhash].js', + strictModuleExceptionHandling: true, + path: path.resolve('./dist/dev/'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new VueLoaderPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file while setting devtool to false + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + new CleanWebpackPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'esbuild-loader', + options: { + target: 'es2015', + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js new file mode 100644 index 00000000000..7fc0ec81035 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js @@ -0,0 +1,165 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +// const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const pkg = require('../package.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +const platform = 'web'; +module.exports = { + mode: 'development', + bail: true, + devServer: { + port: 3000, + hot: true, + liveReload: true, + }, + devtool: 'source-map', + entry: { + index: ['regenerator-runtime', path.resolve(pkg.webMain)], + }, + output: { + // filename: `[name].${platform}.js`, + filename: 'index.bundle.js', + path: path.resolve(`./dist/${platform}/`), + strictModuleExceptionHandling: true, + globalObject: '(0, eval)("this")', + }, + plugins: [ + new VueLoaderPlugin(), + new HtmlWebpackPlugin({ + inject: true, + scriptLoading: 'blocking', + template: path.resolve('./public/web-renderer.html'), + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: platform, + }), + // new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file while setting devtool to false + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + new CleanWebpackPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'esbuild-loader', + options: { + target: 'es2015', + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js new file mode 100644 index 00000000000..4e2636dfde5 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js @@ -0,0 +1,166 @@ +const path = require('path'); +const fs = require('fs'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +// const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const pkg = require('../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +const platform = 'web'; +module.exports = { + mode: 'production', + bail: true, + entry: { + index: ['regenerator-runtime', path.resolve(pkg.webMain)], + }, + output: { + filename: '[name].[contenthash:8].js', + path: path.resolve(`./dist/${platform}/`), + }, + plugins: [ + new VueLoaderPlugin(), + new HtmlWebpackPlugin({ + inject: true, + scriptLoading: 'blocking', + template: path.resolve('./public/web-renderer.html'), + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + }, + __PLATFORM__: null, + }), + // new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // TODO local path not supported on defaultSource/backgroundImage + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js new file mode 100644 index 00000000000..bfd96dce07b --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js @@ -0,0 +1,3 @@ +const { getWebpackSsrBaseConfig } = require('./client.base'); + +module.exports = getWebpackSsrBaseConfig('android', 'production'); diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js new file mode 100644 index 00000000000..85e8b860784 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const { VueLoaderPlugin } = require('vue-loader'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); + +const platform = 'android'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, '../vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '../..'), + path: path.resolve(__dirname, `../../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js new file mode 100644 index 00000000000..36b6537e19d --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js @@ -0,0 +1,181 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +/** + * get webpack ssr base config + * + * @param platform build platform + * @param env build environment + */ +exports.getWebpackSsrBaseConfig = function (platform, env) { + // do not generate vendor at development + const manifest = require(`../../dist/${platform}/vendor-manifest.json`); + return { + mode: env, + bail: true, + devtool: false, + entry: { + home: [path.resolve(pkg.nativeMain)], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + // CDN path can be configured to load children bundles from remote server + // publicPath: 'https://xxx/hippy/hippyVueNextDemo/', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(env), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new HippyDynamicImportPlugin(), + new WebpackManifestPlugin({ + fileName: `manifest.${platform}.json`, + }), + new webpack.DllReferencePlugin({ + context: path.resolve(__dirname, '../..'), + manifest, + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // do not generate html comment node + comments: false, + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: platform === 'android' ? { + chrome: 57, + } : { + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 1024, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, + }; +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js new file mode 100644 index 00000000000..f465c4ff488 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js @@ -0,0 +1,195 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +/** + * webpack ssr client dev config + */ +module.exports = { + mode: 'development', + bail: true, + devtool: 'eval-source-map', + watch: true, + watchOptions: { + // file changed, rebuild delay time + aggregateTimeout: 1000, + }, + devServer: { + remote: { + protocol: 'http', + host: '127.0.0.1', + port: 38989, + }, + // support vue dev tools,default is false + vueDevtools: false, + // not support one debug server debug multiple app + multiple: false, + // ssr do not support hot replacement now + hot: false, + // default is true + liveReload: false, + client: { + // hippy do not support error tips layer + overlay: false, + }, + devMiddleware: { + // write hot replacement file to disk + writeToDisk: true, + }, + }, + entry: { + // client async bundle + home: [path.resolve(pkg.nativeMain)], + // client ssr entry + index: [path.resolve(pkg.ssrMain)], + }, + output: { + filename: '[name].bundle', + path: path.resolve('./dist/dev/'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new HippyDynamicImportPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // do not generate html comment node + comments: false, + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js new file mode 100644 index 00000000000..f710f743a1b --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js @@ -0,0 +1,97 @@ +const path = require('path'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +module.exports = { + mode: 'production', + devtool: false, + entry: { + index: path.resolve(pkg.ssrMain), + }, + output: { + filename: '[name].js', + strictModuleExceptionHandling: true, + path: path.resolve('./dist'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + ], + module: { + rules: [ + { + test: /\.t|js$/, + use: [{ + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // comment line when production environment + // entry file do not have image asset + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.json', '.ts'], + alias: (() => ({ + src: path.resolve('./src'), + }))(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js new file mode 100644 index 00000000000..eec18701059 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js @@ -0,0 +1,3 @@ +const { getWebpackSsrBaseConfig } = require('./client.base'); + +module.exports = getWebpackSsrBaseConfig('ios', 'production'); diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js new file mode 100644 index 00000000000..6783d5a86ba --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const { VueLoaderPlugin } = require('vue-loader'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); + +const platform = 'ios'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, '../vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '../..'), + path: path.resolve(__dirname, `../../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js new file mode 100644 index 00000000000..e82008654ed --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js @@ -0,0 +1,186 @@ +const path = require('path'); +const fs = require('fs'); +const webpack = require('webpack'); + +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const compilerSSR = require('@hippy/vue-next-compiler-ssr'); +const { VueLoaderPlugin } = require('vue-loader'); +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +let vueNext = '@hippy/vue-next'; +const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist/index.js'); +if (fs.existsSync(hippyVueNextPath)) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath}`); + vueNext = hippyVueNextPath; +} else { + console.warn('* Using the @hippy/vue-next defined in package.json'); +} +const { isNativeTag } = require(vueNext); + + +module.exports = { + mode: 'development', + bail: true, + devtool: 'source-map', + target: 'node', + watch: true, + watchOptions: { + // file changed, rebuild delay time + aggregateTimeout: 1000, + }, + entry: { + index: path.resolve(pkg.serverEntry), + }, + output: { + filename: 'index.js', + strictModuleExceptionHandling: true, + path: path.resolve('dist/server'), + }, + plugins: [ + // only generate one chunk at server side + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HIPPY_SSR: true, + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // because hippy do not support innerHTML, so we should close this feature + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // Vue will recognize non-HTML tags as components, so for Hippy native tags, + // Vue needs to be informed to render them as custom elements + isCustomElement: tag => isNativeTag && isNativeTag(tag), + // real used ssr runtime package, render vue node at server side + ssrRuntimeModuleName: '@hippy/vue-next-server-renderer', + // do not generate html comment node + comments: false, + }, + // real used vue compiler + compiler: compilerSSR, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: '16.0', + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-nullish-coalescing-operator'], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: true, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, + externals: { + express: 'commonjs express', // this line is just to use the express dependency in a commonjs way + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js new file mode 100644 index 00000000000..3ecee4aea93 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js @@ -0,0 +1,177 @@ +const path = require('path'); +const fs = require('fs'); +const webpack = require('webpack'); + +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const compilerSSR = require('@hippy/vue-next-compiler-ssr'); +const { VueLoaderPlugin } = require('vue-loader'); +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +let vueNext = '@hippy/vue-next'; +const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist/index.js'); +if (fs.existsSync(hippyVueNextPath)) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath}`); + vueNext = hippyVueNextPath; +} else { + console.warn('* Using the @hippy/vue-next defined in package.json'); +} +const { isNativeTag } = require(vueNext); + +module.exports = { + mode: 'production', + bail: true, + devtool: false, + target: 'node', + entry: { + index: path.resolve(pkg.serverEntry), + }, + output: { + filename: 'index.js', + strictModuleExceptionHandling: true, + path: path.resolve('dist/server'), + }, + plugins: [ + // only generate one chunk at server side + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + HIPPY_SSR: true, + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // because hippy do not support innerHTML, so we should close this feature + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // Vue will recognize non-HTML tags as components, so for Hippy native tags, + // Vue needs to be informed to render them as custom elements + isCustomElement: tag => isNativeTag && isNativeTag(tag), + // real used ssr runtime package, render vue node at server side + ssrRuntimeModuleName: '@hippy/vue-next-server-renderer', + // do not generate html comment node + comments: false, + }, + // real used vue compiler + compiler: compilerSSR, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: '16.0', + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-nullish-coalescing-operator'], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 8192, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js new file mode 100644 index 00000000000..fe0210af821 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js @@ -0,0 +1,109 @@ +/** + * build js script for ssr production + */ +const { arch } = require('os'); +const { exec, rm, cp } = require('shelljs'); + +let envPrefixStr = 'cross-env-os os="Windows_NT,Linux,Darwin" minVersion=17 NODE_OPTIONS=--openssl-legacy-provider'; +const isArmCpu = arch() + .toLowerCase() + .includes('arm'); +if (isArmCpu) { + envPrefixStr = ''; +} + +/** + * get executed script + * + * @param configFile - config file name + */ +function getScriptCommand(configFile) { + return `${envPrefixStr} webpack --config scripts/webpack-ssr-config/${configFile} --mode production`; +} + +/** + * execute script + * + * @param scriptStr - script content + * @param options - shelljs options + */ +function runScript(scriptStr, options = { silent: false }) { + const result = exec(scriptStr, options); + if (result.code !== 0) { + console.error(`❌ execute cmd - "${scriptStr}" error: ${result.stderr}`); + process.exit(1); + } +} + +/** + * build ssr client entry bundle + */ +function buildServerEntry() { + // build server entry + runScript(getScriptCommand('server.entry.js')); +} + +/** + * build ssr sever and client bundle + */ +function buildJsBundle() { + // build Android client bundle + runScript(getScriptCommand('client.android.js')); + // build iOS client bundle + runScript(getScriptCommand('client.ios.js')); + // 3. build client entry + runScript(getScriptCommand('client.entry.js')); +} + +/** + * build js vendor for production + */ +function buildJsVendor() { + // ios + runScript(getScriptCommand('client.ios.vendor.js')); + // android + runScript(getScriptCommand('client.android.vendor.js')); +} + +/** + * generate client entry js bundle for production + */ +function generateClientEntryForProduction() { + // copy js entry to every platform + // ios + cp('-f', './dist/index.js', './dist/ios/index.ios.js'); + // android + cp('-f', './dist/index.js', './dist/android/index.android.js'); +} + +/** + * copy generated files to native demo + */ +function copyFilesToNativeDemo() { + cp('-Rf', './dist/ios/*', '../ios-demo/res/'); // Update the ios demo project + cp('-Rf', './dist/android/*', '../android-demo/res/'); // # Update the android project +} + +/** + * build production bundle + */ +function buildProduction() { + // production, build all entry bundle, ssr server should execute by user + // first, remove dist directory + rm('-rf', './dist'); + // second, build js vendor + buildJsVendor(); + // third, build all js bundle + buildJsBundle(); + // fourth, build client entry + buildServerEntry(); + // fifth, build every platform's client entry + generateClientEntryForProduction(); + // last, copy all files to native demo + copyFilesToNativeDemo(); +} + +// build production bundle +buildProduction(); + + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js new file mode 100644 index 00000000000..4c225478b6f --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js @@ -0,0 +1,39 @@ +/** + * build script for ssr + */ + +const webpack = require('webpack'); +const { exec } = require('shelljs'); +const serverConfig = require('./webpack-ssr-config/server.dev'); + +const compiler = webpack(serverConfig); +let childProcess = null; + +/** + * execute script + * + * @param scriptStr - script content + * @param options - shelljs options + */ +function runScript(scriptStr, options) { + if (childProcess) { + // kill process first + childProcess.kill(); + } + childProcess = exec(scriptStr, options, (code, stdout, stderr) => { + if (code) { + console.error(`❌ execute cmd - "${scriptStr}" error: ${stderr}`); + process.exit(1); + } + }); +} + +compiler.hooks.done.tap('DonePlugin', () => { + // restart node process after build success + setTimeout(() => { + runScript('node ./dist/server/index.js', { async: true, silent: false }); + }, 0); +}); + +// watch server entry change +compiler.watch({}, () => {}); diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/server.ts b/driver/js/examples/hippy-vue-next-ssr-demo/server.ts new file mode 100644 index 00000000000..d92fd6ae8ca --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/server.ts @@ -0,0 +1,83 @@ +import express from 'express'; +import { render, HIPPY_GLOBAL_STYLE_NAME } from 'src/main-server'; + +interface MinifiedStyleDeclaration { + [key: number]: number | string; +} + +/** + * minify css content + */ +function minifyStyleContent(rawStyleContent): NeedToTyped[] | MinifiedStyleDeclaration[] { + if (rawStyleContent?.length && Array.isArray(rawStyleContent)) { + const minifiedStyle: MinifiedStyleDeclaration[] = []; + rawStyleContent.forEach((styleContent) => { + // minified style is array, 0 index is selectors, 1 index is declaration, no hash + minifiedStyle.push([ + styleContent.selectors, + // minify declarations + styleContent.declarations.map(declaration => [declaration.property, declaration.value]), + ]); + }); + return minifiedStyle; + } + + return rawStyleContent; +} + +/** + * get ssr style content + * + * @param globalStyleName - hippy global style name + */ +function getSsrStyleContent(globalStyleName): NeedToTyped[] { + if (global.ssrStyleContentList) { + return global.ssrStyleContentList; + } + // cache global style sheet, then non first request could return directly, unnecessary to + // serialize again + global.ssrStyleContentList = JSON.stringify(minifyStyleContent(global[globalStyleName])); + + return global.ssrStyleContentList; +} + +// server listen port +const serverPort = 8080; +// init http server +const server = express(); +// use json middleware +server.use(express.json()); + +// listen request +server.all('/getSsrFirstScreenData', (req, rsp) => { + // get hippy ssr node list and other const + render('/', { + appName: 'Demo', + iPhone: { + statusBar: { disabled: true }, + }, + }, req.body).then(({ + list, + store, + uniqueId, + }) => { + // send response + rsp.json({ + code: 0, + data: list, + store: store.state.value, + uniqueId, + styleContent: getSsrStyleContent(HIPPY_GLOBAL_STYLE_NAME), + }); + }) + .catch((error) => { + rsp.json({ + code: -1, + message: `get ssr data error: ${JSON.stringify(error)}`, + }); + }); +}); + +// start server +server.listen(serverPort); +console.log(`Server listen on:${serverPort}`); diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue new file mode 100644 index 00000000000..bb96e1b1097 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue @@ -0,0 +1,223 @@ + + + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg b/driver/js/examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg new file mode 100644 index 0000000000000000000000000000000000000000..833417ea2fb9732e462397b44094599e2b96a56d GIT binary patch literal 42281 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 ZIcDMS&LgEgX}y2tW=580o*THu{XgQR4!HmT literal 0 HcmV?d00001 diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/assets/logo.png b/driver/js/examples/hippy-vue-next-ssr-demo/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 literal 0 HcmV?d00001 diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue new file mode 100644 index 00000000000..00c06a74eb8 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue new file mode 100644 index 00000000000..f0a3aa4ea1e --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue new file mode 100644 index 00000000000..1b231d3702e --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue new file mode 100644 index 00000000000..36a57aeeae0 --- /dev/null +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue @@ -0,0 +1,126 @@ +