Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
nerrons
purr-data
Commits
033b4a9f
Commit
033b4a9f
authored
Jul 19, 2018
by
Jonathan Wilkes
Browse files
move more functions inside the canvas_events closure
parent
ab317b2e
Changes
1
Hide whitespace changes
Inline
Side-by-side
pd/nw/pd_canvas.js
View file @
033b4a9f
...
...
@@ -11,94 +11,6 @@ pdgui.skin.apply(window);
var
l
=
pdgui
.
get_local_string
;
function
close_save_dialog
()
{
document
.
getElementById
(
"
save_before_quit
"
).
close
();
}
function
text_to_normalized_svg_path
(
text
)
{
text
=
text
.
slice
(
4
).
trim
()
// draw
.
slice
(
4
).
trim
()
// path
.
slice
(
1
).
trim
()
// d
.
slice
(
1
).
trim
();
// =
if
(
text
.
slice
(
0
,
1
)
===
'
"
'
)
{
text
=
text
.
slice
(
1
);
}
if
(
text
.
slice
(
-
1
)
===
'
"
'
)
{
text
=
text
.
slice
(
0
,
-
1
);
}
text
=
pdgui
.
parse_svg_path
(
text
);
return
"
draw path
"
+
text
.
reduce
(
function
(
prev
,
curr
)
{
return
prev
.
concat
(
curr
)
}).
join
(
"
"
);
}
function
text_to_fudi
(
text
)
{
text
=
text
.
trim
();
// special case for draw path d="arbitrary path string" ...
if
(
text
.
search
(
/^draw
\s
+path
\s
+d
\s
*=
\s
*"/
)
!==
-
1
)
{
text
=
text_to_normalized_svg_path
(
text
);
}
text
=
text
.
replace
(
/
(\$[
0-9
]
+
)
/g
,
"
\\
$1
"
);
// escape dollar signs
text
=
text
.
replace
(
/
(\$
@
)
/g
,
"
\\
$@
"
);
// escape special $@ sign
text
=
text
.
replace
(
/
(?!\\)(
,|;
)
/g
,
"
\\
$1
"
);
// escape "," and ";"
text
=
text
.
replace
(
/
\u
0020+/g
,
"
"
);
// filter consecutive ascii32
return
text
;
}
// Convert a string (FUDI message) to an array of strings small enough
// to fit in Pd's socketreceiver buffer of 4096 bytes
function
string_to_array_of_chunks
(
msg
)
{
var
chunk_max
=
1024
,
max_pd_string
=
1000
,
left
,
in_array
=
[],
out_array
=
[];
if
(
msg
.
length
<=
chunk_max
)
{
out_array
.
push
([
msg
]);
}
else
{
in_array
=
msg
.
split
(
/
[\s\n]
/
);
// split on newlines or spaces
while
(
in_array
.
length
)
{
left
=
in_array
.
slice
();
// make a copy of in_array
if
(
left
.
toString
().
length
>
chunk_max
)
{
while
(
1
)
{
if
(
left
.
length
<
2
)
{
pdgui
.
post
(
"
Warning: string truncated:
"
);
pdgui
.
post
(
left
.
toString
().
match
(
/............................../g
).
join
(
"
\n
"
)
);
break
;
}
left
=
left
.
splice
(
0
,
left
.
length
>>
1
);
if
(
left
.
toString
().
length
<=
chunk_max
)
{
break
;
}
}
}
// might need a check here for max_pd_string to warn
// user if a string is going to get truncated. (That's
// what max_pd_string is for above.)
out_array
.
push
(
left
);
in_array
=
in_array
.
splice
(
left
.
length
);
}
}
return
out_array
;
}
// Super-simplistic guess at whether the string from the clipboard
// starts with Pd code. This is just meant as a convenience so that
// stuff in the copy buffer that obviously isn't Pd code doesn't get
// in the way when editing.
function
might_be_a_pd_file
(
stuff_from_clipboard
)
{
var
text
=
stuff_from_clipboard
.
trim
(),
one
=
text
.
charAt
(
0
),
two
=
text
.
charAt
(
1
);
return
(
one
===
"
#
"
&&
(
two
===
"
N
"
||
two
===
"
X
"
));
}
function
permission_to_paste_from_external_clipboard
()
{
return
global
.
confirm
(
l
(
"
canvas.paste_clipboard_prompt
"
));
}
function
nw_window_focus_callback
(
name
)
{
pdgui
.
set_focused_patchwin
(
name
);
// on OSX, update the menu on focus
...
...
@@ -124,24 +36,6 @@ function nw_window_zoom(name, delta) {
}
}
// These three functions need to be inside canvas_events closure
function
canvas_find_whole_word
(
elem
)
{
canvas_events
.
match_words
(
elem
.
checked
);
}
function
canvas_find_blur
()
{
canvas_events
.
normal
();
}
function
canvas_find_focus
()
{
var
state
=
canvas_events
.
get_state
();
canvas_events
.
search
();
}
function
canvas_find_reset
()
{
canvas_events
.
find_reset
();
}
var
canvas_events
=
(
function
()
{
var
name
,
state
,
...
...
@@ -180,6 +74,89 @@ var canvas_events = (function() {
return
0
;
}
},
text_to_normalized_svg_path
=
function
(
text
)
{
text
=
text
.
slice
(
4
).
trim
()
// draw
.
slice
(
4
).
trim
()
// path
.
slice
(
1
).
trim
()
// d
.
slice
(
1
).
trim
();
// =
if
(
text
.
slice
(
0
,
1
)
===
'
"
'
)
{
text
=
text
.
slice
(
1
);
}
if
(
text
.
slice
(
-
1
)
===
'
"
'
)
{
text
=
text
.
slice
(
0
,
-
1
);
}
text
=
pdgui
.
parse_svg_path
(
text
);
return
"
draw path
"
+
text
.
reduce
(
function
(
prev
,
curr
)
{
return
prev
.
concat
(
curr
)
}).
join
(
"
"
);
},
text_to_fudi
=
function
(
text
)
{
text
=
text
.
trim
();
// special case for draw path d="arbitrary path string" ...
if
(
text
.
search
(
/^draw
\s
+path
\s
+d
\s
*=
\s
*"/
)
!==
-
1
)
{
text
=
text_to_normalized_svg_path
(
text
);
}
// escape dollar signs
text
=
text
.
replace
(
/
(\$[
0-9
]
+
)
/g
,
"
\\
$1
"
);
// escape special $@ sign
text
=
text
.
replace
(
/
(\$
@
)
/g
,
"
\\
$@
"
);
// escape "," and ";"
text
=
text
.
replace
(
/
(?!\\)(
,|;
)
/g
,
"
\\
$1
"
);
// filter consecutive ascii32
text
=
text
.
replace
(
/
\u
0020+/g
,
"
"
);
return
text
;
},
string_to_array_of_chunks
=
function
(
msg
)
{
// Convert a string (FUDI message) to an array of strings small enough
// to fit in Pd's socketreceiver buffer of 4096 bytes
var
chunk_max
=
1024
,
max_pd_string
=
1000
,
left
,
in_array
=
[],
out_array
=
[];
if
(
msg
.
length
<=
chunk_max
)
{
out_array
.
push
([
msg
]);
}
else
{
in_array
=
msg
.
split
(
/
[\s\n]
/
);
// split on newlines or spaces
while
(
in_array
.
length
)
{
left
=
in_array
.
slice
();
// make a copy of in_array
if
(
left
.
toString
().
length
>
chunk_max
)
{
while
(
1
)
{
if
(
left
.
length
<
2
)
{
pdgui
.
post
(
"
Warning: string truncated:
"
);
pdgui
.
post
(
left
.
toString
().
match
(
/............................../g
).
join
(
"
\n
"
)
);
break
;
}
left
=
left
.
splice
(
0
,
left
.
length
>>
1
);
if
(
left
.
toString
().
length
<=
chunk_max
)
{
break
;
}
}
}
// might need a check here for max_pd_string to warn
// user if a string is going to get truncated. (That's
// what max_pd_string is for above.)
out_array
.
push
(
left
);
in_array
=
in_array
.
splice
(
left
.
length
);
}
}
return
out_array
;
},
might_be_a_pd_file
=
function
(
stuff_from_clipboard
)
{
// Super-simplistic guess at whether the string from the clipboard
// starts with Pd code. This is just meant as a convenience so that
// stuff in the copy buffer that obviously isn't Pd code doesn't get
// in the way when editing.
var
text
=
stuff_from_clipboard
.
trim
(),
one
=
text
.
charAt
(
0
),
two
=
text
.
charAt
(
1
);
return
(
one
===
"
#
"
&&
(
two
===
"
N
"
||
two
===
"
X
"
));
},
grow_svg_for_element
=
function
(
elem
)
{
// See if an element overflows the svg bbox, and
// enlarge the svg to accommodate it.
...
...
@@ -675,7 +652,6 @@ var canvas_events = (function() {
}
;
return
{
none
:
function
()
{
var
evt_name
,
prop
;
...
...
@@ -692,7 +668,7 @@ var canvas_events = (function() {
}
},
normal
:
function
()
{
thi
s
.
none
();
canvas_event
s
.
none
();
document
.
addEventListener
(
"
mousemove
"
,
events
.
mousemove
,
false
);
document
.
addEventListener
(
"
keydown
"
,
events
.
keydown
,
false
);
...
...
@@ -719,14 +695,14 @@ var canvas_events = (function() {
// The exception is my_canvas, which is weird because the visible
// rectangle extends past the bbox that it reports to Pd.
// Unfortunately that means a lot of work to treat it separately.
thi
s
.
none
();
canvas_event
s
.
none
();
document
.
addEventListener
(
"
mousemove
"
,
events
.
iemgui_label_mousemove
,
false
);
document
.
addEventListener
(
"
mouseup
"
,
events
.
iemgui_label_mouseup
,
false
);
},
text
:
function
()
{
thi
s
.
none
();
canvas_event
s
.
none
();
document
.
addEventListener
(
"
mousemove
"
,
events
.
text_mousemove
,
false
);
document
.
addEventListener
(
"
keydown
"
,
events
.
text_keydown
,
false
);
...
...
@@ -739,8 +715,8 @@ var canvas_events = (function() {
set_edit_menu_modals
(
false
);
},
floating_text
:
function
()
{
thi
s
.
none
();
thi
s
.
text
();
canvas_event
s
.
none
();
canvas_event
s
.
text
();
document
.
removeEventListener
(
"
mousedown
"
,
events
.
text_mousedown
,
false
);
document
.
removeEventListener
(
"
mouseup
"
,
events
.
text_mouseup
,
false
);
document
.
removeEventListener
(
"
keypress
"
,
events
.
text_keypress
,
false
);
...
...
@@ -752,7 +728,7 @@ var canvas_events = (function() {
set_edit_menu_modals
(
false
);
},
dropdown_menu
:
function
()
{
thi
s
.
none
();
canvas_event
s
.
none
();
document
.
addEventListener
(
"
mousedown
"
,
events
.
dropdown_menu_mousedown
,
false
);
document
.
addEventListener
(
"
mouseup
"
,
events
.
dropdown_menu_mouseup
,
false
);
document
.
addEventListener
(
"
mousemove
"
,
events
.
dropdown_menu_mousemove
,
false
);
...
...
@@ -762,7 +738,7 @@ var canvas_events = (function() {
.
addEventListener
(
"
wheel
"
,
events
.
dropdown_menu_wheel
,
false
);
},
search
:
function
()
{
thi
s
.
none
();
canvas_event
s
.
none
();
document
.
addEventListener
(
"
keydown
"
,
events
.
find_keydown
,
false
);
state
=
"
search
"
;
},
...
...
@@ -810,6 +786,9 @@ var canvas_events = (function() {
pdgui
.
pdsend
(
name
,
"
dirty 0
"
);
pdgui
.
pdsend
(
cid
,
"
menuclose
"
,
force
);
},
close_save_dialog
:
function
()
{
document
.
getElementById
(
"
save_before_quit
"
).
close
();
},
init
:
function
()
{
document
.
getElementById
(
"
saveDialog
"
)
.
setAttribute
(
"
nwworkingdir
"
,
pdgui
.
get_pwd
());
...
...
@@ -939,7 +918,7 @@ var canvas_events = (function() {
},
false
);
document
.
querySelector
(
"
#canvas_find_text
"
)
.
addEventListener
(
"
focusin
"
,
canvas_
find_focus
,
false
.
addEventListener
(
"
focusin
"
,
canvas_
events
.
search
,
false
);
// disable drag and drop for the time being
...
...
@@ -955,7 +934,7 @@ var canvas_events = (function() {
document
.
querySelector
(
"
#canvas_find_text
"
).
placeholder
=
l
(
"
canvas.find.placeholder
"
);
document
.
querySelector
(
"
#canvas_find_text
"
).
addEventListener
(
"
blur
"
,
canvas_
find_blur
,
false
canvas_
events
.
normal
,
false
);
document
.
querySelector
(
"
#canvas_find_button
"
)
.
addEventListener
(
"
click
"
,
events
.
find_click
...
...
@@ -1163,11 +1142,6 @@ function canvas_paste_from_clipboard(name, clipboard_data)
return
;
}
// Maybe we want a warning prompt here? Then uncomment the line below. I
// disabled this for now, as the paste-from-clipboard command now has its
// own menu option, so presumably the user knows what he's doing. -ag
//if (!permission_to_paste_from_external_clipboard()) return;
// clear the buffer
pdgui
.
pdsend
(
name
,
"
copyfromexternalbuffer
"
);
pd_message
=
""
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment