[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 77/101: grc: gtk3: make screnshots as png,
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 77/101: grc: gtk3: make screnshots as png, pdf and svg |
Date: |
Thu, 16 Mar 2017 14:58:10 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
jcorgan pushed a commit to branch python3
in repository gnuradio.
commit a867a290194228d09ba93f0f46e3a4e4523f5396
Author: Sebastian Koslowski <address@hidden>
Date: Tue Aug 30 16:28:24 2016 +0200
grc: gtk3: make screnshots as png, pdf and svg
---
grc/gui/ActionHandler.py | 9 +++++----
grc/gui/Actions.py | 2 +-
grc/gui/FlowGraph.py | 4 ++--
grc/gui/Utils.py | 44 ++++++++++++++++++++++++++++++++++++++++----
4 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py
index 85b68a9..913eb5a 100644
--- a/grc/gui/ActionHandler.py
+++ b/grc/gui/ActionHandler.py
@@ -24,9 +24,8 @@ import os
import subprocess
from gi.repository import Gtk
-from gi.repository import GObject
-from . import Dialogs, Preferences, Actions, Executor, Constants, FileDialogs
+from . import Dialogs, Preferences, Actions, Executor, FileDialogs, Utils
from .MainWindow import MainWindow
from .ParserErrorsDialog import ParserErrorsDialog
from .PropsDialog import PropsDialog
@@ -548,8 +547,10 @@ class ActionHandler:
elif action == Actions.FLOW_GRAPH_SCREEN_CAPTURE:
file_path, background_transparent =
FileDialogs.SaveScreenShot(main, page.file_path).run()
if file_path is not None:
- pixbuf =
flow_graph.get_drawing_area().get_screenshot(background_transparent)
- pixbuf.save(file_path, Constants.IMAGE_FILE_EXTENSION[1:])
+ try:
+ Utils.make_screenshot(flow_graph, file_path,
background_transparent)
+ except ValueError:
+ Messages.send('Failed to generate screen shot\n')
##################################################
# Gen/Exec/Stop
##################################################
diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py
index 3a51e80..4759e56 100644
--- a/grc/gui/Actions.py
+++ b/grc/gui/Actions.py
@@ -466,7 +466,7 @@ FLOW_GRAPH_SCREEN_CAPTURE = Action(
label='Screen Ca_pture',
tooltip='Create a screen capture of the flow graph',
stock_id=Gtk.STOCK_PRINT,
- keypresses=(Gdk.KEY_Print, NO_MODS_MASK),
+ keypresses=(Gdk.KEY_p, Gdk.ModifierType.CONTROL_MASK),
)
PORT_CONTROLLER_DEC = Action(
keypresses=(Gdk.KEY_minus, NO_MODS_MASK, Gdk.KEY_KP_Subtract,
NO_MODS_MASK),
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py
index df8e668..f04383f 100644
--- a/grc/gui/FlowGraph.py
+++ b/grc/gui/FlowGraph.py
@@ -30,7 +30,7 @@ from six.moves import filter
from gi.repository import GLib
-from . import Actions, Colors, Utils, Bars, Dialogs
+from . import Actions, Colors, Constants, Utils, Bars, Dialogs
from .Element import Element
from .external_editor import ExternalEditor
@@ -735,7 +735,7 @@ class FlowGraph(CoreFlowgraph, Element):
X, Y = self.coordinate
dX, dY = int(x - X), int(y - Y)
active = Actions.TOGGLE_SNAP_TO_GRID.get_active() or
self.drawing_area.mod1_mask
- if not active or abs(dX) >= Utils.CANVAS_GRID_SIZE or abs(dY) >=
Utils.CANVAS_GRID_SIZE:
+ if not active or abs(dX) >= Constants.CANVAS_GRID_SIZE or abs(dY)
>= Constants.CANVAS_GRID_SIZE:
self.move_selected((dX, dY))
self.coordinate = (x, y)
# queue draw for animation
diff --git a/grc/gui/Utils.py b/grc/gui/Utils.py
index d474c66..782a7e3 100644
--- a/grc/gui/Utils.py
+++ b/grc/gui/Utils.py
@@ -20,8 +20,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA
from __future__ import absolute_import
from gi.repository import GLib
+import cairo
-from .Constants import POSSIBLE_ROTATIONS, CANVAS_GRID_SIZE, COMPLEX_TYPES
+from . import Colors, Constants
def get_rotated_coordinate(coor, rotation):
@@ -37,7 +38,7 @@ def get_rotated_coordinate(coor, rotation):
"""
# handles negative angles
rotation = (rotation + 360) % 360
- if rotation not in POSSIBLE_ROTATIONS:
+ if rotation not in Constants.POSSIBLE_ROTATIONS:
raise ValueError('unusable rotation angle "%s"'%str(rotation))
# determine the number of degrees to rotate
cos_r, sin_r = {
@@ -68,7 +69,7 @@ def get_angle_from_coordinates(p1, p2):
def align_to_grid(coor, mode=round):
def align(value):
- return int(mode(value / (1.0 * CANVAS_GRID_SIZE)) * CANVAS_GRID_SIZE)
+ return int(mode(value / (1.0 * Constants.CANVAS_GRID_SIZE)) *
Constants.CANVAS_GRID_SIZE)
try:
return [align(c) for c in coor]
except TypeError:
@@ -88,7 +89,7 @@ def num_to_str(num):
return template.format(value / factor, symbol.strip())
return template.format(value, '')
- if isinstance(num, COMPLEX_TYPES):
+ if isinstance(num, Constants.COMPLEX_TYPES):
num = complex(num) # Cast to python complex
if num == 0:
return '0'
@@ -107,3 +108,38 @@ def encode(value):
"""
valid_utf8 = value.decode('utf-8', errors='replace').encode('utf-8')
return GLib.markup_escape_text(valid_utf8)
+
+
+def make_screenshot(flow_graph, file_path, transparent_bg=False):
+ if not file_path:
+ return
+
+ x_min, y_min, x_max, y_max = flow_graph.extend
+ padding = Constants.CANVAS_GRID_SIZE
+ width = x_max - x_min + 2 * padding
+ height = y_max - y_min + 2 * padding
+
+ if file_path.endswith('.png'):
+ psurf = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
+ elif file_path.endswith('.pdf'):
+ psurf = cairo.PDFSurface(file_path, width, height)
+ elif file_path.endswith('.svg'):
+ psurf = cairo.SVGSurface(file_path, width, height)
+ else:
+ raise ValueError('Unknown file format')
+
+ cr = cairo.Context(psurf)
+
+ if not transparent_bg:
+ cr.set_source_rgba(*Colors.FLOWGRAPH_BACKGROUND_COLOR)
+ cr.rectangle(0, 0, width, height)
+ cr.fill()
+
+ cr.translate(padding - x_min, padding - y_min)
+ flow_graph.draw(cr)
+
+ if file_path.endswith('.png'):
+ psurf.write_to_png(file_path)
+ if file_path.endswith('.pdf') or file_path.endswith('.svg'):
+ cr.show_page()
+ psurf.finish()
- [Commit-gnuradio] [gnuradio] 58/101: grc: gtk3: fix bug in mouse motion handling, (continued)
- [Commit-gnuradio] [gnuradio] 58/101: grc: gtk3: fix bug in mouse motion handling, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 51/101: grc: gtk3: fix port label hiding, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 59/101: grc: gtk3: fix drag and drop from block tree, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 30/101: grc: refactor: selected blocks handling, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 74/101: grc: gtk3: minor gui flowgraph cleanup, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 93/101: grc: gtk3: python3 error, some cmake fixes, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 85/101: grc: refactor: Moved the notebook and console into separate classes., git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 61/101: grc: gtk3: draw ports before blocks and simplyfied draw code, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 80/101: grc: gtk3: fix MessageDialog for Variable Panel config, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 87/101: grc: refactor: Added logging, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 77/101: grc: gtk3: make screnshots as png, pdf and svg,
git <=
- [Commit-gnuradio] [gnuradio] 81/101: grc: refactor: make gr.prefs() optional (for testing), git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 99/101: grc: gtk3: update cmake requirements, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 92/101: grc: gtk3: fix block layout sizes when zooming, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 94/101: grc: gtk3: reimplemented custom bg colors for param entry boxes, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 98/101: cmake: add DIRECTORY support to GR_PYTHON_INSTALL and use it for grc, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 11/101: grc: py3k compat using python-modernize, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 75/101: grc: gtk3: rewrite file dialogs and support multiple extentions for screenshots, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 70/101: grc: gtk3: fancier coloring for disabled and bypassed blocks, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 83/101: grc: refactor: Cleaned up imports, git, 2017/03/16
- [Commit-gnuradio] [gnuradio] 88/101: grc: gtk3: fix multi-block move, git, 2017/03/16