|  | @@ -38,6 +38,7 @@ import {
 | 
	
		
			
				|  |  |    loadFromBlob,
 | 
	
		
			
				|  |  |    SOCKET_SERVER,
 | 
	
		
			
				|  |  |    SocketUpdateDataSource,
 | 
	
		
			
				|  |  | +  exportCanvas,
 | 
	
		
			
				|  |  |  } from "../data";
 | 
	
		
			
				|  |  |  import { restore } from "../data/restore";
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -72,7 +73,11 @@ import { ActionResult } from "../actions/types";
 | 
	
		
			
				|  |  |  import { getDefaultAppState } from "../appState";
 | 
	
		
			
				|  |  |  import { t, getLanguage } from "../i18n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import { copyToAppClipboard, getClipboardContent } from "../clipboard";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  copyToAppClipboard,
 | 
	
		
			
				|  |  | +  getClipboardContent,
 | 
	
		
			
				|  |  | +  probablySupportsClipboardBlob,
 | 
	
		
			
				|  |  | +} from "../clipboard";
 | 
	
		
			
				|  |  |  import { normalizeScroll } from "../scene";
 | 
	
		
			
				|  |  |  import { getCenter, getDistance } from "../gesture";
 | 
	
		
			
				|  |  |  import { createUndoAction, createRedoAction } from "../actions/actionHistory";
 | 
	
	
		
			
				|  | @@ -582,6 +587,12 @@ export class App extends React.Component<any, AppState> {
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    if (event.code === "KeyC" && event.altKey && event.shiftKey) {
 | 
	
		
			
				|  |  | +      this.copyToClipboardAsPng();
 | 
	
		
			
				|  |  | +      event.preventDefault();
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      if (this.actionManager.handleKeyDown(event)) {
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -643,6 +654,17 @@ export class App extends React.Component<any, AppState> {
 | 
	
		
			
				|  |  |      copyToAppClipboard(elements, this.state);
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  private copyToClipboardAsPng = () => {
 | 
	
		
			
				|  |  | +    const selectedElements = getSelectedElements(elements, this.state);
 | 
	
		
			
				|  |  | +    exportCanvas(
 | 
	
		
			
				|  |  | +      "clipboard",
 | 
	
		
			
				|  |  | +      selectedElements.length ? selectedElements : elements,
 | 
	
		
			
				|  |  | +      this.state,
 | 
	
		
			
				|  |  | +      this.canvas!,
 | 
	
		
			
				|  |  | +      this.state,
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    private pasteFromClipboard = async (event: ClipboardEvent | null) => {
 | 
	
		
			
				|  |  |      // #686
 | 
	
		
			
				|  |  |      const target = document.activeElement;
 | 
	
	
		
			
				|  | @@ -817,6 +839,11 @@ export class App extends React.Component<any, AppState> {
 | 
	
		
			
				|  |  |                        label: t("labels.paste"),
 | 
	
		
			
				|  |  |                        action: () => this.pasteFromClipboard(null),
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  | +                    probablySupportsClipboardBlob &&
 | 
	
		
			
				|  |  | +                      elements.length > 0 && {
 | 
	
		
			
				|  |  | +                        label: t("labels.copyAsPng"),
 | 
	
		
			
				|  |  | +                        action: this.copyToClipboardAsPng,
 | 
	
		
			
				|  |  | +                      },
 | 
	
		
			
				|  |  |                      ...this.actionManager.getContextMenuItems(action =>
 | 
	
		
			
				|  |  |                        this.canvasOnlyActions.includes(action.name),
 | 
	
		
			
				|  |  |                      ),
 | 
	
	
		
			
				|  | @@ -841,6 +868,10 @@ export class App extends React.Component<any, AppState> {
 | 
	
		
			
				|  |  |                      label: t("labels.paste"),
 | 
	
		
			
				|  |  |                      action: () => this.pasteFromClipboard(null),
 | 
	
		
			
				|  |  |                    },
 | 
	
		
			
				|  |  | +                  probablySupportsClipboardBlob && {
 | 
	
		
			
				|  |  | +                    label: t("labels.copyAsPng"),
 | 
	
		
			
				|  |  | +                    action: this.copyToClipboardAsPng,
 | 
	
		
			
				|  |  | +                  },
 | 
	
		
			
				|  |  |                    ...this.actionManager.getContextMenuItems(
 | 
	
		
			
				|  |  |                      action => !this.canvasOnlyActions.includes(action.name),
 | 
	
		
			
				|  |  |                    ),
 |