Adds cursor xy tracking
This commit is contained in:
parent
e679288d8a
commit
1acdc0a13b
@ -1,5 +1,6 @@
|
|||||||
import React, { PropTypes } from 'react';
|
import React, { PropTypes } from 'react';
|
||||||
import WhiteboardShapeModel from './shape-factory/component.jsx';
|
import WhiteboardShapeModel from './shape-factory/component.jsx';
|
||||||
|
import Cursor from './cursor/component.jsx';
|
||||||
import { createContainer } from 'meteor/react-meteor-data';
|
import { createContainer } from 'meteor/react-meteor-data';
|
||||||
import Slide from './slide/component.jsx';
|
import Slide from './slide/component.jsx';
|
||||||
import styles from './styles.scss';
|
import styles from './styles.scss';
|
||||||
@ -62,6 +63,15 @@ export default class Whiteboard extends React.Component {
|
|||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
: null }
|
: null }
|
||||||
|
<Cursor
|
||||||
|
viewBoxWidth={viewBoxWidth}
|
||||||
|
viewBoxHeight={viewBoxHeight}
|
||||||
|
viewBoxX={x}
|
||||||
|
viewBoxY={y}
|
||||||
|
widthRatio={slideObj.width_ratio}
|
||||||
|
cursorX={this.props.cursor[0].x}
|
||||||
|
cursorY={this.props.cursor[0].y}
|
||||||
|
/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</ReactCSSTransitionGroup>
|
</ReactCSSTransitionGroup>
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
import React, { Component, PropTypes } from 'react';
|
||||||
|
import WhiteboardService from '/imports/ui/components/whiteboard/service.js';
|
||||||
|
|
||||||
|
const propTypes = {
|
||||||
|
|
||||||
|
//Defines the cursor x position
|
||||||
|
cx: PropTypes.number,
|
||||||
|
|
||||||
|
//Defines the cursor y position
|
||||||
|
cy: PropTypes.number,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the cursor fill colour
|
||||||
|
* @defaultValue 'red'
|
||||||
|
*/
|
||||||
|
fill: PropTypes.string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the cursor radius
|
||||||
|
* @defaultValue 5
|
||||||
|
*/
|
||||||
|
radius: PropTypes.number,
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultProps = {
|
||||||
|
fill: 'red',
|
||||||
|
radius: 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default class Cursor extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const {
|
||||||
|
viewBoxWidth,
|
||||||
|
viewBoxHeight,
|
||||||
|
viewBoxX,
|
||||||
|
viewBoxY,
|
||||||
|
widthRatio,
|
||||||
|
cursorX,
|
||||||
|
cursorY,
|
||||||
|
fill,
|
||||||
|
radius,
|
||||||
|
} = this.props;
|
||||||
|
|
||||||
|
//Adjust the x,y cursor position according to zoom
|
||||||
|
let cx = (cursorX * viewBoxWidth) + viewBoxX;
|
||||||
|
let cy = (cursorY * viewBoxHeight) + viewBoxY;
|
||||||
|
|
||||||
|
//Adjust the radius of the cursor according to zoom
|
||||||
|
let finalRadius = radius * widthRatio / 100;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<circle
|
||||||
|
cx={cx}
|
||||||
|
cy={cy}
|
||||||
|
r={finalRadius}
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Cursor.propTypes = propTypes;
|
||||||
|
Cursor.defaultProps = defaultProps;
|
@ -1,10 +1,12 @@
|
|||||||
import Presentations from '/imports/api/presentations';
|
import Presentations from '/imports/api/presentations';
|
||||||
import Shapes from '/imports/api/shapes';
|
import Shapes from '/imports/api/shapes';
|
||||||
import Slides from '/imports/api/slides';
|
import Slides from '/imports/api/slides';
|
||||||
|
import Cursor from '/imports/api/cursor';
|
||||||
|
|
||||||
let getWhiteboardData = () => {
|
let getWhiteboardData = () => {
|
||||||
let currentSlide;
|
let currentSlide;
|
||||||
let shapes;
|
let shapes;
|
||||||
|
let cursor;
|
||||||
let currentPresentation = Presentations.findOne({
|
let currentPresentation = Presentations.findOne({
|
||||||
'presentation.current': true,
|
'presentation.current': true,
|
||||||
});
|
});
|
||||||
@ -20,11 +22,16 @@ let getWhiteboardData = () => {
|
|||||||
shapes = Shapes.find({
|
shapes = Shapes.find({
|
||||||
whiteboardId: currentSlide.slide.id,
|
whiteboardId: currentSlide.slide.id,
|
||||||
}).fetch();
|
}).fetch();
|
||||||
|
|
||||||
|
cursor = Cursor.find({
|
||||||
|
meetingId: currentSlide.meetingId,
|
||||||
|
}).fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
currentSlide: currentSlide,
|
currentSlide: currentSlide,
|
||||||
shapes: shapes,
|
shapes: shapes,
|
||||||
|
cursor: cursor,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user