diff --git a/frameworks/core/components/camera/camera_element.cpp b/frameworks/core/components/camera/camera_element.cpp index 4f4d59d9da3fdbaf0e77b2dcd767666df61aab0c..b2ffe8b441727dd442827564d60d8d2187ae8100 100644 --- a/frameworks/core/components/camera/camera_element.cpp +++ b/frameworks/core/components/camera/camera_element.cpp @@ -400,6 +400,11 @@ void CameraElement::UpdateCamera(const RefPtr &cameraComponent) if (texture_) { cameraComponent->SetTextureId(texture_->GetId()); cameraComponent->SetFit(ImageFit::CONTAIN); + +#if defined(IOS_PLATFORM) + cameraComponent->SetFit(ImageFit::COVER); +#endif + cameraComponent->SetSrcWidth(preViewWidth_); cameraComponent->SetSrcHeight(preViewHeight_); } @@ -451,6 +456,11 @@ void CameraElement::OnPreViewSizeChange(int32_t preViewWidth, int32_t preViewHei auto camera = AceType::MakeRefPtr(); camera->SetTextureId(texture_->GetId()); camera->SetFit(ImageFit::CONTAIN); + +#if defined(IOS_PLATFORM) + camera->SetFit(ImageFit::COVER); +#endif + camera->SetSrcWidth(preViewWidth); camera->SetSrcHeight(preViewHeight); preViewWidth_ = preViewWidth; diff --git a/frameworks/core/components/text_field/flutter_render_text_field.cpp b/frameworks/core/components/text_field/flutter_render_text_field.cpp index 52567ec6f5e0ca525e7c4fc554644cb429c2b659..d9f179abc6c9a74f63e918c8b2065a189bfa9b83 100644 --- a/frameworks/core/components/text_field/flutter_render_text_field.cpp +++ b/frameworks/core/components/text_field/flutter_render_text_field.cpp @@ -261,16 +261,23 @@ void FlutterRenderTextField::PaintSelection(SkCanvas* canvas) const if (!IsSelectiveDevice()) { return; } - using namespace Constants; if (!paragraph_ || (canvas == nullptr)) { return; } + const auto& selection = GetEditingValue().selection; if (GetEditingValue().text.empty() || selection.GetStart() == selection.GetEnd()) { return; } - const auto& boxes = paragraph_->GetRectsForRange(selection.GetStart(), selection.GetEnd(), + + DrawSelection(selection.GetStart(), selection.GetEnd(), canvas); +} + +void FlutterRenderTextField::DrawSelection(unsigned start, unsigned end, SkCanvas* canvas) const +{ + using namespace Constants; + const auto& boxes = paragraph_->GetRectsForRange(start, end, txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); if (boxes.empty()) { return; @@ -293,6 +300,26 @@ void FlutterRenderTextField::PaintSelection(SkCanvas* canvas) const canvas->restore(); } +#if defined(IOS_PLATFORM) +void FlutterRenderTextField::PaintCompose(SkCanvas* canvas) const +{ + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + + if (!paragraph_ || (canvas == nullptr)) { + return; + } + + const auto& compose = GetEditingValue().compose; + if (GetEditingValue().text.empty() || compose.GetStart() == compose.GetEnd()) { + return; + } + + DrawSelection(compose.GetStart(), compose.GetEnd(), canvas); +} +#endif + void FlutterRenderTextField::PaintTextAndPlaceholder(SkCanvas* canvas) const { // Offset for the painting area of text @@ -1384,6 +1411,9 @@ void FlutterRenderTextField::PaintTextField( canvas->clipRect(SkRect::MakeLTRB(innerRect_.Left(), innerRect_.Top(), innerRect_.Right(), innerRect_.Bottom()), SkClipOp::kIntersect); PaintSelection(canvas); +#if defined(IOS_PLATFORM) + PaintCompose(canvas); +#endif // Paint cursor. PaintCaret(*canvas, caretRect_); PaintTextAndPlaceholder(canvas); diff --git a/frameworks/core/components/text_field/flutter_render_text_field.h b/frameworks/core/components/text_field/flutter_render_text_field.h index 86dbfe8634ea5cf0488be3d9777924b2e8230504..aa95b29856baa6f1d1de7182d3892d21306d851c 100644 --- a/frameworks/core/components/text_field/flutter_render_text_field.h +++ b/frameworks/core/components/text_field/flutter_render_text_field.h @@ -115,6 +115,10 @@ private: void PaintSelectCaret(SkCanvas* canvas); void PaintIcon(const Offset& offset, RenderContext& context); void PaintSelection(SkCanvas* canvas) const; + void DrawSelection(unsigned start, unsigned end, SkCanvas* canvas) const; +#if defined(IOS_PLATFORM) + void PaintCompose(SkCanvas* canvas) const; +#endif void PaintTextAndPlaceholder(SkCanvas* canvas) const; void PaintErrorText(SkCanvas* canvas) const; void PaintCountText(SkCanvas* canvas) const;