diff --git a/core/keyboard_nav/cursor_svg.js b/core/keyboard_nav/cursor_svg.js index e0731da4a..1bf28459c 100644 --- a/core/keyboard_nav/cursor_svg.js +++ b/core/keyboard_nav/cursor_svg.js @@ -68,8 +68,7 @@ Blockly.CursorSvg = function(workspace, opt_marker) { * @type {Blockly.blockRendering.ConstantProvider} * @private */ - this.constants_ = new Blockly.blockRendering.ConstantProvider(); - this.constants_.init(); + this.constants_ = workspace.getRenderer().getConstants(); }; /** diff --git a/core/renderers/common/renderer.js b/core/renderers/common/renderer.js index 1582d0824..b232c1f01 100644 --- a/core/renderers/common/renderer.js +++ b/core/renderers/common/renderer.js @@ -32,6 +32,7 @@ goog.require('Blockly.blockRendering.Drawer'); goog.require('Blockly.blockRendering.IPathObject'); goog.require('Blockly.blockRendering.PathObject'); goog.require('Blockly.blockRendering.RenderInfo'); +goog.require('Blockly.CursorSvg'); /** @@ -50,7 +51,7 @@ Blockly.blockRendering.Renderer = function() { }; /** - * Initialize the renderer + * Initialize the renderer. * @package */ Blockly.blockRendering.Renderer.prototype.init = function() { @@ -98,6 +99,20 @@ Blockly.blockRendering.Renderer.prototype.makeDebugger_ = function() { return new Blockly.blockRendering.Debug(); }; +/** + * Create a new instance of the renderer's cursor drawer. + * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs to. + * @param {boolean=} opt_marker True if the cursor is a marker. A marker is used + * to save a location and is an immovable cursor. False or undefined if the + * cursor is not a marker. + * @return {!Blockly.CursorSvg} The cursor drawer. + * @package + */ +Blockly.blockRendering.Renderer.prototype.makeCursorDrawer = function( + workspace, opt_marker) { + return new Blockly.CursorSvg(workspace, opt_marker); +}; + /** * Create a new instance of a renderer path object. * @param {!SVGElement} root The root SVG element. @@ -133,4 +148,3 @@ Blockly.blockRendering.Renderer.prototype.render = function(block) { info.measure(); this.makeDrawer_(block, info).draw(); }; - diff --git a/core/workspace.js b/core/workspace.js index dcc56b787..9810de537 100644 --- a/core/workspace.js +++ b/core/workspace.js @@ -119,27 +119,23 @@ Blockly.Workspace = function(opt_options) { /** * The cursor used to navigate around the AST for keyboard navigation. - * @type {Blockly.Cursor} + * @type {!Blockly.Cursor} * @protected */ - this.cursor_ = null; + this.cursor_ = new Blockly.Cursor(); /** * The marker used to mark a location for keyboard navigation. - * @type {Blockly.MarkerCursor} + * @type {!Blockly.MarkerCursor} * @protected */ - this.marker_ = null; + this.marker_ = new Blockly.MarkerCursor(); // Set the default theme. This is for headless workspaces. This will get // overwritten by the theme passed into the inject call for rendered workspaces. if (!Blockly.getTheme()) { Blockly.setTheme(Blockly.Themes.Classic); } - - this.setCursor(new Blockly.Cursor()); - - this.setMarker(new Blockly.MarkerCursor()); }; /** diff --git a/core/workspace_svg.js b/core/workspace_svg.js index 9a8a5b944..b8648cb2f 100644 --- a/core/workspace_svg.js +++ b/core/workspace_svg.js @@ -424,16 +424,17 @@ Blockly.WorkspaceSvg.prototype.getRenderer = function() { /** * Sets the cursor for use with keyboard navigation. + * * @param {Blockly.Cursor} cursor The cursor used to move around this workspace. * @override */ Blockly.WorkspaceSvg.prototype.setCursor = function(cursor) { - if (this.cursor_) { + if (this.cursor_ && this.cursor_.getDrawer()) { this.cursor_.getDrawer().dispose(); } this.cursor_ = cursor; if (this.cursor_) { - this.cursor_.setDrawer(new Blockly.CursorSvg(this, false)); + this.cursor_.setDrawer(this.getRenderer().makeCursorDrawer(this, false)); this.setCursorSvg(this.cursor_.getDrawer().createDom()); } }; @@ -445,12 +446,12 @@ Blockly.WorkspaceSvg.prototype.setCursor = function(cursor) { * @override */ Blockly.WorkspaceSvg.prototype.setMarker = function(marker) { - if (this.marker_) { + if (this.marker_ && this.marker_.getDrawer()) { this.marker_.getDrawer().dispose(); } this.marker_ = marker; if (this.marker_) { - this.marker_.setDrawer(new Blockly.CursorSvg(this, true)); + this.marker_.setDrawer(this.getRenderer().makeCursorDrawer(this, true)); this.setMarkerSvg(this.marker_.getDrawer().createDom()); } }; @@ -662,9 +663,11 @@ Blockly.WorkspaceSvg.prototype.createDom = function(opt_backgroundClass) { } this.recordDeleteAreas(); + this.cursor_.setDrawer(this.getRenderer().makeCursorDrawer(this, false)); var svgCursor = this.cursor_.getDrawer().createDom(); this.svgGroup_.appendChild(svgCursor); + this.marker_.setDrawer(this.getRenderer().makeCursorDrawer(this, true)); var svgMarker = this.marker_.getDrawer().createDom(); this.svgGroup_.appendChild(svgMarker);