rework text shape before writing
This commit is contained in:
parent
a89e1d9d70
commit
695c5a09d9
28
draw.js
28
draw.js
|
|
@ -52,6 +52,7 @@ const LINECAP_ICON_PATH = Extension.dir.get_child('icons').get_child('linecap-sy
|
||||||
const DASHED_LINE_ICON_PATH = Extension.dir.get_child('icons').get_child('dashed-line-symbolic.svg').get_path();
|
const DASHED_LINE_ICON_PATH = Extension.dir.get_child('icons').get_child('dashed-line-symbolic.svg').get_path();
|
||||||
|
|
||||||
var Shapes = { NONE: 0, LINE: 1, ELLIPSE: 2, RECTANGLE: 3, TEXT: 4 };
|
var Shapes = { NONE: 0, LINE: 1, ELLIPSE: 2, RECTANGLE: 3, TEXT: 4 };
|
||||||
|
var TextState = { DRAWING: 0, WRITING: 1 };
|
||||||
var ShapeNames = { 0: "Free drawing", 1: "Line", 2: "Ellipse", 3: "Rectangle", 4: "Text" };
|
var ShapeNames = { 0: "Free drawing", 1: "Line", 2: "Ellipse", 3: "Rectangle", 4: "Text" };
|
||||||
var LineCapNames = { 0: 'Butt', 1: 'Round', 2: 'Square' };
|
var LineCapNames = { 0: 'Butt', 1: 'Round', 2: 'Square' };
|
||||||
var LineJoinNames = { 0: 'Miter', 1: 'Round', 2: 'Bevel' };
|
var LineJoinNames = { 0: 'Miter', 1: 'Round', 2: 'Bevel' };
|
||||||
|
|
@ -159,7 +160,7 @@ var DrawingArea = new Lang.Class({
|
||||||
let shiftPressed = event.has_shift_modifier();
|
let shiftPressed = event.has_shift_modifier();
|
||||||
|
|
||||||
// stop writing
|
// stop writing
|
||||||
if (this.currentElement && this.currentElement.shape == Shapes.TEXT) {
|
if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING ) {
|
||||||
this._stopWriting();
|
this._stopWriting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -196,7 +197,7 @@ var DrawingArea = new Lang.Class({
|
||||||
this.emitter.emit('stop-drawing');
|
this.emitter.emit('stop-drawing');
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
|
|
||||||
} else if (this.currentElement && this.currentElement.shape == Shapes.TEXT) {
|
} else if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING) {
|
||||||
if (event.get_key_symbol() == Clutter.KEY_BackSpace) {
|
if (event.get_key_symbol() == Clutter.KEY_BackSpace) {
|
||||||
this.currentElement.text = this.currentElement.text.slice(0, -1);
|
this.currentElement.text = this.currentElement.text.slice(0, -1);
|
||||||
this._updateCursorTimeout();
|
this._updateCursorTimeout();
|
||||||
|
|
@ -251,7 +252,7 @@ var DrawingArea = new Lang.Class({
|
||||||
this.smoothedStroke = this.settings.get_boolean('smoothed-stroke');
|
this.smoothedStroke = this.settings.get_boolean('smoothed-stroke');
|
||||||
|
|
||||||
this.currentElement = new DrawingElement ({
|
this.currentElement = new DrawingElement ({
|
||||||
shape: this.currentShape == Shapes.TEXT ? Shapes.RECTANGLE : this.currentShape,
|
shape: this.currentShape,
|
||||||
color: this.currentColor.to_string(),
|
color: this.currentColor.to_string(),
|
||||||
line: { lineWidth: this.currentLineWidth, lineJoin: this.currentLineJoin, lineCap: this.currentLineCap },
|
line: { lineWidth: this.currentLineWidth, lineJoin: this.currentLineJoin, lineCap: this.currentLineCap },
|
||||||
dash: { array: this.dashedLine ? this.dashArray : [0, 0] , offset: this.dashedLine ? this.dashOffset : 0 },
|
dash: { array: this.dashedLine ? this.dashArray : [0, 0] , offset: this.dashedLine ? this.dashOffset : 0 },
|
||||||
|
|
@ -263,6 +264,14 @@ var DrawingArea = new Lang.Class({
|
||||||
points: [[startX, startY]]
|
points: [[startX, startY]]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (this.currentShape == Shapes.TEXT) {
|
||||||
|
this.currentElement.line = { lineWidth: 1, lineJoin: 0, lineCap: 0 };
|
||||||
|
this.currentElement.dash = { array: [1, 1] , offset: 0 };
|
||||||
|
this.currentElement.fill = false;
|
||||||
|
this.currentElement.text = _("Text");
|
||||||
|
this.currentElement.state = TextState.DRAWING;
|
||||||
|
}
|
||||||
|
|
||||||
this.motionHandler = this.connect('motion-event', (actor, event) => {
|
this.motionHandler = this.connect('motion-event', (actor, event) => {
|
||||||
let coords = event.get_coords();
|
let coords = event.get_coords();
|
||||||
let [s, x, y] = this.transform_stage_point(coords[0], coords[1]);
|
let [s, x, y] = this.transform_stage_point(coords[0], coords[1]);
|
||||||
|
|
@ -289,11 +298,12 @@ var DrawingArea = new Lang.Class({
|
||||||
Math.hypot(this.currentElement.points[1][0] - this.currentElement.points[0][0], this.currentElement.points[1][1] - this.currentElement.points[0][1]) > 3)) {
|
Math.hypot(this.currentElement.points[1][0] - this.currentElement.points[0][0], this.currentElement.points[1][1] - this.currentElement.points[0][1]) > 3)) {
|
||||||
|
|
||||||
// start writing
|
// start writing
|
||||||
if (this.currentShape == Shapes.TEXT) {
|
if (this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.DRAWING) {
|
||||||
this.currentElement.shape = Shapes.TEXT;
|
this.currentElement.state = TextState.WRITING;
|
||||||
this.currentElement.text = '';
|
this.currentElement.text = '';
|
||||||
this.emitter.emit('show-osd', _("Type your text\nand press Enter"), null);
|
this.emitter.emit('show-osd', _("Type your text\nand press Enter"), null);
|
||||||
this._updateCursorTimeout();
|
this._updateCursorTimeout();
|
||||||
|
this.textHasCursor = true;
|
||||||
this._redisplay();
|
this._redisplay();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -310,7 +320,7 @@ var DrawingArea = new Lang.Class({
|
||||||
return;
|
return;
|
||||||
if (this.currentElement.shape == Shapes.NONE)
|
if (this.currentElement.shape == Shapes.NONE)
|
||||||
this.currentElement.addPoint(x, y, this.smoothedStroke);
|
this.currentElement.addPoint(x, y, this.smoothedStroke);
|
||||||
else if (this.currentElement.shape == Shapes.RECTANGLE && (controlPressed || this.currentElement.transform.active))
|
else if ((this.currentElement.shape == Shapes.RECTANGLE || this.currentElement.shape == Shapes.TEXT) && (controlPressed || this.currentElement.transform.active))
|
||||||
this.currentElement.transformRectangle(x, y);
|
this.currentElement.transformRectangle(x, y);
|
||||||
else if (this.currentElement.shape == Shapes.ELLIPSE && (controlPressed || this.currentElement.transform.active))
|
else if (this.currentElement.shape == Shapes.ELLIPSE && (controlPressed || this.currentElement.transform.active))
|
||||||
this.currentElement.transformEllipse(x, y);
|
this.currentElement.transformEllipse(x, y);
|
||||||
|
|
@ -543,9 +553,9 @@ var DrawingArea = new Lang.Class({
|
||||||
|
|
||||||
saveAsSvg: function() {
|
saveAsSvg: function() {
|
||||||
// stop drawing or writing
|
// stop drawing or writing
|
||||||
if (this.currentElement && this.currentElement.shape == Shapes.TEXT) {
|
if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING) {
|
||||||
this._stopWriting();
|
this._stopWriting();
|
||||||
} else if (this.currentElement && this.currentShape != Shapes.TEXT) {
|
} else if (this.currentElement && this.currentElement.shape != Shapes.TEXT) {
|
||||||
this._stopDrawing();
|
this._stopDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -706,6 +716,8 @@ var DrawingElement = new Lang.Class({
|
||||||
|
|
||||||
} else if (shape == Shapes.TEXT && points.length == 2) {
|
} else if (shape == Shapes.TEXT && points.length == 2) {
|
||||||
this.rotate(cr, trans.angle, trans.center[0], trans.center[1]);
|
this.rotate(cr, trans.angle, trans.center[0], trans.center[1]);
|
||||||
|
if (this.state == TextState.DRAWING)
|
||||||
|
cr.rectangle(points[0][0], points[0][1], points[1][0] - points[0][0], points[1][1] - points[0][1]);
|
||||||
cr.selectFontFace(this.font.family, this.font.style, this.font.weight);
|
cr.selectFontFace(this.font.family, this.font.style, this.font.weight);
|
||||||
cr.setFontSize(Math.abs(points[1][1] - points[0][1]));
|
cr.setFontSize(Math.abs(points[1][1] - points[0][1]));
|
||||||
cr.moveTo(Math.min(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1]));
|
cr.moveTo(Math.min(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1]));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue