Skip to content

Commit

Permalink
Merge d01127e into a523fb6
Browse files Browse the repository at this point in the history
  • Loading branch information
supersonicclay committed Jan 16, 2020
2 parents a523fb6 + d01127e commit b4da35f
Show file tree
Hide file tree
Showing 23 changed files with 444 additions and 706 deletions.
9 changes: 7 additions & 2 deletions CHANGELOG.md
Expand Up @@ -4,6 +4,11 @@ _All notable changes to this project will be documented in this file. This proje

<!-- INSERT HERE -->

<!-- NEXT VERSION
* Call `event.cancelPan()` instead of `event.sourceEvent.stopPropagation()` in custom edit modes
* `PointerMoveEvent` no longer has an `isDragging` flag. Instead, use the new `handleDragging` event.
-->

## [0.17.0](https://github.com/uber/nebula.gl/compare/v0.16.0...v0.17.0) - 2020-01-10

### Changes
Expand All @@ -19,8 +24,8 @@ _All notable changes to this project will be documented in this file. This proje

### Breaking changes

* DrawCircleByBoundingBoxMode renamed to DrawCircleByDiameterMode (#314)
* The following props of `EditableGeoJsonLayer` are no longer proxied by nebula.gl, instead use deck.gl's [_subLayerProps](https://deck.gl/#/documentation/deckgl-api-reference/layers/composite-layer?section=_sublayerprops-object-experimental):
* DrawCircleByBoundingBoxMode renamed to DrawCircleByDiameterMode (#314)
* The following props of `EditableGeoJsonLayer` are no longer proxied by nebula.gl (instead use deck.gl's [_subLayerProps](https://deck.gl/#/documentation/deckgl-api-reference/layers/composite-layer?section=_sublayerprops-object-experimental)):
* `getLineDashArray`
* `lineDashJustified`
* `getTentativeLineDashArray`
Expand Down
10 changes: 5 additions & 5 deletions examples/advanced/package.json
Expand Up @@ -4,13 +4,13 @@
"start-local": "webpack-dev-server --env.local --progress --hot --open"
},
"dependencies": {
"@deck.gl/core": "^8.0.3",
"@deck.gl/layers": "^8.0.3",
"@deck.gl/react": "^8.0.3",
"@deck.gl/mesh-layers": "^8.0.3",
"@deck.gl/core": "^8.0.6",
"@deck.gl/layers": "^8.0.6",
"@deck.gl/mesh-layers": "^8.0.6",
"@deck.gl/react": "^8.0.6",
"react": "^16.0.0",
"react-dom": "^16.4.2",
"react-map-gl": "^3.3.4",
"react-map-gl": "^5.2.1",
"styled-components": "^4.3.2"
},
"devDependencies": {
Expand Down
519 changes: 122 additions & 397 deletions examples/advanced/yarn.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions modules/edit-modes/src/index.js
Expand Up @@ -39,6 +39,8 @@ export type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
DoubleClickEvent,
ModeProps,
Viewport
} from './types.js';
Expand Down
5 changes: 5 additions & 0 deletions modules/edit-modes/src/lib/composite-mode.js
Expand Up @@ -7,6 +7,7 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
GuideFeatureCollection
} from '../types.js';
import { BaseGeoJsonEditMode } from './geojson-edit-mode.js';
Expand Down Expand Up @@ -48,6 +49,10 @@ export class CompositeMode extends BaseGeoJsonEditMode {
return this._coalesce(handler => handler.handleStopDragging(event, props));
}

handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>): void {
return this._coalesce(handler => handler.handleDragging(event, props));
}

getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
// TODO: Combine the guides *BUT* make sure if none of the results have
// changed to return the same object so that "guides !== this.state.guides"
Expand Down
2 changes: 1 addition & 1 deletion modules/edit-modes/src/lib/draw-90degree-polygon-mode.js
Expand Up @@ -132,10 +132,10 @@ export class Draw90DegreePolygonMode extends BaseGeoJsonEditMode {
screenCoords: [-1, -1],
mapCoords: event.mapCoords,
picks: [],
isDragging: false,
pointerDownPicks: null,
pointerDownScreenCoords: null,
pointerDownMapCoords: null,
cancelPan: () => {},
sourceEvent: null
};
this.handlePointerMove(fakePointerMoveEvent, props);
Expand Down
2 changes: 1 addition & 1 deletion modules/edit-modes/src/lib/draw-polygon-mode.js
Expand Up @@ -102,10 +102,10 @@ export class DrawPolygonMode extends BaseGeoJsonEditMode {
screenCoords: [-1, -1],
mapCoords: event.mapCoords,
picks: [],
isDragging: false,
pointerDownPicks: null,
pointerDownScreenCoords: null,
pointerDownMapCoords: null,
cancelPan: () => {},
sourceEvent: null
};

Expand Down
4 changes: 4 additions & 0 deletions modules/edit-modes/src/lib/edit-mode.js
Expand Up @@ -6,6 +6,7 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
Tooltip,
ModeProps
} from '../types.js';
Expand All @@ -23,6 +24,9 @@ export interface EditMode<TData, TGuides> {
// Called when the pointer went down on something rendered by this layer, the pointer moved, and now the pointer is up
handleStopDragging(event: StopDraggingEvent, props: ModeProps<TData>): void;

// Called when the pointer went down and is moving, regardless of whether something was picked
handleDragging(event: DraggingEvent, props: ModeProps<TData>): void;

// Return features that can be used as a guide for editing the data
getGuides(props: ModeProps<TData>): TGuides;

Expand Down
28 changes: 6 additions & 22 deletions modules/edit-modes/src/lib/extrude-mode.js
Expand Up @@ -7,26 +7,19 @@ import {
getPickedIntermediateEditHandle
} from '../utils.js';
import type { FeatureCollection } from '../geojson-types.js';
import type {
ModeProps,
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent
} from '../types.js';
import { type GeoJsonEditAction } from './geojson-edit-mode.js';
import type { ModeProps, StartDraggingEvent, StopDraggingEvent, DraggingEvent } from '../types.js';
import { ModifyMode } from './modify-mode.js';
import { ImmutableFeatureCollection } from './immutable-feature-collection.js';

export class ExtrudeMode extends ModifyMode {
// this mode is busted =(

isPointAdded: boolean = false;
handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void {
let editAction: ?GeoJsonEditAction = null;

handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>): void {
const editHandle = getPickedEditHandle(event.pointerDownPicks);

if (event.isDragging && editHandle) {
if (editHandle) {
const { featureIndex } = editHandle.properties;
let { positionIndexes } = editHandle.properties;

Expand All @@ -50,28 +43,19 @@ export class ExtrudeMode extends ModifyMode {
.replacePosition(featureIndex, positionIndexes, p3)
.getObject();

editAction = {
props.onEdit({
updatedData,
editType: 'extruding',
editContext: {
featureIndexes: [featureIndex],
positionIndexes: this.nextPositionIndexes(positionIndexes, size),
position: p3
}
};
});

props.onEdit(editAction);
event.cancelPan();
}
}

const cursor = this.getCursor(event);
props.onUpdateCursor(cursor);

// Cancel map panning if pointer went down on an edit handle
const cancelMapPan = Boolean(editHandle);
if (cancelMapPan) {
event.sourceEvent.stopPropagation();
}
}

handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>) {
Expand Down
5 changes: 2 additions & 3 deletions modules/edit-modes/src/lib/geojson-edit-mode.js
Expand Up @@ -10,6 +10,7 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
Pick,
Tooltip,
ModeProps,
Expand Down Expand Up @@ -207,12 +208,10 @@ export class BaseGeoJsonEditMode implements EditMode<FeatureCollection, GuideFea
}

handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>): void {}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void {}

handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>): void {}

handleStopDragging(event: StopDraggingEvent, props: ModeProps<FeatureCollection>): void {}
handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>): void {}
}

export function getIntermediatePosition(position1: Position, position2: Position): Position {
Expand Down
26 changes: 11 additions & 15 deletions modules/edit-modes/src/lib/modify-mode.js
Expand Up @@ -19,10 +19,11 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
Viewport,
GuideFeatureCollection
} from '../types.js';
import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js';
import { BaseGeoJsonEditMode } from './geojson-edit-mode.js';
import { ImmutableFeatureCollection } from './immutable-feature-collection.js';

export class ModifyMode extends BaseGeoJsonEditMode {
Expand Down Expand Up @@ -176,12 +177,13 @@ export class ModifyMode extends BaseGeoJsonEditMode {
}
}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void {
let editAction: ?GeoJsonEditAction = null;

handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>): void {
const editHandle = getPickedEditHandle(event.pointerDownPicks);

if (event.isDragging && editHandle) {
if (editHandle) {
// Cancel map panning if pointer went down on an edit handle
event.cancelPan();

const editHandleProperties = editHandle.properties;

const updatedData = new ImmutableFeatureCollection(props.data)
Expand All @@ -192,27 +194,21 @@ export class ModifyMode extends BaseGeoJsonEditMode {
)
.getObject();

editAction = {
props.onEdit({
updatedData,
editType: 'movePosition',
editContext: {
featureIndexes: [editHandleProperties.featureIndex],
positionIndexes: editHandleProperties.positionIndexes,
position: event.mapCoords
}
};

props.onEdit(editAction);
});
}
}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void {
const cursor = this.getCursor(event);
props.onUpdateCursor(cursor);

// Cancel map panning if pointer went down on an edit handle
const cancelMapPan = Boolean(editHandle);
if (cancelMapPan) {
event.sourceEvent.stopPropagation();
}
}

handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>) {
Expand Down
21 changes: 11 additions & 10 deletions modules/edit-modes/src/lib/rotate-mode.js
Expand Up @@ -7,6 +7,7 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
ModeProps
} from '../types.js';
import type { FeatureCollection, Position } from '../geojson-types.js';
Expand All @@ -17,27 +18,27 @@ export class RotateMode extends BaseGeoJsonEditMode {
_isRotatable: boolean;
_geometryBeingRotated: ?FeatureCollection;

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>) {
this._isRotatable =
Boolean(this._geometryBeingRotated) || this.isSelectionPicked(event.picks, props);

this.updateCursor(props);

if (!this._isRotatable || !event.pointerDownMapCoords) {
handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>) {
if (!this._isRotatable) {
// Nothing to do
return;
}

if (event.isDragging && this._geometryBeingRotated) {
if (this._geometryBeingRotated) {
// Rotate the geometry
props.onEdit(
this.getRotateAction(event.pointerDownMapCoords, event.mapCoords, 'rotating', props)
);
}

// TODO: is there a less hacky way to prevent map panning?
// cancel map panning
event.sourceEvent.stopPropagation();
event.cancelPan();
}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>) {
this._isRotatable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props);

this.updateCursor(props);
}

handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>) {
Expand Down
24 changes: 12 additions & 12 deletions modules/edit-modes/src/lib/scale-mode.js
Expand Up @@ -8,7 +8,8 @@ import type {
ModeProps,
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent
StopDraggingEvent,
DraggingEvent
} from '../types.js';
import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js';
import { ImmutableFeatureCollection } from './immutable-feature-collection.js';
Expand All @@ -17,27 +18,26 @@ export class ScaleMode extends BaseGeoJsonEditMode {
_isScalable: boolean;
_geometryBeingScaled: ?FeatureCollection;

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>) {
this._isScalable =
Boolean(this._geometryBeingScaled) || this.isSelectionPicked(event.picks, props);

this.updateCursor(props);

if (!this._isScalable || !event.pointerDownMapCoords) {
handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>) {
if (!this._isScalable) {
// Nothing to do
return;
}

if (event.isDragging && this._geometryBeingScaled) {
if (this._geometryBeingScaled) {
// Scale the geometry
props.onEdit(
this.getScaleAction(event.pointerDownMapCoords, event.mapCoords, 'scaling', props)
);
}

// TODO: is there a less hacky way to prevent map panning?
// cancel map panning
event.sourceEvent.stopPropagation();
event.cancelPan();
}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>) {
this._isScalable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props);

this.updateCursor(props);
}

handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>) {
Expand Down
7 changes: 6 additions & 1 deletion modules/edit-modes/src/lib/snappable-mode.js
Expand Up @@ -5,6 +5,7 @@ import type {
PointerMoveEvent,
StartDraggingEvent,
StopDraggingEvent,
DraggingEvent,
ModeProps,
Pick,
GuideFeatureCollection,
Expand All @@ -13,7 +14,7 @@ import type {
import { getPickedEditHandle, getPickedEditHandles, getEditHandlesForGeometry } from '../utils.js';
import { BaseGeoJsonEditMode } from './geojson-edit-mode.js';

type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent;
type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent | DraggingEvent;

export class SnappableMode extends BaseGeoJsonEditMode {
_handler: BaseGeoJsonEditMode;
Expand Down Expand Up @@ -153,6 +154,10 @@ export class SnappableMode extends BaseGeoJsonEditMode {
this._handler.handleStopDragging(this._getSnapAwareEvent(event, props), props);
}

handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>) {
this._handler.handleDragging(this._getSnapAwareEvent(event, props), props);
}

handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>) {
this._handler.handlePointerMove(this._getSnapAwareEvent(event, props), props);
}
Expand Down

0 comments on commit b4da35f

Please sign in to comment.