Skip to content

Commit

Permalink
Backbone for pressure suport for wacom tablets
Browse files Browse the repository at this point in the history
  • Loading branch information
tomankirilov committed Feb 12, 2021
1 parent ec8f32b commit 3bff62d
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 9 deletions.
15 changes: 13 additions & 2 deletions addons/vpainter/vpainter.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ var blend_mode = MIX
enum {PAINT, BLUR, FILL, SAMPLE}
var current_tool = PAINT

var pressure_opacity:bool = false
var pressure_size:bool = false
var pen_pressure:float = 0.0
var pen_moving:bool = false
var calculated_opacity:float = 0.0
var calculated_size:float = 0.0

var brush_size:float = 1
var brush_opacity:float = 0.5
var brush_hardness:float = 0.0
Expand Down Expand Up @@ -54,6 +61,7 @@ func forward_spatial_gui_input(camera, event):
if !paint_mode:
return


if event is InputEventMouse:
_raycast(camera, event)

Expand All @@ -64,7 +72,9 @@ func forward_spatial_gui_input(camera, event):
if raycast_hit:
brush_cursor.translation = hit_position


if event is InputEventMouseButton:

if event.button_index == BUTTON_LEFT and event.is_pressed():
process_drawing = true

Expand All @@ -91,13 +101,13 @@ func _paint_object():

for i in range(data.get_vertex_count()):
var vertex = current_mesh.to_global(data.get_vertex(i))



if vertex.distance_to(hit_position) < brush_size/2:
#brush hardness:
var vertex_proximity = vertex.distance_to(hit_position)/(brush_size/2)
var calculated_hardness = ((1 + brush_hardness/2) - vertex_proximity)


match blend_mode:
MIX:
data.set_vertex_color(i, data.get_vertex_color(i).linear_interpolate(paint_color, brush_opacity * brush_pressure * calculated_hardness))
Expand All @@ -114,6 +124,7 @@ func _paint_object():
data.commit_to_surface(current_mesh.mesh)
yield(get_tree().create_timer(brush_spacing), "timeout")


func _fill_object():
var data = MeshDataTool.new()
data.create_from_surface(current_mesh.mesh, 0)
Expand Down
26 changes: 26 additions & 0 deletions addons/vpainter/vpainter_ui.gd
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ var color_picker:ColorPickerButton
export var background_picker_dir:NodePath
var background_picker:ColorPickerButton

#PEN PRESSURE:
export var pen_pressure_settings_dir:NodePath
var pen_pressure_settings:VBoxContainer
export var button_opacity_pressure_dir:NodePath
var button_opacity_pressure:CheckBox
export var button_size_pressure_dir:NodePath
var button_size_pressure:CheckBox

#TOOLS:
export var button_paint_dir:NodePath
var button_paint:ToolButton
Expand Down Expand Up @@ -53,6 +61,14 @@ func _enter_tree():
background_picker = get_node(background_picker_dir)
background_picker.connect("color_changed", self, "_set_background_color")


pen_pressure_settings = get_node(pen_pressure_settings_dir)

button_opacity_pressure = get_node(button_opacity_pressure_dir)
button_opacity_pressure.connect("toggled", self, "_set_opacity_pressure")
button_size_pressure = get_node(button_size_pressure_dir)
button_size_pressure.connect("toggled", self, "_set_size_pressure")

button_paint = get_node(button_paint_dir)
button_paint.connect("toggled", self, "_set_paint_tool")
button_sample = get_node(button_sample_dir)
Expand Down Expand Up @@ -133,9 +149,16 @@ func _input(event):
if event.scancode == KEY_BACKSLASH :
_set_brush_opacity(brush_opacity_slider.value + 0.01)

func _set_opacity_pressure(value):
vpainter.pressure_opacity = value

func _set_size_pressure(value):
vpainter.pressure_size = value

func _set_paint_tool(value):
if value:
vpainter.current_tool = vpainter.PAINT
pen_pressure_settings.visible = true
button_paint.set_pressed(true)
button_sample.set_pressed(false)
button_blur.set_pressed(false)
Expand All @@ -144,6 +167,7 @@ func _set_paint_tool(value):
func _set_sample_tool(value):
if value:
vpainter.current_tool = vpainter.SAMPLE
pen_pressure_settings.visible = false
button_paint.set_pressed(false)
button_sample.set_pressed(true)
button_blur.set_pressed(false)
Expand All @@ -152,6 +176,7 @@ func _set_sample_tool(value):
func _set_blur_tool(value):
if value:
vpainter.current_tool = vpainter.BLUR
pen_pressure_settings.visible = false
button_paint.set_pressed(false)
button_sample.set_pressed(false)
button_blur.set_pressed(true)
Expand All @@ -161,6 +186,7 @@ func _set_blur_tool(value):
func _set_fill_tool(value):
if value:
vpainter.current_tool = vpainter.FILL
pen_pressure_settings.visible = false
button_paint.set_pressed(false)
button_sample.set_pressed(false)
button_blur.set_pressed(false)
Expand Down
33 changes: 26 additions & 7 deletions addons/vpainter/vpainter_ui.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ __meta__ = {
local_copy_button_path = NodePath("DuplicateButton")
color_picker_dir = NodePath("MainArea/ColorSwatches/ColorPickerButton")
background_picker_dir = NodePath("MainArea/ColorSwatches/ColorPickerButton2")
pen_pressure_settings_dir = NodePath("MainArea/PenPressureSettings")
button_opacity_pressure_dir = NodePath("MainArea/PenPressureSettings/BtnOpacityPressure")
button_size_pressure_dir = NodePath("MainArea/PenPressureSettings/BtnSizePressure")
button_paint_dir = NodePath("MainArea/Tools/BtnBrush")
button_sample_dir = NodePath("MainArea/Tools/BtnSample")
button_blur_dir = NodePath("MainArea/Tools/BtnBlur")
Expand All @@ -38,9 +41,25 @@ __meta__ = {
"_edit_use_anchors_": false
}

[node name="PenPressureSettings" type="VBoxContainer" parent="MainArea"]
margin_right = 192.0
margin_bottom = 52.0

[node name="BtnSizePressure" type="CheckBox" parent="MainArea/PenPressureSettings"]
margin_right = 192.0
margin_bottom = 24.0
text = "SizePressure"

[node name="BtnOpacityPressure" type="CheckBox" parent="MainArea/PenPressureSettings"]
margin_top = 28.0
margin_right = 192.0
margin_bottom = 52.0
text = "OpassityPressure"

[node name="Tools" type="HBoxContainer" parent="MainArea"]
margin_top = 56.0
margin_right = 192.0
margin_bottom = 64.0
margin_bottom = 120.0
rect_min_size = Vector2( 0, 64 )
alignment = 1

Expand Down Expand Up @@ -82,9 +101,9 @@ toggle_mode = true
icon = ExtResource( 2 )

[node name="ColorSwatches" type="HBoxContainer" parent="MainArea"]
margin_top = 68.0
margin_top = 124.0
margin_right = 192.0
margin_bottom = 132.0
margin_bottom = 188.0
rect_min_size = Vector2( 0, 64 )
alignment = 1

Expand All @@ -109,9 +128,9 @@ color = Color( 1, 1, 1, 1 )

[node name="BlendModes" type="OptionButton" parent="MainArea"]
margin_left = 32.0
margin_top = 136.0
margin_top = 192.0
margin_right = 160.0
margin_bottom = 156.0
margin_bottom = 212.0
rect_min_size = Vector2( 128, 0 )
hint_tooltip = "Blend mode for painting colors."
size_flags_horizontal = 4
Expand All @@ -121,9 +140,9 @@ selected = 0

[node name="Sliders" type="VBoxContainer" parent="MainArea"]
margin_left = 32.0
margin_top = 160.0
margin_top = 216.0
margin_right = 160.0
margin_bottom = 416.0
margin_bottom = 472.0
rect_min_size = Vector2( 128, 256 )
size_flags_horizontal = 4
alignment = 1
Expand Down

0 comments on commit 3bff62d

Please sign in to comment.