mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-06-18 23:08:14 +00:00
Zoom functionality applied to drawings & texts
This commit is contained in:
@ -25,8 +25,8 @@ export class DrawingAddingComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
let listener = (event: MouseEvent) => {
|
let listener = (event: MouseEvent) => {
|
||||||
let x = event.pageX - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x);
|
let x = (event.pageX - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x))/this.context.transformation.k;
|
||||||
let y = event.pageY - (this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y);
|
let y = (event.pageY - (this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y))/this.context.transformation.k;
|
||||||
|
|
||||||
this.drawingsEventSource.pointToAddSelected.emit(new AddedDataEvent(x, y));
|
this.drawingsEventSource.pointToAddSelected.emit(new AddedDataEvent(x, y));
|
||||||
this.deactivate();
|
this.deactivate();
|
||||||
|
@ -5,6 +5,7 @@ import { DrawingsEventSource } from '../../events/drawings-event-source';
|
|||||||
import { ToolsService } from '../../../services/tools.service';
|
import { ToolsService } from '../../../services/tools.service';
|
||||||
import { Context } from '../../models/context';
|
import { Context } from '../../models/context';
|
||||||
import { Renderer2 } from '@angular/core';
|
import { Renderer2 } from '@angular/core';
|
||||||
|
import { MapScaleService } from '../../../services/mapScale.service';
|
||||||
|
|
||||||
describe('TemporaryTextElementComponent', () => {
|
describe('TemporaryTextElementComponent', () => {
|
||||||
let component: TextEditorComponent;
|
let component: TextEditorComponent;
|
||||||
@ -17,7 +18,8 @@ describe('TemporaryTextElementComponent', () => {
|
|||||||
{ provide: DrawingsEventSource, useClass: DrawingsEventSource },
|
{ provide: DrawingsEventSource, useClass: DrawingsEventSource },
|
||||||
{ provide: ToolsService, useClass: ToolsService },
|
{ provide: ToolsService, useClass: ToolsService },
|
||||||
{ provide: Context, useClass: Context },
|
{ provide: Context, useClass: Context },
|
||||||
{ provide: Renderer2, useClass: Renderer2 }
|
{ provide: Renderer2, useClass: Renderer2 },
|
||||||
|
{ provide: MapScaleService, useClass: MapScaleService }
|
||||||
],
|
],
|
||||||
declarations: [TextEditorComponent]
|
declarations: [TextEditorComponent]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
|
@ -6,6 +6,7 @@ import { select } from 'd3-selection';
|
|||||||
import { TextElement } from '../../models/drawings/text-element';
|
import { TextElement } from '../../models/drawings/text-element';
|
||||||
import { Context } from '../../models/context';
|
import { Context } from '../../models/context';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
|
import { MapScaleService } from '../../../services/mapScale.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-text-editor',
|
selector: 'app-text-editor',
|
||||||
@ -32,7 +33,8 @@ export class TextEditorComponent implements OnInit, OnDestroy {
|
|||||||
private drawingsEventSource: DrawingsEventSource,
|
private drawingsEventSource: DrawingsEventSource,
|
||||||
private toolsService: ToolsService,
|
private toolsService: ToolsService,
|
||||||
private context: Context,
|
private context: Context,
|
||||||
private renderer: Renderer2
|
private renderer: Renderer2,
|
||||||
|
private mapScaleService: MapScaleService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
@ -48,14 +50,15 @@ export class TextEditorComponent implements OnInit, OnDestroy {
|
|||||||
this.leftPosition = event.pageX.toString() + 'px';
|
this.leftPosition = event.pageX.toString() + 'px';
|
||||||
this.topPosition = event.pageY.toString() + 'px';
|
this.topPosition = event.pageY.toString() + 'px';
|
||||||
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
|
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
|
||||||
|
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'transform', `scale(${this.mapScaleService.getScale()})`);
|
||||||
this.temporaryTextElement.nativeElement.focus();
|
this.temporaryTextElement.nativeElement.focus();
|
||||||
|
|
||||||
let textListener = () => {
|
let textListener = () => {
|
||||||
this.drawingsEventSource.textAdded.emit(
|
this.drawingsEventSource.textAdded.emit(
|
||||||
new TextAddedDataEvent(
|
new TextAddedDataEvent(
|
||||||
this.temporaryTextElement.nativeElement.innerText.replace(/\n$/, ''),
|
this.temporaryTextElement.nativeElement.innerText.replace(/\n$/, ''),
|
||||||
event.pageX - this.context.transformation.x,
|
event.pageX,
|
||||||
event.pageY - this.context.transformation.y
|
event.pageY
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
this.deactivateTextAdding();
|
this.deactivateTextAdding();
|
||||||
@ -84,16 +87,16 @@ export class TextEditorComponent implements OnInit, OnDestroy {
|
|||||||
.selectAll<SVGTextElement, TextElement>('text.text_element')
|
.selectAll<SVGTextElement, TextElement>('text.text_element')
|
||||||
.on('dblclick', (elem, index, textElements) => {
|
.on('dblclick', (elem, index, textElements) => {
|
||||||
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
|
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
|
||||||
|
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'transform', `scale(${this.mapScaleService.getScale()})`);
|
||||||
this.editedElement = elem;
|
this.editedElement = elem;
|
||||||
|
|
||||||
select(textElements[index]).attr('visibility', 'hidden');
|
select(textElements[index]).attr('visibility', 'hidden');
|
||||||
|
|
||||||
select(textElements[index]).classed('editingMode', true);
|
select(textElements[index]).classed('editingMode', true);
|
||||||
|
|
||||||
this.editingDrawingId = textElements[index].parentElement.parentElement.getAttribute('drawing_id');
|
this.editingDrawingId = textElements[index].parentElement.parentElement.getAttribute('drawing_id');
|
||||||
var transformData = textElements[index].parentElement.getAttribute('transform').split(/\(|\)/);
|
var transformData = textElements[index].parentElement.getAttribute('transform').split(/\(|\)/);
|
||||||
var x = Number(transformData[1].split(/,/)[0]) + this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x;
|
var x = (Number(transformData[1].split(/,/)[0]) * this.context.transformation.k) + this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x;
|
||||||
var y = Number(transformData[1].split(/,/)[1]) + this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y;
|
var y = (Number(transformData[1].split(/,/)[1]) * this.context.transformation.k) + this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y;
|
||||||
this.leftPosition = x.toString() + 'px';
|
this.leftPosition = x.toString() + 'px';
|
||||||
this.topPosition = y.toString() + 'px';
|
this.topPosition = y.toString() + 'px';
|
||||||
this.temporaryTextElement.nativeElement.innerText = elem.text;
|
this.temporaryTextElement.nativeElement.innerText = elem.text;
|
||||||
|
@ -45,8 +45,8 @@ export class TextAddedComponent implements OnInit, OnDestroy {
|
|||||||
.add(
|
.add(
|
||||||
this.server,
|
this.server,
|
||||||
this.project.project_id,
|
this.project.project_id,
|
||||||
evt.x - this.context.getZeroZeroTransformationPoint().x,
|
(evt.x - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x))/this.context.transformation.k,
|
||||||
evt.y - this.context.getZeroZeroTransformationPoint().y,
|
(evt.y - (this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y))/this.context.transformation.k,
|
||||||
svgText
|
svgText
|
||||||
)
|
)
|
||||||
.subscribe((serverDrawing: Drawing) => {
|
.subscribe((serverDrawing: Drawing) => {
|
||||||
|
Reference in New Issue
Block a user