From be635807b34999b801dd1783416a99f304bee8ff Mon Sep 17 00:00:00 2001 From: Steffen Haug Date: Sun, 8 Sep 2024 22:01:29 +0200 Subject: [PATCH 1/2] Run JuliaFormatter --- src/QML.jl | 94 ++++++++++++++++++++++---------------------- src/itemmodel.jl | 56 +++++++++++++------------- src/makie_support.jl | 28 ++++++------- src/runexamples.jl | 8 ++-- 4 files changed, 93 insertions(+), 93 deletions(-) diff --git a/src/QML.jl b/src/QML.jl index 45b334e..e996c98 100644 --- a/src/QML.jl +++ b/src/QML.jl @@ -39,12 +39,12 @@ end const QStringList = QList{QString} # Make sure functions accepting a QString argument also accept a Julia string -CxxWrap.argument_overloads(::Type{<:QString}) = [QString,String] +CxxWrap.argument_overloads(::Type{<:QString}) = [QString, String] @wrapfunctions # Protect items stored in a QML context from GC -global __context_gc_protection = Dict{ConstCxxPtr{QQmlContext}, Vector{Any}}() +global __context_gc_protection = Dict{ConstCxxPtr{QQmlContext},Vector{Any}}() # Clear GC protection list when the context is destroyed function on_context_destroyed(ctx) @@ -89,7 +89,7 @@ Load a QML file, creating a [`QML.QQmlApplicationEngine`](@ref), and setting the function loadqml(qmlfilename; kwargs...) qml_engine = init_qmlapplicationengine() ctx = root_context(CxxRef(qml_engine)) - for (key,value) in kwargs + for (key, value) in kwargs set_context_property(ctx, String(key), value) end try @@ -121,7 +121,7 @@ function watchqml(qview::CxxPtr{QQuickView}, qmlfile) QML.clearComponentCache(engine) set_source(qview, QUrlFromLocalFile(path)) end - + watcher = QML.QFileSystemWatcher(engine) QML.addPath(watcher, qmlfile) QML.connect_file_changed_signal(watcher, clearcache) @@ -172,10 +172,10 @@ end function __init__() @initcxx - @require GLMakie="e9467ef8-e4e7-5192-8a1a-b1aee30e663a" include(joinpath(@__DIR__, "makie_support.jl")) + @require GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" include(joinpath(@__DIR__, "makie_support.jl")) loadqmljll(jlqml_jll.Qt6Declarative_jll) - @require Qt65Compat_jll="f5784262-74e5-52be-b835-f3e8a3cf8710" @eval loadqmljll(Qt65Compat_jll) + @require Qt65Compat_jll = "f5784262-74e5-52be-b835-f3e8a3cf8710" @eval loadqmljll(Qt65Compat_jll) global ARGV = ArgcArgv([Base.julia_cmd()[1], ARGS...]) global APPLICATION = QGuiApplication(ARGV.argc, getargv(ARGV)) @@ -185,17 +185,17 @@ end QString(s::String) = fromStdWString(StdWString(s)) Base.ncodeunits(s::QString)::Int = cppsize(s) Base.codeunit(s::QString) = UInt16 -Base.codeunit(s::QString, i::Integer) = uint16char(s, i-1) -Base.isvalid(s::QString, i::Integer) = isvalidindex(s, i-1) +Base.codeunit(s::QString, i::Integer) = uint16char(s, i - 1) +Base.isvalid(s::QString, i::Integer) = isvalidindex(s, i - 1) function Base.iterate(s::QString, i::Integer=1) - if !isvalid(s,i) + if !isvalid(s, i) return nothing end - (charcode, nexti) = get_iterate(s,i-1) + (charcode, nexti) = get_iterate(s, i - 1) if nexti == -1 return nothing end - return(Char(charcode),nexti+1) + return (Char(charcode), nexti + 1) end Base.convert(::Type{<:QString}, s::String) = QString(s) QString(u::QUrl) = toString(u) @@ -210,11 +210,11 @@ const QVariantList = QList{QVariant} const QVariantMap = QMap{QString,QVariant} # Conversion to the strongly-typed QVariant interface -@inline QVariant(x) = QVariant(Any,x) +@inline QVariant(x) = QVariant(Any, x) @inline QVariant(x::T) where {T<:Union{Number,Ref,CxxWrap.SafeCFunction,QVariantMap,Nothing}} = QVariant(T, x) -@inline QVariant(x::AbstractString) = QVariant(QString,QString(x)) -@inline QVariant(x::QString) = QVariant(QString,x) -@inline QVariant(x::QObject) = QVariant(CxxPtr{QObject},CxxPtr(x)) +@inline QVariant(x::AbstractString) = QVariant(QString, QString(x)) +@inline QVariant(x::QString) = QVariant(QString, x) +@inline QVariant(x::QObject) = QVariant(CxxPtr{QObject}, CxxPtr(x)) @inline QVariant(x::QVariant) = x QVariant(::Type{Bool}, b::Bool) = QVariant(CxxBool, CxxBool(b)) @@ -231,9 +231,9 @@ end @inline @cxxdereference setValue(v::QVariant, x::T) where {T} = setValue(T, v, x) QVariant(::Type{Nothing}, ::Nothing) = QVariant() @cxxdereference value(::Type{Nothing}, ::QML.QVariant) = nothing -@cxxdereference value(v::QVariant) = CxxWrap.dereference_argument(value(type(v),v)) +@cxxdereference value(v::QVariant) = CxxWrap.dereference_argument(value(type(v), v)) Base.convert(::Type{QVariant}, x::T) where {T} = QVariant(x) -Base.convert(::Type{T}, x::QVariant) where {T} = convert(T,value(x)) +Base.convert(::Type{T}, x::QVariant) where {T} = convert(T, value(x)) Base.convert(::Type{Any}, x::QVariant) = x Base.convert(::Type{<:QVariant}, x::QVariant) = x @@ -242,29 +242,29 @@ Base.convert(::Type{<:QVariant}, x::QVariant) = x # QList Base.IndexStyle(::Type{<:QList}) = IndexLinear() Base.size(v::QList) = (Int(cppsize(v)),) -Base.getindex(v::QList, i::Int) = cppgetindex(v,i-1)[] -Base.setindex!(v::QList{T}, val, i::Int) where {T} = cppsetindex!(v, convert(T,val), i-1) +Base.getindex(v::QList, i::Int) = cppgetindex(v, i - 1)[] +Base.setindex!(v::QList{T}, val, i::Int) where {T} = cppsetindex!(v, convert(T, val), i - 1) function Base.push!(v::QList{T}, x) where {T} - push_back(v, convert(T,x)) + push_back(v, convert(T, x)) return v end Base.empty!(l::QList) = clear(l) -Base.deleteat!(l::QList, i::Integer) = removeAt(l, i-1) +Base.deleteat!(l::QList, i::Integer) = removeAt(l, i - 1) # QHash Base.isempty(h::QHash) = empty(h) Base.length(h::QHash) = Int(cppsize(h)) Base.haskey(h::QHash, key) = QML.contains(h, key) function Base.getindex(h::QHash{K,V}, key) where {K,V} - if !haskey(h,key) + if !haskey(h, key) throw(KeyError(key)) end - return cppgetindex(h, convert(K,key))[] + return cppgetindex(h, convert(K, key))[] end -Base.setindex!(h::QHash{K,V}, val, key) where {K,V} = cppsetindex!(h, convert(V,val), convert(K,key)) +Base.setindex!(h::QHash{K,V}, val, key) where {K,V} = cppsetindex!(h, convert(V, val), convert(K, key)) Base.empty!(h::QHash) = clear(h) -Base.delete!(h::QHash{K,V}, key) where {K,V} = remove(h, convert(K,key)) -Base.:(==)(a::QHashIterator, b::QHashIterator) = iteratorisequal(a,b) +Base.delete!(h::QHash{K,V}, key) where {K,V} = remove(h, convert(K, key)) +Base.:(==)(a::QHashIterator, b::QHashIterator) = iteratorisequal(a, b) function _qhash_iteration_tuple(h::QHash, state::QHashIterator) if state == iteratorend(h) return nothing @@ -281,15 +281,15 @@ Base.isempty(h::QMap) = empty(h) Base.length(h::QMap) = Int(cppsize(h)) Base.haskey(h::QMap, key) = QML.contains(h, key) function Base.getindex(h::QMap{K,V}, key) where {K,V} - if !haskey(h,key) + if !haskey(h, key) throw(KeyError(key)) end - return cppgetindex(h, convert(K,key))[] + return cppgetindex(h, convert(K, key))[] end -Base.setindex!(h::QMap{K,V}, val, key) where {K,V} = cppsetindex!(h, convert(V,val), convert(K,key)) +Base.setindex!(h::QMap{K,V}, val, key) where {K,V} = cppsetindex!(h, convert(V, val), convert(K, key)) Base.empty!(h::QMap) = clear(h) -Base.delete!(h::QMap{K,V}, key) where {K,V} = remove(h, convert(K,key)) -Base.:(==)(a::QMapIterator, b::QMapIterator) = iteratorisequal(a,b) +Base.delete!(h::QMap{K,V}, key) where {K,V} = remove(h, convert(K, key)) +Base.:(==)(a::QMapIterator, b::QMapIterator) = iteratorisequal(a, b) function _qmap_iteration_tuple(h::QMap, state::QMapIterator) if state == iteratorend(h) return nothing @@ -309,7 +309,7 @@ function julia_call(f, argptr::Ptr{Cvoid}) end function get_julia_call() - return @cfunction(julia_call, Ptr{Cvoid}, (Any,Ptr{Cvoid})) + return @cfunction(julia_call, Ptr{Cvoid}, (Any, Ptr{Cvoid})) end # QQmlPropertyMap indexing interface @@ -322,10 +322,10 @@ function on_value_changed end mutable struct JuliaPropertyMap <: AbstractDict{String,Any} propertymap::_JuliaPropertyMap - dict::Dict{String, Any} + dict::Dict{String,Any} function JuliaPropertyMap() - result = new(_JuliaPropertyMap(), Dict{String, Any}()) + result = new(_JuliaPropertyMap(), Dict{String,Any}()) set_julia_value(result.propertymap, result) connect_value_changed(result.propertymap, result, on_value_changed) finalizer(result) do jpm @@ -379,7 +379,7 @@ julia> mktempdir() do folder """ function JuliaPropertyMap(pairs::Pair{<:AbstractString,<:Any}...) result = JuliaPropertyMap() - for (k,v) in pairs + for (k, v) in pairs result[k] = v end return result @@ -404,7 +404,7 @@ function (updater::QmlPropertyUpdater)(x) updater.propertymap[updater.key] = x end -setactive!(::Any,::Bool) = nothing +setactive!(::Any, ::Bool) = nothing setactive!(updater::QmlPropertyUpdater, active::Bool) = (updater.active = active) Base.getindex(jpm::JuliaPropertyMap, k::AbstractString) = jpm.dict[k] @@ -413,7 +413,7 @@ Base.get(jpm::JuliaPropertyMap, k::AbstractString, def) = get(jpm.dict, k, def) function Base.delete!(jpm::JuliaPropertyMap, k::AbstractString) storedvalue = jpm.dict[k] if storedvalue isa Observable - for (_,observer) in filter(x -> x[2] isa QmlPropertyUpdater, Observables.listeners(storedvalue)) + for (_, observer) in filter(x -> x[2] isa QmlPropertyUpdater, Observables.listeners(storedvalue)) if observer.propertymap == jpm.propertymap off(storedvalue, observer) end @@ -600,8 +600,8 @@ function Base.display(d::JuliaDisplay, x) supported_types = (MIME"image/svg+xml"(), MIME"image/png"()) write_methods = (load_svg, load_png) written = false - for (t,write_method) in zip(supported_types, write_methods) - if showable(t,x) + for (t, write_method) in zip(supported_types, write_methods) + if showable(t, x) Base.show(buf, t, x) write_method(d, take!(buf)) written = true @@ -609,7 +609,7 @@ function Base.display(d::JuliaDisplay, x) end end if !written - throw(MethodError(display, (d,x))) + throw(MethodError(display, (d, x))) end end @@ -626,14 +626,14 @@ include("itemmodel.jl") global _async_timer function exec_async() - newrepl = @async Base.run_main_repl(true,true,true,true,true) + newrepl = @async Base.run_main_repl(true, true, true, true, true) while !istaskdone(newrepl) - for (updater, x) in _queued_properties - updater.propertymap[updater.key] = x - end - empty!(_queued_properties) - process_events() - sleep(0.015) + for (updater, x) in _queued_properties + updater.propertymap[updater.key] = x + end + empty!(_queued_properties) + process_events() + sleep(0.015) end QML.quit(QML.get_qmlengine()) QML.quit() diff --git a/src/itemmodel.jl b/src/itemmodel.jl index 8dc03d8..85e9e6f 100644 --- a/src/itemmodel.jl +++ b/src/itemmodel.jl @@ -4,9 +4,9 @@ const RoleNames = QHash{Int32,QByteArray} const FunctionCollection = Dict{Int32,Any} # Hack to add numbers and roles -Base.:+(a::QML.ItemDataRole, b::Integer) = convert(Int32,a) + b +Base.:+(a::QML.ItemDataRole, b::Integer) = convert(Int32, a) + b # Allow roles as keys in Dicts: -Base.trailing_zeros(role::ItemDataRole) = Base.trailing_zeros(convert(Int32,role)) +Base.trailing_zeros(role::ItemDataRole) = Base.trailing_zeros(convert(Int32, role)) Base.:(>>)(a::ItemDataRole, b::Int64) = convert(Int32, a) >> b Base.:(>>)(a::ItemDataRole, b::Int32) = convert(Int32, a) >> b mutable struct ItemModelData{DataT} @@ -25,8 +25,8 @@ mutable struct ItemModelData{DataT} end Base.values(itemmodel::JuliaItemModel) = get_julia_data(itemmodel).values -rowcount(m::ItemModelData) = Int32(Base.size(m.values[],1)) -colcount(m::ItemModelData) = Int32(Base.size(m.values[],2)) +rowcount(m::ItemModelData) = Int32(Base.size(m.values[], 1)) +colcount(m::ItemModelData) = Int32(Base.size(m.values[], 2)) rolenames(m::ItemModelData) = m.roles function rolegetter(m::ItemModelData, role::Integer) @@ -35,11 +35,11 @@ function rolegetter(m::ItemModelData, role::Integer) end function isvalidindex(values, row, col) - if row ∉ axes(values,1) + if row ∉ axes(values, 1) @warn "row $row is out of range for listmodel" return false end - if col ∉ axes(values,2) + if col ∉ axes(values, 2) @warn "column $col is out of range for listmodel" return false end @@ -51,7 +51,7 @@ function data(m::ItemModelData, role::Integer, row::Integer, col::Integer) return QVariant() end rolefunc = rolegetter(m, role) - return QVariant(rolefunc(m.values[][row,col])) + return QVariant(rolefunc(m.values[][row, col])) end # By default, we just return the column or row number as header data @@ -69,7 +69,7 @@ Set `f` as function to call when getting header data. The signature of of should Here, `data` is the internal data array stored in the model, `row_or_col` is the index of the row or column, `orientation` is either `QML.Horizontal` for column headers or `QML.Vertical` for row headers and `role` is an integer describing the role -(e.g. QML.DisplayRole) +(e.g. QML.DisplayRole) """ setheadergetter!(itemmodel::JuliaItemModel, f::Function) = (get_julia_data(itemmodel).headerdata = f) @@ -117,7 +117,7 @@ Set `f` as function to call when setting header data. The signature of of should ``` f(data, row_or_col, orientation, value, role) ``` -Here, `value` is the value for the given header item. The other arguments are the same as in [`setheadergetter!`](@ref) +Here, `value` is the value for the given header item. The other arguments are the same as in [`setheadergetter!`](@ref) """ setheadersetter!(itemmodel::JuliaItemModel, f::Function) = (get_julia_data(itemmodel).setheaderdata = f) @@ -155,9 +155,9 @@ function append_row!(m::ItemModelData, row::QVariantMap) @warn "Can't append row $row, not all columns were found" end if rowcount(m) > 0 - newrow = deepcopy(m.values[][end]) + newrow = deepcopy(m.values[][end]) push!(m.values[], newrow) - for (rolename,val) in row + for (rolename, val) in row roleidx = roleindex(m, string(rolename)) rowidx = rowcount(m) m.setters[roleidx](m.values[], value(val), rowidx, 1) @@ -194,16 +194,16 @@ function insert_row!(m::ItemModelData, rowidx, row::AbstractVector{QVariant}) end ValT = typeof(m.values[]) startidx = axes(m.values[])[1][1] - m.values[] = vcat(m.values[][startidx:rowidx-1,:], ValT(value.(row)'), m.values[][rowidx:end,:]) + m.values[] = vcat(m.values[][startidx:rowidx-1, :], ValT(value.(row)'), m.values[][rowidx:end, :]) return end function make_move_permutation(values, fromidx, toidx, nbitems, dim) - permutation = collect(axes(values,dim)) - fromrange = fromidx:fromidx+nbitems-1 + permutation = collect(axes(values, dim)) + fromrange = fromidx:fromidx+nbitems-1 deleteat!(permutation, fromrange) - for (i,x) in enumerate(fromrange) - insert!(permutation, toidx+i-1, x) + for (i, x) in enumerate(fromrange) + insert!(permutation, toidx + i - 1, x) end return permutation end @@ -218,7 +218,7 @@ end if ndims(values) == 1 values .= values[permutation] else - values .= values[permutation,:] + values .= values[permutation, :] end end_move_rows(m) end @@ -232,11 +232,11 @@ end @cxxdereference function set_row!(m::JuliaItemModel, rowidx, row::QVariant) modeldata = get_julia_data(m) set_row!(modeldata, rowidx, value(row)) - emit_data_changed(m, rowidx, 1, rowidx, Base.size(modeldata.values[],2)) + emit_data_changed(m, rowidx, 1, rowidx, Base.size(modeldata.values[], 2)) end function set_row!(modeldata::ItemModelData, rowidx, row::AbstractVector{QVariant}) - modeldata.values[][rowidx,:] .= value.(row) + modeldata.values[][rowidx, :] .= value.(row) end @cxxdereference function append_column!(m::JuliaItemModel, column::QVariant) @@ -248,7 +248,7 @@ end end function append_column!(m::ItemModelData, column::AbstractVector{QVariant}) - newcol = similar(m.values[], eltype(m.values[]), (length(column),1)) + newcol = similar(m.values[], eltype(m.values[]), (length(column), 1)) newcol .= value.(column) m.values[] = hcat(m.values[], newcol) end @@ -263,7 +263,7 @@ end function insert_column!(m::ItemModelData, columnidx, column::AbstractVector{QVariant}) ValT = typeof(m.values[]) startidx = axes(m.values[])[2][1] - m.values[] = hcat(m.values[][:,startidx:columnidx-1], ValT(value.(column)), m.values[][:,columnidx:end]) + m.values[] = hcat(m.values[][:, startidx:columnidx-1], ValT(value.(column)), m.values[][:, columnidx:end]) return end @@ -284,13 +284,13 @@ end headervalues = [] if m.setheaderdata != defaultsetheaderdata! for i in 1:colcount(m) - if !(columnidx <= i < columnidx+ncolumns) + if !(columnidx <= i < columnidx + ncolumns) push!(headervalues, m.headerdata(m.values[], i, QML.Horizontal, DisplayRole)) end end end - m.values[] = hcat(m.values[][:,1:columnidx-1], m.values[][:,(columnidx+ncolumns):end]) - for (i,h) in enumerate(headervalues) + m.values[] = hcat(m.values[][:, 1:columnidx-1], m.values[][:, (columnidx+ncolumns):end]) + for (i, h) in enumerate(headervalues) m.setheaderdata(m.values[], i, QML.Horizontal, h, EditRole) end end_remove_columns(itemmodel) @@ -299,11 +299,11 @@ end @cxxdereference function set_column!(m::JuliaItemModel, columnidx, column::QVariant) modeldata = get_julia_data(m) set_column!(modeldata, columnidx, value(column)) - emit_data_changed(m, 1, columnidx, Base.size(modeldata.values[],1), columnidx) + emit_data_changed(m, 1, columnidx, Base.size(modeldata.values[], 1), columnidx) end function set_column!(modeldata::ItemModelData, columnidx, column::AbstractVector{QVariant}) - modeldata.values[][:,columnidx] .= value.(column) + modeldata.values[][:, columnidx] .= value.(column) end clear!(m::ItemModelData) = empty!(m.values[]) @@ -409,11 +409,11 @@ hasrole(m::ItemModelData, rolename) = rolename ∈ values(m.roles) hasrole(lm::JuliaItemModel, rolename) = hasrole(get_julia_data(lm), rolename) function nextroleindex(roles) sortedkeys = sort(keys(roles)) - return max(UserRole,sortedkeys[end]+1) + return max(UserRole, sortedkeys[end] + 1) end function roleindex(m::ItemModelData, rolename) - for (idx,val) in m.roles + for (idx, val) in m.roles if string(val) == rolename return idx end diff --git a/src/makie_support.jl b/src/makie_support.jl index e7bd3db..ab177e1 100644 --- a/src/makie_support.jl +++ b/src/makie_support.jl @@ -51,12 +51,12 @@ end mutable struct QMLScreen <: GLMakie.GLScreen glscreen::QMLGLContext shader_cache::GLAbstraction.ShaderCache - screen2scene::Dict{WeakRef, ScreenID} + screen2scene::Dict{WeakRef,ScreenID} screens::Vector{ScreenArea} - renderlist::Vector{Tuple{ZIndex, ScreenID, RenderObject}} + renderlist::Vector{Tuple{ZIndex,ScreenID,RenderObject}} postprocessors::Vector{GLMakie.PostProcessor} - cache::Dict{UInt64, RenderObject} - cache2plot::Dict{UInt32, AbstractPlot} + cache::Dict{UInt64,RenderObject} + cache2plot::Dict{UInt32,AbstractPlot} framecache::Matrix{RGB{N0f8}} framebuffer::GLMakie.GLFramebuffer # render_tick::Observable{Nothing} @@ -71,17 +71,17 @@ mutable struct QMLScreen <: GLMakie.GLScreen newscreen = new( ctx, shader_cache, - Dict{WeakRef, ScreenID}(), + Dict{WeakRef,ScreenID}(), ScreenArea[], - Tuple{ZIndex, ScreenID, RenderObject}[], + Tuple{ZIndex,ScreenID,RenderObject}[], [ enable_SSAO[] ? GLMakie.ssao_postprocessor(fb, shader_cache) : GLMakie.empty_postprocessor(), GLMakie.OIT_postprocessor(fb, shader_cache), enable_FXAA[] ? GLMakie.fxaa_postprocessor(fb, shader_cache) : GLMakie.empty_postprocessor(), to_qmlscreen_postprocessor(fb, shader_cache) ], - Dict{UInt64, RenderObject}(), - Dict{UInt32, AbstractPlot}(), + Dict{UInt64,RenderObject}(), + Dict{UInt32,AbstractPlot}(), Matrix{RGB{N0f8}}(undef, fbosize), fb, # Observable(nothing), @@ -111,7 +111,7 @@ function GLMakie.render_frame(screen::QMLScreen; resize_buffers=true) w, h = sizetuple(screen.glscreen.fbo) fb = screen.framebuffer if resize_buffers - resize!(fb, (w,h)) + resize!(fb, (w, h)) end # prepare stencil (for sub-scenes) @@ -165,7 +165,7 @@ function GLMakie.render_frame(screen::QMLScreen; resize_buffers=true) glStencilMask(0x00) # Render only transparent objects GLAbstraction.render(screen) do robj - return Bool(robj[:transparency][]) + return Bool(robj[:transparency][]) end glDisable(GL_STENCIL_TEST) @@ -207,13 +207,13 @@ function to_qmlscreen_postprocessor(framebuffer, shader_cache) end function Base.empty!(screen::QMLScreen) - empty!(screen.renderlist) - empty!(screen.screen2scene) - empty!(screen.screens) + empty!(screen.renderlist) + empty!(screen.screen2scene) + empty!(screen.screens) end function Base.display(screen::QMLScreen, scene::Scene) - scene.events.window_area[] = Makie.IRect(0,0,sizetuple(screen.glscreen.fbo)...) + scene.events.window_area[] = Makie.IRect(0, 0, sizetuple(screen.glscreen.fbo)...) empty!(screen) insertplots!(screen, scene) # Makie.update!(scene) diff --git a/src/runexamples.jl b/src/runexamples.jl index bb1ad56..13bf766 100644 --- a/src/runexamples.jl +++ b/src/runexamples.jl @@ -16,22 +16,22 @@ function runexamples(allowmakie) for fname in readdir() if endswith(fname, ".jl") && fname ∉ excluded - if any(Base.contains.(readlines(fname),"exec_async")) + if any(Base.contains.(readlines(fname), "exec_async")) println("Skipping async example $fname") continue end - if any(Base.contains.(readlines(fname),"GKSwstype")) + if any(Base.contains.(readlines(fname), "GKSwstype")) println("Skipping GR example $fname") continue end - if !allowmakie && any(Base.contains.(readlines(fname),"Makie")) + if !allowmakie && any(Base.contains.(readlines(fname), "Makie")) println("Skipping GR example $fname") continue end println("running example ", fname, "...") outbuf = IOBuffer() errbuf = IOBuffer() - testproc = run(pipeline(`$(Base.julia_cmd()) --project $fname`; stdout=outbuf, stderr=errbuf); wait = false) + testproc = run(pipeline(`$(Base.julia_cmd()) --project $fname`; stdout=outbuf, stderr=errbuf); wait=false) current_time = 0.0 timestep = 0.1 errstr = "" From d048a0f69a72f8405ed719bb0f67147320e0e77a Mon Sep 17 00:00:00 2001 From: Steffen Haug Date: Sun, 8 Sep 2024 22:02:08 +0200 Subject: [PATCH 2/2] Strip out Makie Support stuff --- src/QML.jl | 2 - src/makie_support.jl | 238 ------------------------------------------- 2 files changed, 240 deletions(-) delete mode 100644 src/makie_support.jl diff --git a/src/QML.jl b/src/QML.jl index e996c98..70409be 100644 --- a/src/QML.jl +++ b/src/QML.jl @@ -172,8 +172,6 @@ end function __init__() @initcxx - @require GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" include(joinpath(@__DIR__, "makie_support.jl")) - loadqmljll(jlqml_jll.Qt6Declarative_jll) @require Qt65Compat_jll = "f5784262-74e5-52be-b835-f3e8a3cf8710" @eval loadqmljll(Qt65Compat_jll) diff --git a/src/makie_support.jl b/src/makie_support.jl deleted file mode 100644 index ab177e1..0000000 --- a/src/makie_support.jl +++ /dev/null @@ -1,238 +0,0 @@ -module MakieSupport - -using ..GLMakie -using ..GLMakie.Colors -using ..GLMakie.FixedPointNumbers -using ..GLMakie.ModernGL -using ..GLMakie.LinearAlgebra -using QML -using CxxWrap - -const GLAbstraction = GLMakie.GLAbstraction -using .GLAbstraction - - -const enable_SSAO = Ref(false) -const enable_FXAA = Ref(true) - - -mutable struct QMLGLContext - valid::Bool - fbo::CxxPtr{QML.QOpenGLFramebufferObject} -end - -function GLMakie.ShaderAbstractions.native_switch_context!(ctx::QMLGLContext) - if !ctx.valid - try - error("Attempt to bind invalid context $ctx") - catch e - Base.printstyled("ERROR: "; color=:red, bold=true) - Base.showerror(stdout, e) - Base.show_backtrace(stdout, Base.catch_backtrace()) - end - end - QML.bind(ctx.fbo) -end - -function GLMakie.ShaderAbstractions.native_context_alive(ctx::QMLGLContext) - return ctx.valid -end - -const ScreenID = GLMakie.ScreenID -const ZIndex = GLMakie.ZIndex -const RenderObject = GLMakie.RenderObject -const ScreenArea = GLMakie.ScreenArea - -@cxxdereference function sizetuple(fbo::QML.QOpenGLFramebufferObject) - fbosize = QML.size(fbo) - return (Int(QML.width(fbosize)), Int(QML.height(fbosize))) -end - -mutable struct QMLScreen <: GLMakie.GLScreen - glscreen::QMLGLContext - shader_cache::GLAbstraction.ShaderCache - screen2scene::Dict{WeakRef,ScreenID} - screens::Vector{ScreenArea} - renderlist::Vector{Tuple{ZIndex,ScreenID,RenderObject}} - postprocessors::Vector{GLMakie.PostProcessor} - cache::Dict{UInt64,RenderObject} - cache2plot::Dict{UInt32,AbstractPlot} - framecache::Matrix{RGB{N0f8}} - framebuffer::GLMakie.GLFramebuffer - # render_tick::Observable{Nothing} - # window_open::Observable{Bool} - - @cxxdereference function QMLScreen(fbo::QML.QOpenGLFramebufferObject) - ctx = QMLGLContext(true, CxxPtr(fbo)) - GLMakie.ShaderAbstractions.switch_context!(ctx) - fbosize = sizetuple(fbo) - fb = GLMakie.GLFramebuffer(fbosize) - shader_cache = GLAbstraction.ShaderCache() - newscreen = new( - ctx, - shader_cache, - Dict{WeakRef,ScreenID}(), - ScreenArea[], - Tuple{ZIndex,ScreenID,RenderObject}[], - [ - enable_SSAO[] ? GLMakie.ssao_postprocessor(fb, shader_cache) : GLMakie.empty_postprocessor(), - GLMakie.OIT_postprocessor(fb, shader_cache), - enable_FXAA[] ? GLMakie.fxaa_postprocessor(fb, shader_cache) : GLMakie.empty_postprocessor(), - to_qmlscreen_postprocessor(fb, shader_cache) - ], - Dict{UInt64,RenderObject}(), - Dict{UInt32,AbstractPlot}(), - Matrix{RGB{N0f8}}(undef, fbosize), - fb, - # Observable(nothing), - # Observable(true), - ) - finalizer(newscreen) do s - empty!.((s.renderlist, s.screens, s.cache, s.screen2scene, s.cache2plot, s.postprocessors)) - return - end - end -end - -function update_fbo!(screen, fbo) - screen.glscreen.fbo = CxxPtr(fbo) - GLMakie.ShaderAbstractions.switch_context!(screen.glscreen) - fbosize = sizetuple(fbo) - resize!(screen.framebuffer, fbosize) - screen.framecache = Matrix{RGB{N0f8}}(undef, fbosize) - return screen -end - -Base.isopen(screen::QMLScreen) = true -GLMakie.GeometryBasics.widths(screen::QMLScreen) = sizetuple(screen.glscreen.fbo) - -# From rendering.jl in GLMakie, with only slight adaptations -function GLMakie.render_frame(screen::QMLScreen; resize_buffers=true) - w, h = sizetuple(screen.glscreen.fbo) - fb = screen.framebuffer - if resize_buffers - resize!(fb, (w, h)) - end - - # prepare stencil (for sub-scenes) - glEnable(GL_STENCIL_TEST) - glBindFramebuffer(GL_FRAMEBUFFER, fb.id[1]) # color framebuffer - glDrawBuffers(length(fb.render_buffer_ids), fb.render_buffer_ids) - glEnable(GL_STENCIL_TEST) - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE) - glStencilMask(0xff) - glClearStencil(0) - glClearColor(0, 0, 0, 0) - glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT) - glDrawBuffer(fb.render_buffer_ids[1]) - GLMakie.setup!(screen) - glDrawBuffers(length(fb.render_buffer_ids), fb.render_buffer_ids) - - # render with FXAA & SSAO - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE) - glStencilMask(0x00) - GLAbstraction.render(screen) do robj - return !Bool(robj[:transparency][]) && Bool(robj[:ssao][]) - end - # SSAO - screen.postprocessors[1].render(screen) - - # render with FXAA but no SSAO - glDrawBuffers(2, [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1]) - glEnable(GL_STENCIL_TEST) - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE) - glStencilMask(0x00) - # render all non ssao - GLAbstraction.render(screen) do robj - return !Bool(robj[:transparency][]) && !Bool(robj[:ssao][]) - end - glDisable(GL_STENCIL_TEST) - - # TRANSPARENT RENDER - # clear sums to 0 - glDrawBuffer(GL_COLOR_ATTACHMENT2) - glClearColor(0, 0, 0, 0) - glClear(GL_COLOR_BUFFER_BIT) - # clear alpha product to 1 - glDrawBuffer(GL_COLOR_ATTACHMENT3) - glClearColor(1, 1, 1, 1) - glClear(GL_COLOR_BUFFER_BIT) - # draw - glDrawBuffers(3, [GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT3]) - glEnable(GL_STENCIL_TEST) - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE) - glStencilMask(0x00) - # Render only transparent objects - GLAbstraction.render(screen) do robj - return Bool(robj[:transparency][]) - end - glDisable(GL_STENCIL_TEST) - - # TRANSPARENT BLEND - screen.postprocessors[2].render(screen) - - # FXAA - screen.postprocessors[3].render(screen) - - # transfer everything to the screen - screen.postprocessors[4].render(screen) -end - -# Slightly adapted from GLMakie/postprocessing.jl/to_screen_postprocessor -function to_qmlscreen_postprocessor(framebuffer, shader_cache) - # draw color buffer - shader = LazyShader( - shader_cache, - GLMakie.loadshader("postprocessing/fullscreen.vert"), - GLMakie.loadshader("postprocessing/copy.frag") - ) - data = Dict{Symbol,Any}( - :color_texture => framebuffer.buffers[:color] - ) - pass = RenderObject(data, shader, GLMakie.PostprocessPrerender(), nothing) - pass.postrenderfunction = () -> GLMakie.draw_fullscreen(pass.vertexarray.id) - - full_render = screen -> begin - fb = screen.framebuffer - w, h = sizetuple(screen.glscreen.fbo) - # w, h = size(fb) # original from Makie - - QML.bind(screen.glscreen.fbo) # Transfer everything to the QMLScreen - glViewport(0, 0, w, h) - glClear(GL_COLOR_BUFFER_BIT) - GLAbstraction.render(pass) # copy postprocess - end - return GLMakie.PostProcessor(GLMakie.GLAbstraction.RenderObject[pass], full_render) -end - -function Base.empty!(screen::QMLScreen) - empty!(screen.renderlist) - empty!(screen.screen2scene) - empty!(screen.screens) -end - -function Base.display(screen::QMLScreen, scene::Scene) - scene.events.window_area[] = Makie.IRect(0, 0, sizetuple(screen.glscreen.fbo)...) - empty!(screen) - insertplots!(screen, scene) - # Makie.update!(scene) - GLMakie.render_frame(screen) - return -end - -function setup_screen(fbo) - return QMLScreen(fbo) -end - -function setup_screen(screen, fbo) - update_fbo!(screen, fbo) - return screen -end - -function on_context_destroy() - GLMakie.ShaderAbstractions.switch_context!() - return -end - -end