More compact marker drag functions

Removed_REF_marker
DiSlord 5 years ago
parent 00e799e09f
commit 4559c7245a

@ -437,6 +437,9 @@ extern uint16_t graph_bottom;
#define GRID_X_TEXT (AREA_WIDTH_NORMAL - 7*5)
// Marker start drag distance (can be bigger for various display resolution)
#define MARKER_PICKUP_DISTANCE 20
// Smith/polar chart
//#define P_CENTER_X (CELLOFFSETX + WIDTH/2)
//#define P_CENTER_Y (HEIGHT/2)
@ -697,7 +700,7 @@ void draw_cal_status(void);
//void markmap_all_markers(void);
void marker_position(int m, int t, int *x, int *y);
int distance_to_index(int8_t t, uint16_t idx, int16_t x, int16_t y);
int search_nearest_index(int x, int y, int t);
int marker_search_max(void);

@ -1369,29 +1369,23 @@ markmap_all_markers(void)
markmap_upperarea();
}
void
marker_position(int m, int t, int *x, int *y)
int
distance_to_index(int8_t t, uint16_t idx, int16_t x, int16_t y)
{
index_t index = trace_index[t][markers[m].index];
*x = CELL_X(index);
*y = CELL_Y(index);
index_t *index = trace_index[t];
x-= CELL_X(index[idx]);
y-= CELL_Y(index[idx]);
return x*x + y*y;
}
int
search_nearest_index(int x, int y, int t)
{
index_t *index = trace_index[t];
int min_i = -1;
int min_d = 1000;
int min_d = MARKER_PICKUP_DISTANCE * MARKER_PICKUP_DISTANCE;
int i;
for (i = 0; i < sweep_points; i++) {
int16_t dx = x - CELL_X(index[i]);
int16_t dy = y - CELL_Y(index[i]);
if (dx < 0) dx = -dx;
if (dy < 0) dy = -dy;
if (dx > 20 || dy > 20)
continue;
int d = dx*dx + dy*dy;
int d = distance_to_index(t, i, x , y);
if (d < min_d) {
min_d = d;
min_i = i;

55
ui.c

@ -2777,36 +2777,41 @@ touch_pickup_marker(void)
touch_x -= OFFSETX;
touch_y -= OFFSETY;
for (m = 0; m < MARKERS_MAX; m++) {
if (!markers[m].enabled)
int i = MARKER_INVALID, mt;
int min_dist = MARKER_PICKUP_DISTANCE * MARKER_PICKUP_DISTANCE;
// Search closest marker to touch position
for (t = 0; t < TRACES_MAX; t++) {
if (!trace[t].enabled)
continue;
for (t = 0; t < TRACES_MAX; t++) {
int x, y;
if (!trace[t].enabled)
for (m = 0; m < MARKERS_MAX; m++) {
if (!markers[m].enabled)
continue;
marker_position(m, t, &x, &y);
x -= touch_x;
y -= touch_y;
if ((x * x + y * y) < 20 * 20) {
if (active_marker != m) {
previous_marker = active_marker;
active_marker = m;
redraw_marker(active_marker);
}
// select trace
uistat.current_trace = t;
select_lever_mode(LM_MARKER);
markers[m].mtype &= ~M_TRACKING; // Disable tracking when dragging marker
// drag marker until release
drag_marker(t, m);
return TRUE;
// Get distance to marker from touch point
int dist = distance_to_index(t, markers[m].index, touch_x, touch_y);
if (dist < min_dist) {
min_dist = dist;
i = m;
mt = t;
}
}
}
return FALSE;
// Marker not found
if (i == MARKER_INVALID)
return FALSE;
// Marker found, set as active and start drag it
if (active_marker != i) {
previous_marker = active_marker;
active_marker = i;
}
// Disable tracking
markers[i].mtype &= ~M_TRACKING; // Disable tracking when dragging marker
// Leveler mode = marker move
select_lever_mode(LM_MARKER);
// select trace
uistat.current_trace = mt;
// drag marker until release
drag_marker(mt, i);
return TRUE;
}
static int touch_quick_menu(void)

Loading…
Cancel
Save

Powered by TurnKey Linux.