Flutter iOS Embedder
FlutterPlatformViewsController.mm File Reference
#import "shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.h"
#include "display_list/geometry/dl_geometry_types.h"
#include "impeller/geometry/rounding_radii.h"
#include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
#include "flutter/display_list/geometry/dl_geometry_conversions.h"
#include "flutter/display_list/utils/dl_matrix_clip_tracker.h"
#include "flutter/flow/surface_frame.h"
#include "flutter/flow/view_slicer.h"
#include "flutter/fml/logging.h"
#include "flutter/fml/make_copyable.h"
#include "flutter/fml/synchronization/count_down_latch.h"
#import "flutter/shell/platform/darwin/common/InternalFlutterSwiftCommon/InternalFlutterSwiftCommon.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterOverlayView.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h"
#include "flutter/shell/platform/darwin/ios/framework/Source/overlay_layer_pool.h"
#import "flutter/shell/platform/darwin/ios/ios_surface.h"

Go to the source code of this file.

Classes

struct  LayerData
 
struct  PlatformViewData
 

Typedefs

using LayersMap = std::unordered_map< int64_t, LayerData >
 

Functions

static CATransform3D GetCATransform3DFromDlMatrix (const DlMatrix &matrix)
 
static void ResetAnchor (CALayer *layer)
 
static CGRect GetCGRectFromDlRect (const DlRect &clipDlRect)
 
static bool HasNonRectClipForUnderlayCutout (const flutter::EmbeddedViewParams &params)
 
static void ApplyNonRectClipToOverlayCanvas (flutter::DlCanvas *overlay_canvas, const flutter::EmbeddedViewParams &params)
 

Variables

static constexpr NSUInteger kFlutterClippingMaskViewPoolCapacity = 5
 
static NSString *const kGestureBlockingPolicyEagerValue = @"@"eager"
 
static NSString *const kGestureBlockingPolicyWaitUntilTouchesEndedValue = @"@"waitUntilTouchesEnded"
 
static NSString *const kGestureBlockingPolicyDoNotBlockGesture = @"@"doNotBlockGesture"
 
static NSString *const kGestureBlockingPolicyFallbackToPluginDefault = @"@"fallbackToPluginDefault"
 
std::unordered_map< int64_t, std::unique_ptr< flutter::EmbedderViewSlice > > _slices
 
std::unordered_map< std::string, NSObject< FlutterPlatformViewFactory > * > _factories
 
std::unordered_map< std::string, FlutterPlatformViewGestureRecognizersBlockingPolicy_gestureRecognizersBlockingPoliciesByType
 
FlutterFMLTaskRunner_platformTaskRunner
 
std::unordered_map< int64_t, PlatformViewData_platformViews
 
std::unordered_map< int64_t, flutter::EmbeddedViewParams > _currentCompositionParams
 
std::unordered_set< int64_t > _viewsToDispose
 
std::vector< int64_t > _compositionOrder
 
std::vector< int64_t > _visitedPlatformViews
 
std::unordered_set< int64_t > _viewsToRecomposite
 
std::vector< int64_t > _previousCompositionOrder
 

Typedef Documentation

◆ LayersMap

using LayersMap = std::unordered_map<int64_t, LayerData>

Definition at line 41 of file FlutterPlatformViewsController.mm.

Function Documentation

◆ ApplyNonRectClipToOverlayCanvas()

static void ApplyNonRectClipToOverlayCanvas ( flutter::DlCanvas *  overlay_canvas,
const flutter::EmbeddedViewParams &  params 
)
static

Definition at line 113 of file FlutterPlatformViewsController.mm.

114  {
115  flutter::DlMatrix transform;
116  auto iter = params.mutatorsStack().Begin();
117  while (iter != params.mutatorsStack().End()) {
118  switch ((*iter)->GetType()) {
119  case flutter::MutatorType::kTransform:
120  transform = transform * (*iter)->GetMatrix();
121  break;
122  case flutter::MutatorType::kClipRRect: {
123  if (transform.IsIdentity()) {
124  overlay_canvas->ClipRoundRect((*iter)->GetRRect(), flutter::DlClipOp::kIntersect, true);
125  } else {
126  auto path = flutter::DlPath::MakeRoundRect((*iter)->GetRRect());
127  auto transformed_path =
128  flutter::DlPath(path.GetSkPath().makeTransform(flutter::ToSkMatrix(transform)));
129  overlay_canvas->ClipPath(transformed_path, flutter::DlClipOp::kIntersect, true);
130  }
131  break;
132  }
133  case flutter::MutatorType::kClipRSE: {
134  if (transform.IsIdentity()) {
135  overlay_canvas->ClipRoundSuperellipse((*iter)->GetRSE(), flutter::DlClipOp::kIntersect,
136  true);
137  } else {
138  auto path = flutter::DlPath::MakeRoundSuperellipse((*iter)->GetRSE());
139  auto transformed_path =
140  flutter::DlPath(path.GetSkPath().makeTransform(flutter::ToSkMatrix(transform)));
141  overlay_canvas->ClipPath(transformed_path, flutter::DlClipOp::kIntersect, true);
142  }
143  break;
144  }
145  case flutter::MutatorType::kClipPath: {
146  if (transform.IsIdentity()) {
147  overlay_canvas->ClipPath((*iter)->GetPath(), flutter::DlClipOp::kIntersect, true);
148  } else {
149  auto transformed_path = flutter::DlPath(
150  (*iter)->GetPath().GetSkPath().makeTransform(flutter::ToSkMatrix(transform)));
151  overlay_canvas->ClipPath(transformed_path, flutter::DlClipOp::kIntersect, true);
152  }
153  break;
154  }
155  default:
156  break;
157  }
158  ++iter;
159  }
160 }

◆ GetCATransform3DFromDlMatrix()

static CATransform3D GetCATransform3DFromDlMatrix ( const DlMatrix &  matrix)
static

Definition at line 54 of file FlutterPlatformViewsController.mm.

54  {
55  CATransform3D transform = CATransform3DIdentity;
56  transform.m11 = matrix.m[0];
57  transform.m12 = matrix.m[1];
58  transform.m13 = matrix.m[2];
59  transform.m14 = matrix.m[3];
60 
61  transform.m21 = matrix.m[4];
62  transform.m22 = matrix.m[5];
63  transform.m23 = matrix.m[6];
64  transform.m24 = matrix.m[7];
65 
66  transform.m31 = matrix.m[8];
67  transform.m32 = matrix.m[9];
68  transform.m33 = matrix.m[10];
69  transform.m34 = matrix.m[11];
70 
71  transform.m41 = matrix.m[12];
72  transform.m42 = matrix.m[13];
73  transform.m43 = matrix.m[14];
74  transform.m44 = matrix.m[15];
75  return transform;
76 }

◆ GetCGRectFromDlRect()

static CGRect GetCGRectFromDlRect ( const DlRect &  clipDlRect)
static

Definition at line 87 of file FlutterPlatformViewsController.mm.

87  {
88  return CGRectMake(clipDlRect.GetLeft(), //
89  clipDlRect.GetTop(), //
90  clipDlRect.GetWidth(), //
91  clipDlRect.GetHeight());
92 }

◆ HasNonRectClipForUnderlayCutout()

static bool HasNonRectClipForUnderlayCutout ( const flutter::EmbeddedViewParams &  params)
static

Definition at line 94 of file FlutterPlatformViewsController.mm.

94  {
95  auto iter = params.mutatorsStack().Begin();
96  while (iter != params.mutatorsStack().End()) {
97  switch ((*iter)->GetType()) {
98  case flutter::MutatorType::kClipRRect:
99  case flutter::MutatorType::kClipRSE:
100  case flutter::MutatorType::kClipPath:
101  return true;
102  default:
103  break;
104  }
105  ++iter;
106  }
107  return false;
108 }

◆ ResetAnchor()

static void ResetAnchor ( CALayer *  layer)
static

Definition at line 81 of file FlutterPlatformViewsController.mm.

81  {
82  // Flow uses (0, 0) to apply transform matrix so we need to match that in Quartz.
83  layer.anchorPoint = CGPointZero;
84  layer.position = CGPointZero;
85 }

Variable Documentation

◆ _compositionOrder

std::vector<int64_t> _compositionOrder

Definition at line 317 of file FlutterPlatformViewsController.mm.

◆ _currentCompositionParams

std::unordered_map<int64_t, flutter::EmbeddedViewParams> _currentCompositionParams

Definition at line 315 of file FlutterPlatformViewsController.mm.

◆ _factories

std::unordered_map<std::string, NSObject<FlutterPlatformViewFactory>*> _factories

Definition at line 310 of file FlutterPlatformViewsController.mm.

◆ _gestureRecognizersBlockingPoliciesByType

std::unordered_map<std::string, FlutterPlatformViewGestureRecognizersBlockingPolicy> _gestureRecognizersBlockingPoliciesByType

Definition at line 312 of file FlutterPlatformViewsController.mm.

◆ _platformTaskRunner

FlutterFMLTaskRunner* _platformTaskRunner

Definition at line 313 of file FlutterPlatformViewsController.mm.

◆ _platformViews

std::unordered_map<int64_t, PlatformViewData> _platformViews

Definition at line 314 of file FlutterPlatformViewsController.mm.

◆ _previousCompositionOrder

std::vector<int64_t> _previousCompositionOrder

Definition at line 320 of file FlutterPlatformViewsController.mm.

◆ _slices

std::unordered_map<int64_t, std::unique_ptr<flutter::EmbedderViewSlice> > _slices
Initial value:
{
std::unique_ptr<flutter::OverlayLayerPool> _layerPool

Definition at line 309 of file FlutterPlatformViewsController.mm.

◆ _viewsToDispose

std::unordered_set<int64_t> _viewsToDispose

Definition at line 316 of file FlutterPlatformViewsController.mm.

◆ _viewsToRecomposite

std::unordered_set<int64_t> _viewsToRecomposite

Definition at line 319 of file FlutterPlatformViewsController.mm.

◆ _visitedPlatformViews

std::vector<int64_t> _visitedPlatformViews

Definition at line 318 of file FlutterPlatformViewsController.mm.

◆ kFlutterClippingMaskViewPoolCapacity

constexpr NSUInteger kFlutterClippingMaskViewPoolCapacity = 5
staticconstexpr

Definition at line 28 of file FlutterPlatformViewsController.mm.

◆ kGestureBlockingPolicyDoNotBlockGesture

NSString* const kGestureBlockingPolicyDoNotBlockGesture = @"@"doNotBlockGesture"
static

Definition at line 32 of file FlutterPlatformViewsController.mm.

◆ kGestureBlockingPolicyEagerValue

NSString* const kGestureBlockingPolicyEagerValue = @"@"eager"
static

Definition at line 30 of file FlutterPlatformViewsController.mm.

◆ kGestureBlockingPolicyFallbackToPluginDefault

NSString* const kGestureBlockingPolicyFallbackToPluginDefault = @"@"fallbackToPluginDefault"
static

Definition at line 33 of file FlutterPlatformViewsController.mm.

◆ kGestureBlockingPolicyWaitUntilTouchesEndedValue

NSString* const kGestureBlockingPolicyWaitUntilTouchesEndedValue = @"@"waitUntilTouchesEnded"
static

Definition at line 31 of file FlutterPlatformViewsController.mm.