Graphviz 14.1.2~dev.20260118.1035
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 "config.h"
12
13#include "glmotion.h"
14#include <gtk/gtk.h>
15#include <gdk/gdkkeysyms.h>
16#include <gtk/gtkgl.h>
17#include <gdk/gdkcursor.h>
18#include "draw.h"
19#include <glcomp/glutils.h>
20#include "hotkeymap.h"
21#include <stdint.h>
22
23/*real zoom in out is done here, all other functions send this one what they desire, it is not guranteed,*/
24static void graph_zoom(double real_zoom) {
25 double old_zoom;
26
28 old_zoom = view->zoom;
29 else
30 old_zoom = view->cameras[view->active_camera]->r;
31
32 if (real_zoom < view->Topview->fitin_zoom * MAX_ZOOM)
33 real_zoom = view->Topview->fitin_zoom * MAX_ZOOM;
34 if (real_zoom > view->Topview->fitin_zoom * MIN_ZOOM)
35 real_zoom = view->Topview->fitin_zoom * MIN_ZOOM;
37 view->zoom = real_zoom;
38 else
39 view->cameras[view->active_camera]->r = real_zoom * -1;
40 /*adjust pan values */
41 view->panx = old_zoom * view->panx / real_zoom;
42 view->pany = old_zoom * view->pany / real_zoom;
43}
44
45void glmotion_zoom_inc(int zoomin)
46{
47 if (zoomin) /*zooming in , zoom value should be decreased */
48 graph_zoom(view->zoom - view->zoom * 0.25);
49 else
50 graph_zoom(view->zoom + view->zoom * 0.25); /*zoom out */
51 glexpose();
52
53}
54
55void glmotion_zoom(void)
56{
57 double real_zoom;
58 if (view->active_camera == SIZE_MAX) {
59 real_zoom =
60 view->zoom + view->mouse.dragX / 10 * (view->zoom * -1 / 20);
61 } else {
62 real_zoom =
65 20)) * -1;
66 }
67 graph_zoom(real_zoom);
68
69}
70
72{
73 if (v->active_camera == SIZE_MAX) {
74 const double gldx = GetOGLDistance(v->mouse.dragX) / v->zoom * -1;
75 const double gldy = GetOGLDistance(v->mouse.dragY) / v->zoom * -1;
76 v->panx = v->panx - gldx;
77 v->pany = v->pany + gldy;
78 } else {
79 const double gldx = GetOGLDistance(v->mouse.dragX) / v->cameras[v->active_camera]->r;
80 const double gldy = GetOGLDistance(v->mouse.dragY) / v->cameras[v->active_camera]->r;
81 v->cameras[v->active_camera]->targetx -= gldx;
82 v->cameras[v->active_camera]->targety += gldy;
83 }
84}
void glmotion_pan(ViewInfo *v)
Definition glmotion.c:71
void glmotion_zoom(void)
Definition glmotion.c:55
static void graph_zoom(double real_zoom)
Definition glmotion.c:24
void glmotion_zoom_inc(int zoomin)
Definition glmotion.c:45
double GetOGLDistance(double l)
Definition glutils.c:49
#define SIZE_MAX
Definition gmlscan.c:347
ViewInfo * view
Definition viewport.c:40
#define MAX_ZOOM
Definition smyrnadefs.h:51
#define MIN_ZOOM
Definition smyrnadefs.h:52
void glexpose(void)
Definition viewport.c:523
topview * Topview
Definition smyrnadefs.h:305
double zoom
Definition smyrnadefs.h:250
viewport_camera ** cameras
Definition smyrnadefs.h:297
double panx
Definition smyrnadefs.h:248
double pany
Definition smyrnadefs.h:249
glCompMouse mouse
Definition smyrnadefs.h:295
size_t active_camera
<number of cameras
Definition smyrnadefs.h:299
double fitin_zoom
Definition smyrnadefs.h:229