diff --git a/build/release.nxt b/build/release.nxt index be60d4d..86cf8ba 100644 --- a/build/release.nxt +++ b/build/release.nxt @@ -7,7 +7,6 @@ "references": [ "make_unreal_plugin.nxt", "make_maya_plugin.nxt", - "make_blender_plugin.nxt", "../../nxt/build/release.nxt" ], "comp_overrides": { @@ -143,6 +142,7 @@ }, "/CreateRelease/UploadBlenderAddon": { "instance": "/GitUpload", + "enabled": false, "attrs": { "asset_path": { "type": "raw", @@ -201,7 +201,8 @@ "execute_in": "/make_module_folder", "child_order": [ "zip_blender_addon" - ] + ], + "enabled": false }, "/make_addon/zip_blender_addon": { "attrs": { diff --git a/nxt_editor/constants.py b/nxt_editor/constants.py index 66a3d48..6ab2edd 100644 --- a/nxt_editor/constants.py +++ b/nxt_editor/constants.py @@ -1,7 +1,8 @@ # Builtin import os import json - +# External +from Qt import QtGui, QtWidgets # Internal from nxt.constants import USER_DIR @@ -21,11 +22,47 @@ class EDITOR_VERSION(object): VERSION = VERSION_STR -class FONTS(object): - DEFAULT_FAMILY = 'Roboto Mono' - DEFAULT_SIZE = 10 +class _FontManager: + def __init__(self): + self._initialized = False + self._font_db = QtGui.QFontDatabase() + self.DEFAULT_SIZE = 10 + self._default_family = "Sans Serif" + self._code_family = "Monospace" + + def initialize(self): + if self._initialized: + return + if not QtWidgets.QApplication.instance(): + return + roboto_id = self._font_db.addApplicationFont(":/fonts/fonts/Roboto/Roboto-Regular.ttf") + mono_id = self._font_db.addApplicationFont(":/fonts/fonts/RobotoMono/RobotoMono-Regular.ttf") + + if roboto_id != -1: + self._default_family = self._font_db.applicationFontFamilies(roboto_id)[0] + if mono_id != -1: + self._code_family = self._font_db.applicationFontFamilies(mono_id)[0] + + self._initialized = True + + @property + def DEFAULT_FAMILY(self): + self.initialize() + return self._default_family + + @property + def MONOSPACE(self): + self.initialize() + return self._code_family + + def default_font(self, size=None): + return QtGui.QFont(self.DEFAULT_FAMILY, size or self.DEFAULT_SIZE) + + def monospace_font(self, size=None): + return QtGui.QFont(self.MONOSPACE, size or self.DEFAULT_SIZE) +FONTS = _FontManager() PREF_DIR_INT = EDITOR_VERSION.MAJOR PREF_DIR_NAME = 'prefs' _pref_dir_num = str(PREF_DIR_INT) diff --git a/nxt_editor/dockwidgets/code_editor.py b/nxt_editor/dockwidgets/code_editor.py index dd1b42d..037c548 100644 --- a/nxt_editor/dockwidgets/code_editor.py +++ b/nxt_editor/dockwidgets/code_editor.py @@ -16,6 +16,7 @@ from nxt import DATA_STATE, nxt_path from nxt.nxt_node import INTERNAL_ATTRS from nxt_editor.dockwidgets import syntax +from nxt_editor.constants import FONTS import nxt_editor logger = logging.getLogger(nxt_editor.LOGGER_NAME) @@ -72,7 +73,7 @@ def __init__(self, title='Code Editor', parent=None, minimum_width=500): self.details_layout.addLayout(self.name_layout) self.name_label = LabelEdit(parent=self.details_frame) - self.name_label.setFont(QtGui.QFont("Roboto", 14)) + self.name_label.setFont(QtGui.QFont(FONTS.DEFAULT_FAMILY, 14)) self.name_label.nameChangeRequested.connect(self.edit_name) self.name_layout.addWidget(self.name_label, 0, QtCore.Qt.AlignLeft) @@ -86,7 +87,7 @@ def __init__(self, title='Code Editor', parent=None, minimum_width=500): self.name_layout.addWidget(self.name_edit_button, 0, QtCore.Qt.AlignLeft) self.path_label = QtWidgets.QLabel(parent=self.details_frame) - self.path_label.setFont(QtGui.QFont("Roboto Mono", 8)) + self.path_label.setFont(QtGui.QFont(FONTS.MONOSPACE, 8)) self.path_label.setStyleSheet('color: grey') self.details_layout.addWidget(self.path_label) @@ -600,9 +601,8 @@ def __init__(self, show_line_numbers=True, highlight_current_line=True, self.setFocusPolicy(QtCore.Qt.ClickFocus) # font settings - self.font_size = 10 - self.font_family = 'Roboto Mono' - self.setFont(QtGui.QFont(self.font_family, self.font_size)) + self.font_size = FONTS.DEFAULT_SIZE + self.setFont(FONTS.monospace_font(self.font_size)) self.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) # display settings @@ -754,7 +754,9 @@ def set_font_size(self, delta=0.0, default=False): self.font_size = 10 else: self.font_size += delta - self.setFont(QtGui.QFont(self.font_family, self.font_size)) + font = self.font() + font.setPointSize(self.font_size) + self.setFont(font) def update_previous_scroll_positions(self): self.prev_v_scroll_value = self.verticalScrollBar().value() @@ -1217,7 +1219,6 @@ def __init__(self, editor, color): self.editor = editor self.editor.blockCountChanged.connect(self.update_width) self.editor.updateRequest.connect(self.update_contents) - self.font = QtGui.QFont() self.color = QtGui.QColor(color) self.update_width() @@ -1231,7 +1232,7 @@ def paintEvent(self, event): changed_lines = [] # Iterate over all visible text blocks in the document. while block.isValid(): - self.font.setBold(False) + self.font().setBold(False) block_number = block.blockNumber() block_top = self.editor.blockBoundingGeometry(block).translated( self.editor.contentOffset()).top() @@ -1241,7 +1242,7 @@ def paintEvent(self, event): # We want the line number for the selected line to be bold. painter.setPen(QtGui.QColor(colors.LIGHTER_TEXT)) if block_number == self.editor.textCursor().blockNumber(): - self.font.setBold(True) + self.font().setBold(True) else: painter.setPen(colors.DEFAULT_TEXT) # Draw the line number right justified at the position of the line. @@ -1252,7 +1253,7 @@ def paintEvent(self, event): painter.fillRect(paint_rect, colors.UNSAVED) painter.setPen(colors.LIGHTEST_TEXT) changed_lines.remove(block_number) - painter.setFont(self.font) + painter.setFont(self.font()) text_rect = paint_rect.marginsAdded(QtCore.QMargins(0, 0, -4, 0)) painter.drawText(text_rect, QtCore.Qt.AlignRight, str(block_number + 1)) @@ -1288,8 +1289,8 @@ def update_contents(self, rect, scroll): if rect.contains(self.editor.viewport().rect()): font_size = self.editor.currentCharFormat().font().pointSize() - self.font.setPointSize(font_size) - self.font.setStyle(QtGui.QFont.StyleNormal) + self.font().setPointSize(font_size) + self.font().setStyle(QtGui.QFont.StyleNormal) self.update_width() @@ -1310,7 +1311,7 @@ def __init__(self, parent=None): def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) - painter.setFont(QtGui.QFont("Roboto", 14)) + painter.setFont(QtGui.QFont(FONTS.MONOSPACE, 14)) font_metrics = QtGui.QFontMetrics(painter.font()) painter.setRenderHint(QtGui.QPainter.Antialiasing) # actual_display_state diff --git a/nxt_editor/dockwidgets/hotkey_editor.py b/nxt_editor/dockwidgets/hotkey_editor.py index d7bc6a7..62debc3 100644 --- a/nxt_editor/dockwidgets/hotkey_editor.py +++ b/nxt_editor/dockwidgets/hotkey_editor.py @@ -6,6 +6,7 @@ # Internal import nxt_editor +from nxt_editor.constants import FONTS from nxt_editor.dockwidgets.dock_widget_base import DockWidgetBase from nxt_editor import colors, dialogs @@ -28,14 +29,14 @@ 'other shortcut.

') TOOLTIP_STYLE = '''QToolTip { - font-family: Roboto Mono; + font-family: %s; background-color: #3E3E3E; border: 1px solid #232323; - }''' + }''' % (FONTS.MONOSPACE,) TABLE_STYLE = '''QTableView { - font-family: Roboto Mono; - }''' + font-family: %s; + }''' % (FONTS.MONOSPACE,) class HotkeyEditor(DockWidgetBase): diff --git a/nxt_editor/dockwidgets/output_log.py b/nxt_editor/dockwidgets/output_log.py index 0ec8508..95fb276 100644 --- a/nxt_editor/dockwidgets/output_log.py +++ b/nxt_editor/dockwidgets/output_log.py @@ -12,6 +12,7 @@ # Internal import nxt_editor from nxt_editor import user_dir +from nxt_editor.constants import FONTS from nxt_editor.dockwidgets.dock_widget_base import DockWidgetBase from nxt import nxt_log from nxt_editor import LoggingSignaler, colors @@ -99,7 +100,7 @@ def format(self, record): links = [] if links: text = self.format_links(text, links) - msg = '{}'.format(text) + msg = '{}'.format(FONTS.MONOSPACE, text) if multi: replacement = (msg, record.msg[1]) else: @@ -377,10 +378,10 @@ def write_rich_output(self, val, level=None): else: text = val color = colors.LOGGING_COLORS.get(level, 'white') - html = ''.format(color) + html = ''.format(FONTS.MONOSPACE, color) style = ("") + "pre {margin: 0; font-family: '%s';} " + "" % (FONTS.DEFAULT_FAMILY,)) text = style + ("
{}
".format(text)) html += text + '
' self.rich_output_textedit.insertHtml(html) @@ -431,7 +432,7 @@ def __init__(self, parent): self._parent = parent self.setStyleSheet(self.parent().parent().styleSheet()) self.setReadOnly(True) - self.setFont(QtGui.QFont('Roboto Mono', 10)) + self.setFont(QtGui.QFont(FONTS.MONOSPACE, 10)) def contextMenuEvent(self, event): menu = self.createStandardContextMenu() @@ -447,7 +448,7 @@ def __init__(self, parent): self.anchorClicked.connect(self.parent().link_clicked) self.setStyleSheet(self.parent().parent().styleSheet()) self.setOpenLinks(False) - self.setFont(QtGui.QFont('Roboto Mono', 10)) + self.setFont(QtGui.QFont(FONTS.MONOSPACE, 10)) def contextMenuEvent(self, event): menu = self.createStandardContextMenu() diff --git a/nxt_editor/dockwidgets/property_editor.py b/nxt_editor/dockwidgets/property_editor.py index 2c114e0..b492a5e 100644 --- a/nxt_editor/dockwidgets/property_editor.py +++ b/nxt_editor/dockwidgets/property_editor.py @@ -16,6 +16,7 @@ # Internal from nxt_editor import user_dir +from nxt_editor.constants import FONTS from nxt_editor.dockwidgets.dock_widget_base import DockWidgetBase from nxt_editor.pixmap_button import PixmapButton from nxt_editor.label_edit import LabelEdit @@ -1481,11 +1482,11 @@ def __init__(self, parent=None): } QToolTip { - font-family: Roboto Mono; + font-family: %s; color: white; border: 1px solid #3E3E3E } - ''' + ''' % (FONTS.MONOSPACE,) self.setStyleSheet(style) self._parent = parent self.node_path_delegate = NodePathBtnDelegate(self) diff --git a/nxt_editor/main_window.py b/nxt_editor/main_window.py index a478e59..2328c76 100644 --- a/nxt_editor/main_window.py +++ b/nxt_editor/main_window.py @@ -122,11 +122,7 @@ def __init__(self, filepath=None, parent=None, start_rpc=False): style_file.open(QtCore.QFile.ReadOnly) self.stylesheet = str(style_file.readAll()) self.setStyleSheet(self.stylesheet) - - # fonts - font_db = QtGui.QFontDatabase() - font_db.addApplicationFont(":fonts/fonts/RobotoMono/RobotoMono-Regular.ttf") - font_db.addApplicationFont(":fonts/fonts/Roboto/Roboto-Regular.ttf") + self.setFont(FONTS.default_font()) # nxt object in charge of loaded graphs self.nxt = Session() @@ -365,24 +361,23 @@ def decrease_font_size(self): self._change_font_size(-1) def _change_font_size(self, delta, absolute=False, save=True): - app = QtWidgets.QApplication.instance() if absolute: font_size = delta else: - font_size = app.font().pointSize() + delta + font_size = self.font().pointSize() + delta self.font_size_changed.emit(delta) if save: user_dir.user_prefs[user_dir.USER_PREF.FONT_SIZE] = font_size - font = QtGui.QFont(FONTS.DEFAULT_FAMILY, font_size) - app.setFont(font) - - widgets_with_fonts = ["QMenuBar", "QTabWidget", "QMenu", "QTableView", - "QLineEdit", "QComboBox", "QLabel", - "QPushButton", "QTextEdit", "QWidget", - "QListWidget", "QTabelWidget", "QTreeWidget", - "QSpinBox", "QDoubleSpinBox", "QCheckBox"] - for widget in widgets_with_fonts: - app.setFont(font, widget) + main_font = self.font() + main_font.setPointSize(font_size) + self.setFont(main_font) + self.setUpdatesEnabled(False) + for widget in self.findChildren(QtWidgets.QWidget): + update_font = widget.font() + update_font.setPointSize(font_size) + widget.setFont(update_font) + self.setUpdatesEnabled(True) + QtWidgets.QApplication.processEvents() new_cb_stylesheet = ''' QCheckBox::indicator { diff --git a/nxt_editor/node_graphics_item.py b/nxt_editor/node_graphics_item.py index 128f4b7..845acb9 100644 --- a/nxt_editor/node_graphics_item.py +++ b/nxt_editor/node_graphics_item.py @@ -13,6 +13,7 @@ import nxt_editor from nxt import nxt_path, nxt_node from nxt.nxt_layer import LAYERS +from nxt_editor.constants import FONTS from . import colors from nxt.stage import INTERNAL_ATTRS from .label_edit import NameEditDialog @@ -57,8 +58,8 @@ def __init__(self, model, node_path, view): self.setAcceptHoverEvents(True) # draw settings - self.title_font = QtGui.QFont("Roboto Mono", 14) - self.attr_font = QtGui.QFont("Roboto Mono", 9) + self.title_font = QtGui.QFont(FONTS.MONOSPACE, 14) + self.attr_font = QtGui.QFont(FONTS.MONOSPACE, 9) self.title_rect_height = 39 self.attr_rect_height = 26 self.attr_rect_opacity = 0.9 diff --git a/nxt_editor/stage_view.py b/nxt_editor/stage_view.py index d6ad664..d0f8680 100644 --- a/nxt_editor/stage_view.py +++ b/nxt_editor/stage_view.py @@ -13,6 +13,7 @@ # Interal import nxt_editor from nxt import nxt_node, tokens +from nxt_editor.constants import FONTS from nxt_editor.node_graphics_item import NodeGraphicsItem, NodeGraphicsPlug from nxt_editor.connection_graphics_item import AttrConnectionGraphic from nxt_editor.dialogs import NxtWarningDialog @@ -265,14 +266,14 @@ def update_style_sheet(self): light_color.setHsv(color_obj.hsvHue(), color_obj.hsvSaturation() * 0.3, color_obj.value()) style = ''' QToolTip { - font-family: Roboto Mono; + font-family: %s; background-color: %s } QRubberBand { selection-background-color: %s } - ''' % (light_color.name(), layer_color) + ''' % (FONTS.DEFAULT_FAMILY, light_color.name(), layer_color) self.setStyleSheet(style) def clear(self): diff --git a/nxt_editor/version.json b/nxt_editor/version.json index 1d30317..cffba5b 100644 --- a/nxt_editor/version.json +++ b/nxt_editor/version.json @@ -2,6 +2,6 @@ "EDITOR": { "MAJOR": 4, "MINOR": 0, - "PATCH": 0 + "PATCH": 1 } }