123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /**
- * Copyright (c) 2006-2015, JGraph Ltd
- * Copyright (c) 2006-2015, Gaudenz Alder
- */
- /**
- * Class: mxImageExport
- *
- * Creates a new image export instance to be used with an export canvas. Here
- * is an example that uses this class to create an image via a backend using
- * <mxXmlExportCanvas>.
- *
- * (code)
- * var xmlDoc = mxUtils.createXmlDocument();
- * var root = xmlDoc.createElement('output');
- * xmlDoc.appendChild(root);
- *
- * var xmlCanvas = new mxXmlCanvas2D(root);
- * var imgExport = new mxImageExport();
- * imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
- *
- * var bounds = graph.getGraphBounds();
- * var w = Math.ceil(bounds.x + bounds.width);
- * var h = Math.ceil(bounds.y + bounds.height);
- *
- * var xml = mxUtils.getXml(root);
- * new mxXmlRequest('export', 'format=png&w=' + w +
- * '&h=' + h + '&bg=#F9F7ED&xml=' + encodeURIComponent(xml))
- * .simulate(document, '_blank');
- * (end)
- *
- * Constructor: mxImageExport
- *
- * Constructs a new image export.
- */
- function mxImageExport() { };
- /**
- * Variable: includeOverlays
- *
- * Specifies if overlays should be included in the export. Default is false.
- */
- mxImageExport.prototype.includeOverlays = false;
- /**
- * Function: drawState
- *
- * Draws the given state and all its descendants to the given canvas.
- */
- mxImageExport.prototype.drawState = function(state, canvas)
- {
- if (state != null)
- {
- this.visitStatesRecursive(state, canvas, mxUtils.bind(this, function()
- {
- this.drawCellState.apply(this, arguments);
- }));
-
- // Paints the overlays
- if (this.includeOverlays)
- {
- this.visitStatesRecursive(state, canvas, mxUtils.bind(this, function()
- {
- this.drawOverlays.apply(this, arguments);
- }));
- }
- }
- };
- /**
- * Function: visitStatesRecursive
- *
- * Visits the given state and all its descendants to the given canvas recursively.
- */
- mxImageExport.prototype.visitStatesRecursive = function(state, canvas, visitor)
- {
- if (state != null)
- {
- visitor(state, canvas);
-
- var graph = state.view.graph;
- var childCount = graph.model.getChildCount(state.cell);
-
- for (var i = 0; i < childCount; i++)
- {
- var childState = graph.view.getState(graph.model.getChildAt(state.cell, i));
- this.visitStatesRecursive(childState, canvas, visitor);
- }
- }
- };
- /**
- * Function: getLinkForCellState
- *
- * Returns the link for the given cell state and canvas. This returns null.
- */
- mxImageExport.prototype.getLinkForCellState = function(state, canvas)
- {
- return null;
- };
- /**
- * Function: drawCellState
- *
- * Draws the given state to the given canvas.
- */
- mxImageExport.prototype.drawCellState = function(state, canvas)
- {
- // Experimental feature
- var link = this.getLinkForCellState(state, canvas);
-
- if (link != null)
- {
- canvas.setLink(link);
- }
-
- // Paints the shape and text
- this.drawShape(state, canvas);
- this.drawText(state, canvas);
- if (link != null)
- {
- canvas.setLink(null);
- }
- };
- /**
- * Function: drawShape
- *
- * Draws the shape of the given state.
- */
- mxImageExport.prototype.drawShape = function(state, canvas)
- {
- if (state.shape instanceof mxShape && state.shape.checkBounds())
- {
- canvas.save();
-
- state.shape.beforePaint(canvas);
- state.shape.paint(canvas);
- state.shape.afterPaint(canvas);
-
- canvas.restore();
- }
- };
- /**
- * Function: drawText
- *
- * Draws the text of the given state.
- */
- mxImageExport.prototype.drawText = function(state, canvas)
- {
- if (state.text != null && state.text.checkBounds())
- {
- canvas.save();
-
- state.text.beforePaint(canvas);
- state.text.paint(canvas);
- state.text.afterPaint(canvas);
-
- canvas.restore();
- }
- };
- /**
- * Function: drawOverlays
- *
- * Draws the overlays for the given state. This is called if <includeOverlays>
- * is true.
- */
- mxImageExport.prototype.drawOverlays = function(state, canvas)
- {
- if (state.overlays != null)
- {
- state.overlays.visit(function(id, shape)
- {
- if (shape instanceof mxShape)
- {
- shape.paint(canvas);
- }
- });
- }
- };
|