Code Monkey home page Code Monkey logo

oklchgradient's Introduction

OKLCH gradients for SwiftUI

This is a drop-in replacement for SwiftUI's built-in LinearGradient, RadialGradient, EllipticalGradient and AngularGradient shape styles that utilizes OKLCH color blending to create more visually appealing gradients.

Implemented using iOS 17's Shader API, since that seems to be the only way to write shape styles with custom rendering without relying on private APIs.

Install using SPM:

dependencies: [
    .package(url: "https://github.com/fwrs/OKLCHGradient.git", .upToNextMajor(from: "1.0.8"))
]

To use just prepend OKLCH to the gradient struct name:

// change

Rectangle()
    .background(LinearGradient(
        colors: [.blue, .yellow],
        startPoint: .leading,
        endPoint: .trailing
    ))

// to

import OKLCHGradient

Rectangle()
    .background(OKLCHLinearGradient(
        colors: [.blue, .yellow],
        startPoint: .leading,
        endPoint: .trailing
    ))

And enjoy the difference:

Screenshot comparing a regular SwiftUI gradient to an OKLCH gradient. The regular gradient utilizes a grey color as an intermediate between blue and yellow colors, while OKLCH uses green, which is the color positioned between blue and yellow on a standard color wheel.

Note

At the moment it's not possible to pass AnyGradient structs to OKLCH gradients because there isn't a way to read color stops from an AnyGradient using public APIs. This functionality is limited to Apple's own built-in gradients.

oklchgradient's People

Contributors

fwrs avatar

Stargazers

Eric Viana avatar Xiaohai.lin avatar carrie avatar Zachary Gibson avatar Rakhim Abdullayev avatar iya avatar  avatar Ryan Moelter avatar Kiethen W avatar  avatar  avatar Juan Diosdado avatar  avatar Matt Bonney avatar allen avatar skipp avatar An Tran avatar jinhu avatar  avatar  avatar Firdavs Khaydarov avatar Michael Carvin avatar  avatar  avatar Dev4Jam avatar Cameron Shemilt avatar  avatar Akira MATSUDA avatar Emory Dunn avatar Johannes Ebeling avatar Miká Kruschel avatar adamz avatar Joe Fabisevich avatar Yury Korolev avatar Bryan Woods avatar Suraj avatar Vladyslav Chabaniuk avatar Felix Green avatar Pedro Guimarães avatar Brandon Kane avatar  avatar Andrey avatar Zaharia Andrei avatar ninedraft avatar  avatar Mathew Gacy avatar

Watchers

 avatar  avatar

oklchgradient's Issues

Methods to call shader functions in SwiftUI

Hi @fwrs

Just wanted to ask if you know any other ways to call [[ stitchable ]] MSL functions in SwiftUI other than these four methods:

Abide either the colorEffect, layerEffect or the distortionEffect function signatures & then create View extensions which utilizes the filterEffect ...

Create a struct which conforms to ShapeStyle, View, Sendable & call the shader function in the func resolve() which is required for the struct to conform to ShapeStyle (The approach you used in your package).
This approach has a small downside. The metal function is called in a method that returns some ShapeStyle & as the result, you don't get some advantages of a method which returns some View (Shader doesn't conform to View) ...
So, in order to gain those advantages, you'd have to create another View struct & call the former ShapeStyle inside var body.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.