quote
$(Expr(:toplevel, quote
    gboxed_types = Any[]
    begin
        struct _GskColorStop
            offset::Float32
            color::_GdkRGBA
        end
        mutable struct GskColorStop
            handle::Ptr{_GskColorStop}
        end
        unsafe_convert(::Type{Ptr{_GskColorStop}}, box::GskColorStop) = begin
                convert(Ptr{_GskColorStop}, box.handle)
            end
    end
    begin
        struct _GskParseLocation
            bytes::UInt64
            chars::UInt64
            lines::UInt64
            line_bytes::UInt64
            line_chars::UInt64
        end
        mutable struct GskParseLocation
            handle::Ptr{_GskParseLocation}
        end
        unsafe_convert(::Type{Ptr{_GskParseLocation}}, box::GskParseLocation) = begin
                convert(Ptr{_GskParseLocation}, box.handle)
            end
    end
    begin
        mutable struct GskRoundedRect
            handle::Ptr{GskRoundedRect}
        end
        const _GskRoundedRect = GskRoundedRect
    end
    begin
        struct _GskShadow
            color::_GdkRGBA
            dx::Float32
            dy::Float32
            radius::Float32
        end
        mutable struct GskShadow
            handle::Ptr{_GskShadow}
        end
        unsafe_convert(::Type{Ptr{_GskShadow}}, box::GskShadow) = begin
                convert(Ptr{_GskShadow}, box.handle)
            end
    end
    mutable struct GskTransform <: GBoxed
        handle::Ptr{GskTransform}
        begin
            (GLib.g_type(::Type{T}) where T <: GskTransform) = begin
                    ccall(("gsk_transform_get_type", libgtk4), GType, ())
                end
            function GskTransform(ref::Ptr{T}, own::Bool = false) where T <: GBoxed
                x = new(ref)
                if own
                    finalizer(x) do x
                        GLib.delboxed(x)
                    end
                end
                x
            end
            push!(gboxed_types, GskTransform)
        end
    end
    function GskTransform()
        G_.Transform_new()
    end
    @doc "A color stop in a gradient node.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/struct.ColorStop.html)." GskColorStop
    @doc "A location in a parse buffer.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/struct.ParseLocation.html)." GskParseLocation
    @doc "A rectangular region with rounded corners.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/struct.RoundedRect.html)." GskRoundedRect
    @doc "The shadow parameters in a shadow node.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/struct.Shadow.html)." GskShadow
    @doc "`GskTransform` is an object to describe transform matrices.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/struct.Transform.html)." GskTransform
    begin
        abstract type GskRenderer <: GObject end
        mutable struct GskRendererLeaf <: GskRenderer
            handle::Ptr{GObject}
            function GskRendererLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskRendererLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskRenderer] = GskRendererLeaf
    end
    begin
        abstract type GskBroadwayRenderer <: GskRenderer end
        mutable struct GskBroadwayRendererLeaf <: GskBroadwayRenderer
            handle::Ptr{GObject}
            function GskBroadwayRendererLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskBroadwayRendererLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskBroadwayRenderer] = GskBroadwayRendererLeaf
    end
    begin
        abstract type GskCairoRenderer <: GskRenderer end
        mutable struct GskCairoRendererLeaf <: GskCairoRenderer
            handle::Ptr{GObject}
            function GskCairoRendererLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskCairoRendererLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskCairoRenderer] = GskCairoRendererLeaf
    end
    begin
        abstract type GskGLRenderer <: GskRenderer end
        mutable struct GskGLRendererLeaf <: GskGLRenderer
            handle::Ptr{GObject}
            function GskGLRendererLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskGLRendererLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskGLRenderer] = GskGLRendererLeaf
    end
    begin
        abstract type GskGLShader <: GObject end
        mutable struct GskGLShaderLeaf <: GskGLShader
            handle::Ptr{GObject}
            function GskGLShaderLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskGLShaderLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskGLShader] = GskGLShaderLeaf
    end
    begin
        abstract type GskNglRenderer <: GskRenderer end
        mutable struct GskNglRendererLeaf <: GskNglRenderer
            handle::Ptr{GObject}
            function GskNglRendererLeaf(handle::Ptr{GObject}, owns = false)
                if handle == C_NULL
                    error("Cannot construct GskNglRendererLeaf with a NULL pointer")
                end
                GLib.gobject_maybe_sink(handle, owns)
                return gobject_ref(new(handle))
            end
        end
        gtype_wrapper_cache[:GskNglRenderer] = GskNglRendererLeaf
    end
    begin
        abstract type GskRenderNode end
        Base.convert(::Type{GskRenderNode}, ptr::Ptr{GskRenderNode}) = begin
                GskRenderNodeLeaf(ptr)
            end
        Base.unsafe_convert(::Type{Ptr{GskRenderNode}}, o::GskRenderNode) = begin
                o.handle
            end
    end
    begin
        mutable struct GskRenderNodeLeaf <: GskRenderNode
            handle::Ptr{GskRenderNode}
        end
    end
    function GskBroadwayRenderer()
        G_.BroadwayRenderer_new()
    end
    function GskCairoRenderer()
        G_.CairoRenderer_new()
    end
    function GskGLRenderer()
        G_.GLRenderer_new()
    end
    function GskGLShader(_sourcecode::GBytes; kwargs...)
        obj = G_.GLShader_new_from_bytes(_sourcecode)
        GLib.setproperties!(obj; kwargs...)
        obj
    end
    function GskGLShader(_resource_path::Union{AbstractString, Symbol}; kwargs...)
        obj = G_.GLShader_new_from_resource(_resource_path)
        GLib.setproperties!(obj; kwargs...)
        obj
    end
    function GskRenderer(_surface::GdkSurface; kwargs...)
        obj = G_.Renderer_new_for_surface(_surface)
        GLib.setproperties!(obj; kwargs...)
        obj
    end
    @doc "A GSK renderer that is using cairo.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/class.CairoRenderer.html)." GskCairoRenderer
    @doc "A `GskGLShader` is a snippet of GLSL that is meant to run in the\nfragment shader of the rendering pipeline.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/class.GLShader.html)." GskGLShader
    @doc "`GskRenderNode` is the basic block in a scene graph to be\nrendered using [class@Gsk.Renderer].\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/class.RenderNode.html)." GskRenderNode
    @doc "`GskRenderer` is a class that renders a scene graph defined via a\ntree of [class@Gsk.RenderNode] instances.\n \nDetails can be found in the [GTK docs](https://docs.gtk.org/gsk4/class.Renderer.html)." GskRenderer
    export GskColorStop, _GskColorStop, GskParseLocation, _GskParseLocation, GskRoundedRect, _GskRoundedRect, GskShadow, _GskShadow, GskTransform, GskBroadwayRenderer, GskBroadwayRendererLeaf, GskCairoRenderer, GskCairoRendererLeaf, GskGLRenderer, GskGLRendererLeaf, GskGLShader, GskGLShaderLeaf, GskNglRenderer, GskNglRendererLeaf, GskRenderNode, GskRenderer
end))
end
