1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-19 01:29:49 +00:00

Reference UI improvements (#789)

* Added the filter parameter

* Improved the reference image panel UI

* Disable Os open path for HTML

* fix typo

* Aviod crash on image not found
This commit is contained in:
Variable 2022-12-08 05:20:54 +05:00 committed by GitHub
parent 2bf290faa4
commit 4f7486defb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 146 additions and 46 deletions

View file

@ -8,6 +8,8 @@ var project = Global.current_project
var image_path: String = ""
var filter = false
func _ready() -> void:
project.reference_images.append(self)
@ -40,6 +42,7 @@ func serialize() -> Dictionary:
"modulate_g": modulate.g,
"modulate_b": modulate.b,
"modulate_a": modulate.a,
"filter": filter,
"image_path": image_path
}
@ -58,7 +61,7 @@ func deserialize(d: Dictionary) -> void:
if img.load(image_path) == OK:
var itex := ImageTexture.new()
# don't do FLAG_REPEAT - it could cause visual issues
itex.create_from_image(img, Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER)
itex.create_from_image(img, Texture.FLAG_MIPMAPS)
texture = itex
# Now that the image may have been established...
position_reset()
@ -78,6 +81,8 @@ func deserialize(d: Dictionary) -> void:
modulate.b = d["modulate_b"]
if d.has("modulate_a"):
modulate.a = d["modulate_a"]
if d.has("filter"):
filter = d["filter"]
change_properties()

View file

@ -6,7 +6,17 @@ var _ignore_spinbox_changes = false
func _ready():
$Interior/Path.text = element.image_path
if OS.get_name() == "HTML5":
$Interior/PathHeader/Path.visible = false
$Interior/PathHeader/PathHTML.text = element.image_path
else:
$Interior/PathHeader/PathHTML.visible = false
$Interior/PathHeader/Path.text = element.image_path
if !element.texture:
$Interior/PreviewAndOptions/PreviewPanel/Warning.text = "Image Not Found!!!"
else:
$Interior/PreviewAndOptions/PreviewPanel/Preview.texture = element.texture
element.connect("properties_changed", self, "_update_properties")
_update_properties()
@ -15,12 +25,13 @@ func _update_properties():
# This is because otherwise a little dance will occur.
# This also breaks non-uniform scales (not supported UI-wise, but...)
_ignore_spinbox_changes = true
$Interior/Options/Scale.value = element.scale.x * 100
$Interior/Options/X.value = element.position.x
$Interior/Options/Y.value = element.position.y
$Interior/Options/X.max_value = element.project.size.x
$Interior/Options/Y.max_value = element.project.size.y
$Interior/Options2/Opacity.value = element.modulate.a * 100
$Interior/PreviewAndOptions/Options/Scale.value = element.scale.x * 100
$Interior/PreviewAndOptions/Options/Position/X.value = element.position.x
$Interior/PreviewAndOptions/Options/Position/Y.value = element.position.y
$Interior/PreviewAndOptions/Options/Position/X.max_value = element.project.size.x
$Interior/PreviewAndOptions/Options/Position/Y.max_value = element.project.size.y
$Interior/PreviewAndOptions/Options/Opacity.value = element.modulate.a * 100
$Interior/OtherOptions/ApplyFilter.pressed = element.filter
_ignore_spinbox_changes = false
@ -65,3 +76,17 @@ func _on_Opacity_value_changed(value):
return
element.modulate.a = value / 100
element.change_properties()
func _on_Path_pressed() -> void:
OS.shell_open($Interior/PathHeader/Path.text.get_base_dir())
func _on_ApplyFilter_toggled(button_pressed: bool) -> void:
element.filter = button_pressed
if element.texture:
if element.filter:
element.texture.flags = Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER
else:
element.texture.flags = Texture.FLAG_MIPMAPS
element.change_properties()

View file

@ -15,80 +15,150 @@ script = ExtResource( 1 )
margin_left = 7.0
margin_top = 7.0
margin_right = 304.0
margin_bottom = 132.0
margin_bottom = 133.0
[node name="Path" type="Label" parent="Interior"]
[node name="PathHeader" type="HBoxContainer" parent="Interior"]
margin_right = 297.0
margin_bottom = 14.0
custom_constants/separation = 0
[node name="Path" type="LinkButton" parent="Interior/PathHeader"]
modulate = Color( 0.552941, 1, 0.298039, 1 )
margin_right = 99.0
margin_bottom = 14.0
size_flags_horizontal = 3
underline = 1
[node name="PathHTML" type="Label" parent="Interior/PathHeader"]
self_modulate = Color( 0.552941, 1, 0.298039, 1 )
margin_left = 99.0
margin_right = 198.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="HSeparator" type="HSeparator" parent="Interior/PathHeader"]
margin_left = 198.0
margin_right = 297.0
margin_bottom = 14.0
size_flags_horizontal = 3
autowrap = true
[node name="Options" type="HBoxContainer" parent="Interior"]
[node name="PreviewAndOptions" type="HBoxContainer" parent="Interior"]
margin_top = 18.0
margin_right = 297.0
margin_bottom = 42.0
margin_bottom = 98.0
[node name="Label2" type="Label" parent="Interior/Options"]
[node name="Options" type="GridContainer" parent="Interior/PreviewAndOptions"]
margin_right = 213.0
margin_bottom = 80.0
size_flags_horizontal = 3
columns = 2
[node name="PosLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
margin_top = 5.0
margin_right = 56.0
margin_bottom = 19.0
text = "Position:"
align = 2
[node name="X" parent="Interior/Options" instance=ExtResource( 2 )]
[node name="Position" type="HBoxContainer" parent="Interior/PreviewAndOptions/Options"]
margin_left = 60.0
margin_right = 122.0
margin_right = 213.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="X" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 2 )]
margin_right = 74.0
allow_greater = true
allow_lesser = true
[node name="Y" parent="Interior/Options" instance=ExtResource( 2 )]
margin_left = 126.0
margin_right = 189.0
[node name="Y" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 2 )]
margin_left = 78.0
margin_right = 153.0
allow_greater = true
allow_lesser = true
[node name="Label" type="Label" parent="Interior/Options"]
margin_left = 193.0
margin_top = 5.0
margin_right = 230.0
margin_bottom = 19.0
[node name="ScaleLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
margin_top = 33.0
margin_right = 56.0
margin_bottom = 47.0
text = "Scale:"
align = 2
[node name="Scale" parent="Interior/Options" instance=ExtResource( 2 )]
margin_left = 234.0
margin_right = 297.0
[node name="Scale" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 2 )]
margin_left = 60.0
margin_top = 28.0
margin_right = 213.0
margin_bottom = 52.0
allow_greater = true
allow_lesser = true
[node name="Options2" type="HBoxContainer" parent="Interior"]
margin_top = 46.0
margin_right = 297.0
margin_bottom = 70.0
[node name="Label" type="Label" parent="Interior/Options2"]
margin_top = 5.0
margin_right = 53.0
margin_bottom = 19.0
[node name="OpacityLabel" type="Label" parent="Interior/PreviewAndOptions/Options"]
margin_top = 61.0
margin_right = 56.0
margin_bottom = 75.0
text = "Opacity:"
align = 2
[node name="Opacity" parent="Interior/Options2" instance=ExtResource( 2 )]
margin_left = 57.0
[node name="Opacity" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 2 )]
margin_left = 60.0
margin_top = 56.0
margin_right = 213.0
margin_bottom = 80.0
[node name="PreviewPanel" type="Panel" parent="Interior/PreviewAndOptions"]
margin_left = 217.0
margin_right = 297.0
margin_bottom = 80.0
rect_min_size = Vector2( 80, 80 )
[node name="Warning" type="Label" parent="Interior/PreviewAndOptions/PreviewPanel"]
anchor_right = 1.0
anchor_bottom = 1.0
align = 1
valign = 1
autowrap = true
[node name="Preview" type="TextureRect" parent="Interior/PreviewAndOptions/PreviewPanel"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 2.0
margin_top = 2.0
margin_right = -2.0
margin_bottom = -2.0
expand = true
[node name="OtherOptions" type="HBoxContainer" parent="Interior"]
margin_top = 102.0
margin_right = 297.0
margin_bottom = 126.0
alignment = 2
[node name="ApplyFilter" type="CheckBox" parent="Interior/OtherOptions"]
margin_left = 76.0
margin_right = 177.0
margin_bottom = 24.0
hint_tooltip = "Uses a magnifying filter, to enable smooth zooming in of the texture."
text = "Apply Filter"
align = 1
[node name="Reset" type="Button" parent="Interior/Options2"]
[node name="Reset" type="Button" parent="Interior/OtherOptions"]
margin_left = 181.0
margin_right = 229.0
margin_bottom = 24.0
text = "Reset"
[node name="Remove" type="Button" parent="Interior/Options2"]
[node name="Remove" type="Button" parent="Interior/OtherOptions"]
margin_left = 233.0
margin_right = 297.0
margin_bottom = 24.0
custom_colors/font_color = Color( 1, 0.266667, 0.266667, 1 )
text = "Remove"
[connection signal="value_changed" from="Interior/Options/X" to="." method="_on_X_value_changed"]
[connection signal="value_changed" from="Interior/Options/Y" to="." method="_on_Y_value_changed"]
[connection signal="value_changed" from="Interior/Options/Scale" to="." method="_on_Scale_value_changed"]
[connection signal="value_changed" from="Interior/Options2/Opacity" to="." method="_on_Opacity_value_changed"]
[connection signal="pressed" from="Interior/Options2/Reset" to="." method="_on_Reset_pressed"]
[connection signal="pressed" from="Interior/Options2/Remove" to="." method="_on_Remove_pressed"]
[connection signal="pressed" from="Interior/PathHeader/Path" to="." method="_on_Path_pressed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/X" to="." method="_on_X_value_changed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/Y" to="." method="_on_Y_value_changed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Scale" to="." method="_on_Scale_value_changed"]
[connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Opacity" to="." method="_on_Opacity_value_changed"]
[connection signal="toggled" from="Interior/OtherOptions/ApplyFilter" to="." method="_on_ApplyFilter_toggled"]
[connection signal="pressed" from="Interior/OtherOptions/Reset" to="." method="_on_Reset_pressed"]
[connection signal="pressed" from="Interior/OtherOptions/Remove" to="." method="_on_Remove_pressed"]