1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import <React/ARTNode.h>
- #import <React/ARTContainer.h>
- @implementation ARTNode
- - (void)insertReactSubview:(UIView *)subview atIndex:(NSInteger)atIndex
- {
- [super insertReactSubview:subview atIndex:atIndex];
- [self insertSubview:subview atIndex:atIndex];
- [self invalidate];
- }
- - (void)removeReactSubview:(UIView *)subview
- {
- [super removeReactSubview:subview];
- [self invalidate];
- }
- - (void)didUpdateReactSubviews
- {
- // Do nothing, as subviews are inserted by insertReactSubview:
- }
- - (void)setOpacity:(CGFloat)opacity
- {
- [self invalidate];
- _opacity = opacity;
- }
- - (void)setTransform:(CGAffineTransform)transform
- {
- [self invalidate];
- super.transform = transform;
- }
- - (void)invalidate
- {
- id<ARTContainer> container = (id<ARTContainer>)self.superview;
- [container invalidate];
- }
- - (void)renderTo:(CGContextRef)context
- {
- if (self.opacity <= 0) {
- // Nothing to paint
- return;
- }
- if (self.opacity >= 1) {
- // Just paint at full opacity
- CGContextSaveGState(context);
- CGContextConcatCTM(context, self.transform);
- CGContextSetAlpha(context, 1);
- [self renderLayerTo:context];
- CGContextRestoreGState(context);
- return;
- }
- // This needs to be painted on a layer before being composited.
- CGContextSaveGState(context);
- CGContextConcatCTM(context, self.transform);
- CGContextSetAlpha(context, self.opacity);
- CGContextBeginTransparencyLayer(context, NULL);
- [self renderLayerTo:context];
- CGContextEndTransparencyLayer(context);
- CGContextRestoreGState(context);
- }
- - (void)renderLayerTo:(CGContextRef)context
- {
- // abstract
- }
- @end
|