aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/InkingControl.tsx
diff options
context:
space:
mode:
authorStanley Yip <stanley_yip@brown.edu>2019-10-15 16:30:00 -0400
committerStanley Yip <stanley_yip@brown.edu>2019-10-15 16:30:00 -0400
commit0be39316bd21939201ee0e15950cc7855c9c13ba (patch)
treebfec698f48c0545b0ce2105d7f17c16513316a68 /src/client/views/InkingControl.tsx
parentaad42660123c227cbe2152fbbbc159f6a38fca17 (diff)
parent33811c112c7e479813908ba10f72813954a3e289 (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into interaction_stanley
Diffstat (limited to 'src/client/views/InkingControl.tsx')
-rw-r--r--src/client/views/InkingControl.tsx66
1 files changed, 27 insertions, 39 deletions
diff --git a/src/client/views/InkingControl.tsx b/src/client/views/InkingControl.tsx
index 38734a03d..149a4fc8a 100644
--- a/src/client/views/InkingControl.tsx
+++ b/src/client/views/InkingControl.tsx
@@ -1,38 +1,30 @@
-import { observable, action, computed, runInAction } from "mobx";
+import { action, computed, observable } from "mobx";
import { ColorResult } from 'react-color';
-import React = require("react");
-import { observer } from "mobx-react";
-import "./InkingControl.scss";
-import { library } from '@fortawesome/fontawesome-svg-core';
-import { faPen, faHighlighter, faEraser, faBan } from '@fortawesome/free-solid-svg-icons';
-import { SelectionManager } from "../util/SelectionManager";
-import { InkTool } from "../../new_fields/InkField";
import { Doc } from "../../new_fields/Doc";
-import { undoBatch, UndoManager } from "../util/UndoManager";
-import { StrCast, NumCast, Cast } from "../../new_fields/Types";
-import { listSpec } from "../../new_fields/Schema";
+import { InkTool } from "../../new_fields/InkField";
import { List } from "../../new_fields/List";
+import { listSpec } from "../../new_fields/Schema";
+import { Cast, NumCast, StrCast } from "../../new_fields/Types";
import { Utils } from "../../Utils";
+import { Scripting } from "../util/Scripting";
+import { SelectionManager } from "../util/SelectionManager";
+import { undoBatch, UndoManager } from "../util/UndoManager";
-library.add(faPen, faHighlighter, faEraser, faBan);
-@observer
-export class InkingControl extends React.Component {
+export class InkingControl {
@observable static Instance: InkingControl;
@observable private _selectedTool: InkTool = InkTool.None;
@observable private _selectedColor: string = "rgb(244, 67, 54)";
@observable private _selectedWidth: string = "5";
@observable public _open: boolean = false;
- constructor(props: Readonly<{}>) {
- super(props);
- runInAction(() => InkingControl.Instance = this);
+ constructor() {
+ InkingControl.Instance = this;
}
- @action
- switchTool = (tool: InkTool): void => {
+ switchTool = action((tool: InkTool): void => {
this._selectedTool = tool;
- }
+ })
decimalToHexString(number: number) {
if (number < 0) {
number = 0xFFFFFFFF + number + 1;
@@ -48,6 +40,14 @@ export class InkingControl extends React.Component {
let selected = SelectionManager.SelectedDocuments();
let oldColors = selected.map(view => {
let targetDoc = view.props.Document.layout instanceof Doc ? view.props.Document.layout : view.props.Document.isTemplate ? view.props.Document : Doc.GetProto(view.props.Document);
+ let sel = window.getSelection();
+ if (StrCast(targetDoc.layout).indexOf("FormattedTextBox") !== -1 && (!sel || sel.toString() !== "")) {
+ targetDoc.color = this._selectedColor;
+ return {
+ target: targetDoc,
+ previous: StrCast(targetDoc.color)
+ };
+ }
let oldColor = StrCast(targetDoc.backgroundColor);
let matchedColor = this._selectedColor;
const cvd = view.props.ContainingCollectionDoc;
@@ -116,22 +116,10 @@ export class InkingControl extends React.Component {
return this._selectedWidth;
}
- @action
- toggleDisplay = () => {
- this._open = !this._open;
- this.switchTool(this._open ? InkTool.Pen : InkTool.None);
- }
- render() {
- return (
- <ul className="inking-control" style={this._open ? { display: "flex" } : { display: "none" }}>
- <li className="ink-size ink-panel">
- <label htmlFor="stroke-width">SIZE: </label>
- <input type="text" min="1" max="100" value={this._selectedWidth} name="stroke-width"
- onChange={(e: React.ChangeEvent<HTMLInputElement>) => this.switchWidth(e.target.value)} />
- <input type="range" min="1" max="100" value={this._selectedWidth} name="stroke-width"
- onChange={(e: React.ChangeEvent<HTMLInputElement>) => this.switchWidth(e.target.value)} />
- </li>
- </ul >
- );
- }
-} \ No newline at end of file
+}
+Scripting.addGlobal(function activatePen(pen: any, width: any, color: any) { InkingControl.Instance.switchTool(pen ? InkTool.Pen : InkTool.None); InkingControl.Instance.switchWidth(width); InkingControl.Instance.updateSelectedColor(color); });
+Scripting.addGlobal(function activateBrush(pen: any, width: any, color: any) { InkingControl.Instance.switchTool(pen ? InkTool.Highlighter : InkTool.None); InkingControl.Instance.switchWidth(width); InkingControl.Instance.updateSelectedColor(color); });
+Scripting.addGlobal(function activateEraser(pen: any) { return InkingControl.Instance.switchTool(pen ? InkTool.Eraser : InkTool.None); });
+Scripting.addGlobal(function deactivateInk() { return InkingControl.Instance.switchTool(InkTool.None); });
+Scripting.addGlobal(function setInkWidth(width: any) { return InkingControl.Instance.switchWidth(width); });
+Scripting.addGlobal(function setInkColor(color: any) { return InkingControl.Instance.updateSelectedColor(color); }); \ No newline at end of file