From 1a755dd782f39bff80ea88deac0a2a8f19d2e5d2 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Sun, 13 Sep 2015 21:07:36 +0200 Subject: [PATCH] Use HiDPI icons for PyQt5 --- lib/matplotlib/backends/backend_qt5.py | 16 +++++++++++++++- lib/matplotlib/backends/qt_compat.py | 4 ++++ lib/matplotlib/mpl-data/images/back_hidpi.png | Bin 0 -> 3503 bytes .../mpl-data/images/filesave_hidpi.png | Bin 0 -> 2010 bytes .../mpl-data/images/forward_hidpi.png | Bin 0 -> 3571 bytes lib/matplotlib/mpl-data/images/hand_hidpi.png | Bin 0 -> 2119 bytes lib/matplotlib/mpl-data/images/home_hidpi.png | Bin 0 -> 3069 bytes .../mpl-data/images/matplotlib_hidpi.png | Bin 0 -> 1297 bytes lib/matplotlib/mpl-data/images/move_hidpi.png | Bin 0 -> 1441 bytes .../images/qt4_editor_options_hidpi.png | Bin 0 -> 1651 bytes .../mpl-data/images/subplots_hidpi.png | Bin 0 -> 2091 bytes .../mpl-data/images/zoom_to_rect_hidpi.png | Bin 0 -> 3352 bytes 12 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 lib/matplotlib/mpl-data/images/back_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/filesave_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/forward_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/hand_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/home_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/matplotlib_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/move_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/qt4_editor_options_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/subplots_hidpi.png create mode 100644 lib/matplotlib/mpl-data/images/zoom_to_rect_hidpi.png diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index 5fa8353880c0..484b6282b388 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -28,7 +28,8 @@ except ImportError: figureoptions = None -from .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, __version__ +from .qt_compat import (QtCore, QtGui, QtWidgets, _getSaveFileName, + __version__, is_pyqt5) from matplotlib.backends.qt_editor.formsubplottool import UiSubplotTool backend_version = __version__ @@ -142,6 +143,9 @@ def _create_qApp(): else: qApp = app + if is_pyqt5(): + qApp.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) + class Show(ShowBase): def mainloop(self): @@ -566,6 +570,8 @@ def __init__(self, canvas, parent, coordinates=True): NavigationToolbar2.__init__(self, canvas) def _icon(self, name): + if is_pyqt5(): + name = name.replace('.png', '_hidpi.png') return QtGui.QIcon(os.path.join(self.basedir, name)) def _init_toolbar(self): @@ -606,6 +612,14 @@ def _init_toolbar(self): # reference holder for subplots_adjust window self.adj_window = None + # Esthetic adjustments - we need to set these explicitly in PyQt5 + # otherwise the layout looks different - but we don't want to set it if + # not using HiDPI icons otherwise they look worse than before. + if is_pyqt5(): + self.setIconSize(QtCore.QSize(24, 24)) + self.layout().setSpacing(12) + self.setMinimumHeight(48) + if figureoptions is not None: def edit_parameters(self): allaxes = self.canvas.figure.get_axes() diff --git a/lib/matplotlib/backends/qt_compat.py b/lib/matplotlib/backends/qt_compat.py index f237d449eb20..307fb81453a9 100644 --- a/lib/matplotlib/backends/qt_compat.py +++ b/lib/matplotlib/backends/qt_compat.py @@ -150,3 +150,7 @@ def _getSaveFileName(*args, **kwargs): ''' QtWidgets = QtGui + + +def is_pyqt5(): + return QT_API == QT_API_PYQT5 diff --git a/lib/matplotlib/mpl-data/images/back_hidpi.png b/lib/matplotlib/mpl-data/images/back_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..7755db11a546ccfa5977416187a4ab79d3fa2897 GIT binary patch literal 3503 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/filesave_hidpi.png b/lib/matplotlib/mpl-data/images/filesave_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..8980a2cb14a48fd5c842b51f0538d70e36c104da GIT binary patch literal 2010 zcmV<02POE4P)rC|FBTF}5aYZH*==Buz=Ib?W42e(vO+ z^?g3r? zKuCi+l{!5qELU#Iwc+90$KD%02jKGq6Cktw1~oUA-?AEa%IX!qTI6aUwcbe0Uq|wto)ovFBN)QQ(Aj`ko z?ITUc>(9KH;q+_x`aPeCAKHB@o;vim#L{{TPGt~N2=faKJpAYrjsMKN6(9r|0z}di z0D_iYUVue>o?Hs!;YJ04e+(Bd;9z z{Y(Ea_smB|4T1?UFJ90TSE`UzbcSa|zQ^`N!=Cr+M@ z-J2HCxoNdFxK=~DHZ9nv_uQHfWns<5NnaI$5CdRv1)8D&17!?En&m{qNqh6H^LFCU z^ASL&!&lFbb@WYa#=`C!u_@N7k+OH?RY|~rC^1S1G8u?i>_VW^D1aRz<)d21+RgBohz_7@z`t3S_6u3EMI} zjLqBYbkazv)OPRCd9v{RVqYj@LM--`E2wV!1hEBB5kQccfeeDInG-Hg`tLMS=I)kO zMIgP9*0f=fDOg(p%p!=3zy*oCgJ7ktNk#zx3^I!#10(|#n6vTC$DbYo+L>ml=t}P{ z+S1L6H+E=e?>->+wfRvW6|w*_f(kS87 z=^wHABLEZyO@BYnLcrI)`bD3ZoY0F$Uk=A!{%5cvNi#EiYX82RB%BU+hvx*{;ViE? zP98rMp8E4ESGgX3Pu{sVcX~=2ieCwy^pqD32-K{% zjIK{fipr~%*DSLZa4&u>BE>3@FaTEJqJvnUTxbwW{#_<&%Pn_@NVt0oc=swWosO;J z8_T)~lyRC@5FiN^Gryb!N#yS3|FrrEUxlrcfJ_kR-jjgm4oEHc@zVE;6q+Oi4z{Uq z&FS<&6ab->^RIZPdpkzx-7eH3us*BU2OyZOJ~2hP=oK#Ho{IWXagy6~$3lvMRcKhX zi}h3?S@_YW@zI)PG4|?j5A0ZhUIdtTDUO#4)S*bQ)`@RVtBni~#ab-}@kp=!o+~hS z@WIC>?me)5WXtC7EXb+S!VUI z(V^PdNCT#Q7k=`+lfA}RzwgB3_Z)ac_{D!r3~rR z4PEI)+3$JN<`8{m+s?(*nUa@~WytE;n;x-u;jxF#R$=T*z|3sy-uv$taa+e{p;9`O zEzFNXZZHT6#dI3e#{mfz2m@hKd6)rMI?)walue|CCWlAoig5xclPv``A3gv04`wR? su14UUU~h|}WIc9`z((6O0vm1r1DE(ml$PtBJpcdz07*qoM6N<$f{M$fy8r+H literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/forward_hidpi.png b/lib/matplotlib/mpl-data/images/forward_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..b02047e98d9b05c85dbf579d4eab4b35e5d85bfb GIT binary patch literal 3571 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/hand_hidpi.png b/lib/matplotlib/mpl-data/images/hand_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..35ec95185a96728f496f4992b90b1e662e9a54dd GIT binary patch literal 2119 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 LNkvXXu0mjf1?0kf literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/matplotlib_hidpi.png b/lib/matplotlib/mpl-data/images/matplotlib_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0502eacd1a45663a9b828af853a5e274467cb1 GIT binary patch literal 1297 zcmV+s1@8KZP)yEDVV zUVp5|_S&9Jm3JD?cz$pGGxm5qHmO#tyj(8hB&t*@K`WQb_;_&<^OvtY?e@gd+VXvT zzO)1l0Ol`W!AGAgKJ7Ne(igXv002tViG(v`mp_BL_eW||nXInD1KA=pk*L;?*<5MB{Gu9aw{|dt$NpUOpa<$wtq@wB$MS< zU;v6yfl^xs0MOz~c7Ep1@8X+CWck=Z1?tuhcDnQO4Y0zTS>dmH0H?7`WU_h{9Kg1@TCX~Ggu}oyLdL<5kbEuD30RXgc0bCmfJ$=b((C$kA4l-E+2?J0X zn?TDj{U;Ux0Bk&&sZ5rTFU;Isv(w$);zI?n(P^uEwSNPNEFoW%sqQ_r(`@XbFHH{q z0cq9yGLXprb}XibYzlF1TDdyi?iO z^py{a6(nB(YQqHa{5fF-raSpjrZQPU@&rH*{{`Cn000_fn(xn4CM!&y0F-*gPIFys z%7-U_Y~E~SJ=jzxD@@)1T)n^oOaZ4yRihGkj)#@^&p>flVba_Oo#}VL^m9<^6|mxq zft9#^7T8?@S_a7Bu05Z-MO-5g)*1b<`VN3+bIzH-uh402Qh0C2$rEEcQ%AF^w=!Sq?s z$ya?3#6%;&Pdx{yLzd|yU%6sEzyN^h;Uf^qs&7Es_y*ZuKZUyWy}vw0yB!f?&mN@V zpZ=7Fdp0}oE04n>u6G4iDEYnmYOp}uT3wREU6AGzFVwZVv>`w^UNsN$W$tp62X!m0OwHa<_DABcYq`;QVVCL2w>KMxHhMh{VjV9)X(J;#Uh=9 zP*(DLAghC)nlvGe#x_qGALG}r9@Y(I0vrgKxh-{_RnDBuh`q= z^z=eRZ8@w|BLJd;J%7yv)gD0m{f=Ek&%AXktaJeYXut5bo$h{pWQAGJ>*63;sRLkB zZ-5UKJb9g&caM#gIsmR_(Y$uYez)z+yodJehsVZBbrW~R#xA1y=9f^bchO$B36SLd z5|7tETr3SRf1K$4dvH>;wtOG>;C+yj{=3cpQH+4*0b^#z00000NkvXX Hu0mjfTGm*! literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/move_hidpi.png b/lib/matplotlib/mpl-data/images/move_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..1317787febff691aeff3a4976e63289c73a466b5 GIT binary patch literal 1441 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 Vig17ZJz4+&002ovPDHLkV1k=u&+PyJ literal 0 HcmV?d00001 diff --git a/lib/matplotlib/mpl-data/images/zoom_to_rect_hidpi.png b/lib/matplotlib/mpl-data/images/zoom_to_rect_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..0778cef8b9c0654109072bc6de028dce974ba1d7 GIT binary patch literal 3352 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