use of com.codename1.ui.geom.Point in project CodenameOne by codenameone.
the class Tile method pointPosition.
/**
* Returns the x, y point of the given coordinate relative to this tile
* @param point a coordinate to translate to x, y
* @return a Point object relative to this tile
*/
public Point pointPosition(Coord point) {
int x = position(dimension.getWidth(), point.getLongitude(), bbox.getSouthWest().getLongitude(), bbox.getNorthEast().getLongitude());
int y = position(dimension.getHeight(), point.getLatitude(), bbox.getSouthWest().getLatitude(), bbox.getNorthEast().getLatitude());
//
return new Point(x, dimension.getHeight() - y);
}
use of com.codename1.ui.geom.Point in project CodenameOne by codenameone.
the class PointsLayer method removePoint.
/**
* Removes a point from the PointsLayer
*
* @param point to remove from the PointsLayer
*/
public void removePoint(PointLayer point) {
if (!point.isProjected()) {
Coord c = getProjection().fromWGS84(point);
point.setLatitude(c.getLatitude());
point.setLongitude(c.getLongitude());
point.setProjected(true);
}
points.removeElement(point);
}
use of com.codename1.ui.geom.Point in project CodenameOne by codenameone.
the class Dialog method showPopupDialog.
/**
* A popup dialog is shown with the context of a component and its selection, it is disposed seamlessly if the back button is pressed
* or if the user touches outside its bounds. It can optionally provide an arrow in the theme to point at the context component. The popup
* dialog has the PopupDialog style by default.
*
* @param c the context component which is used to position the dialog and can also be pointed at
* @return the command that might have been triggered by the user within the dialog if commands are placed in the dialog
*/
public Command showPopupDialog(Component c) {
Rectangle componentPos = c.getSelectedRect();
componentPos.setX(componentPos.getX() - c.getScrollX());
componentPos.setY(componentPos.getY() - c.getScrollY());
return showPopupDialog(componentPos);
}
use of com.codename1.ui.geom.Point in project CodenameOne by codenameone.
the class ResetableTextWatcher method showTextEditorAgain.
/**
* Shows the native text field again after it has been hidden in async edit mode.
*/
private void showTextEditorAgain() {
if (!mIsEditing || !isTextEditorHidden()) {
return;
}
textEditorHidden = false;
final TextArea ta = mEditText.mTextArea;
// changed since the native aread was hidden.
synchronized (this) {
inputBuffer = new ArrayList<TextChange>();
}
// We are probably not on the EDT. We need to be on the EDT to
// safely get text from the textarea for synchronization.
Display.getInstance().callSerially(new Runnable() {
public void run() {
// and the editing text area hasn't changed since we issued this call.
if (mIsEditing && mEditText != null && mEditText.mTextArea == ta) {
final String text = ta.getText();
final int cursorPos = ta.getCursorPosition();
// Now that we have our text from the CN1 text area, we need to be on the
// Android UI thread in order to set the text of the native text editor.
impl.getActivity().runOnUiThread(new Runnable() {
public void run() {
// and the editing text area hasn't changed since we issued this call.
if (mIsEditing && mEditText != null && mEditText.mTextArea == ta) {
// so that we don't find it in an inconsistent state.
synchronized (InPlaceEditView.this) {
// Let's record the cursor positions of the native
// text editor in case we need to use them after synchronizing
// with the CN1 textarea.
int start = cursorPos;
int end = cursorPos;
/*
if (!inputBuffer.isEmpty()) {
// If the input buffer isn't empty, then our start
// and end positions will be "wonky"
start = end = inputBuffer.get(0).atPos;
// If the first change was a delete, then the atPos
// will point to the beginning of the deleted section
// so we need to adjust the end point to be *after*
// the deleted section to begin.
if (inputBuffer.get(0).deleteLength > 0) {
end = start = end + inputBuffer.get(0).deleteLength;
}
}
*/
StringBuilder buf = new StringBuilder();
buf.append(text);
// Loop through any pending changes in the input buffer
// (I.e. key strokes that have occurred since we initiated
// this async callback hell!!)
List<TextChange> tinput = inputBuffer;
if (tinput != null) {
for (TextChange change : tinput) {
// end.
if (change.textToAppend != null) {
if (end >= 0 && end <= buf.length()) {
buf.insert(end, change.textToAppend);
end += change.textToAppend.length();
start = end;
} else {
buf.append(change.textToAppend);
end = buf.length();
start = end;
}
} else // The change is "deleted" text.
if (change.deleteLength > 0) {
if (end >= change.deleteLength && end <= buf.length()) {
buf.delete(end - change.deleteLength, end);
end -= change.deleteLength;
start = end;
} else if (end > 0 && end < change.deleteLength) {
buf.delete(0, end);
end = 0;
start = end;
}
}
}
}
// Important: Clear the input buffer so that the TextWatcher
// knows to stop filling it up. We only need the inputBuffer
// to keep input between the original showTextEditorAgain() call
// and here.
inputBuffer = null;
mEditText.setText(buf.toString());
if (start < 0 || start > mEditText.getText().length()) {
start = mEditText.getText().length();
}
if (end < 0 || end > mEditText.getText().length()) {
end = mEditText.getText().length();
}
// Update the caret in the edit text field so we can continue.
mEditText.setSelection(start, end);
}
}
}
});
}
}
});
reLayoutEdit(true);
repaintTextEditor(true);
}
use of com.codename1.ui.geom.Point in project CodenameOne by codenameone.
the class ChartComponent method pointerDragged.
@Override
public void pointerDragged(int[] x, int[] y) {
if (x.length > 1) {
if (!zoomEnabled) {
super.pointerDragged(x, y);
return;
}
// Pinch zoom
if (chart instanceof XYChart) {
XYChart xyChart = (XYChart) chart;
double[] panLimits = xyChart.getRenderer().getPanLimits();
if (zoomStart == null) {
zoomStart = new Point((x[0] + x[1]) / 2, (y[0] + y[1]) / 2);
zoomDistStartX = Math.abs(x[0] - x[1]);
zoomDistStartY = Math.abs(y[0] - y[1]);
zoomStartBBox = getBBox();
if (initialZoomBBox == null) {
initialZoomBBox = zoomStartBBox.translateScreenCoords(0, 0);
}
} else {
int dx = Math.abs(x[0] - x[1]);
int dy = Math.abs(y[0] - y[1]);
if (dx == 0)
dx = 1;
if (dy == 0)
dy = 1;
double zoomX = zoomDistStartX / dx;
double zoomY = zoomDistStartY / dy;
BBox newBounds = zoomStartBBox.scaleScreenCoords((float) zoomX, (float) zoomY);
double minX = newBounds.minX;
double minY = newBounds.minY;
double maxX = newBounds.maxX;
double maxY = newBounds.maxY;
if (panLimits != null) {
// Make sure that this zoom doesn't exceed the maxZoomIn value
if (minX < panLimits[0]) {
maxX = maxX + panLimits[0] - minX;
minX = panLimits[0];
}
if (minY < panLimits[2]) {
maxY = maxY + panLimits[2] - minY;
minY = panLimits[2];
}
if (maxX > panLimits[1]) {
minX = minX + panLimits[1] - maxX;
maxX = panLimits[1];
}
if (maxY > panLimits[3]) {
minY = minY + panLimits[3] - maxY;
maxY = panLimits[3];
}
}
double[] zoomLimits = xyChart.getRenderer().getZoomLimits();
if (zoomLimits != null && zoomLimits[0] != 0) {
if (maxX - minX < zoomLimits[0]) {
maxX = xyChart.getRenderer().getXAxisMax();
minX = xyChart.getRenderer().getXAxisMin();
}
}
if (zoomLimits != null && zoomLimits[1] != 0) {
if (maxX - minX > zoomLimits[1]) {
maxX = xyChart.getRenderer().getXAxisMax();
minX = xyChart.getRenderer().getXAxisMin();
}
}
if (zoomLimits != null && zoomLimits[2] != 0) {
if (maxY - minY < zoomLimits[2]) {
maxY = xyChart.getRenderer().getYAxisMax();
minY = xyChart.getRenderer().getYAxisMin();
}
}
if (zoomLimits != null && zoomLimits[3] != 0) {
if (maxY - minY > zoomLimits[3]) {
maxY = xyChart.getRenderer().getYAxisMax();
minY = xyChart.getRenderer().getYAxisMin();
}
}
if (!xyChart.getRenderer().isZoomXEnabled()) {
minX = xyChart.getRenderer().getXAxisMin();
maxX = xyChart.getRenderer().getXAxisMax();
}
if (!xyChart.getRenderer().isZoomYEnabled()) {
minY = xyChart.getRenderer().getYAxisMin();
maxY = xyChart.getRenderer().getYAxisMax();
}
xyChart.getRenderer().setRange(new double[] { minX, maxX, minY, maxY });
chartBoundsChanged();
this.repaint();
}
} else {
if (zoomStart == null) {
zoomStart = new Point((x[0] + x[1]) / 2, (y[0] + y[1]) / 2);
zoomTransformStart = Transform.makeIdentity();
if (transform != null) {
zoomTransformStart.concatenate(transform);
}
int dx = Math.abs(x[0] - x[1]) / 2;
int dy = Math.abs(y[0] - y[1]) / 2;
zoomDistStart = Math.sqrt(dx * dx + dy * dy);
} else {
int dx = Math.abs(x[0] - x[1]) / 2;
int dy = Math.abs(y[0] - y[1]) / 2;
double zoomDist = Math.sqrt(dx * dx + dy * dy);
if (zoomDist == 0) {
zoomDist = 1;
}
transform = Transform.makeIdentity();
transform.translate(zoomStart.getX(), zoomStart.getY());
transform.scale((float) (zoomDist / zoomDistStart), (float) (zoomDist / zoomDistStart));
transform.translate(-zoomStart.getX(), -zoomStart.getY());
transform.concatenate(zoomTransformStart);
this.repaint();
}
}
} else {
if (!isPanEnabled()) {
super.pointerDragged(x, y);
return;
}
if (chart instanceof XYChart) {
XYChart xyChart = (XYChart) chart;
double[] panLimits = xyChart.getRenderer().getPanLimits();
if (dragStartBBox == null) {
dragStart = new Point(x[0], y[0]);
dragStartBBox = getBBox();
} else {
float tx = x[0] - dragStart.getX();
float ty = y[0] - dragStart.getY();
BBox newBounds = dragStartBBox.translateScreenCoords(-tx, ty);
double minX = newBounds.minX;
double minY = newBounds.minY;
double maxX = newBounds.maxX;
double maxY = newBounds.maxY;
if (panLimits != null) {
if (minX < panLimits[0]) {
maxX = maxX + panLimits[0] - minX;
minX = panLimits[0];
}
if (minY < panLimits[2]) {
maxY = maxY + panLimits[2] - minY;
minY = panLimits[2];
}
if (maxX > panLimits[1]) {
minX = minX + panLimits[1] - maxX;
maxX = panLimits[1];
}
if (maxY > panLimits[3]) {
minY = minY + panLimits[3] - maxY;
maxY = panLimits[3];
}
}
if (!xyChart.getRenderer().isPanXEnabled()) {
minX = xyChart.getRenderer().getXAxisMin();
maxX = xyChart.getRenderer().getXAxisMax();
}
if (!xyChart.getRenderer().isPanYEnabled()) {
minY = xyChart.getRenderer().getYAxisMin();
maxY = xyChart.getRenderer().getYAxisMax();
}
xyChart.getRenderer().setRange(new double[] { minX, maxX, minY, maxY });
chartBoundsChanged();
}
} else {
if (dragStart == null) {
dragStart = new Point(x[0], y[0]);
dragTransformStart = Transform.makeIdentity();
if (transform != null) {
dragTransformStart.concatenate(transform);
}
} else {
transform = Transform.makeIdentity();
transform.translate(x[0] - dragStart.getX(), y[0] - dragStart.getY());
transform.concatenate(dragTransformStart);
this.repaint();
}
}
}
// To change body of generated methods, choose Tools | Templates.
super.pointerDragged(x, y);
}
Aggregations