Mercurial > octave
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 |
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 } |