annotate libgui/src/graphics-init.cc @ 27646:2ff12b707f60

integrate Qt graphics toolkit in Qt interpreter object Instead of dynamically loading Qt graphics toolkit, make it an integral part of the Qt interpreter object. This arrangement allows us to pass references to both the Octave interpreter and the base_qobject to the graphics subsystem. Earlier, I made the Qt graphics system loadable so that it was more like the fltk and gnuplot versions. But that doesn't really make sense, as the Qt graphics system requires a Qt application context and specific support from Octave for callbacks and other things. It can't really be separated from Octave itself, or the parts of Octave that are built on Qt, so it might as well be available and initialized any time that we start a copy of Octave that is using Qt (i.e., not the strictly "cli" version that doesn't link to the Qt libraries). * __init_qt__.h, __init_qt__.cc: Delete. * graphics/module.mk: Update. Create convenience library for libgraphics instead of __init_qt__.oct file. * libgui/module.mk (%canon_reldir%_liboctgui_la_LIBADD): Add libgraphics.la to the list. * graphics-init.h, graphics-init.cc: New files. (graphics_init): New function to initialize the graphics system. * libgui/src/module.mk: Update. Add -I options for libgui/graphics directories to CPPFLAGS. * interpreter-qobject.cc (interpreter_qobject::interpreter_qobject): Call graphics_init to initialize graphics system.
author John W. Eaton <jwe@octave.org>
date Tue, 05 Nov 2019 18:23:20 -0500
parents
children b442ec6dda5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27646
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 2019 John W. Eaton
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 (at your option) any later version.
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 GNU General Public License for more details.
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <https://www.gnu.org/licenses/>.
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if defined (HAVE_CONFIG_H)
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 # include "config.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 #endif
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 #include <QApplication>
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #include <QMetaType>
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 #include <QThread>
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 #include "graphics-init.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "octave-qobject.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "qt-graphics-toolkit.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include "QtHandlesUtils.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include "graphics.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 #include "gtk-manager.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "interpreter.h"
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 namespace octave
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 {
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 void graphics_init (interpreter& interp, base_qobject& oct_qobj)
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 {
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 #if defined (HAVE_QT_GRAPHICS)
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 gh_manager& gh_mgr = interp.get_gh_manager ();
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48 autolock guard (gh_mgr.graphics_lock ());
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 qRegisterMetaType<graphics_object> ("graphics_object");
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 gh_mgr.enable_event_processing (true);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 QtHandles::qt_graphics_toolkit *qt_gtk
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 = new QtHandles::qt_graphics_toolkit (interp, oct_qobj);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 if (QThread::currentThread ()
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58 != QApplication::instance ()->thread ())
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 qt_gtk->moveToThread (QApplication::instance ()->thread ());
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61 graphics_toolkit tk (qt_gtk);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63 octave::gtk_manager& gtk_mgr = interp.get_gtk_manager ();
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
65 gtk_mgr.register_toolkit ("qt");
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67 gtk_mgr.load_toolkit (tk);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69 #else
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71 octave_unused_parameter (interp);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 octave_unused_parameter (oct_qobj);
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74 #endif
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75 }
2ff12b707f60 integrate Qt graphics toolkit in Qt interpreter object
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 }