# HG changeset patch # User John W. Eaton # Date 1632241832 14400 # Node ID a87e5f9d5446c4a8107aae02b4509566a9fe4810 # Parent f692ecc135d61f43cb4145fccb6fe43b72d7bf63 improve graphics toolkit rendering failure error message * __check_rendering_capability__.m: New function. * getframe.m, __opengl_print__.m: Use it. * scripts/plot/util/module.mk: Update. diff -r f692ecc135d6 -r a87e5f9d5446 scripts/image/getframe.m --- a/scripts/image/getframe.m Fri Sep 17 16:13:16 2021 -0400 +++ b/scripts/image/getframe.m Tue Sep 21 12:30:32 2021 -0400 @@ -102,23 +102,16 @@ pos = rect; endif - if (strcmp (get (hf, "visible"), "on") - || (strcmp (get (hf, "__graphics_toolkit__"), "qt") - && (strcmp (get (hf, "__gl_window__"), "on") - || __have_feature__ ("QT_OFFSCREEN")))) + __check_rendering_capability__ ("getframe", hf); - ## __get_frame__ requires that the figure "units" is "pixels" - unwind_protect - units = get (hf, "units"); - set (hf, "units", "pixels"); - cdata = __get_frame__ (hf); - unwind_protect_cleanup - set (hf, "units", units) - end_unwind_protect - - else - error ("getframe: figure must be visible or qt toolkit must be used with __gl_window__ property 'on' or QT_OFFSCREEN feature available"); - endif + ## __get_frame__ requires that the figure "units" is "pixels" + unwind_protect + units = get (hf, "units"); + set (hf, "units", "pixels"); + cdata = __get_frame__ (hf); + unwind_protect_cleanup + set (hf, "units", units) + end_unwind_protect i1 = max (floor (pos(1)), 1); i2 = min (ceil (pos(1)+pos(3)-1), columns (cdata)); diff -r f692ecc135d6 -r a87e5f9d5446 scripts/plot/util/__check_rendering_capability__.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/plot/util/__check_rendering_capability__.m Tue Sep 21 12:30:32 2021 -0400 @@ -0,0 +1,55 @@ +######################################################################## +## +## Copyright (C) 2021 The Octave Project Developers +## +## See the file COPYRIGHT.md in the top-level directory of this +## distribution or . +## +## This file is part of Octave. +## +## Octave is free software: you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . +## +######################################################################## + +## -*- texinfo -*- +## @deftypefn {} {} __check_rendering_capability__ (@var{who}, @var{fig}) +## Undocumented internal function. +## @end deftypefn + +function __check_rendering_capability__ (who, fig) + + if (strcmp (get (fig, "visible"), "on")) + return; + endif + + toolkit = get (fig, "__graphics_toolkit__"); + display = getenv ("DISPLAY"); + + if (! strcmp (toolkit, "qt")) + error ("%s: rendering with %s toolkit requires visible figure (DISPLAY='%s')", + who, toolkit, display); + endif + + gl_window = get (fig, "__gl_window__"); + qt_offscreen = __have_feature__ ("QT_OFFSCREEN"); + + if (strcmp (gl_window, "on") || qt_offscreen) + return; + endif + + error ("%s: offscreen rendering with %s toolkit requires __gl_window__='on' or QT_OFFSCREEN feature (__gl_window__='%s'; QT_OFFSCREEN=%d, DISPLAY='%s')", + who, toolkit, gl_window, qt_offscreen, display); + +endfunction diff -r f692ecc135d6 -r a87e5f9d5446 scripts/plot/util/module.mk --- a/scripts/plot/util/module.mk Fri Sep 17 16:13:16 2021 -0400 +++ b/scripts/plot/util/module.mk Tue Sep 21 12:30:32 2021 -0400 @@ -26,6 +26,7 @@ %canon_reldir%_FCN_FILES = \ %reldir%/.oct-config \ %reldir%/__actual_axis_position__.m \ + %reldir%/__check_rendering_capability__.m \ %reldir%/__default_plot_options__.m \ %reldir%/__gnuplot_drawnow__.m \ %reldir%/__next_line_color__.m \ diff -r f692ecc135d6 -r a87e5f9d5446 scripts/plot/util/private/__opengl_print__.m --- a/scripts/plot/util/private/__opengl_print__.m Fri Sep 17 16:13:16 2021 -0400 +++ b/scripts/plot/util/private/__opengl_print__.m Tue Sep 21 12:30:32 2021 -0400 @@ -195,18 +195,13 @@ fprintf ("opengl-pipeline: '%s'\n", pipeline{n}); endif - if (strcmp (get (opts.figure, "visible"), "on") - || (strcmp (get (opts.figure, "__graphics_toolkit__"), "qt") - && (strcmp (get (opts.figure, "__gl_window__"), "on") - || __have_feature__ ("QT_OFFSCREEN")))) - ## Use toolkits "print_figure" method - if (ispc () && ! isunix ()) - drawnow (gl2ps_device{n}, ['| "' pipeline{n} '"']); - else - drawnow (gl2ps_device{n}, ["| " pipeline{n}]); - endif + __check_rendering_capability__ ("print", opts.figure); + + ## Use toolkits "print_figure" method + if (ispc () && ! isunix ()) + drawnow (gl2ps_device{n}, ['| "' pipeline{n} '"']); else - error ("print: figure must be visible or qt toolkit must be used with __gl_window__ property 'on' or QT_OFFSCREEN feature available"); + drawnow (gl2ps_device{n}, ["| " pipeline{n}]); endif endfor