From eeadc42040d78b2ca5ca435287e182767bf04c08 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Wed, 21 Feb 2024 21:32:58 +0100 Subject: [PATCH] Woohoo it works! --- .../src/main/cpp/java-bindings/JFilamentView.cpp | 5 +++-- .../src/main/cpp/java-bindings/JFilamentView.h | 2 +- package/cpp/FilamentProxy.cpp | 1 + package/cpp/FilamentView.cpp | 8 +++++++- package/cpp/FilamentView.h | 7 +++++-- package/src/FilamentView.tsx | 12 ++++++++++-- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/package/android/src/main/cpp/java-bindings/JFilamentView.cpp b/package/android/src/main/cpp/java-bindings/JFilamentView.cpp index 228c44c6..4d0383cd 100644 --- a/package/android/src/main/cpp/java-bindings/JFilamentView.cpp +++ b/package/android/src/main/cpp/java-bindings/JFilamentView.cpp @@ -4,6 +4,7 @@ #include "JFilamentView.h" #include "JSurfaceProvider.h" +#include "JNISharedPtr.h" namespace margelo { @@ -26,8 +27,8 @@ jni::local_ref JFilamentView::initHybrid(jni::alias_ return makeCxxInstance(jThis, surfaceProvider); } -const SurfaceProvider& JFilamentView::getSurfaceProvider() { - return *_surfaceProvider->cthis(); +std::shared_ptr JFilamentView::getSurfaceProvider() { + return JNISharedPtr::make_shared_from_jni(_surfaceProvider); } } // namespace margelo \ No newline at end of file diff --git a/package/android/src/main/cpp/java-bindings/JFilamentView.h b/package/android/src/main/cpp/java-bindings/JFilamentView.h index 3db1d1e6..6b5cb922 100644 --- a/package/android/src/main/cpp/java-bindings/JFilamentView.h +++ b/package/android/src/main/cpp/java-bindings/JFilamentView.h @@ -19,7 +19,7 @@ class JFilamentView : public jni::HybridClass, public FilamentVie ~JFilamentView(); static void registerNatives(); - const SurfaceProvider& getSurfaceProvider() override; + std::shared_ptr getSurfaceProvider() override; private: friend HybridBase; diff --git a/package/cpp/FilamentProxy.cpp b/package/cpp/FilamentProxy.cpp index 4cfe7e93..0e9a1bf9 100644 --- a/package/cpp/FilamentProxy.cpp +++ b/package/cpp/FilamentProxy.cpp @@ -16,6 +16,7 @@ using namespace facebook; void FilamentProxy::loadHybridMethods() { registerHybridMethod("loadModel", &FilamentProxy::loadModel, this); + registerHybridMethod("findFilamentView", &FilamentProxy::findFilamentView, this); } } // namespace margelo diff --git a/package/cpp/FilamentView.cpp b/package/cpp/FilamentView.cpp index ad313c16..b8e60061 100644 --- a/package/cpp/FilamentView.cpp +++ b/package/cpp/FilamentView.cpp @@ -4,4 +4,10 @@ #include "FilamentView.h" -namespace margelo {} // namespace margelo +namespace margelo { + +void FilamentView::loadHybridMethods() { + registerHybridMethod("getSurfaceProvider", &FilamentView::getSurfaceProvider, this); +} + +} // namespace margelo diff --git a/package/cpp/FilamentView.h b/package/cpp/FilamentView.h index 7d0362b3..d89e3e86 100644 --- a/package/cpp/FilamentView.h +++ b/package/cpp/FilamentView.h @@ -9,14 +9,17 @@ #include "SurfaceProvider.h" #include #include +#include "jsi/HybridObject.h" namespace margelo { using namespace facebook; -class FilamentView { +class FilamentView: public HybridObject { public: - virtual const SurfaceProvider& getSurfaceProvider() = 0; + virtual std::shared_ptr getSurfaceProvider() = 0; + + void loadHybridMethods() override; }; } // namespace margelo diff --git a/package/src/FilamentView.tsx b/package/src/FilamentView.tsx index ebddcbca..6fe61df3 100644 --- a/package/src/FilamentView.tsx +++ b/package/src/FilamentView.tsx @@ -18,7 +18,6 @@ export class FilamentView extends React.PureComponent { this.ref = React.createRef() } - // @ts-expect-error private get handle(): number { const nodeHandle = findNodeHandle(this.ref.current) if (nodeHandle == null || nodeHandle === -1) { @@ -28,8 +27,17 @@ export class FilamentView extends React.PureComponent { return nodeHandle } + componentDidMount() { + setTimeout(() => { + const view = FilamentProxy.findFilamentView(this.handle) + const surfaceProvider = view.getSurfaceProvider() + const surface = surfaceProvider.getSurface() + console.log('Surface Width: ' + surface.getWidth()) + }, 1500) + } + /** @internal */ public render(): React.ReactNode { - return + return } }