// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ios/chrome/browser/ui/background_generator.h" #import #include #include "base/mac/bundle_locations.h" #include "base/mac/foundation_util.h" #include "base/mac/scoped_cftyperef.h" #import "base/mac/scoped_nsobject.h" #import "ios/chrome/browser/ui/ui_util.h" // This is a utility function that may be used as a standalone helper function // to generate a radial gradient UIImage. UIImage* GetRadialGradient(CGRect backgroundRect, CGPoint centerPoint, CGFloat radius, CGFloat centerColor, CGFloat outsideColor, UIImage* tileImage, UIImage* logoImage) { UIGraphicsBeginImageContextWithOptions(backgroundRect.size, YES, 0); CGContextRef context = UIGraphicsGetCurrentContext(); CGFloat gradient_colors[4] = {centerColor, 1.0, outsideColor, 1.0}; const size_t kColorCount = 2; base::ScopedCFTypeRef grey_space( CGColorSpaceCreateDeviceGray()); DCHECK_EQ(2u, CGColorSpaceGetNumberOfComponents(grey_space)); base::ScopedCFTypeRef gradient( CGGradientCreateWithColorComponents(grey_space, gradient_colors, nullptr, kColorCount)); CGContextDrawRadialGradient(context, gradient, centerPoint, 0, centerPoint, radius, kCGGradientDrawsAfterEndLocation); if (tileImage) [tileImage drawAsPatternInRect:backgroundRect]; if (logoImage) { CGPoint corner = AlignPointToPixel( CGPointMake(centerPoint.x - logoImage.size.width / 2.0, centerPoint.y - logoImage.size.height / 2.0)); [logoImage drawAtPoint:corner]; } UIImage* background = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return background; } void InstallBackgroundInView(UIView* view) { UIImageView* imageView = [[[UIImageView alloc] initWithFrame:view.bounds] autorelease]; imageView.image = [UIImage imageNamed:@"stack_view_background_noise.jpg"]; imageView.contentMode = UIViewContentModeScaleAspectFill; imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; [view insertSubview:imageView atIndex:0]; }