Graphviz 13.1.2~dev.20250808.0820
Loading...
Searching...
No Matches
glmotion.c
Go to the documentation of this file.
1/*************************************************************************
2 * Copyright (c) 2011 AT&T Intellectual Property
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors: Details at https://graphviz.org
9 *************************************************************************/
10
11#include "glmotion.h"
12#include <gtk/gtk.h>
13#include <gdk/gdkkeysyms.h>
14#include <gtk/gtkgl.h>
15#include <gdk/gdkcursor.h>
16#include "draw.h"
17#include <glcomp/glutils.h>
18#include "hotkeymap.h"
19#include <stdint.h>
20
21/*real zoom in out is done here, all other functions send this one what they desire, it is not guranteed,*/
22static void graph_zoom(double real_zoom) {
23 double old_zoom;
24
26 old_zoom = view->zoom;
27 else
28 old_zoom = view->cameras[view->active_camera]->r;
29
30 if (real_zoom < view->Topview->fitin_zoom * MAX_ZOOM)
31 real_zoom = view->Topview->fitin_zoom * MAX_ZOOM;
32 if (real_zoom > view->Topview->fitin_zoom * MIN_ZOOM)
33 real_zoom = view->Topview->fitin_zoom * MIN_ZOOM;
35 view->zoom = real_zoom;
36 else
37 view->cameras[view->active_camera]->r = real_zoom * -1;
38 /*adjust pan values */
39 view->panx = old_zoom * view->panx / real_zoom;
40 view->pany = old_zoom * view->pany / real_zoom;
41}
42
43void glmotion_zoom_inc(int zoomin)
44{
45 if (zoomin) /*zooming in , zoom value should be decreased */
46 graph_zoom(view->zoom - view->zoom * 0.25);
47 else
48 graph_zoom(view->zoom + view->zoom * 0.25); /*zoom out */
49 glexpose();
50
51}
52
53void glmotion_zoom(void)
54{
55 double real_zoom;
56 if (view->active_camera == SIZE_MAX) {
57 real_zoom =
58 view->zoom + view->mouse.dragX / 10 * (view->zoom * -1 / 20);
59 } else {
60 real_zoom =
63 20)) * -1;
64 }
65 graph_zoom(real_zoom);
66
67}
68
70{
71 if (v->active_camera == SIZE_MAX) {
72 const double gldx = GetOGLDistance(v->mouse.dragX) / v->zoom * -1;
73 const double gldy = GetOGLDistance(v->mouse.dragY) / v->zoom * -1;
74 v->panx = v->panx - gldx;
75 v->pany = v->pany + gldy;
76 } else {
77 const double gldx = GetOGLDistance(v->mouse.dragX) / v->cameras[v->active_camera]->r;
78 const double gldy = GetOGLDistance(v->mouse.dragY) / v->cameras[v->active_camera]->r;
79 v->cameras[v->active_camera]->targetx -= gldx;
80 v->cameras[v->active_camera]->targety += gldy;
81 }
82}
void glmotion_pan(ViewInfo *v)
Definition glmotion.c:69
void glmotion_zoom(void)
Definition glmotion.c:53
static void graph_zoom(double real_zoom)
Definition glmotion.c:22
void glmotion_zoom_inc(int zoomin)
Definition glmotion.c:43
double GetOGLDistance(double l)
Definition glutils.c:47
#define SIZE_MAX
Definition gmlscan.c:347
ViewInfo * view
Definition viewport.c:37
#define MAX_ZOOM
Definition smyrnadefs.h:51
#define MIN_ZOOM
Definition smyrnadefs.h:52
void glexpose(void)
Definition viewport.c:520
topview * Topview
Definition smyrnadefs.h:307
double zoom
Definition smyrnadefs.h:252
viewport_camera ** cameras
Definition smyrnadefs.h:299
double panx
Definition smyrnadefs.h:250
double pany
Definition smyrnadefs.h:251
glCompMouse mouse
Definition smyrnadefs.h:297
size_t active_camera
<number of cameras
Definition smyrnadefs.h:301
double fitin_zoom
Definition smyrnadefs.h:231