mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-06-08 11:32:36 +00:00
use layer for video
This commit is contained in:
parent
32734a3226
commit
6235aa8fe8
|
@ -16,12 +16,15 @@ static ScreenView *sharedScreenView = nil;
|
||||||
CGImageRef screenImage;
|
CGImageRef screenImage;
|
||||||
CGRect screenBounds;
|
CGRect screenBounds;
|
||||||
CGSize screenSize;
|
CGSize screenSize;
|
||||||
|
CALayer *videoLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
[super awakeFromNib];
|
[super awakeFromNib];
|
||||||
sharedScreenView = self;
|
sharedScreenView = self;
|
||||||
|
videoLayer = [CALayer layer];
|
||||||
|
screenSize = CGSizeMake(vMacScreenWidth, vMacScreenHeight);
|
||||||
|
[self.layer addSublayer:videoLayer];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (instancetype)sharedScreenView {
|
+ (instancetype)sharedScreenView {
|
||||||
|
@ -39,29 +42,17 @@ static ScreenView *sharedScreenView = nil;
|
||||||
- (void)updateScreen:(CGImageRef)newScreenImage {
|
- (void)updateScreen:(CGImageRef)newScreenImage {
|
||||||
CGImageRelease(screenImage);
|
CGImageRelease(screenImage);
|
||||||
screenImage = CGImageRetain(newScreenImage);
|
screenImage = CGImageRetain(newScreenImage);
|
||||||
[self setNeedsDisplay];
|
videoLayer.contents = (__bridge id)screenImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)layoutSubviews {
|
- (void)layoutSubviews {
|
||||||
screenSize = CGSizeMake(vMacScreenWidth, vMacScreenHeight);
|
[super layoutSubviews];
|
||||||
CGRect viewBounds = self.bounds;
|
CGRect viewBounds = self.bounds;
|
||||||
CGFloat screenScale = MAX(screenSize.width / viewBounds.size.width, screenSize.height / viewBounds.size.height);
|
CGFloat screenScale = MAX(screenSize.width / viewBounds.size.width, screenSize.height / viewBounds.size.height);
|
||||||
screenBounds = CGRectMake(0, 0, screenSize.width / screenScale, screenSize.height / screenScale);
|
screenBounds = CGRectMake(0, 0, screenSize.width / screenScale, screenSize.height / screenScale);
|
||||||
screenBounds.origin.x = (viewBounds.size.width - screenBounds.size.width)/2;
|
screenBounds.origin.x = (viewBounds.size.width - screenBounds.size.width)/2;
|
||||||
screenBounds = CGRectIntegral(screenBounds);
|
screenBounds = CGRectIntegral(screenBounds);
|
||||||
[self setNeedsDisplay];
|
videoLayer.frame = screenBounds;
|
||||||
}
|
|
||||||
|
|
||||||
- (void)drawRect:(CGRect)rect {
|
|
||||||
// Draw screenImage
|
|
||||||
CGImageRef imageRef = CGImageRetain(screenImage);
|
|
||||||
if (imageRef) {
|
|
||||||
CGContextRef ctx = UIGraphicsGetCurrentContext();
|
|
||||||
CGContextTranslateCTM(ctx, 0, screenBounds.size.height);
|
|
||||||
CGContextScaleCTM(ctx, 1.0, -1.0);
|
|
||||||
CGContextDrawImage(ctx, screenBounds, imageRef);
|
|
||||||
CGImageRelease(imageRef);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user