Blame view

sources/apps/files_svgedit/svg-edit/extensions/ext-eyedropper.js 3.75 KB
42e4f8d60   Kload   add all apps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  /*
   * ext-eyedropper.js
   *
   * Licensed under the Apache License, Version 2
   *
   * Copyright(c) 2010 Jeff Schiller
   *
   */
  
  // Dependencies:
  // 1) jQuery
  // 2) history.js
  // 3) svg_editor.js
  // 4) svgcanvas.js
  
  svgEditor.addExtension("eyedropper", function(S) {
  		var svgcontent = S.svgcontent,
  			svgns = "http://www.w3.org/2000/svg",
  			svgdoc = S.svgroot.parentNode.ownerDocument,
  			svgCanvas = svgEditor.canvas,
  			ChangeElementCommand = svgedit.history.ChangeElementCommand,
  			addToHistory = function(cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },
  			currentStyle = {fillPaint: "red", fillOpacity: 1.0,
  							strokePaint: "black", strokeOpacity: 1.0, 
  							strokeWidth: 5, strokeDashArray: null,
  							opacity: 1.0,
  							strokeLinecap: 'butt',
  							strokeLinejoin: 'miter',
  							};
  							
  		function getStyle(opts) {
  			// if we are in eyedropper mode, we don't want to disable the eye-dropper tool
  			var mode = svgCanvas.getMode();
  			if (mode == "eyedropper") return;
  
  			var elem = null;
  			var tool = $('#tool_eyedropper');
  			// enable-eye-dropper if one element is selected
  			if (!opts.multiselected && opts.elems[0] &&
  				$.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) == -1) 
  			{
  				elem = opts.elems[0];
  				tool.removeClass('disabled');
  				// grab the current style
  				currentStyle.fillPaint = elem.getAttribute("fill") || "black";
  				currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0;
  				currentStyle.strokePaint = elem.getAttribute("stroke");
  				currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0;
  				currentStyle.strokeWidth = elem.getAttribute("stroke-width");
  				currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray");
  				currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap");
  				currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin");
  				currentStyle.opacity = elem.getAttribute("opacity") || 1.0;
  			}
  			// disable eye-dropper tool
  			else {
  				tool.addClass('disabled');
  			}
  
  		}
  		
  		return {
  			name: "eyedropper",
  			svgicons: "extensions/eyedropper-icon.xml",
  			buttons: [{
  				id: "tool_eyedropper",
  				type: "mode",
  				title: "Eye Dropper Tool",
  				key: "I",
  				events: {
  					"click": function() {
  						svgCanvas.setMode("eyedropper");
  					}
  				}
  			}],
  			
  			// if we have selected an element, grab its paint and enable the eye dropper button
  			selectedChanged: getStyle,
  			elementChanged: getStyle,
  			
  			mouseDown: function(opts) {
  				var mode = svgCanvas.getMode();
  				if (mode == "eyedropper") {
  					var e = opts.event;
  					var target = e.target;
  					if ($.inArray(target.nodeName, ['svg', 'g', 'use']) == -1) {
  						var changes = {};
  
  						var change = function(elem, attrname, newvalue) {
  							changes[attrname] = elem.getAttribute(attrname);
  							elem.setAttribute(attrname, newvalue);
  						};
  						
  						if (currentStyle.fillPaint) 		change(target, "fill", currentStyle.fillPaint);
  						if (currentStyle.fillOpacity) 		change(target, "fill-opacity", currentStyle.fillOpacity);
  						if (currentStyle.strokePaint) 		change(target, "stroke", currentStyle.strokePaint);
  						if (currentStyle.strokeOpacity) 	change(target, "stroke-opacity", currentStyle.strokeOpacity);
  						if (currentStyle.strokeWidth) 		change(target, "stroke-width", currentStyle.strokeWidth);
  						if (currentStyle.strokeDashArray) 	change(target, "stroke-dasharray", currentStyle.strokeDashArray);
  						if (currentStyle.opacity) 			change(target, "opacity", currentStyle.opacity);
  						if (currentStyle.strokeLinecap) 	change(target, "stroke-linecap", currentStyle.strokeLinecap);
  						if (currentStyle.strokeLinejoin) 	change(target, "stroke-linejoin", currentStyle.strokeLinejoin);
  						
  						addToHistory(new ChangeElementCommand(target, changes));
  					}
  				}
  			},
  		};
  });