123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 <CoreGraphics/CoreGraphics.h>
- #import <Foundation/Foundation.h>
- #import "WXDisplayLinkManager.h"
- @class WXBridgeMethod;
- @class WXSDKInstance;
- @class WXComponent;
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- void WXPerformBlockOnComponentThread(void (^block)(void));
- void WXPerformBlockSyncOnComponentThread(void (^block)(void));
-
- #ifdef __cplusplus
- }
- #endif
- @interface WXComponentManager : NSObject <WXDisplayLinkClient>
- @property (nonatomic, readonly, weak) WXSDKInstance *weexInstance;
- @property (nonatomic, readonly, assign) BOOL isValid;
- /**
- * @abstract initialize with weex instance
- **/
- - (instancetype)initWithWeexInstance:(WXSDKInstance *)weexInstance;
- /**
- * @abstract return the component thread
- **/
- + (NSThread *)componentThread;
- /**
- * @abstract starting component tasks
- **/
- - (void)startComponentTasks;
- /**
- * @abstract tell the component manager that instance root view's frame has been changed
- **/
- - (void)rootViewFrameDidChange:(CGRect)frame;
- ///--------------------------------------
- /// @name Component Tree Building
- ///--------------------------------------
- /**
- * @abstract create root component
- **/
- - (void)createBody:(NSString*)ref
- type:(NSString*)type
- styles:(NSDictionary*)styles
- attributes:(NSDictionary*)attributes
- events:(NSArray*)events
- renderObject:(void*)renderObject;
- /**
- * @abstract add a component to its parent
- **/
- - (void)addComponent:(NSString*)ref
- type:(NSString*)type
- parentRef:(NSString*)parentRef
- styles:(NSDictionary*)styles
- attributes:(NSDictionary*)attributes
- events:(NSArray*)events
- index:(NSInteger)index
- renderObject:(void*)renderObject;
- /**
- * @abstract move component
- **/
- - (void)moveComponent:(NSString *)ref toSuper:(NSString *)superRef atIndex:(NSInteger)index;
- /**
- * @abstract remove component
- **/
- - (void)removeComponent:(NSString *)ref;
- /**
- * @abstract notify that a component tree is built and trigger layout,
- may be called several times rendering a page.
- **/
- - (void)appendTreeCreateFinish:(NSString*)ref;
- /**
- * @abstract return component for specific ref, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
- - (WXComponent *)componentForRef:(NSString *)ref;
- /**
- * @abstract return root component
- */
- - (WXComponent *)componentForRoot;
- /**
- * @abstract number of components created, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
- - (NSUInteger)numberOfComponents;
- /**
- * @abstract add an existing component to references look-up map
- */
- - (void)addComponent:(WXComponent *)component toIndexDictForRef:(NSString *)ref;
- ///--------------------------------------
- /// @name Updating
- ///--------------------------------------
- /**
- * @abstract update styles
- **/
- - (void)updateStyles:(NSDictionary *)styles forComponent:(NSString *)ref;
- /**
- * @abstract update pseudo class styles
- **/
- - (void)updatePseudoClassStyles:(NSDictionary *)styles forComponent:(NSString *)ref;
- /**
- * @abstract update attributes
- **/
- - (void)updateAttributes:(NSDictionary *)attributes forComponent:(NSString *)ref;
- /**
- * @abstract quick check that if a component has non transition properties
- **/
- - (BOOL)isTransitionNoneOfComponent:(NSString*)ref; // for quick access
- /**
- * @abstract check if component with @ref has any style in @styles which is animated
- **/
- - (BOOL)hasTransitionPropertyInStyles:(NSDictionary*)styles forComponent:(NSString*)ref;
- /**
- * @abstract layout a component with frame output by weex core layout engine
- **/
- - (void)layoutComponent:(WXComponent*)component frame:(CGRect)frame isRTL:(BOOL)isRTL innerMainSize:(CGFloat)innerMainSize;
- /**
- * @abstract layout a component on platform side
- **/
- - (void)layoutComponent:(WXComponent*)component;
- /**
- * @abstract add event
- **/
- - (void)addEvent:(NSString *)event toComponent:(NSString *)ref;
- /**
- * @abstract remove event
- **/
- - (void)removeEvent:(NSString *)event fromComponent:(NSString *)ref;
- /**
- * @abstract scroll to specific component
- **/
- - (void)scrollToComponent:(NSString *)ref options:(NSDictionary *)options;
- ///--------------------------------------
- /// @name Life Cycle
- ///--------------------------------------
- /**
- * @abstract called when all doms are created
- **/
- - (void)createFinish;
- /**
- * @abstract called when all doms are refreshed
- **/
- - (void)refreshFinish;
- /**
- * @abstract called when all doms are updated
- **/
- - (void)updateFinish;
- /**
- * @abstract called when all doms are created and layout finished
- **/
- - (void)renderFinish;
- /**
- * @abstract called when render failed
- **/
- - (void)renderFailed:(NSError *)error;
- /**
- * @abstract unload
- **/
- - (void)unload;
- /**
- * @abstract invalidate component management, this can be called on main thread.
- **/
- - (void)invalidate;
- ///--------------------------------------
- /// @name Fixed
- ///--------------------------------------
- /**
- * @abstract add a component which has a fixed position
- *
- * @param fixComponent the fixed component to add
- */
- - (void)addFixedComponent:(WXComponent *)fixComponent;
- /**
- * @abstract remove a component which has a fixed position
- *
- * @param fixComponent the fixed component to remove
- */
- - (void)removeFixedComponent:(WXComponent *)fixComponent;
- /**
- * @abstract add a task to UI thread
- **/
- - (void)_addUITask:(void (^)(void))block;
- /**
- * @abstract execute a task to UI thread
- **/
- - (void)executePrerenderUITask:(NSString *)url;
- /**
- * @param styles a NSDictionary value, styles which will resolve
- * @param component a WXComponent value, the target which you want to resolve
- * @param isUpdateStyles a BOOL value, YES will udpate the component style property, NO will notifiy the lifeStyle of compoenent to handle, default value is NO.
- * @abstract handleStyle will be add to a queue to be executed every frame, but handleStyleOnMainThread will switch to main thread and execute imediately, you can call this for your execution time sequence.
- */
- - (void)handleStyleOnMainThread:(NSDictionary*)styles forComponent:(WXComponent *)component isUpdateStyles:(BOOL)isUpdateStyles;
- ///--------------------------------------
- /// @name Enumerating
- ///--------------------------------------
- /**
- * Enumerate components using breadth-first search algorithm,
- must be called on component thread by calling WXPerformBlockOnComponentThread
- */
- - (void)enumerateComponentsUsingBlock:(void (^)(WXComponent *, BOOL *stop))block;
- #pragma mark batch mark
- /**
- a start native batch tag for a group of UI operations, company with performBatchEnd
- @see performBatchEnd
- */
- - (void)performBatchBegin;
- /**
- an end native batch tag for a group of UI operations, company with performBatchBegin
- @see performBatchBegin
- */
- - (void)performBatchEnd;
- @end
|