// // IconView.swift // Feels (iOS) // // Created by Trey Tartt on 2/13/22. // import SwiftUI struct CustomWidgetView: View { @State public var customWidgetModel: CustomWidgetModel private let facePercSize = 0.6 // private var gridXOffset: CGFloat { // if isPreview { // return CGFloat(0) // } // return CGFloat(6) // } // // private var gridYOffset: CGFloat { // if isPreview { // return CGFloat(0) // } // return CGFloat(-8) // } // // private var entireFuckingViewOffset: CGFloat { // if isPreview { // return CGFloat(0) // } // return CGFloat(25) // } let columns = [ GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1), GridItem(.flexible(minimum: 1, maximum: 100), spacing: 1) ] var body: some View { GeometryReader { geo in ZStack { Rectangle() .fill( customWidgetModel.bgColor ) .frame(maxWidth: .infinity, maxHeight: .infinity) LazyVGrid(columns: columns, alignment: .leading, spacing: 0) { ForEach(customWidgetModel.background, id: \.self.1) { (bgOption, uuid) in bgOption.image .resizable() .aspectRatio(1, contentMode: .fill) .foregroundColor(customWidgetModel.bgOverlayColor) } } .scaleEffect(1.1) .clipped() .background( .clear ) Circle() .strokeBorder(customWidgetModel.circleStrokeColor, lineWidth: geo.size.width * 0.045) .background(Circle().fill(customWidgetModel.innerColor)) .frame(width: geo.size.width*facePercSize, height: geo.size.height*facePercSize, alignment: .center) .position(x: geo.size.width/2, y: geo.size.height/2) customWidgetModel.leftEye.image .resizable() .aspectRatio(contentMode: .fit) .frame(width: geo.size.width*0.12, height: geo.size.height*0.12, alignment: .center) .position(x: geo.size.width*0.4, y: geo.size.height*0.4) .foregroundColor(customWidgetModel.leftEyeColor) customWidgetModel.rightEye.image .resizable() .aspectRatio(contentMode: .fit) .frame(width: geo.size.width*0.12, height: geo.size.height*0.12, alignment: .center) .position(x: geo.size.width*0.6, y: geo.size.height*0.4) .foregroundColor(customWidgetModel.rightEyeColor) customWidgetModel.mouth.image .resizable() .aspectRatio(contentMode: .fit) .frame(width: geo.size.width*0.12, height: geo.size.height*0.12, alignment: .center) .position(x: geo.size.width*0.5, y: geo.size.height*0.59) .foregroundColor(customWidgetModel.mouthColor) } .position(x: geo.size.width/2, y: geo.size.height/2) } } } struct WidgetView_Previews: PreviewProvider { static var backgrounds: [(CustomWidgetBackGroundOptions, UUID)] = { var blah = [(CustomWidgetBackGroundOptions, UUID)]() for _ in 0...CustomWidgetModel.numberOfBGItems { blah.append((CustomWidgetBackGroundOptions.selectable.randomElement()!, UUID())) } return blah }() static var previews: some View { CustomWidgetView(customWidgetModel: CustomWidgetModel.defaultCustomIcon) .frame(width: 256, height: 256, alignment: .center) } }