From 899d973ffbcfb0abf2f848e589604942f74160cb Mon Sep 17 00:00:00 2001 From: Narendra Sisodiya Date: Fri, 13 Feb 2009 08:53:35 +0000 Subject: [PATCH] modified code git-svn-id: http://svg-edit.googlecode.com/svn/trunk@7 eee81c28-f429-11dd-99c0-75d572ba1ddd --- GPL-LICENSE.txt | 278 +++++++++++++++++++++++ SvgEditor.js | 9 +- blanksvg.js | 20 +- simple-colorpicker/README | 40 ++++ simple-colorpicker/arrow.gif | Bin 0 -> 111 bytes simple-colorpicker/arrow.png | Bin 0 -> 27296 bytes simple-colorpicker/colorPicker.css | 30 +++ simple-colorpicker/demo.html | 75 ++++++ simple-colorpicker/jquery.colorPicker.js | 158 +++++++++++++ simple-colorpicker/screenshot.png | Bin 0 -> 2078 bytes svg-editor.html | 12 +- 11 files changed, 611 insertions(+), 11 deletions(-) create mode 100644 GPL-LICENSE.txt create mode 100644 simple-colorpicker/README create mode 100644 simple-colorpicker/arrow.gif create mode 100644 simple-colorpicker/arrow.png create mode 100644 simple-colorpicker/colorPicker.css create mode 100644 simple-colorpicker/demo.html create mode 100644 simple-colorpicker/jquery.colorPicker.js create mode 100644 simple-colorpicker/screenshot.png diff --git a/GPL-LICENSE.txt b/GPL-LICENSE.txt new file mode 100644 index 00000000..11dddd00 --- /dev/null +++ b/GPL-LICENSE.txt @@ -0,0 +1,278 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. diff --git a/SvgEditor.js b/SvgEditor.js index 6f883146..d007576b 100644 --- a/SvgEditor.js +++ b/SvgEditor.js @@ -4,17 +4,21 @@ $(document).ready(function(){ ApplyColorPicker("colorSelectorStroke" , "000000" , { callback: function(hex){ window.set_stroke_color(hex); + $('#div_color1').css("backgroundColor", hex); } }); ApplyColorPicker("colorSelectorFill" , "ffffff" , { callback: function(hex){ window.set_fill_color(hex); + $('#div_color2').css("backgroundColor", hex); } }); - + $('#color1').colorPicker(); + $('#color2').colorPicker(); + });//end ready function ApplyColorPicker(id , ini_col_hex , fun_var){ @@ -49,3 +53,6 @@ function return_str_to_html(str){ }); } +function f1(col){ + $('#colorSelectorStroke').ColorPickerSetColor(col); +} diff --git a/blanksvg.js b/blanksvg.js index 50fa0fc0..064acad4 100644 --- a/blanksvg.js +++ b/blanksvg.js @@ -1,6 +1,15 @@ SVGDocument = null; SVGRoot = null; var svgns = "http://www.w3.org/2000/svg"; + + top.clear_svg = SVGclear_svg ; + top.set_draw_mode = SVGset_draw_mode ; + top.submit_svg = SVGsubmit_svg ; + top.set_stroke_color = SVGset_stroke_color; + top.set_fill_color = SVGset_fill_color; + top.set_stroke_width = SVGset_stroke_width ; + + var d_attr = "" ; var signature_started = 0 ; var path_elememt = 0 ; @@ -10,23 +19,16 @@ var ellipse_num = 1 ; var rect_x = null ; var rect_y = null ; - top.clear_svg = SVGclear_svg ; - top.set_draw_mode = SVGset_draw_mode ; - top.submit_svg = SVGsubmit_svg ; - top.set_stroke_color = SVGset_stroke_color; - top.set_fill_color = SVGset_fill_color; - top.set_stroke_width = SVGset_stroke_width ; - var current_draw_element = "path" ; var current_draw_element_fill = "none" ; var current_draw_element_stroke_width = "1px" ; var current_draw_element_stroke = "black" ; - var freehandcircle_min_x = null ; var freehandcircle_max_x = null ; var freehandcircle_min_y = null ; var freehandcircle_max_y = null ; - + + function SVGset_draw_mode(ele_name) { current_draw_element = ele_name; } diff --git a/simple-colorpicker/README b/simple-colorpicker/README new file mode 100644 index 00000000..7d97de4b --- /dev/null +++ b/simple-colorpicker/README @@ -0,0 +1,40 @@ +Really Simple Color Picker +------------------------------- + +Written by Lakshan Perera +For more info please visit: http://www.web2media.net/laktek/?p=96 +Source code is hosted at: http://github.com/laktek/really-simple-color-picker + +Color Picker requires jQuery 1.2.6 or higher. So make sure to load it before Color Picker (there's no other dependencies!). +For default styles of the color picker load the CSS file that comes with the plugin. + + + + + + +Add a text field to take the color input. +
+ +Then call 'colorPicker' method on the text field when document loads. + + +Your favorite colors are missing? +Just add them to the palette + + +Or completely change the color palette as you need... + + +That’s all you have to do! + + diff --git a/simple-colorpicker/arrow.gif b/simple-colorpicker/arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9bdca92f8947235cb599742587af5cc43847b58 GIT binary patch literal 111 zcmZ?wbhEHb6krfw*v!Ci>(;Gv=gyrvb!zY4y<4|#UAuPe(xpr1%$f85|9=K-K=CIF wBRc~JgAPa%WCjC^jKE3H)q5>opWXdGL8H&(A+Ni-$TKm44{SWli7pJ*0Q^NHd;kCd literal 0 HcmV?d00001 diff --git a/simple-colorpicker/arrow.png b/simple-colorpicker/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..876968dd5633cc8239429793b1d54bc2489b48c5 GIT binary patch literal 27296 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 literal 0 HcmV?d00001 diff --git a/simple-colorpicker/colorPicker.css b/simple-colorpicker/colorPicker.css new file mode 100644 index 00000000..39674fa0 --- /dev/null +++ b/simple-colorpicker/colorPicker.css @@ -0,0 +1,30 @@ +div.color_picker { + height: 16px; + width: 16px; + padding: 0 !important; + border: 1px solid #ccc; + background: url(arrow.gif) no-repeat top right; + cursor: pointer; + line-height: 16px; +} + +div#color_selector { + width: 110px; + position: absolute; + border: 1px solid #598FEF; + background-color: #EFEFEF; + padding: 2px; +} + div#color_custom {width: 100%; float:left } + div#color_custom label {font-size: 95%; color: #2F2F2F; margin: 5px 2px; width: 25%} + div#color_custom input {margin: 5px 2px; padding: 0; font-size: 95%; border: 1px solid #000; width: 65%; } + +div.color_swatch { + height: 12px; + width: 12px; + border: 1px solid #000; + margin: 2px; + float: left; + cursor: pointer; + line-height: 12px; +} diff --git a/simple-colorpicker/demo.html b/simple-colorpicker/demo.html new file mode 100644 index 00000000..223c4c58 --- /dev/null +++ b/simple-colorpicker/demo.html @@ -0,0 +1,75 @@ + + + + +Really Simple Color Picker + + + + + + + + + + + + + +
+ +

Really Simple Color Picker (jQuery)

+ + + +

More information about this can be found in this blog article.

+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/simple-colorpicker/jquery.colorPicker.js b/simple-colorpicker/jquery.colorPicker.js new file mode 100644 index 00000000..3320267f --- /dev/null +++ b/simple-colorpicker/jquery.colorPicker.js @@ -0,0 +1,158 @@ +/** + * Really Simple Color Picker in jQuery + * + * Copyright (c) 2008 Lakshan Perera (www.laktek.com) + * Licensed under the MIT (MIT-LICENSE.txt) licenses. + * + */ + +(function($){ + $.fn.colorPicker = function(){ + if(this.length > 0) buildSelector(); + return this.each(function(i) { buildPicker(this)}); + }; + + var selectorOwner; + var selectorShowing = false; + + buildPicker = function(element){ + //build color picker + control = $("
 
") + control.css('background-color', $(element).val()); + control.attr('id' , 'div_' + $(element).attr("id")); + + //bind click event to color picker + control.bind("click", toggleSelector); + + //add the color picker section + $(element).after(control); + + //hide the input box + $(element).hide(); + }; + + buildSelector = function(){ + selector = $("
"); + + //add color pallete + $.each($.fn.colorPicker.defaultColors, function(i){ + swatch = $("
 
") + swatch.css("background-color", "#" + this); + swatch.bind("click", function(e){ changeColor($(this).css("background-color")) }); + swatch.bind("mouseover", function(e){ + $(this).css("border-color", "#598FEF"); + $("input#color_value").val(toHex($(this).css("background-color"))); + }); + swatch.bind("mouseout", function(e){ + $(this).css("border-color", "#000"); + $("input#color_value").val(toHex($(selectorOwner).css("background-color"))); + }); + + swatch.appendTo(selector); + }); + + //add HEX value field + hex_field = $(""); + hex_field.bind("keydown", function(event){ + if(event.keyCode == 13) {changeColor($(this).val());} + if(event.keyCode == 27) {toggleSelector()} + }); + + $("
").append(hex_field).appendTo(selector); + + $("body").append(selector); + selector.hide(); + + }; + + checkMouse = function(event){ + //check the click was on selector itself or on selectorOwner + var selector = "div#color_selector"; + var selectorParent = $(event.target).parents(selector).length; + if(event.target == $(selector)[0] || event.target == selectorOwner || selectorParent > 0) return + + hideSelector(); + } + + hideSelector = function(){ + var selector = $("div#color_selector"); + + $(document).unbind("mousedown", checkMouse); + selector.hide(); + selectorShowing = false + } + + showSelector = function(){ + var selector = $("div#color_selector"); + + //alert($(selectorOwner).offset().top); + + selector.css({ + top: $(selectorOwner).offset().top + ($(selectorOwner).outerHeight()), + left: $(selectorOwner).offset().left + }); + hexColor = $(selectorOwner).prev("input").val(); + $("input#color_value").val(hexColor); + selector.show(); + + //bind close event handler + $(document).bind("mousedown", checkMouse); + selectorShowing = true + } + + toggleSelector = function(event){ + selectorOwner = this; + selectorShowing ? hideSelector() : showSelector(); + } + + changeColor = function(value){ + if(selectedValue = toHex(value)){ + $(selectorOwner).css("background-color", selectedValue); + $(selectorOwner).prev("input").val(selectedValue).change(); + + //close the selector + hideSelector(); + } + }; + + //converts RGB string to HEX - inspired by http://code.google.com/p/jquery-color-utils + toHex = function(color){ + //valid HEX code is entered + if(color.match(/[0-9a-fA-F]{3}$/) || color.match(/[0-9a-fA-F]{6}$/)){ + color = (color.charAt(0) == "#") ? color : ("#" + color); + } + //rgb color value is entered (by selecting a swatch) + else if(color.match(/^rgb\(([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]),[ ]{0,1}([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]),[ ]{0,1}([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])\)$/)){ + var c = ([parseInt(RegExp.$1),parseInt(RegExp.$2),parseInt(RegExp.$3)]); + + var pad = function(str){ + if(str.length < 2){ + for(var i = 0,len = 2 - str.length ; iTVtuWg+lVtt6nCg#tab4aw-8Z#t*r`_B2!xzD}N?>W!C&vu`CV~q?^0#FGk0007LT^$qF z8pfhmyxgpLEYtKlYXSM1ptOMsD&jK>K)iG@z5u`n{||wH>>M$ckjD>gaGhrqdYqR- zX`ex5oyJpz*3mKz9AC}7>k7w+J)0VfAHCY)kj_TrCOITGn zR|%m%nx4xO-5Kt>EzNj%22vIB-BVVM@)QOhc0KCoSh#|Dk(ZSoWtJ;upKB@MogZ3v zCWPCS-kqS&vqbfgWLwmAs0rKO-$%EG+l$5hgUj3GwV+Jo!;UJma3V@M!2|ONk+#pN zg`b0=2YVOUys=_6lvV{QIP3)k=QllZ-zQ*>ZcC6?!Eo_Y`atC zrHj;&t{Ir7ERYZAm2j%afMlZsicL2GURh2M+y_uGrvxz zoCv$j(vJeepzMvmm{Y6hB@%F+@SfoeDZ3)$?49;?Xd51OOpSr-Ji!hurVPP`sc9HZ z_rE4IyvFGqA{3%^-9u7aS(CVMN}Qwdf%H-`9=?&?wg#c3-~1d-xmB+A|3fpOf!X%X zmE{gFMdJrl3Q zOlX4)4UH;!D4H;Lp4-(I3*DRYz8Plg(r+hJd>I}>?gu^RJOb5J4iJ&4sd+d4THc)H zALp^j3GxGXTM+}}_>{%mXW%L@*~VLqlbuoHbPhI5QRaiC@O5P`7z7o)U7nXRN_0Y0 z2IVB7);=IXlPw2V5rX>Nr6ncPKkN6a48NEzXsH`0oA_d@1Xn1VWMP0PCxu{+VCc89 z0YZDV1ws(SRyAE@@3r?yLyX9(w$8PB&*Ys-|PP-;LIVaN`7{Vz8 zd8lPSGHQO)71ICgP-gzSU5Ye(j%nef@Xn;V3zDeexz{bYb9gX|RGf<~pj>ub39YkU zyoax=tR;``rBsEOeic*0W0G%IJ1HVM_aw?hV}IIc@0n-`g1fyZXqlUfEcRz{v`r=c z?)jmJFsa198;qP^Ty$8QXyoONoaZ%b!iAa>+Zh6!J zP*2q;`?x7<#mtdqBAwRxE!k!8&sZW+`9u_qM-Tz~NX>=AH$T5Uo1C7WPGq#Ss0+vH zI6M&&62fn7Z8gxHK{D@Nwbe_!S^49jPEHz(4Be0E>ACT6vLccpY*aFtW7dW#uxGN2s8vh?7r5K4zKO)ZA=r zW0SD9=8=|>VJN%xeP_Mea|$^!GEzifj+EY3;^+ACaS-M0eG!Ml85tSD0Z#6HpAtI3Y5tehQ*xs8HC|BLlr-Iw zoFMsWeVzPq@a07{wV1`ldj#u7W#?5aW2Ix6Rw*2RV|Z*Vwli9&u(De}CJTI!Gm@FjS({%#pQqSNtj-e}j>*5;Lz@ERBxY + + + @@ -39,7 +42,7 @@ Select Stroke Color - +

Stroke Width + + +
+ + + +