File: toolboxcallbacks.c

package info (click to toggle)
graphviz 14.0.5-2
  • links: PTS
  • area: main
  • in suites: forky
  • size: 139,388 kB
  • sloc: ansic: 141,938; cpp: 11,957; python: 7,766; makefile: 4,043; yacc: 3,030; xml: 2,972; tcl: 2,495; sh: 1,388; objc: 1,159; java: 560; lex: 423; perl: 243; awk: 156; pascal: 139; php: 58; ruby: 49; cs: 31; sed: 1
file content (89 lines) | stat: -rw-r--r-- 2,873 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*************************************************************************
 * Copyright (c) 2011 AT&T Intellectual Property 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors: Details at https://graphviz.org
 *************************************************************************/

#include "toolboxcallbacks.h"
#include "viewport.h"

#include "gltemplate.h"
#include <glcomp/glutils.h>
#include "glmotion.h"
#include <stdint.h>

void btnToolZoomOut_clicked(GtkWidget *widget, void *user_data) {
    (void)widget;
    (void)user_data;

    glmotion_zoom_inc(0);
}

void btnToolZoomFit_clicked(GtkWidget *widget, void *user_data) {
    (void)widget;
    (void)user_data;

    const double z = view->active_camera != SIZE_MAX
                   ? view->cameras[view->active_camera]->r
                   : -view->zoom;

    const double GDX = view->bdxRight / z - view->bdxLeft / z;
    const double SDX = view->clipX2 - view->clipX1;
    const double GDY = view->bdyTop / z - view->bdyBottom / z;
    const double SDY = view->clipY2 - view->clipY1;

    if (SDX / GDX <= SDY / GDY) {
        if (view->active_camera != SIZE_MAX) {
            view->cameras[view->active_camera]->r /= SDX / GDX;
        } else {
            view->zoom /= SDX / GDX;
        }
    } else {
        if (view->active_camera != SIZE_MAX) {
            view->cameras[view->active_camera]->r /= SDY / GDY;
        } else {
            view->zoom /= SDY / GDY;
        }

    }
    btnToolFit_clicked(NULL, NULL);
}

void btnToolFit_clicked(GtkWidget *widget, void *user_data) {
    (void)widget;
    (void)user_data;

    const double z = view->active_camera != SIZE_MAX
                   ? view->cameras[view->active_camera]->r
                   : view->zoom * -1;

    const double gcx = view->bdxLeft / z + (view->bdxRight / z - view->bdxLeft / z) / 2.0;
    const double scx = view->clipX1 + (view->clipX2 - view->clipX1) / 2.0;
    const double gcy = view->bdyBottom / z + (view->bdyTop / z - view->bdyBottom / z) / 2.0;
    const double scy = view->clipY1 + (view->clipY2 - view->clipY1) / 2.0;

    if (view->active_camera != SIZE_MAX) {
	view->cameras[view->active_camera]->targetx += gcx - scx;
	view->cameras[view->active_camera]->targety += gcx - scy;
    } else {
	view->panx += gcx - scx;
	view->pany += gcy - scy;
    }
    view->Topview->fitin_zoom = view->zoom;

    glexpose();
}

void on_btnActivateGraph_clicked(GtkWidget *widget, void *user_data) {
    (void)widget;
    (void)user_data;

    int graphId;
    graphId = gtk_combo_box_get_active(view->graphComboBox);
    /* fprintf (stderr, "switch to graph %d\n",graphId); */
    switch_graph(graphId);
}