/* * Copyright (c) 2022 Huawei Device Co., Ltd. * 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. */ #ifndef INTERFACES_INNERKITS_SURFACE_SURFACE_DELEGATE_H #define INTERFACES_INNERKITS_SURFACE_SURFACE_DELEGATE_H #include #include "surface.h" struct NativeSurfaceCallback; namespace OHOS { enum class SurfaceDelegateError : int32_t { SURFACE_DELEGATE_ERROR_DEFAULT = -1, SURFACE_DELEGATE_OK = 0, SURFACE_DELEGATE_DO_NOTHING = 1, SURFACE_DELEGATE_ERROR_SAMGR = 100, SURFACE_DELEGATE_ERROR_IPC_FAILED = 101, SURFACE_DELEGATE_ERROR_NO_MEM = 110, SURFACE_DELEGATE_ERROR_NULLPTR = 120, SURFACE_DELEGATE_ERROR_INVALID_PARAM = 130, SURFACE_DELEGATE_ERROR_DESTROYED_OBJECT = 140, SURFACE_DELEGATE_ERROR_DEATH_RECIPIENT = 150, SURFACE_DELEGATE_ERROR_INVALID_WINDOW = 160, SURFACE_DELEGATE_ERROR_INVALID_OPERATION = 170, SURFACE_DELEGATE_ERROR_INVALID_TYPE = 180, SURFACE_DELEGATE_ERROR_INVALID_PERMISSION = 190, SURFACE_DELEGATE_ERROR_UNKNOWN, }; class SurfaceDelegate : public RefBase { public: /* * Define callback for the surface lifecycle. */ class ISurfaceCallback : virtual public RefBase { public: /* * Callback when the surface was created. * * @param surface the surface. */ virtual void OnSurfaceCreated(const sptr& surface) = 0; /* * Callback when the surface was changed. * * @param surface the surface. * @param width the surface width. * @param height the surface height. */ virtual void OnSurfaceChanged(const sptr& surface, int32_t width, int32_t height) = 0; /* * Callback when the surface was destroyed. */ virtual void OnSurfaceDestroyed() = 0; }; /* * Add the surface callback. * * @param callback the ISurfaceCallback. */ void AddSurfaceCallback(const sptr& callback); /* * Remove the surface callback. * * @param callback the ISurfaceCallback. */ void RemoveSurfaceCallback(const sptr& callback); /* * Constructor of SurfaceDelegate. * * @param windowId the window id the surface will be on. */ SurfaceDelegate(int windowId); /* * Destructor of SurfaceDelegate. */ ~SurfaceDelegate() = default; /* * Create the surface. * * @param isWindowSurface if the surface is a window type surface. * @return the SurfaceDelegateError code. */ SurfaceDelegateError CreateSurface(bool isWindowSurface = false); /* * Set the boundaries of the area where the surface is located. * * @param left the left of the boundaries. * @param right the right of the boundaries. * @param width the width of the boundaries. * @param height the height of the boundaries. * @return the SurfaceDelegateError code. */ SurfaceDelegateError SetBounds(int32_t left, int32_t right, int32_t width, int32_t height); /* * Release the surface. * * @return the SurfaceDelegateError code. */ SurfaceDelegateError ReleaseSurface(); /* * Set the surface size. * * @param width the surface width. * @param height the surface height. * @return the SurfaceDelegateError code. */ SurfaceDelegateError SetSurfaceSize(uint32_t width, uint32_t height); /* * Get the surface. * * @return the surface. */ sptr GetSurface(); /* * Get the native window. * * @return the void pointer of the native window. */ void* GetNativeWindow(); private: NativeSurfaceCallback CreateNativeSurfaceCallback(); sptr GetNativeSurface(); void OnSurfaceCreated(uint32_t windowId, uint64_t surfaceId); void OnSurfaceChanged(uint32_t windowId, uint64_t surfaceId, int32_t width, int32_t height); void OnSurfaceDestroyed(uint32_t windowId, uint64_t surfaceId); void OnNativeSurfaceCreated(void* nativeWindow); void OnNativeSurfaceDestroyed(); sptr surface_ = nullptr; std::vector> surfaceCallbacks_; std::recursive_mutex mutex_; int windowId_ = 0; }; } // namespace OHOS #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_DELEGATE_H