Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions Sources/OpenSwiftUICore/Graphic/BlurStyle/BlurStyle.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
//
// BlurStyle.swift
// OpenSwiftUICore
//
// Audited for iOS 6.5.4
// Status: Complete

package import Foundation

package struct BlurStyle: Equatable {
package var radius: CGFloat
package var isOpaque: Bool
package var dither: Bool

package init(
radius: CGFloat = 0,
isOpaque: Bool = false,
dither: Bool = false,
hardEdges: Bool = false
) {
self.radius = radius
self.isOpaque = isOpaque
self.dither = dither
}

package var isIdentity: Bool {
radius <= 0.0
}
}

extension BlurStyle: Animatable {
package var animatableData: CGFloat {
get { radius }
set { radius = newValue }
}
}

extension BlurStyle: ProtobufMessage {
package func encode(to encoder: inout ProtobufEncoder) {
encoder.cgFloatField(1, radius)
encoder.boolField(2, isOpaque)
encoder.boolField(3, dither)
}

package init(from decoder: inout ProtobufDecoder) throws {
var style = BlurStyle()
while let field = try decoder.nextField() {
switch field.tag {
case 1: style.radius = try decoder.cgFloatField(field)
case 2: style.isOpaque = try decoder.boolField(field)
case 3: style.dither = try decoder.boolField(field)
default: try decoder.skipField(field)
}
}
self = style
}
}
100 changes: 100 additions & 0 deletions Sources/OpenSwiftUICore/Graphic/BlurStyle/VariableBlurStyle.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
//
// VariableBlurStyle.swift
// OpenSwiftUICore
//
// Audited for iOS 6.5.4
// Status: Complete

package import Foundation

package struct VariableBlurStyle: Equatable {
package enum Mask: Equatable {
case none
case image(GraphicsImage)
}

package var radius: CGFloat
package var isOpaque: Bool
package var dither: Bool
package var mask: VariableBlurStyle.Mask

package init(
radius: CGFloat = 0,
isOpaque: Bool = false,
dither: Bool = false,
mask: VariableBlurStyle.Mask = .none
) {
self.radius = radius
self.isOpaque = isOpaque
self.dither = dither
self.mask = mask
}

package var caFilterRadius: CGFloat {
get { radius * 0.5 }
set { radius = newValue / 0.5 }
}

package var isIdentity: Bool {
radius <= 0.0 || mask == .none
}
}

extension VariableBlurStyle: RendererEffect {
package func effectValue(size: CGSize) -> DisplayList.Effect {
.filter(.variableBlur(self))
}
}

extension VariableBlurStyle: Animatable {
package var animatableData: CGFloat {
get { radius }
set { radius = newValue }
}
}

extension VariableBlurStyle: ProtobufMessage {
package func encode(to encoder: inout ProtobufEncoder) throws {
encoder.cgFloatField(1, radius)
encoder.boolField(2, isOpaque)
encoder.boolField(3, dither)
try encoder.messageField(4, mask)
}

package init(from decoder: inout ProtobufDecoder) throws {
var style = VariableBlurStyle()
while let field = try decoder.nextField() {
switch field.tag {
case 1: style.radius = try decoder.cgFloatField(field)
case 2: style.isOpaque = try decoder.boolField(field)
case 3: style.dither = try decoder.boolField(field)
case 4: style.mask = try decoder.messageField(field)
default: try decoder.skipField(field)
}
}
self = style
}
}

extension VariableBlurStyle.Mask: ProtobufMessage {
package func encode(to encoder: inout ProtobufEncoder) throws {
switch self {
case .none: break
case .image(let image): try encoder.messageField(1, image)
}
}

package init(from decoder: inout ProtobufDecoder) throws {
var mask = VariableBlurStyle.Mask.none
while let field = try decoder.nextField() {
switch field.tag {
case 1:
let image: GraphicsImage = try decoder.messageField(field)
mask = .image(image)
default:
try decoder.skipField(field)
}
}
self = mask
}
}
18 changes: 4 additions & 14 deletions Sources/OpenSwiftUICore/Graphic/GraphicsFilter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
// WIP

package enum GraphicsFilter {
// case blur(BlurStyle)
// case variableBlur(VariableBlurStyle)
case blur(BlurStyle)
case variableBlur(VariableBlurStyle)
case averageColor
// case shadow(ResolvedShadowStyle)
case projection(ProjectionTransform)
Expand Down Expand Up @@ -36,10 +36,6 @@ package enum GraphicsFilter {
self.amount = amount
self.bias = bias
}

package static func == (lhs: GraphicsFilter.ColorMonochrome, rhs: GraphicsFilter.ColorMonochrome) -> Bool {
lhs.color == rhs.color && lhs.amount == rhs.amount && lhs.bias == rhs.bias
}
}

package struct Curve: Equatable {
Expand All @@ -61,10 +57,6 @@ package enum GraphicsFilter {
self.curve = curve
self.amount = amount
}

package static func == (a: GraphicsFilter.LuminanceCurve, b: GraphicsFilter.LuminanceCurve) -> Bool {
a.curve == b.curve && a.amount == b.amount
}
}

package struct ColorCurves: Equatable {
Expand All @@ -79,10 +71,6 @@ package enum GraphicsFilter {
self.blueCurve = blueCurve
self.opacityCurve = opacityCurve
}

package static func == (a: GraphicsFilter.ColorCurves, b: GraphicsFilter.ColorCurves) -> Bool {
a.redCurve == b.redCurve && a.greenCurve == b.greenCurve && a.blueCurve == b.blueCurve && a.opacityCurve == b.opacityCurve
}
}

// package struct ShaderFilter {
Expand All @@ -98,6 +86,7 @@ package enum GraphicsFilter {

package enum GraphicsBlendMode: Equatable {
case blendMode(GraphicsContext.BlendMode)

case caFilter(AnyObject)

package init(_ mode: BlendMode) {
Expand Down Expand Up @@ -128,6 +117,7 @@ package enum GraphicsBlendMode: Equatable {
}

package static let normal: GraphicsBlendMode = .blendMode(.normal)

package static func == (lhs: GraphicsBlendMode, rhs: GraphicsBlendMode) -> Bool {
switch (lhs, rhs) {
case (.blendMode(let lhs), .blendMode(let rhs)): lhs == rhs
Expand Down
26 changes: 25 additions & 1 deletion Sources/OpenSwiftUICore/Render/DisplayList/DisplayList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,14 @@ extension DisplayList {
}
}

extension _ViewInputs {
@inline(__always)
var displayListOptions: DisplayList.Options {
get { self[DisplayList.Options.self] }
set { self[DisplayList.Options.self] = newValue }
}
}

extension PreferencesInputs {
@inline(__always)
package var requiresDisplayList: Bool {
Expand Down Expand Up @@ -506,7 +514,23 @@ public struct ContentTransition {
package struct State {}
}

package struct GraphicsImage {}
package struct GraphicsImage: Equatable {
package init() {}
}

extension GraphicsImage: ProtobufMessage {
package func encode(to encoder: inout ProtobufEncoder) throws {
// GraphicsImage is currently empty, no fields to encode
}

package init(from decoder: inout ProtobufDecoder) throws {
// GraphicsImage is currently empty, skip all fields
while let field = try decoder.nextField() {
try decoder.skipField(field)
}
self = GraphicsImage()
}
}
package struct ResolvedShadowStyle {}

package struct StyledTextContentView {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ extension _ViewInputs {
}

package func pushIdentity(_ identity: _DisplayList_Identity) {

guard base.needsStableDisplayListIDs else {
return
}
Expand Down
Loading