From 4313c95d7ee6570fda242796afefa3fe67d38330 Mon Sep 17 00:00:00 2001 From: Alexis Deveria Date: Fri, 8 Jan 2010 20:36:39 +0000 Subject: [PATCH] Applying recent 2.4 branch changes to trunk git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1174 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/locale/lang.fa.js | 263 +++++++++++++++++++++++---------------- editor/locale/locale.js | 3 +- editor/svg-editor.html | 9 +- editor/svg-editor.js | 6 +- editor/svgcanvas.js | 113 +++++++++++++++-- 5 files changed, 271 insertions(+), 123 deletions(-) diff --git a/editor/locale/lang.fa.js b/editor/locale/lang.fa.js index 45d9d931..9142089e 100644 --- a/editor/locale/lang.fa.js +++ b/editor/locale/lang.fa.js @@ -1,110 +1,157 @@ [ -{"id":"layer_new","title":"لایه جدید"}, -{"id":"layer_delete","title":"حذف لایه"}, -{"id":"layer_rename","title":"تغییر نام لایه"}, -{"id":"layer_up","title":"لایه انتقال بالا"}, -{"id":"layer_down","title":"حرکت لایه پایین"}, -{"id":"tool_clear","title":"تصویر جدید [N]"}, -{"id":"tool_open","title":"تصویر را باز [O]"}, -{"id":"tool_save","title":"ذخیره تصویر [S]"}, -{"id":"tool_docprops","title":"خواص و سند [I]"}, -{"id":"tool_source","title":"ویرایش منبع [U]"}, -{"id":"tool_undo","title":"واگرد [Z]"}, -{"id":"tool_redo","title":"ازنو [Y]"}, -{"id":"tool_clone","title":"کلون عنصر [C]"}, -{"id":"tool_delete","title":"حذف عنصر [Delete/Backspace]"}, -{"id":"tool_move_top","title":"انتقال به بالا [Shift Up]"}, -{"id":"tool_move_bottom","title":"انتقال به پایین [Shift Down]"}, -{"id":"group_opacity","title":"تغییر قلم دوم از اقلام انتخاب شده تاری"}, -{"id":"angle","title":"تغییر زاویه چرخش"}, -{"id":"tool_clone_multi","title":"عناصر کلون [C]"}, -{"id":"tool_delete_multi","title":"حذف المان ها انتخاب شده [Delete/Backspace]"}, -{"id":"tool_alignleft","title":"چپ چین"}, -{"id":"tool_aligncenter","title":"چین مرکز"}, -{"id":"tool_alignright","title":"راست چین"}, -{"id":"tool_aligntop","title":"ترازبالا"}, -{"id":"tool_alignmiddle","title":"تراز میانه"}, -{"id":"tool_alignbottom","title":"ترازپایین"}, -{"id":"align_relative_to","title":"چین نسبت به ..."}, -{"id":"tool_group","title":"عناصر گروه [G]"}, -{"id":"tool_ungroup","title":"عناصر Ungroup [G]"}, -{"id":"rect_x","title":"تغییر مستطیل اکس مختصات"}, -{"id":"rect_y","title":"تغییر ý مستطیل مختصات"}, -{"id":"rect_width","title":"تغییر عرض مستطیل"}, -{"id":"rect_height","title":"تغییر ارتفاع مستطیل"}, -{"id":"rect_rx","title":"تغییر مستطیل گوشه شعاع"}, -{"id":"image_x","title":"تغییر تصویر اکس مختصات"}, -{"id":"image_y","title":"تغییر تصویر هماهنگ ý"}, -{"id":"image_width","title":"تغییر عرض تصویر"}, -{"id":"image_height","title":"تغییر ارتفاع با مزه"}, -{"id":"image_url","title":"تغییر آدرس"}, -{"id":"circle_cx","title":"cx 'sدایره تغییر مختصات"}, -{"id":"circle_cy","title":"دایره تغییر 'scy مختصات"}, -{"id":"circle_r","title":"شعاع دایره را تغییر"}, -{"id":"ellipse_cx","title":"تغییر مختصات بیضی 'scx"}, -{"id":"ellipse_cy","title":"بیضی تغییر 'scy مختصات"}, -{"id":"ellipse_rx","title":"x بیضی تغییر 'sشعاع"}, -{"id":"ellipse_ry","title":"ý شعاع بیضی تغییر 's"}, -{"id":"line_x1","title":"خط شروع را تغییر مختصات x"}, -{"id":"line_y1","title":"تغییر خط را هماهنگ با شروع ý"}, -{"id":"line_x2","title":"خط پایان را تغییر مختصات x"}, -{"id":"line_y2","title":"تغییر خط را پایان دادن به مختصات ý"}, -{"id":"text_x","title":"تغییر متن اکس مختصات"}, -{"id":"text_y","title":"تغییر ý متن مختصات"}, -{"id":"tool_bold","title":"متن پررنگ [B]"}, -{"id":"tool_italic","title":"متن ایتالیک [I]"}, -{"id":"font_family","title":"تغییر فونت خانواده"}, -{"id":"font_size","title":"تغییر اندازه فونت"}, -{"id":"text","title":"مطالب تغییر متن"}, -{"id":"tool_select","title":"انتخاب ابزار [1]"}, -{"id":"tool_path","title":"ابزار مداد [2]"}, -{"id":"tool_line","title":"خط ابزار [3]"}, -{"id":"tools_rect_show","title":"میدان / Rect ابزار [4/Shift 4]"}, -{"id":"tools_ellipse_show","title":"بیضی / دایره ابزار [5/Shift 5]"}, -{"id":"tool_text","title":"ابزار متن [6]"}, -{"id":"tool_poly","title":"پلی ابزار [7]"}, -{"id":"tool_image","title":"ابزار تصویر [8]"}, -{"id":"tool_zoom","title":"زوم ابزار [Ctrl Up/Down]"}, -{"id":"zoom","title":"تغییر سطح زوم"}, -{"id":"fill_color","title":"تغییر رنگ را پر کنید"}, -{"id":"stroke_color","title":"تغییر رنگ سکته مغزی"}, -{"id":"stroke_width","title":"تغییر عرض سکته مغزی"}, -{"id":"stroke_style","title":"سکته مغزی تغییر شیوه خط تیره"}, -{"id":"palette","title":"کلیک کنید ، برای تغییر پر رنگ ، تغییر مکان کلیک کنید برای تغییر رنگ سکته مغزی"}, -{"id":"tool_square","title":"میدان"}, -{"id":"tool_rect","title":"مستطیل"}, -{"id":"tool_fhrect","title":"رایگان دست مستطیل"}, -{"id":"tool_circle","title":"دایره"}, -{"id":"tool_ellipse","title":"بیضی"}, -{"id":"tool_fhellipse","title":"رایگان دست بیضی"}, -{"id":"bkgnd_color","title":"تغییر رنگ پس زمینه / تاری"}, -{"id":"rwidthLabel","textContent":"عرض :"}, -{"id":"rheightLabel","textContent":"قد :"}, -{"id":"cornerRadiusLabel","textContent":"شعاع گوشه :"}, -{"id":"iwidthLabel","textContent":"عرض:"}, -{"id":"iheightLabel","textContent":"ارتفاع:"}, -{"id":"svginfo_width","textContent":"عرض:"}, -{"id":"svginfo_height","textContent":"قد:"}, -{"id":"angleLabel","textContent":"زاویه:"}, -{"id":"relativeToLabel","textContent":"نسبت به:"}, -{"id":"zoomLabel","textContent":"زوم:"}, -{"id":"svninfo_change_background","textContent":"بوم سابقه و هدف"}, -{"id":"layersLable","textContent":"لایه:"}, -{"id":"selectedPredefined","textContent":"از پیش تعریف شده را انتخاب کنید:"}, -{"id":"fitToContent","textContent":"جا به محتوا"}, -{"id":"tool_source_save","textContent":"ذخیره"}, -{"id":"tool_docprops_save","textContent":"ذخیره"}, -{"id":"tool_docprops_cancel","textContent":"انصراف"}, -{"id":"tool_source_cancel","textContent":"انصراف"}, -{"id":"fit_to_all","textContent":"مناسب برای همه مطالب"}, -{"id":"fit_to_layer_content","textContent":"جا به محتوا لایه"}, -{"id":"fit_to_sel","textContent":"به انتخاب مناسب"}, -{"id":"fit_to_canvas","textContent":"متناسببا بوم"}, -{"id":"selected_objects","textContent":"انتخاب اشیاء"}, -{"id":"largest_object","textContent":"بزرگترین شی"}, -{"id":"smallest_object","textContent":"کوچکترین شی"}, -{"id":"page","textContent":"صفحه"}, -{"id":"fill_tool_bottom","textContent":"پر:"}, -{"id":"stroke_tool_bottom","textContent":"سکته مغزی:"}, -{"id":"svninfo_dim","textContent":"ابعاد بوم"} +{"id":"layer_new","title":"‫لایه جدید‬"}, +{"id":"layer_delete","title":"‫حذف لایه‬"}, +{"id":"layer_rename","title":"‫تغییر نام لایه‬"}, +{"id":"layer_up","title":"‫انتقال لایه به بالا‬"}, +{"id":"layer_down","title":"‫انتقال لایه به پایین‬"}, +{"id":"tool_clear","title":"‫تصویر جدید ‬"}, +{"id":"tool_open","title":"‫باز کردن تصویر ‬"}, +{"id":"tool_save","title":"‫ذخیره تصویر ‬"}, +{"id":"tool_docprops","title":"‫مشخصات سند ‬"}, +{"id":"tool_source","title":"‫ویرایش منبع ‬"}, +{"id":"tool_undo","title":"‫واگرد ‬"}, +{"id":"tool_redo","title":"‫ازنو ‬"}, +{"id":"tool_clone","title":"‫ایجاد کپی از عنصر ‬"}, +{"id":"tool_delete","title":"‫حذف عنصر ‬"}, +{"id":"tool_move_top","title":"‫انتقال به بالاترین ‬"}, +{"id":"tool_move_bottom","title":"‫انتقال به پایین ترین ‬"}, +{"id":"group_opacity","title":"‫تغییر تاری عنصر انتخاب شده‬"}, +{"id":"angle","title":"‫تغییر زاویه چرخش‬"}, +{"id":"tool_clone_multi","title":"‫ایجاد کپی از عناصر ‬"}, +{"id":"tool_delete_multi","title":"‫حذف عناصر انتخاب شده ‬"}, +{"id":"tool_alignleft","title":"‫چپ چین‬"}, +{"id":"tool_aligncenter","title":"‫وسط چین‬"}, +{"id":"tool_alignright","title":"‫راست چین‬"}, +{"id":"tool_aligntop","title":"‫تراز بالا‬"}, +{"id":"tool_alignmiddle","title":"‫تراز میانه‬"}, +{"id":"tool_alignbottom","title":"‫تراز پایین‬"}, +{"id":"align_relative_to","title":"‫تراز نسبت به ...‬"}, +{"id":"tool_group","title":"‫قرار دادن عناصر در گروه ‬"}, +{"id":"tool_ungroup","title":"‫خارج کردن عناصر از گروه ‬"}, +{"id":"rect_width","title":"‫تغییر عرض مستطیل‬"}, +{"id":"rect_height","title":"‫تغییر ارتفاع مستطیل‬"}, +{"id":"rect_rx","title":"‫تغییر شعاع گوشه مستطیل‬"}, +{"id":"image_width","title":"‫تغییر عرض تصویر‬"}, +{"id":"image_height","title":"‫تغییر ارتفاع تصویر‬"}, +{"id":"image_url","title":"‫تغییر نشانی وب (url)‬"}, +{"id":"circle_cx","title":"‫تغییر مختصات cx دایره‬"}, +{"id":"circle_cy","title":"‫تغییر مختصات cy دایره‬"}, +{"id":"circle_r","title":"‫تغییر شعاع دایره‬"}, +{"id":"ellipse_cx","title":"‫تغییر مختصات cx بیضی‬"}, +{"id":"ellipse_cy","title":"‫تغییر مختصات cy بیضی‬"}, +{"id":"ellipse_rx","title":"‫تغییر شعاع rx بیضی‬"}, +{"id":"ellipse_ry","title":"‫تغییر شعاع ry بیضی‬"}, +{"id":"line_x1","title":"‫تغییر مختصات x آغاز خط‬"}, +{"id":"line_y1","title":"‫تغییر مختصات y آغاز خط‬"}, +{"id":"line_x2","title":"‫تغییر مختصات x پایان خط‬"}, +{"id":"line_y2","title":"‫تغییر مختصات y پایان خط‬"}, +{"id":"tool_bold","title":"‫متن توپر ‬"}, +{"id":"tool_italic","title":"‫متن کج ‬"}, +{"id":"font_family","title":"‫تغییر خانواده قلم‬"}, +{"id":"font_size","title":"‫تغییر اندازه قلم‬"}, +{"id":"text","title":"‫تغییر محتویات متن‬"}, +{"id":"tool_select","title":"‫ابزار انتخاب ‬"}, +{"id":"tool_fhpath","title":"‫ابزار مداد ‬"}, +{"id":"tool_line","title":"‫ابزار خط ‬"}, +{"id":"tools_rect_show","title":"‫ابزار مستطیل/مربع ‬"}, +{"id":"tools_ellipse_show","title":"‫ابزار بیضی/دایره ‬"}, +{"id":"tool_text","title":"‫ابزار متن ‬"}, +{"id":"tool_path","title":"‫ابزار مسیر ‬"}, +{"id":"tool_image","title":"‫ابزار تصویر ‬"}, +{"id":"tool_zoom","title":"‫ابزار بزرگ نمایی ‬"}, +{"id":"zoom","title":"‫تغییر بزرگ نمایی‬"}, +{"id":"fill_color","title":"‫تغییر رنگ‬"}, +{"id":"stroke_color","title":"‫تغییر رنگ لبه‬"}, +{"id":"stroke_width","title":"‫تغییر عرض لبه‬"}, +{"id":"stroke_style","title":"‫تغییر نقطه چین لبه‬"}, +{"id":"palette","title":"‫برای تغییر رنگ، کلیک کنید. برای تغییر رنگ لبه، کلید تبدیل (shift) را فشرده و کلیک کنید‬"}, +{"id":"tool_square","title":"‫مربع‬"}, +{"id":"tool_rect","title":"‫مستطیل‬"}, +{"id":"tool_fhrect","title":"‫مستطیل با قابلیت تغییر پویا‬"}, +{"id":"tool_circle","title":"‫دایره‬"}, +{"id":"tool_ellipse","title":"‫بیضی‬"}, +{"id":"tool_fhellipse","title":"‫بیضی با قابلیت تغییر پویا‬"}, +{"id":"bkgnd_color","title":"‫تغییر رنگ پس زمینه / تاری‬"}, +{"id":"rwidthLabel","textContent":"‫عرض:‬"}, +{"id":"rheightLabel","textContent":"‫ارتفاع:‬"}, +{"id":"cornerRadiusLabel","textContent":"‫شعاع گوشه:‬"}, +{"id":"iwidthLabel","textContent":"‫عرض:‬"}, +{"id":"iheightLabel","textContent":"‫ارتفاع:‬"}, +{"id":"svginfo_width","textContent":"‫عرض:‬"}, +{"id":"svginfo_height","textContent":"‫ارتفاع:‬"}, +{"id":"angleLabel","textContent":"‫زاویه:‬"}, +{"id":"relativeToLabel","textContent":"‫نسبت به:‬"}, +{"id":"zoomLabel","textContent":"‫بزرگ نمایی:‬"}, +{"id":"layersLabel","textContent":"‫لایه:‬"}, +{"id":"selectedPredefined","textContent":"‫از پیش تعریف شده را انتخاب کنید:‬"}, +{"id":"fitToContent","textContent":"‫هم اندازه شدن با محتوا‬"}, +{"id":"tool_source_save","textContent":"‫اعمال تغییرات‬"}, +{"id":"tool_docprops_save","textContent":"‫تأیید‬"}, +{"id":"tool_docprops_cancel","textContent":"‫لغو‬"}, +{"id":"tool_source_cancel","textContent":"‫لغو‬"}, +{"id":"fit_to_all","textContent":"‫هم اندازه شدن با همه محتویات‬"}, +{"id":"fit_to_layer_content","textContent":"‫هم اندازه شدن با محتوای لایه‬"}, +{"id":"fit_to_sel","textContent":"‫هم اندازه شدن با اشیاء انتخاب شده‬"}, +{"id":"fit_to_canvas","textContent":"‫هم اندازه شدن با صفحه مجازی (بوم)‬"}, +{"id":"selected_objects","textContent":"‫اشیاء انتخاب شده‬"}, +{"id":"largest_object","textContent":"‫بزرگترین شئ‬"}, +{"id":"smallest_object","textContent":"‫کوچکترین شئ‬"}, +{"id":"page","textContent":"‫صفحه‬"}, +{"id":"fill_tool_bottom","textContent":"‫رنگ:‬"}, +{"id":"stroke_tool_bottom","textContent":"‫لبه:‬"}, +{"id":"path_node_x","title":"‫تغییر مختصات x نقطه‬"}, +{"id":"path_node_y","title":"‫تغییر مختصات y نقطه‬"}, +{"id":"seg_type","title":"‫تغییر نوع قطعه (segment)‬"}, +{"id":"straight_segments","textContent":"‫مستقیم‬"}, +{"id":"curve_segments","textContent":"‫منحنی‬"}, +{"id":"tool_node_clone","title":"‫ایجاد کپی از نقطه‬"}, +{"id":"tool_node_delete","title":"‫حذف نقطه‬"}, +{"id":"selLayerLabel","textContent":"‫انتقال عناصر به:‬"}, +{"id":"selLayerNames","title":"‫انتقال عناصر انتخاب شده به یک لایه متفاوت‬"}, +{"id":"sidepanel_handle","title":"‫برای تغییر اندازه منوی کناری، آن را به سمت راست/چپ بکشید ‬","textContent":"‫لایه ها‬"}, +{"id":"tool_wireframe","title":"‫حالت نمایش لبه ها ‬"}, +{"id":"svginfo_image_props","textContent":"‫مشخصات تصویر‬"}, +{"id":"svginfo_title","textContent":"‫عنوان‬"}, +{"id":"svginfo_dim","textContent":"‫ابعاد صفحه مجازی (بوم)‬"}, +{"id":"includedImages","textContent":"‫تصاویر گنجانده شده‬"}, +{"id":"image_opt_embed","textContent":"‫داده های جای داده شده (پرونده های محلی)‬"}, +{"id":"image_opt_ref","textContent":"‫استفاده از ارجاع به پرونده‬"}, +{"id":"svginfo_editor_prefs","textContent":"‫تنظیمات ویراستار‬"}, +{"id":"svginfo_lang","textContent":"‫زبان‬"}, +{"id":"svginfo_change_background","textContent":"‫پس زمینه ویراستار‬"}, +{"id":"svginfo_bg_note","textContent":"‫توجه: پس زمینه همراه تصویر ذخیره نخواهد شد.‬"}, +{"id":"svginfo_icons","textContent":"‫اندازه شمایل‬"}, +{"id":"icon_small","textContent":"‫کوچک‬"}, +{"id":"icon_medium","textContent":"‫متوسط‬"}, +{"id":"icon_large","textContent":"‫بزرگ‬"}, +{"id":"icon_xlarge","textContent":"‫خیلی بزرگ‬"}, +{"id":"selected_x","title":"‫تغییر مختصات X‬"}, +{"id":"selected_y","title":"‫تغییر مختصات Y‬"}, +{"id":"tool_topath","title":"‫تبدیل به مسیر‬"}, +{"id":"tool_reorient","title":"‫جهت دهی مجدد مسیر‬"}, +{"id":"tool_node_link","title":"‫پیوند دادن نقاط کنترل‬"}, +{"js_strings": { + "invalidAttrValGiven":"‫مقدار داده شده نامعتبر است‬", + "noContentToFitTo":"‫محتوایی برای هم اندازه شدن وجود ندارد‬", + 'layer':"‫لایه‬", + "dupeLayerName":"‫لایه ای با آن نام وجود دارد!‬", + "enterUniqueLayerName":"‫لطفا یک نام لایه یکتا انتخاب کنید‬", + "enterNewLayerName":"‫لطفا نام لایه جدید را وارد کنید‬", + "layerHasThatName":"‫لایه از قبل آن نام را دارد‬", + "QmoveElemsToLayer":"‫عناصر انتخاب شده به لایه '%s' منتقل شوند؟‬", + "QwantToClear":"‫آیا مطمئن هستید که می خواهید نقاشی را پاک کنید؟\nاین عمل باعث حذف تاریخچه واگرد شما خواهد شد!‬", + "QerrorsRevertToSource":"‫در منبع SVG شما خطاهای تجزیه (parse) وجود داشت.\nبه منبع SVG اصلی بازگردانده شود؟‬", + "QignoreSourceChanges":"‫تغییرات اعمال شده در منبع SVG نادیده گرفته شوند؟‬", + "featNotSupported":"‫این ویژگی پشتیبانی نشده است‬", + "enterNewImgURL":"‫نشانی وب (url) تصویر جدید را وارد کنید‬", + "ok":"‫تأیید‬", + "cancel":"‫لغو‬", + "pathNodeTooltip":"‫برای جابه جا کردن نقطه، آن را بکشید. برای تغییر قطعه (segment)، روی نقطه دوبار کلیک کنید‬", + "pathCtrlPtTooltip":"‫برای تنظیم مشخصات منحنی، نقطه کنترل را بکشید‬", + "key_up":"‫بالا ‬", + "key_down":"‫پایین ‬", + "key_backspace":"‫پس بر ‬", + "key_del":"‫حذف ‬" + } +} ] diff --git a/editor/locale/locale.js b/editor/locale/locale.js index fabd956c..3b906ce2 100644 --- a/editor/locale/locale.js +++ b/editor/locale/locale.js @@ -8,7 +8,8 @@ */ var put_locale = function(svgCanvas, given_param){ var lang_param; - var good_langs = ['cs','de','en','es','fr','nl','ro','sk']; + // TODO: Make this array be based on entries in svg-editor.html + var good_langs = ['cs','de','en','es','fa','fr','nl','ro','sk']; if(given_param) { lang_param = given_param; } else { diff --git a/editor/svg-editor.html b/editor/svg-editor.html index a06193fb..e5965f2f 100644 --- a/editor/svg-editor.html +++ b/editor/svg-editor.html @@ -15,9 +15,9 @@ + -
-
B
-
i
+
+
B
+
i
+
@@ -438,6 +440,7 @@ script type="text/javascript" src="locale/locale.min.js"> + diff --git a/editor/svg-editor.js b/editor/svg-editor.js index 93d8d957..abce1fac 100644 --- a/editor/svg-editor.js +++ b/editor/svg-editor.js @@ -216,7 +216,7 @@ function svg_edit_setup() { selectedElement = elem; } } - + // we update the contextual panel with potentially new // positional/sizing information (we DON'T want to update the // toolbar here as that creates an infinite loop) @@ -347,8 +347,11 @@ function svg_edit_setup() { // updates the context panel tools based on the selected element var updateContextPanel = function() { var elem = selectedElement; + // If element has just been deleted, consider it null + if(elem != null && !elem.parentNode) elem = null; var currentLayer = svgCanvas.getCurrentLayer(); var currentMode = svgCanvas.getMode(); + // No need to update anything else in rotate mode if (currentMode == 'rotate' && elem != null) { var ang = svgCanvas.getRotationAngle(elem); @@ -366,7 +369,6 @@ function svg_edit_setup() { $('#angle').val(angle); if(svgCanvas.addedNew) { - console.log(elname) if(elname == 'image') { promptImgURL(); } else if(elname == 'text') { diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index efc3fd62..a25388bd 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -8,6 +8,7 @@ * Copyright(c) 2010 Jeff Schiller * */ + if(!window.console) { window.console = {}; window.console.log = function(str) {}; @@ -213,7 +214,7 @@ function RemoveElementCommand(elem, parent, text) { if (svgTransformLists[elem.id]) { delete svgTransformLists[elem.id]; } - + } function MoveElementCommand(elem, oldNextSibling, oldParent, text) { @@ -2268,6 +2269,7 @@ function BatchCommand(text) { aabox: {x:minx, y:miny, width:(maxx-minx), height:(maxy-miny)} }; }; + // Mouse events (function() { var d_attr = null; @@ -3218,21 +3220,27 @@ function BatchCommand(text) { $('#ctrlpointgrip_container *').attr('display','none'); }; - var addNodeToSelection = function(point) { + + var addNodeToSelection = function(point) { // Currently only one node can be selected at a time, should allow more later // Should point be the index or the grip element? var is_closed = pathIsClosed(); + var last_pt = current_path_pts.length/2 - 1; - if(is_closed && point == current_path_pts.length/2 - 1) { + if(is_closed && point == last_pt) { current_path_pt = 0; } else { current_path_pt = point; } $('#pathpointgrip_container circle').attr('stroke','#00F'); - var grip = $('#pathpointgrip_' + point).attr('stroke','#0FF'); + + var sel_point = (current_path_pt == 0 && is_closed)?last_pt:point; + $('#pathpointgrip_' + sel_point).attr('stroke','#0FF'); + var grip = $('#pathpointgrip_' + point); $('#ctrlpointgrip_container circle').attr('fill', '#EEE'); + $('#ctrlpointgrip_' + current_path_pt + 'c1, #ctrlpointgrip_' + current_path_pt + 'c2').attr('fill','#0FF'); updateSegLine(); @@ -4123,6 +4131,8 @@ function BatchCommand(text) { zoomChange: function() { if(current_mode == "pathedit") { resetPointGrips(); + updateSegLine(true); + updateSegLine(); } }, modeChange: function() { @@ -4140,7 +4150,7 @@ function BatchCommand(text) { }, getNodePoint: function() { if(current_path_pt != -1) { - var pt = getPathPoint(current_path_pt, true); + var pt = getPathPoint(current_path_pt); var list = current_path.pathSegList; var segtype; if(list.numberOfItems > current_path_pt+1) { @@ -4329,6 +4339,7 @@ function BatchCommand(text) { call("changed", [current_path]); }, moveNode: function(attr, newValue) { + newValue *= current_zoom; var num = (attr == 'x')?0:1; var old_path_pts = $.map(current_path_pts, function(n){return n/current_zoom;}); @@ -5647,6 +5658,8 @@ function BatchCommand(text) { ret = newg.getBBox(); while (newg.firstChild) { selected.appendChild(newg.firstChild); } selected.parentNode.removeChild(newg); + } else if(elem.nodeName == 'path' && isWebkit) { + ret = getPathBBox(selected); } else { try { ret = selected.getBBox(); } catch(e) { ret = null; } @@ -5988,7 +6001,7 @@ function BatchCommand(text) { addCommandToHistory(batchCmd); } }; - + this.deleteSelectedElements = function() { var batchCmd = new BatchCommand("Delete Elements"); var len = selectedElements.length; @@ -6190,8 +6203,12 @@ function BatchCommand(text) { var oldParent = t.parentNode; var oldNextSibling = t.nextSibling; if (oldNextSibling == selectorManager.selectorParentGroup) oldNextSibling = null; - // first child is a comment, so call nextSibling - var firstChild = t.parentNode.firstChild.nextSibling; + var firstChild = t.parentNode.firstChild; + if (firstChild.tagName == 'title') { + firstChild = firstChild.nextSibling; + } + // This can probably be removed, as the defs should not ever apppear + // inside a layer group if (firstChild.tagName == 'defs') { firstChild = firstChild.nextSibling; } @@ -6251,6 +6268,82 @@ function BatchCommand(text) { } }; + var getPathBBox = function(path) { + // Get correct BBox for a path in Webkit + + // Converted from code found here: + // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + + var seglist = path.pathSegList; + var tot = seglist.numberOfItems; + + var bounds = [[], []]; + var start = seglist.getItem(0); + var P0 = [start.x, start.y]; + + for(var i=0; i < tot; i++) { + var seg = seglist.getItem(i); + if(!seg.x) continue; + + // Add actual points to limits + bounds[0].push(P0[0]); + bounds[1].push(P0[1]); + + if(seg.x1) { + var P1 = [seg.x1, seg.y1], + P2 = [seg.x2, seg.y2], + P3 = [seg.x, seg.y]; + + for(var j=0; j < 2; j++) { + + var calc = function(t) { + return Math.pow(1-t,3) * P0[j] + + 3 * Math.pow(1-t,2) * t * P1[j] + + 3 * (1-t) * Math.pow(t,2) * P2[j] + + Math.pow(t,3) * P3[j]; + }; + + var b = 6 * P0[j] - 12 * P1[j] + 6 * P2[j]; + var a = -3 * P0[j] + 9 * P1[j] - 9 * P2[j] + 3 * P3[j]; + var c = 3 * P1[j] - 3 * P0[j]; + + if(a == 0) { + if(b == 0) { + continue; + } + var t = -c / b; + if(0 < t && t < 1) { + bounds[j].push(calc(t)); + } + continue; + } + + var b2ac = Math.pow(b,2) - 4 * c * a; + if(b2ac < 0) continue; + var t1 = (-b + Math.sqrt(b2ac))/(2 * a); + if(0 < t1 && t1 < 1) bounds[j].push(calc(t1)); + var t2 = (-b - Math.sqrt(b2ac))/(2 * a); + if(0 < t2 && t2 < 1) bounds[j].push(calc(t2)); + } + P0 = P3; + } else { + bounds[0].push(seg.x); + bounds[1].push(seg.y); + } + } + + var x = Math.min.apply(null, bounds[0]); + var w = Math.max.apply(null, bounds[0]) - x; + var y = Math.min.apply(null, bounds[1]); + var h = Math.max.apply(null, bounds[1]) - y; + return { + 'x': x, + 'y': y, + 'width': w, + 'height': h + }; + } + this.getStrokedBBox = function(elems) { if(!elems) elems = canvas.getVisibleElements(); if(!elems.length) return false; @@ -6264,7 +6357,8 @@ function BatchCommand(text) { // fine in FF, but not in other browsers (same problem mentioned // in Issue 339 comment #2). - var bb = elem.getBBox(); + var bb = canvas.getBBox(elem); + var angle = canvas.getRotationAngle(elem); if ((angle && angle % 90) || hasMatrixTransform(canvas.getTransformList(elem))) { // Accurate way to get BBox of rotated element in Firefox: @@ -6337,6 +6431,7 @@ function BatchCommand(text) { var full_bb; $.each(elems, function() { if(full_bb) return; + if(!this.parentNode) return; full_bb = getCheckedBBox(this); });