From 0c03abee4ee63155c122be0bc268b0640000ff80 Mon Sep 17 00:00:00 2001 From: dscyrescotti Date: Sat, 18 May 2024 17:54:18 +0700 Subject: [PATCH] feat: add color picker --- Memola.xcodeproj/project.pbxproj | 24 +++ Memola/Canvas/Contexts/GraphicContext.swift | 2 +- Memola/Canvas/Tool/Core/Tool.swift | 2 + Memola/Canvas/Tool/Pen/Core/Pen.swift | 12 +- Memola/Components/Shapes/Triangle.swift | 20 ++ Memola/Extensions/Color++.swift | 12 ++ .../Memo/ColorPicker/ColorPicker.swift | 184 ++++++++++++++++++ .../Features/Memo/PenDock/PenDockView.swift | 104 +++++++--- .../Assets.xcassets/backgrounds/Contents.json | 6 + .../Contents.json | 23 +++ .../transparency_grid 1.png | Bin 0 -> 4196 bytes .../transparency_grid 1@2x.png | Bin 0 -> 10400 bytes .../transparency_grid 1@3x.png | Bin 0 -> 19039 bytes .../Contents.json | 23 +++ .../transparency_grid 1.png | Bin 0 -> 2324 bytes .../transparency_grid 1@2x.png | Bin 0 -> 5593 bytes .../transparency_grid 1@3x.png | Bin 0 -> 10060 bytes 17 files changed, 378 insertions(+), 34 deletions(-) create mode 100644 Memola/Components/Shapes/Triangle.swift create mode 100644 Memola/Features/Memo/ColorPicker/ColorPicker.swift create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/Contents.json create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/Contents.json create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/transparency_grid 1.png create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/transparency_grid 1@2x.png create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/transparency_grid 1@3x.png create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/Contents.json create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/transparency_grid 1.png create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/transparency_grid 1@2x.png create mode 100644 Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/transparency_grid 1@3x.png diff --git a/Memola.xcodeproj/project.pbxproj b/Memola.xcodeproj/project.pbxproj index e6dc41e..5e08e45 100644 --- a/Memola.xcodeproj/project.pbxproj +++ b/Memola.xcodeproj/project.pbxproj @@ -81,6 +81,8 @@ ECFA15242BEF223300455818 /* GraphicContextObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFA15232BEF223300455818 /* GraphicContextObject.swift */; }; ECFA15262BEF224900455818 /* StrokeObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFA15252BEF224900455818 /* StrokeObject.swift */; }; ECFA15282BEF225000455818 /* QuadObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFA15272BEF225000455818 /* QuadObject.swift */; }; + ECFC51272BF8885700D0D051 /* ColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFC51262BF8885700D0D051 /* ColorPicker.swift */; }; + ECFC512A2BF8BBD800D0D051 /* Triangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFC51292BF8BBD800D0D051 /* Triangle.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -160,6 +162,8 @@ ECFA15232BEF223300455818 /* GraphicContextObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphicContextObject.swift; sourceTree = ""; }; ECFA15252BEF224900455818 /* StrokeObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StrokeObject.swift; sourceTree = ""; }; ECFA15272BEF225000455818 /* QuadObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuadObject.swift; sourceTree = ""; }; + ECFC51262BF8885700D0D051 /* ColorPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorPicker.swift; sourceTree = ""; }; + ECFC51292BF8BBD800D0D051 /* Triangle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Triangle.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -225,6 +229,7 @@ EC50500A2BF6672000B4D86E /* Components */ = { isa = PBXGroup; children = ( + ECFC51282BF8BBD000D0D051 /* Shapes */, EC50500B2BF6673300B4D86E /* ViewModifiers */, ); path = Components; @@ -315,6 +320,7 @@ ECA7387B2BE5EF3500A4542E /* Memo */ = { isa = PBXGroup; children = ( + ECFC51252BF8885000D0D051 /* ColorPicker */, EC5050082BF65D0500B4D86E /* Memo */, EC5050052BF65CCD00B4D86E /* PenDock */, ); @@ -599,6 +605,22 @@ path = Objects; sourceTree = ""; }; + ECFC51252BF8885000D0D051 /* ColorPicker */ = { + isa = PBXGroup; + children = ( + ECFC51262BF8885700D0D051 /* ColorPicker.swift */, + ); + path = ColorPicker; + sourceTree = ""; + }; + ECFC51282BF8BBD000D0D051 /* Shapes */ = { + isa = PBXGroup; + children = ( + ECFC51292BF8BBD800D0D051 /* Triangle.swift */, + ); + path = Shapes; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -672,6 +694,7 @@ ECA738B02BE60D0B00A4542E /* CanvasViewController.swift in Sources */, ECA738E42BE6110800A4542E /* Drawable.swift in Sources */, ECA738AD2BE60CC600A4542E /* DrawingView.swift in Sources */, + ECFC512A2BF8BBD800D0D051 /* Triangle.swift in Sources */, ECA738E02BE610B900A4542E /* EraserRenderPass.swift in Sources */, EC35655A2BF060D900A4E0BF /* Quad.metal in Sources */, ECA738912BE600F500A4542E /* Cache.metal in Sources */, @@ -704,6 +727,7 @@ ECA738CB2BE60F1900A4542E /* ViewPortContext.swift in Sources */, ECA738EE2BE6125D00A4542E /* simd_float4x4++.swift in Sources */, ECA7388C2BE6009600A4542E /* Textures.swift in Sources */, + ECFC51272BF8885700D0D051 /* ColorPicker.swift in Sources */, ECA738B82BE60DDC00A4542E /* HistoryEvent.swift in Sources */, EC0D14262BF7A8C9009BFE5F /* PenObject.swift in Sources */, ECA738952BE6012D00A4542E /* ViewPort.metal in Sources */, diff --git a/Memola/Canvas/Contexts/GraphicContext.swift b/Memola/Canvas/Contexts/GraphicContext.swift index cf6f565..fa6b910 100644 --- a/Memola/Canvas/Contexts/GraphicContext.swift +++ b/Memola/Canvas/Contexts/GraphicContext.swift @@ -117,7 +117,7 @@ extension GraphicContext { func beginStroke(at point: CGPoint, pen: Pen) -> Stroke { let stroke = Stroke( bounds: [point.x - pen.thickness, point.y - pen.thickness, point.x + pen.thickness, point.y + pen.thickness], - color: pen.color, + color: pen.rgba, style: pen.strokeStyle.rawValue, createdAt: .now, thickness: pen.thickness diff --git a/Memola/Canvas/Tool/Core/Tool.swift b/Memola/Canvas/Tool/Core/Tool.swift index 609530a..1e0377d 100644 --- a/Memola/Canvas/Tool/Core/Tool.swift +++ b/Memola/Canvas/Tool/Core/Tool.swift @@ -16,6 +16,7 @@ public class Tool: NSObject, ObservableObject { @Published var pens: [Pen] = [] @Published var selectedPen: Pen? @Published var draggedPen: Pen? + @Published var opensColorPicker: Bool = false let scrollPublisher = PassthroughSubject() @@ -32,6 +33,7 @@ public class Tool: NSObject, ObservableObject { } if let selectedPen = pens.first(where: { $0.isSelected }) { selectPen(selectedPen) + scrollPublisher.send(selectedPen.id) } } } diff --git a/Memola/Canvas/Tool/Pen/Core/Pen.swift b/Memola/Canvas/Tool/Pen/Core/Pen.swift index 01a6b8a..4b453cf 100644 --- a/Memola/Canvas/Tool/Pen/Core/Pen.swift +++ b/Memola/Canvas/Tool/Pen/Core/Pen.swift @@ -18,9 +18,9 @@ class Pen: NSObject, ObservableObject, Identifiable { object?.style = strokeStyle.rawValue } } - @Published var color: [CGFloat] { + @Published var rgba: [CGFloat] { didSet { - object?.color = color + object?.color = rgba } } @Published var thickness: CGFloat { @@ -33,12 +33,18 @@ class Pen: NSObject, ObservableObject, Identifiable { object?.isSelected = isSelected } } + var color: Color { + get { Color.rgba(from: rgba) } + set { + rgba = newValue.components + } + } init(object: PenObject) { self.object = object self.id = object.objectID.uriRepresentation().absoluteString self.style = (Stroke.Style(rawValue: object.style) ?? .marker).anyPenStyle - self.color = object.color + self.rgba = object.color self.thickness = object.thickness self.isSelected = object.isSelected super.init() diff --git a/Memola/Components/Shapes/Triangle.swift b/Memola/Components/Shapes/Triangle.swift new file mode 100644 index 0000000..d9ce850 --- /dev/null +++ b/Memola/Components/Shapes/Triangle.swift @@ -0,0 +1,20 @@ +// +// Triangle.swift +// Memola +// +// Created by Dscyre Scotti on 5/18/24. +// + +import SwiftUI +import Foundation + +struct Triangle: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + path.move(to: CGPoint(x: rect.maxX, y: rect.minY)) + path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY)) + return path + } +} diff --git a/Memola/Extensions/Color++.swift b/Memola/Extensions/Color++.swift index b0e9aa6..332db55 100644 --- a/Memola/Extensions/Color++.swift +++ b/Memola/Extensions/Color++.swift @@ -18,6 +18,18 @@ extension Color { } } +extension Color { + var hsba: (hue: Double, saturation: Double, brightness: Double, alpha: Double) { + let uiColor = UIColor(self) + var hue: CGFloat = 0 + var saturation: CGFloat = 0 + var brightness: CGFloat = 0 + var alpha: CGFloat = 0 + uiColor.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) + return (hue, saturation, brightness, alpha) + } +} + extension UIColor { var components: [CGFloat] { let uiColor: UIColor = self diff --git a/Memola/Features/Memo/ColorPicker/ColorPicker.swift b/Memola/Features/Memo/ColorPicker/ColorPicker.swift new file mode 100644 index 0000000..1bd4151 --- /dev/null +++ b/Memola/Features/Memo/ColorPicker/ColorPicker.swift @@ -0,0 +1,184 @@ +// +// ColorPicker.swift +// Memola +// +// Created by Dscyre Scotti on 5/18/24. +// + +import SwiftUI +import Foundation + +struct ColorPicker: View { + @ObservedObject var pen: Pen + + @State var hue: Double = 1 + @State var saturation: Double = 0 + @State var brightness: Double = 1 + @State var alpha: Double = 1 + + let size: CGFloat = 15 + + var body: some View { + VStack(spacing: 10) { + colorPicker + .frame(width: 180, height: 180) + HStack(spacing: 10) { + Color(hue: hue, saturation: saturation, brightness: brightness) + .overlay { + Image("transparent-grid-square") + .resizable() + .scaleEffect(1.8) + .aspectRatio(contentMode: .fill) + .opacity(0.5) + .overlay { + pen.color + } + .clipShape(Triangle()) + } + .frame(width: size * 2 + 10) + .cornerRadius(5) + VStack(spacing: 10) { + hueSlider + alphaSlider + } + } + } + .padding(10) + .background { + Rectangle() + .fill(.regularMaterial) + .ignoresSafeArea(.all) + } + .onAppear { + let hsba = pen.color.hsba + hue = hsba.hue + saturation = hsba.saturation + brightness = hsba.brightness + alpha = hsba.alpha * 1.43 - 0.43 + } + } + + @ViewBuilder + var colorPicker: some View { + GeometryReader { proxy in + ZStack { + Color(hue: hue, saturation: 1, brightness: 1) + LinearGradient( + colors: [.white, .clear], + startPoint: .leading, + endPoint: .trailing + ) + LinearGradient( + colors: [.black, .clear], + startPoint: .bottom, + endPoint: .top + ) + } + .cornerRadius(5) + .drawingGroup() + .overlay(alignment: .bottomLeading) { + Color(hue: hue, saturation: saturation, brightness: brightness) + .frame(width: size, height: size) + .clipShape(Circle()) + .overlay { + Circle() + .strokeBorder(.white, lineWidth: 2) + } + .offset(x: -size + 5, y: size - 5) + .offset(x: max(proxy.size.width * saturation, size - 10), y: min(proxy.size.height * -brightness, -size + 10)) + } + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { value in + saturation = min(1, max(value.location.x / proxy.size.width, 0)) + brightness = 1 - min(1, max(value.location.y / proxy.size.height, 0)) + updateBaseColor() + } + ) + } + } + + @ViewBuilder + var hueSlider: some View { + GeometryReader { proxy in + ZStack(alignment: .leading) { + LinearGradient( + colors: (0...10).map { Color(hue: Double($0) * 0.1, saturation: 1, brightness: 1) }, + startPoint: .leading, + endPoint: .trailing + ) + Color(hue: hue, saturation: 1, brightness: 1) + .frame(width: size, height: size) + .overlay { + Circle() + .strokeBorder(.white, lineWidth: 2) + } + .clipShape(Circle()) + .offset(x: -size) + .offset(x: max(size, proxy.size.width * hue)) + } + .frame(width: proxy.size.width, height: proxy.size.height) + .clipShape(Capsule()) + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { value in + hue = min(1, max(value.location.x / proxy.size.width, 0)) + updateBaseColor() + } + .onEnded { value in + hue = min(1, max(value.location.x / proxy.size.width, 0)) + updateBaseColor() + } + ) + } + .frame(height: size) + } + + @ViewBuilder + var alphaSlider: some View { + GeometryReader { proxy in + let color = Color(hue: hue, saturation: saturation, brightness: brightness) + ZStack(alignment: .leading) { + LinearGradient( + colors: (3...10).map { color.opacity(0.1 * CGFloat($0)) }, + startPoint: .leading, + endPoint: .trailing + ) + .background { + Image("transparent-grid-rect") + .resizable() + .aspectRatio(contentMode: .fill) + .opacity(0.5) + .background(.white) + } + color + .frame(width: size, height: size) + .overlay { + Circle() + .strokeBorder(.white, lineWidth: 2) + } + .clipShape(Circle()) + .offset(x: -size) + .offset(x: max(size, proxy.size.width * alpha)) + } + .frame(width: proxy.size.width, height: proxy.size.height) + .clipShape(Capsule()) + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { value in + alpha = min(1, max(value.location.x / proxy.size.width, 0)) + updateBaseColor() + } + .onEnded { value in + alpha = min(1, max(value.location.x / proxy.size.width, 0)) + updateBaseColor() + } + ) + } + .frame(height: size) + } + + func updateBaseColor() { + pen.color = Color(hue: hue, saturation: saturation, brightness: brightness).opacity(0.7 * alpha + 0.3) + } +} diff --git a/Memola/Features/Memo/PenDock/PenDockView.swift b/Memola/Features/Memo/PenDock/PenDockView.swift index 4b9140c..ee376c9 100644 --- a/Memola/Features/Memo/PenDock/PenDockView.swift +++ b/Memola/Features/Memo/PenDock/PenDockView.swift @@ -15,41 +15,85 @@ struct PenDockView: View { let factor: CGFloat = 0.95 var body: some View { - ScrollViewReader { proxy in - ScrollView(.vertical, showsIndicators: false) { - LazyVStack(spacing: 0) { - ForEach(tool.pens) { pen in - penView(pen) - .id(pen.id) - .scrollTransition { content, phase in - content - .scaleEffect(phase.isIdentity ? 1 : 0.04, anchor: .trailing) + VStack(alignment: .trailing) { + if let pen = tool.selectedPen { + VStack(spacing: 10) { + Button { + tool.opensColorPicker = true + } label: { + let hsba = pen.color.hsba + Color(hue: hsba.hue, saturation: hsba.saturation, brightness: hsba.brightness) + .overlay { + Image("transparent-grid-square") + .resizable() + .scaleEffect(1.8) + .aspectRatio(contentMode: .fill) + .opacity(0.5) + .overlay { + pen.color + } + .clipShape(Triangle()) } + .clipShape(Capsule()) + .frame(height: 20) + .drawingGroup() } + .hoverEffect(.lift) + .popover(isPresented: $tool.opensColorPicker) { + ColorPicker(pen: pen) + .presentationCompactAdaptation(.popover) + } + Capsule() + .frame(height: 20) } - .padding(.vertical, 10) - .padding(.leading, 40) + .padding() + .frame(width: width * factor - 18) + .background { + RoundedRectangle(cornerRadius: 20) + .fill(.regularMaterial) + } + .transition(.move(edge: .trailing).combined(with: .opacity)) + } else { + Color.clear + .frame(width: width * factor - 18, height: 50) } - .onReceive(tool.scrollPublisher) { id in - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - withAnimation { - proxy.scrollTo(id) + ScrollViewReader { proxy in + ScrollView(.vertical, showsIndicators: false) { + LazyVStack(spacing: 0) { + ForEach(tool.pens) { pen in + penView(pen) + .id(pen.id) + .scrollTransition { content, phase in + content + .scaleEffect(phase.isIdentity ? 1 : 0.04, anchor: .trailing) + } + } + } + .padding(.vertical, 10) + .padding(.leading, 40) + } + .onReceive(tool.scrollPublisher) { id in + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + withAnimation { + proxy.scrollTo(id) + } } } } + .frame(maxHeight:( (height * factor + 10) * 6) + 20) + .fixedSize() + .background(alignment: .trailing) { + RoundedRectangle(cornerRadius: 20) + .fill(.regularMaterial) + .frame(width: width * factor - 18) + } + .clipShape(.rect(cornerRadii: .init(bottomTrailing: 20, topTrailing: 20))) + .overlay(alignment: .bottomLeading) { + newPenButton + .offset(x: 60, y: 10) + } } - .frame(maxHeight:( (height * factor + 10) * 7) + 20) .fixedSize() - .background(alignment: .trailing) { - RoundedRectangle(cornerRadius: 20) - .fill(.regularMaterial) - .frame(width: width * factor - 15) - } - .clipShape(.rect(cornerRadii: .init(bottomTrailing: 20, topTrailing: 20))) - .overlay(alignment: .bottomLeading) { - newPenButton - .offset(x: 60, y: 10) - } } @ViewBuilder @@ -59,7 +103,7 @@ struct PenDockView: View { Image(tip) .resizable() .renderingMode(.template) - .foregroundStyle(Color.rgba(from: pen.color)) + .foregroundStyle(Color.rgba(from: pen.rgba)) } Image(pen.style.icon.base) .resizable() @@ -74,12 +118,13 @@ struct PenDockView: View { tool.selectPen(pen) } } + .padding(.leading, 10) .contextMenu(if: pen.strokeStyle != .eraser) { ControlGroup { Button { let originalPen = pen let pen = PenObject.createObject(\.viewContext, penStyle: originalPen.style) - pen.color = originalPen.color + pen.color = originalPen.rgba pen.isSelected = true pen.tool = tool.object let _pen = Pen(object: pen) @@ -109,7 +154,6 @@ struct PenDockView: View { .contentShape(.dragPreview, .rect(cornerRadius: 10)) } .onDrop(of: [.item], delegate: PenDropDelegate(id: pen.id, tool: tool)) - .padding(.leading, 10) .offset(x: tool.selectedPen === pen ? 0 : 25) } @@ -142,7 +186,7 @@ struct PenDockView: View { Image(tip) .resizable() .renderingMode(.template) - .foregroundStyle(Color.rgba(from: pen.color)) + .foregroundStyle(Color.rgba(from: pen.rgba)) } Image(pen.style.icon.base) .resizable() diff --git a/Memola/Resources/Assets/Assets.xcassets/backgrounds/Contents.json b/Memola/Resources/Assets/Assets.xcassets/backgrounds/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Memola/Resources/Assets/Assets.xcassets/backgrounds/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/Contents.json b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/Contents.json new file mode 100644 index 0000000..a8d92bf --- /dev/null +++ b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "transparency_grid 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "transparency_grid 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "transparency_grid 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/transparency_grid 1.png b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-rect.imageset/transparency_grid 1.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e41498c29a1d563b4bbb52d53a078862441de6 GIT binary patch literal 4196 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 X&*)Qh(p4yc00000NkvXXu0mjfZw;xx literal 0 HcmV?d00001 diff --git a/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/Contents.json b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/Contents.json new file mode 100644 index 0000000..a8d92bf --- /dev/null +++ b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "transparency_grid 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "transparency_grid 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "transparency_grid 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/transparency_grid 1.png b/Memola/Resources/Assets/Assets.xcassets/backgrounds/transparent-grid-square.imageset/transparency_grid 1.png new file mode 100644 index 0000000000000000000000000000000000000000..b340c389cfd9cb9d94d3073c50bfa243db491859 GIT binary patch literal 2324 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�`I@9j^^)%%|WYsoz%GcVPI_tCE!mS#9 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 HuOj~!kp6g! literal 0 HcmV?d00001