Skip to content

Commit

Permalink
Fix order of filter parameters is random, #4262 (#4407)
Browse files Browse the repository at this point in the history
This commit will:
- Change the FilterPreset property paramOrder to not be optional
- Add setting of paramOrder to all filter presets
- Change NewFilterSheetViewController.showSettings to always use
  paramOrder

This insures the order of the UI controls displayed to the user
representing the filter parameters remains consistent.
  • Loading branch information
low-batt committed May 11, 2023
1 parent 484e16c commit 60e1f7d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 19 deletions.
27 changes: 16 additions & 11 deletions iina/FilterPresets.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ class FilterPreset {

var name: String
var params: [String: FilterParameter]
var paramOrder: [String]?

/// Order of the filter parameters.
///
/// This dictates the order of parameters when the filter string is assembled as well as the order of controls presented to the user
/// when adding a filter.
var paramOrder: [String]
/** Given an instance, create the corresponding `MPVFilter`. */
var transformer: Transformer

Expand All @@ -32,11 +37,11 @@ class FilterPreset {

init(_ name: String,
params: [String: FilterParameter],
paramOrder: String? = nil,
paramOrder: String,
transformer: @escaping Transformer = FilterPreset.defaultTransformer) {
self.name = name
self.params = params
self.paramOrder = paramOrder?.components(separatedBy: ":")
self.paramOrder = paramOrder.isEmpty ? [] : paramOrder.components(separatedBy: ":")
self.transformer = transformer
}

Expand Down Expand Up @@ -160,11 +165,11 @@ extension FilterPreset {
return dic
}()

static private let customMPVFilterPreset = FilterPreset("custom_mpv", params: ["name": PM.text(defaultValue: ""), "string": PM.text(defaultValue: "")]) { instance in
static private let customMPVFilterPreset = FilterPreset("custom_mpv", params: ["name": PM.text(defaultValue: ""), "string": PM.text(defaultValue: "")], paramOrder: "name:string") { instance in
return MPVFilter(rawString: instance.value(for: "name").stringValue + "=" + instance.value(for: "string").stringValue)!
}
// custom ffmpeg
static private let customFFmpegFilterPreset = FilterPreset("custom_ffmpeg", params: [ "name": PM.text(defaultValue: ""), "string": PM.text(defaultValue: "") ]) { instance in
static private let customFFmpegFilterPreset = FilterPreset("custom_ffmpeg", params: [ "name": PM.text(defaultValue: ""), "string": PM.text(defaultValue: "") ], paramOrder: "name:string") { instance in
return MPVFilter(name: "lavfi", label: nil, paramString: "[\(instance.value(for: "name").stringValue)=\(instance.value(for: "string").stringValue)]")
}

Expand Down Expand Up @@ -197,15 +202,15 @@ extension FilterPreset {
FilterPreset("sharpen", params: [
"amount": PM.float(min: 0, max: 1.5),
"msize": PM.int(min: 3, max: 13, step: 2, defaultValue: 5)
]) { instance in
], paramOrder: "msize:amount") { instance in
return MPVFilter.unsharp(amount: instance.value(for: "amount").floatValue,
msize: instance.value(for: "msize").intValue)
},
// blur
FilterPreset("blur", params: [
"amount": PM.float(min: 0, max: 1.5),
"msize": PM.int(min: 3, max: 13, step: 2, defaultValue: 5)
]) { instance in
], paramOrder: "msize:amount") { instance in
return MPVFilter.unsharp(amount: -instance.value(for: "amount").floatValue,
msize: instance.value(for: "msize").intValue)
},
Expand All @@ -217,24 +222,24 @@ extension FilterPreset {
"h": PM.text(defaultValue: "1")
], paramOrder: "x:y:w:h"),
// invert color
FilterPreset("negative", params: [:]) { instance in
FilterPreset("negative", params: [:], paramOrder: "") { instance in
return MPVFilter(lavfiName: "lutrgb", label: nil, paramDict: [
"r": "negval", "g": "negval", "b": "negval"
])
},
// flip
FilterPreset("vflip", params: [:]) { instance in
FilterPreset("vflip", params: [:], paramOrder: "") { instance in
return MPVFilter(mpvFilterFromPresetInstance: instance)
},
// mirror
FilterPreset("hflip", params: [:]) { instance in
FilterPreset("hflip", params: [:], paramOrder: "") { instance in
return MPVFilter(mpvFilterFromPresetInstance: instance)
},
// 3d lut
FilterPreset("lut3d", params: [
"file": PM.text(),
"interp": PM.choose(from: ["nearest", "trilinear", "tetrahedral"], defaultChoiceIndex: 0)
]) { instance in
], paramOrder: "file:interp") { instance in
return MPVFilter(lavfiName: "lut3d", label: nil, paramDict: [
"file": instance.value(for: "file").stringValue,
"interp": instance.value(for: "interp").stringValue,
Expand Down
10 changes: 2 additions & 8 deletions iina/FilterWindowController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -414,14 +414,8 @@ class NewFilterSheetViewController: NSViewController, NSTableViewDelegate, NSTab
stackView.addArrangedSubview(input)
self.currentBindings[name] = input
}
if let paramOrder = preset.paramOrder {
for name in paramOrder {
generateInputs(name, preset.params[name]!)
}
} else {
for (name, param) in preset.params {
generateInputs(name, param)
}
for name in preset.paramOrder {
generateInputs(name, preset.params[name]!)
}
}

Expand Down

0 comments on commit 60e1f7d

Please sign in to comment.