You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
520 lines
15 KiB
520 lines
15 KiB
<?xml version="1.0" encoding="utf-8" ?>
|
|
<?xml-stylesheet type="text/xsl" href="jsml.xsl"?>
|
|
<jsml xmlns="http://cutesoft.net/jsml"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://cutesoft.net/jsml ../../core/jsml.xsd">
|
|
|
|
<panel jsml-class="contextmenuitem" height="30" border_color="transparent" border_width="1" css_text="border-radius:3px;" margin="2,3,2,3">
|
|
<panel dock="left" width ="26" height="28" vertical_align="middle" horizontal_align="center" margin="-1,0,-1,0">
|
|
<panel width="24" margin="3,0,0,0">
|
|
<image jsml-local="menu_image" visible="0" border_width="0"></image>
|
|
</panel>
|
|
</panel>
|
|
<panel dock="right" width="18" height="28" vertical_align="middle" horizontal_align="center">
|
|
<panel width="18" height="18">
|
|
<image jsml-local="menu_subimage" visible="0" border_width="0"></image>
|
|
</panel>
|
|
</panel>
|
|
<panel dock="fill" vertical_align="middle" margin="0,0,0,5" height="28">
|
|
<label jsml-local="label_name" vertical_align="middle" padding="1"></label>
|
|
</panel>
|
|
<initialize>
|
|
<![CDATA[
|
|
self.get_element().oncontextmenu = function(e)
|
|
{
|
|
var evt = window.event || e;
|
|
if(jsml.msie) evt.cancelBubble = true;
|
|
if (evt.stopPropagation) evt.stopPropagation();
|
|
if (evt.preventDefault) evt.preventDefault();
|
|
evt.returnValue = false;
|
|
return false;
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<property name="menutext">
|
|
<get>
|
|
return label_name.get_text();
|
|
</get>
|
|
<set arguments="val">
|
|
label_name.set_text(val);
|
|
</set>
|
|
</property>
|
|
<property name="enabled">
|
|
<get>
|
|
return self._enabled;
|
|
</get>
|
|
<set arguments="val">
|
|
<![CDATA[
|
|
self._enabled = val;
|
|
if(val=="0")
|
|
{
|
|
label_name.set_text_color("gray");
|
|
menu_subimage.set_visible(0);
|
|
}
|
|
else
|
|
{
|
|
label_name.set_text_color("");
|
|
if(self.get_subimage())
|
|
menu_subimage.set_visible(1);
|
|
}
|
|
]]>
|
|
</set>
|
|
</property>
|
|
<property name="menuimage">
|
|
<get>
|
|
return self._img;
|
|
</get>
|
|
<set arguments="val">
|
|
self._img = val;
|
|
menu_image.set_src(val);
|
|
menu_image.set_visible(1);
|
|
</set>
|
|
</property>
|
|
<property name="subimage">
|
|
<get>
|
|
return self._subimg;
|
|
</get>
|
|
<set arguments="val">
|
|
self._subimg = val;
|
|
menu_subimage.set_src(val);
|
|
if(self.get_enabled()!="0")
|
|
menu_subimage.set_visible(1);
|
|
</set>
|
|
</property>
|
|
<attach name="mousehover">
|
|
<![CDATA[
|
|
var scm = self.get_parent()._doc._subcontextmenu;
|
|
if(scm && scm.get_target()!=self && scm != self.get_parent())
|
|
{
|
|
scm.Remove();
|
|
self.get_parent()._doc._subcontextmenu = null;
|
|
}
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
self.set_border_width(1);
|
|
self.set_border_color("#FFBD69");
|
|
self.set_back_color("#FFE7A2");
|
|
]]>
|
|
</attach>
|
|
<attach name="mouseleave">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
self.set_border_color("transparent");
|
|
self.set_back_color("transparent");
|
|
]]>
|
|
</attach>
|
|
<attach name="click" arguments="sender,evt">
|
|
<![CDATA[
|
|
if(self.get_enabled()!="0" && !menu_subimage.get_visible())
|
|
{
|
|
self.get_parent()._doc.$044();
|
|
}
|
|
var e = window.event || evt.event;
|
|
if(jsml.msie) e.cancelBubble = true;
|
|
if (e.stopPropagation) e.stopPropagation();
|
|
if (e.preventDefault) e.preventDefault();
|
|
e.returnValue = false;
|
|
return false;
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-class="canvascontextmenupanel" width="210" height="238" border_color="rgb(169, 169, 169)" border_width="1" css_text="box-shadow: rgb(153, 153, 153) 3px 3px 12px;" background="transparent url(images/menuleft.gif) repeat-y">
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_Unselect">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
self.set_enabled("0");
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var layer = instance.FindPixelLayer();
|
|
instance._doc.set_selection(null);
|
|
instance._doc.$0118();
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_Invert">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
self.set_enabled("0");
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var _canvas = document.createElement("canvas");
|
|
_canvas.width = instance._doc._canvas.width;
|
|
_canvas.height = instance._doc._canvas.height;
|
|
var _2d = _canvas.getContext("2d");
|
|
_2d.fillStyle = instance._doc.GetOption("SelectionPattern");
|
|
|
|
var _oldselection = instance._doc.get_selection();
|
|
instance._doc.set_selection(null);
|
|
|
|
var w = _canvas.width;
|
|
var h = _canvas.height;
|
|
var c1 = ToolSelection_Inverse(_oldselection);
|
|
|
|
_2d.drawImage(c1, 0, 0, w, h);
|
|
|
|
instance._doc.$0118();
|
|
instance._doc.set_selection(_canvas);
|
|
instance._doc.$056(_canvas);
|
|
|
|
|
|
instance._doc._invertcount = instance._doc._invertcount+1;
|
|
|
|
function ToolSelection_Inverse(canvas)
|
|
{
|
|
var newc = document.createElement("canvas");
|
|
newc.width = canvas.width;
|
|
newc.height = canvas.height;
|
|
var new2d = newc.getContext("2d");
|
|
new2d.fillStyle = ImageEditorDocument.GetOption("SelectionPattern");
|
|
new2d.fillRect(0, 0, canvas.width, canvas.height);
|
|
new2d.globalCompositeOperation = "destination-out"
|
|
new2d.drawImage(canvas, 0, 0, canvas.width, canvas.height);
|
|
return newc;
|
|
}
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_SelectLayer" enabled="0" menuimage="images/select.png" subimage="images/submenu.gif">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
{
|
|
setTimeout(function(){
|
|
var layer = instance.FindPixelLayer();
|
|
if(layer!=null)
|
|
{
|
|
self.set_enabled("1");
|
|
var layername = layer.get_name().length>12?layer.get_name().substr(0,9)+"...":layer.get_name();
|
|
self.set_menutext(self.get_menutext() + " ("+ layername + ")");
|
|
}
|
|
},100);
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<attach name="mousehover">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var scm = instance._doc._subcontextmenu;
|
|
if(scm && scm.get_target()==self)
|
|
return;
|
|
var cmp = jsml.class_create_instance("subcontextmenuselectlayer", [instance._doc]);
|
|
cmp.set_parent(document.body);
|
|
cmp.SetPos(instance,self,{x:0,y:60,width:210,height:30});
|
|
instance._doc._subcontextmenu = cmp;
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_MoveUp">
|
|
<initialize>
|
|
<![CDATA[
|
|
var layerlist = instance._doc.$073();
|
|
var currlayer = instance._doc.get_layer();
|
|
if(layerlist.length==0 || layerlist[layerlist.length-1]._layerid==currlayer._layerid)
|
|
self.set_enabled("0");
|
|
else
|
|
{
|
|
var layername = currlayer.get_name().length>12?currlayer.get_name().substr(0,9)+"...":currlayer.get_name();
|
|
self.set_menutext(self.get_menutext() + " ("+ layername + ")");
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var currlayer = instance._doc.get_layer();
|
|
instance._doc.$082(currlayer);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_Delete">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
self.set_enabled("0");
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
instance._doc.$025();
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_Copy">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
self.set_enabled("0");
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var sel = instance._doc.get_selection();
|
|
//Create a new history using selected area
|
|
var newlayer = jsml.class_create_instance("$042", [instance._doc]);
|
|
newlayer.set_name(ImageEditorDocument.Text["Layer_Copy"]);
|
|
|
|
//Draw new layer
|
|
var ctx = newlayer._2d;
|
|
var layer = instance._doc.get_layer();
|
|
var sw = layer._canvas.width;
|
|
var sh = layer._canvas.height;
|
|
var dw = newlayer._canvas.width;
|
|
var dh = newlayer._canvas.height;
|
|
ctx.drawImage(layer._canvas, 0 - layer._canvas_x, 0 - layer._canvas_y, dw, dh, 0, 0, dw, dh);
|
|
ctx.save();
|
|
ctx.globalCompositeOperation = "destination-out";
|
|
ctx.drawImage(sel, 0, 0, sel.width, sel.height);
|
|
ctx.restore();
|
|
instance._doc._clipboard = newlayer;
|
|
instance._doc.set_selection(null);
|
|
instance._doc.$0118();
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_Paste">
|
|
<initialize>
|
|
<![CDATA[
|
|
if(!instance._doc._clipboard)
|
|
self.set_enabled("0");
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var newlayer = jsml.class_create_instance("$042", [instance._doc]);
|
|
newlayer.set_name(ImageEditorDocument.Text["Layer_Paste"]);
|
|
var ctx = newlayer._2d;
|
|
var sw = instance._doc._clipboard._canvas.width;
|
|
var sh = instance._doc._clipboard._canvas.height;
|
|
var dw = newlayer._canvas.width;
|
|
var dh = newlayer._canvas.height;
|
|
ctx.drawImage(instance._doc._clipboard._canvas, 0 - instance._doc._clipboard._canvas_x, 0 - instance._doc._clipboard._canvas_y, dw, dh, 0, 0, dw, dh);
|
|
|
|
instance._doc.$097(newlayer);
|
|
//select this layer
|
|
//instance._doc.$015(newlayer);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<constructor arguments="doc,pos">
|
|
self.panel_constructor();
|
|
self._doc = doc;
|
|
self._pos = pos;
|
|
</constructor>
|
|
<initialize>
|
|
<![CDATA[
|
|
self.get_element().oncontextmenu = function(e)
|
|
{
|
|
var evt = window.event || e;
|
|
if (evt.stopPropagation) evt.stopPropagation();
|
|
if (evt.preventDefault) evt.preventDefault();
|
|
evt.returnValue = false;
|
|
return false;
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<method name="Remove">
|
|
try {document.body.removeChild(self.get_element());}catch(x){}
|
|
</method>
|
|
<method name="SetPos">
|
|
<![CDATA[
|
|
//self._pos = pos;
|
|
var pos = self._pos;
|
|
var rect=jsml.get_body_rect();
|
|
var sw = self.get_current_width();
|
|
var sh = self.get_current_height();
|
|
var left = pos.x;
|
|
if(left+sw>rect.width)
|
|
left = rect.width-sw;
|
|
var top = pos.y;
|
|
if(top+sh>rect.height)
|
|
top = rect.height-sh;
|
|
var style = self.get_element().style;
|
|
style.position = "absolute";
|
|
self.set_offset_x(left);
|
|
self.set_offset_y(top);
|
|
self._pos.rx = left;
|
|
self._pos.ry = top;
|
|
self._pos.width = sw;
|
|
self._pos.height = sh;
|
|
]]>
|
|
</method>
|
|
<method name="FindPixelLayer">
|
|
<![CDATA[
|
|
var history = self._doc.get_history();
|
|
var ls = history._layers;
|
|
var layer = null;
|
|
for (var i = ls.length - 1; i >= 0; i--) {
|
|
var _layer = ls[i];
|
|
var tp = self._doc.$0100({x:self._pos.offsetX,y:self._pos.offsetY});
|
|
var x = tp.x - _layer._canvas_x;
|
|
var y = tp.y - _layer._canvas_y;
|
|
var imgdata = _layer._2d.getImageData(x, y, 1, 1);
|
|
if (imgdata && imgdata.data && imgdata.data[3] > 0) {
|
|
layer = _layer;
|
|
break;
|
|
}
|
|
}
|
|
return layer;
|
|
]]>
|
|
</method>
|
|
</panel>
|
|
|
|
<panel jsml-class="subcontextmenubase">
|
|
<constructor arguments="doc">
|
|
self.panel_constructor();
|
|
self._doc = doc;
|
|
</constructor>
|
|
<initialize>
|
|
<![CDATA[
|
|
self.get_element().oncontextmenu = function(e)
|
|
{
|
|
var evt = window.event || e;
|
|
if (evt.stopPropagation) evt.stopPropagation();
|
|
if (evt.preventDefault) evt.preventDefault();
|
|
evt.returnValue = false;
|
|
return false;
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<method name="Remove">
|
|
try {document.body.removeChild(self.get_element());}catch(x){}
|
|
</method>
|
|
<method name="SetPos" arguments="parentmenu,target,targetoffset">
|
|
<![CDATA[
|
|
var parentpos = parentmenu._pos;
|
|
self.set_owner(parentmenu);
|
|
self.set_target(target);
|
|
var rect=jsml.get_body_rect();
|
|
var sw = self.get_current_width();
|
|
var sh = self.get_current_height();
|
|
var left = parentpos.rx + targetoffset.width;
|
|
if(left+sw>rect.width)
|
|
left = parentpos.rx-sw;
|
|
var top = parentpos.ry + targetoffset.y;
|
|
if(top+sh>rect.height)
|
|
top = top-sh;
|
|
var style = self.get_element().style;
|
|
style.position = "absolute";
|
|
self.set_offset_x(left);
|
|
self.set_offset_y(top);
|
|
self._pos = {x:left,y:top,width:sw,height:sh};
|
|
]]>
|
|
</method>
|
|
<property name="target">
|
|
<get>
|
|
return self._target;
|
|
</get>
|
|
<set>
|
|
<![CDATA[
|
|
self._target = value;
|
|
]]>
|
|
</set>
|
|
</property>
|
|
<property name="owner">
|
|
<get>
|
|
return self._owner;
|
|
</get>
|
|
<set>
|
|
<![CDATA[
|
|
self._owner = value;
|
|
]]>
|
|
</set>
|
|
</property>
|
|
</panel>
|
|
<panel jsml-class="subcontextmenuselectlayer" jsml-base="subcontextmenubase" width="210" height="68" border_color="transparent" border_width="1" css_text="box-shadow: rgb(153, 153, 153) 3px 3px 12px;" background="transparent url(images/menuleft.gif) repeat-y">
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_SetSelection" enabled="0">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
{
|
|
try
|
|
{
|
|
setTimeout(function(){
|
|
var layer = instance.get_owner().FindPixelLayer();
|
|
if(layer!=null)
|
|
self.set_enabled("1");
|
|
},100);
|
|
}catch(x){}
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var layer = instance.get_owner().FindPixelLayer();
|
|
if(layer==null)
|
|
return;
|
|
instance._doc.$015(layer);
|
|
//instance._doc.set_layer(layer);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
<panel jsml-base="contextmenuitem" dock="top" menutext="@Context_SelectLayer" enabled="0">
|
|
<initialize>
|
|
<![CDATA[
|
|
var sel = instance._doc.get_selection();
|
|
if(!sel)
|
|
{
|
|
try
|
|
{
|
|
setTimeout(function(){
|
|
var layer = instance.get_owner().FindPixelLayer();
|
|
if(layer!=null)
|
|
self.set_enabled("1");
|
|
},100);
|
|
}catch(x){}
|
|
}
|
|
]]>
|
|
</initialize>
|
|
<attach name="click">
|
|
<![CDATA[
|
|
if(self.get_enabled()=="0")
|
|
return;
|
|
var layer = instance.get_owner().FindPixelLayer();
|
|
if(layer==null)
|
|
return;
|
|
//instance._doc.$015(layer);
|
|
instance._doc.set_layer(layer);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
</panel>
|
|
|
|
<execute>
|
|
<![CDATA[
|
|
plugin.LoadUI = function(ctrl,pos)
|
|
{
|
|
var cmp = jsml.class_create_instance("canvascontextmenupanel",[doc, pos]);
|
|
cmp.set_parent(ctrl);
|
|
cmp.SetPos(pos);
|
|
doc._contextmenu = cmp;
|
|
}
|
|
]]>
|
|
</execute>
|
|
</jsml>
|