diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 8d35bd3345..ac24ce3184 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -53,7 +53,7 @@ class FlavorParser: def _clearValues(self) -> None: self._extruder_number = 0 - self._extrusion_length_offset = [0] # type: List[float] + self._extrusion_length_offset = [0] * 8 # type: List[float] self._layer_type = LayerPolygon.Inset0Type self._layer_number = 0 self._previous_z = 0 # type: float @@ -283,8 +283,9 @@ class FlavorParser: return func(position, params, path) return position - def processTCode(self, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position: + def processTCode(self, global_stack, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position: self._extruder_number = T + self._filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value") if self._extruder_number + 1 > len(position.e): self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1)) position.e.extend([0] * (self._extruder_number - len(position.e) + 1)) @@ -354,7 +355,7 @@ class FlavorParser: Logger.log("d", "Parsing g-code...") - current_position = Position(0, 0, 0, 0, [0]) + current_position = Position(0, 0, 0, 0, [0] * 8) current_path = [] #type: List[List[float]] min_layer_number = 0 negative_layers = 0 @@ -444,7 +445,7 @@ class FlavorParser: # When changing tool, store the end point of the previous path, then process the code and finally # add another point with the new position of the head. current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType]) - current_position = self.processTCode(T, line, current_position, current_path) + current_position = self.processTCode(global_stack, T, line, current_position, current_path) current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType]) if line.startswith("M"): diff --git a/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py b/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py index 4595e66ed3..14db98c1fc 100644 --- a/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py +++ b/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py @@ -29,9 +29,10 @@ class VersionUpgrade48to49(VersionUpgrade): parser["general"]["version"] = "7" # Update visibility settings to include new top_bottom category - parser["general"]["visible_settings"] += ";top_bottom" + if "visible_settings" in parser["general"]: + parser["general"]["visible_settings"] += ";top_bottom" - if "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]): + if "cura" in parser and "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]): parser["cura"]["categories_expanded"] += ";top_bottom" # If the account scope in 4.8 is outdated, delete it so that the user is enforced to log in again and get the diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 7bb24d7445..b1cbb07904 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6963,7 +6963,6 @@ "type": "bool", "default_value": false, "limit_to_extruder": "wall_0_extruder_nr", - "enabled": false, "settable_per_mesh": true }, "magic_fuzzy_skin_outside_only": @@ -6972,7 +6971,7 @@ "description": "Jitter only the parts' outlines and not the parts' holes.", "type": "bool", "default_value": false, - "enabled": "magic_fuzzy_skin_enabled and False" , + "enabled": "magic_fuzzy_skin_enabled", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true }, @@ -6985,7 +6984,7 @@ "default_value": 0.3, "minimum_value": "0.001", "maximum_value_warning": "wall_line_width_0", - "enabled": "magic_fuzzy_skin_enabled and False", + "enabled": "magic_fuzzy_skin_enabled", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true }, @@ -7000,7 +6999,7 @@ "minimum_value_warning": "0.1", "maximum_value_warning": "10", "maximum_value": "2 / magic_fuzzy_skin_thickness", - "enabled": "magic_fuzzy_skin_enabled and False", + "enabled": "magic_fuzzy_skin_enabled", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true, "children": @@ -7016,7 +7015,7 @@ "minimum_value_warning": "0.1", "maximum_value_warning": "10", "value": "10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density", - "enabled": "magic_fuzzy_skin_enabled and False", + "enabled": "magic_fuzzy_skin_enabled", "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true } diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 4e2a05a6aa..ec25eb8abb 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -222,7 +222,7 @@ Item id: updateProfileAction enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null text: catalog.i18nc("@action:inmenu menubar:profile", "&Update profile with current settings/overrides"); - onTriggered: Cura.ContainerManager.updateQualityChanges(); + onTriggered: Cura.ContainerManager.updateQualityChanges() } Action diff --git a/resources/qml/ColorDialog.qml b/resources/qml/ColorDialog.qml index 358e8b9ef5..3818ea5cb4 100644 --- a/resources/qml/ColorDialog.qml +++ b/resources/qml/ColorDialog.qml @@ -17,61 +17,132 @@ UM.Dialog property variant catalog: UM.I18nCatalog { name: "cura" } - minimumHeight: UM.Theme.getSize("small_popup_dialog").height - minimumWidth: UM.Theme.getSize("small_popup_dialog").width / 1.5 - height: minimumHeight + margin: UM.Theme.getSize("default_margin").width + + property alias swatchGridColumns: colorSwatchGrid.columns + + // In this case we would like to let the content of the dialog determine the size of the dialog + // however with the current implementation of the dialog this is not possible, so instead we calculate + // the size of the dialog ourselves. + minimumWidth: content.width + 4 * margin + minimumHeight: + content.height // content height + + buttonRow.height // button row height + + 5 * margin // top and bottom margin and margin between buttons and content width: minimumWidth + height: minimumHeight property alias color: colorInput.text + property var swatchColors: [ + "#2161AF", "#57AFB2", "#F7B32D", "#E33D4A", "#C088AD", + "#5D88BE", "#5ABD0E", "#E17239", "#F74E46", "#874AF9", + "#50C2EC", "#8DC15A", "#C3977A", "#CD7776", "#9086BA", + "#FFFFFF", "#D3D3D3", "#9E9E9E", "#5A5A5A", "#000000", + ] - margin: UM.Theme.getSize("default_margin").width - buttonSpacing: UM.Theme.getSize("default_margin").width + Component.onCompleted: updateSwatches() + onSwatchColorsChanged: updateSwatches() - UM.Label + function updateSwatches() { - id: colorLabel - font: UM.Theme.getFont("large") - text: catalog.i18nc("@label", "Color Code (HEX)") + swatchColorsModel.clear(); + for (const swatchColor of base.swatchColors) + { + swatchColorsModel.append({ swatchColor }); + } } - TextField + Column { - id: colorInput - text: "#FFFFFF" - selectByMouse: true - anchors.top: colorLabel.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - onTextChanged: { - if (!text.startsWith("#")) + id: content + width: childrenRect.width + height: childrenRect.height + spacing: UM.Theme.getSize("wide_margin").height + + GridLayout { + id: colorSwatchGrid + columns: 5 + width: childrenRect.width + height: childrenRect.height + columnSpacing: UM.Theme.getSize("thick_margin").width + rowSpacing: UM.Theme.getSize("thick_margin").height + + Repeater { - text = `#${text}`; + model: ListModel + { + id: swatchColorsModel + } + + delegate: Rectangle + { + color: swatchColor + implicitWidth: UM.Theme.getSize("medium_button_icon").width + implicitHeight: UM.Theme.getSize("medium_button_icon").height + radius: width / 2 + + UM.RecolorImage + { + anchors.fill: parent + visible: swatchColor == base.color + source: UM.Theme.getIcon("Check", "low") + color: UM.Theme.getColor("checkbox") + } + + MouseArea + { + anchors.fill: parent + onClicked: base.color = swatchColor + } + } + } + } + + RowLayout + { + width: parent.width + spacing: UM.Theme.getSize("default_margin").width + + UM.Label + { + text: catalog.i18nc("@label", "Hex") + } + + TextField + { + id: colorInput + Layout.fillWidth: true + text: "#FFFFFF" + selectByMouse: true + onTextChanged: { + if (!text.startsWith("#")) + { + text = `#${text}`; + } + } + validator: RegExpValidator { regExp: /^#([a-fA-F0-9]{0,6})$/ } + } + + Rectangle + { + color: base.color + Layout.preferredHeight: parent.height + Layout.preferredWidth: height } } - validator: RegExpValidator { regExp: /^#([a-fA-F0-9]{0,6})$/ } } - Rectangle - { - id: swatch - color: base.color - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors { - left: colorInput.right - top: colorInput.top - bottom: colorInput.bottom - } - width: height - } + buttonSpacing: UM.Theme.getSize("thin_margin").width rightButtons: [ + Cura.TertiaryButton { + text: catalog.i18nc("@action:button", "Cancel") + onClicked: base.close() + }, Cura.PrimaryButton { text: catalog.i18nc("@action:button", "OK") onClicked: base.accept() - }, - Cura.SecondaryButton { - text: catalog.i18nc("@action:button", "Cancel") - onClicked: base.close() } ] } \ No newline at end of file diff --git a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml index 8e4cea1bdd..18891cebee 100644 --- a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml @@ -27,6 +27,11 @@ UM.Dialog property var fileUrls: [] property var addToRecent: true + function loadProjectFile(projectFile) + { + UM.WorkspaceFileHandler.readLocalFile(projectFile, base.addToRecent); + } + function loadModelFiles(fileUrls) { for (var i in fileUrls) diff --git a/resources/qml/IconWithText.qml b/resources/qml/IconWithText.qml index 8a76481da9..d7b4adfa8c 100644 --- a/resources/qml/IconWithText.qml +++ b/resources/qml/IconWithText.qml @@ -21,6 +21,7 @@ Item property alias font: label.font property alias elide: label.elide property real margin: UM.Theme.getSize("narrow_margin").width + property alias wrapMode: label.wrapMode // These properties can be used in combination with layouts. readonly property real contentWidth: icon.width + margin + label.contentWidth diff --git a/resources/qml/MachineSettings/GcodeTextArea.qml b/resources/qml/MachineSettings/GcodeTextArea.qml index 5292b4f83a..7791e169c2 100644 --- a/resources/qml/MachineSettings/GcodeTextArea.qml +++ b/resources/qml/MachineSettings/GcodeTextArea.qml @@ -35,23 +35,24 @@ UM.TooltipArea watchedProperties: [ "value", "description" ] } - Label // Title Label + UM.Label { id: titleLabel anchors.top: parent.top anchors.left: parent.left font: UM.Theme.getFont("medium_bold") - color: UM.Theme.getColor("text") - renderType: Text.NativeRendering } Flickable { - anchors.top: titleLabel.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right + anchors + { + top: titleLabel.bottom + topMargin: UM.Theme.getSize("default_margin").height + bottom: parent.bottom + left: parent.left + right: parent.right + } ScrollBar.vertical: UM.ScrollBar {} @@ -78,10 +79,10 @@ UM.TooltipArea background: Rectangle { - color: UM.Theme.getColor("main_background") anchors.fill: parent anchors.margins: -border.width //Wrap the border around the parent. + color: UM.Theme.getColor("detail_background") border.color: { if (!gcodeTextArea.enabled) @@ -90,9 +91,9 @@ UM.TooltipArea } if (gcodeTextArea.hovered || gcodeTextArea.activeFocus) { - return UM.Theme.getColor("setting_control_border_highlight") + return UM.Theme.getColor("border_main") } - return UM.Theme.getColor("setting_control_border") + return UM.Theme.getColor("border_field_light") } border.width: UM.Theme.getSize("default_lining").width } diff --git a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml index 0e1f296cfa..67840d4f26 100644 --- a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml +++ b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml @@ -77,6 +77,8 @@ UM.TooltipArea anchors.left: fieldLabel.right anchors.leftMargin: UM.Theme.getSize("default_margin").width verticalAlignment: Text.AlignVCenter + selectionColor: UM.Theme.getColor("text_selection") + selectedTextColor: UM.Theme.getColor("setting_control_text") padding: 0 leftPadding: UM.Theme.getSize("narrow_margin").width width: numericTextFieldWithUnit.controlWidth @@ -107,7 +109,7 @@ UM.TooltipArea // Validation is OK. if (textFieldWithUnit.hovered || textFieldWithUnit.activeFocus) { - return UM.Theme.getColor("border_main_light") + return UM.Theme.getColor("border_main") } return UM.Theme.getColor("border_field_light") } diff --git a/resources/qml/PrintSetupHeaderButton.qml b/resources/qml/PrintSetupHeaderButton.qml index e9b76a763f..a4f95148da 100644 --- a/resources/qml/PrintSetupHeaderButton.qml +++ b/resources/qml/PrintSetupHeaderButton.qml @@ -69,7 +69,7 @@ ToolButton { target: background color: UM.Theme.getColor("setting_control") - liningColor: UM.Theme.getColor("border_main_light") + liningColor: UM.Theme.getColor("border_main") } }, State diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml index 440c9e4e78..6d3682d9ff 100644 --- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -129,7 +129,7 @@ Item background: UM.UnderlineBackground { id: backgroundItem - liningColor: intentSelection.hovered ? UM.Theme.getColor("border_main_light") : UM.Theme.getColor("border_field_light") + liningColor: intentSelection.hovered ? UM.Theme.getColor("border_main") : UM.Theme.getColor("border_field_light") } UM.SimpleButton diff --git a/resources/qml/PrintSetupSelector/Custom/MenuButton.qml b/resources/qml/PrintSetupSelector/Custom/MenuButton.qml index 40c3d73e8b..112edbbf77 100644 --- a/resources/qml/PrintSetupSelector/Custom/MenuButton.qml +++ b/resources/qml/PrintSetupSelector/Custom/MenuButton.qml @@ -18,15 +18,15 @@ Button property string labelText: "" id: button hoverEnabled: true - leftPadding:UM.Theme.getSize("wide_margin").width + leftPadding: UM.Theme.getSize("default_margin").width + implicitWidth: UM.Theme.getSize("menu").width + implicitHeight: UM.Theme.getSize("menu").height + UM.Theme.getSize("narrow_margin").height background: Rectangle { - id: backgroundRectangle - border.width: UM.Theme.getSize("default_lining").width - border.color: button.checked ? UM.Theme.getColor("setting_control_border_highlight") : "transparent" - color: button.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" - radius: UM.Theme.getSize("action_button_radius").width + height: button.height + width: button.width + color: button.hovered ? UM.Theme.getColor("background_2") : UM.Theme.getColor("background_1") } // Workaround to ensure that the mnemonic highlighting happens correctly @@ -40,11 +40,29 @@ Button return txt } - contentItem: UM.Label + contentItem: Item { - id: textLabel - text: button.text != "" ? replaceText(button.text) : replaceText(button.labelText) - height: contentHeight - color: button.enabled ? UM.Theme.getColor("text") :UM.Theme.getColor("text_inactive") + height: button.height + width: button.width + UM.RecolorImage + { + id: check + height: UM.Theme.getSize("default_arrow").height + width: height + source: UM.Theme.getIcon("Check", "low") + color: UM.Theme.getColor("setting_control_text") + anchors.verticalCenter: parent.verticalCenter + visible: button.checked + } + UM.Label + { + id: textLabel + text: button.text != "" ? replaceText(button.text) : replaceText(button.labelText) + height: contentHeight + color: button.enabled ? UM.Theme.getColor("text") :UM.Theme.getColor("text_inactive") + anchors.left: check.right + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + anchors.verticalCenter: parent.verticalCenter + } } } \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml index d6901cfc7f..a2624dbf14 100644 --- a/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml +++ b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml @@ -130,6 +130,7 @@ Popup checkable: true visible: model.available text: model.name + " - " + model.layer_height + " mm" + leftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width checked: { if (Cura.MachineManager.hasCustomQuality) @@ -195,6 +196,7 @@ Popup checkable: true visible: model.available text: model.name + leftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width checked: { var active_quality_group = Cura.MachineManager.activeQualityChangesGroup @@ -295,13 +297,12 @@ Popup id: textLabel text: manageProfilesButton.text height: contentHeight - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width } UM.Label { id: shortcutLabel text: Cura.Actions.manageProfiles.shortcut + color: UM.Theme.getColor("text_lighter") height: contentHeight anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml index 3b6fc37eb4..41e913a2c1 100644 --- a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -39,7 +39,7 @@ RowLayout } font: UM.Theme.getFont("medium") elide: Text.ElideMiddle - + wrapMode: Text.NoWrap UM.SettingPropertyProvider { id: layerHeight diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml index d1d28b3cfe..bea7c3bdd8 100644 --- a/resources/qml/PrinterOutput/ExtruderBox.qml +++ b/resources/qml/PrinterOutput/ExtruderBox.qml @@ -4,7 +4,7 @@ import QtQuick 2.2 import QtQuick.Controls 2.1 -import UM 1.2 as UM +import UM 1.5 as UM import Cura 1.0 as Cura diff --git a/resources/qml/PrinterOutput/HeatedBedBox.qml b/resources/qml/PrinterOutput/HeatedBedBox.qml index 9343ca8826..288e9cab3f 100644 --- a/resources/qml/PrinterOutput/HeatedBedBox.qml +++ b/resources/qml/PrinterOutput/HeatedBedBox.qml @@ -4,7 +4,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.4 -import UM 1.2 as UM +import UM 1.5 as UM import Cura 1.0 as Cura Item diff --git a/resources/qml/PrinterOutput/ManualPrinterControl.qml b/resources/qml/PrinterOutput/ManualPrinterControl.qml index f53a45905c..bf987b282f 100644 --- a/resources/qml/PrinterOutput/ManualPrinterControl.qml +++ b/resources/qml/PrinterOutput/ManualPrinterControl.qml @@ -3,6 +3,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 import UM 1.5 as UM import Cura 1.0 as Cura diff --git a/resources/qml/PrinterOutput/OutputDeviceHeader.qml b/resources/qml/PrinterOutput/OutputDeviceHeader.qml index 56c8fcb936..aeb9d14363 100644 --- a/resources/qml/PrinterOutput/OutputDeviceHeader.qml +++ b/resources/qml/PrinterOutput/OutputDeviceHeader.qml @@ -5,7 +5,7 @@ import QtQuick 2.2 import QtQuick.Controls 2.1 -import UM 1.2 as UM +import UM 1.5 as UM import Cura 1.0 as Cura diff --git a/resources/qml/Settings/SettingCheckBox.qml b/resources/qml/Settings/SettingCheckBox.qml index 1b4e4ac143..4987eedb83 100644 --- a/resources/qml/Settings/SettingCheckBox.qml +++ b/resources/qml/Settings/SettingCheckBox.qml @@ -98,7 +98,7 @@ SettingItem { if(!enabled) { - return UM.Theme.getColor("checkbox_border") + return UM.Theme.getColor("checkbox_border_disabled") } switch (propertyProvider.properties.validationState) { @@ -116,7 +116,7 @@ SettingItem { return UM.Theme.getColor("checkbox_border_hover") } - return UM.Theme.getColor("setting_control_border") + return UM.Theme.getColor("checkbox_border") } color: { @@ -138,7 +138,7 @@ SettingItem // Validation is OK. if (control.containsMouse || control.activeFocus) { - return UM.Theme.getColor("setting_control_highlight") + return UM.Theme.getColor("checkbox_hover") } return UM.Theme.getColor("checkbox") } @@ -150,7 +150,7 @@ SettingItem height: UM.Theme.getSize("checkbox_mark").height width: UM.Theme.getSize("checkbox_mark").width sourceSize.height: width - color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text"); + color: !enabled ? UM.Theme.getColor("checkbox_mark_disabled") : UM.Theme.getColor("checkbox_mark"); source: UM.Theme.getIcon("Check", "low") opacity: control.checked ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100; } } diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 6b2ac55066..c3bc472fbe 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -135,7 +135,7 @@ SettingItem } if (control.hovered || control.activeFocus) { - return UM.Theme.getColor("border_main_light") + return UM.Theme.getColor("border_main") } return UM.Theme.getColor("border_field_light") } diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml index 1ac7afe967..2a4db2ab31 100644 --- a/resources/qml/Settings/SettingOptionalExtruder.qml +++ b/resources/qml/Settings/SettingOptionalExtruder.qml @@ -136,7 +136,7 @@ SettingItem } if (control.hovered || control.activeFocus) { - return UM.Theme.getColor("border_main_light") + return UM.Theme.getColor("border_main") } return UM.Theme.getColor("border_field_light") } diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index 83b5d2a987..95976ad58e 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -36,7 +36,7 @@ SettingItem { if(!enabled) { - return UM.Theme.getColor("setting_control_disabled_border") + return UM.Theme.getColor("text_field_border_disabled") } switch(propertyProvider.properties.validationState) { @@ -52,15 +52,15 @@ SettingItem //Validation is OK. if(hovered || input.activeFocus) { - return UM.Theme.getColor("border_main_light") + return UM.Theme.getColor("text_field_border_hovered") } - return UM.Theme.getColor("border_field_light") + return UM.Theme.getColor("text_field_border") } color: { if(!enabled) { - return UM.Theme.getColor("setting_control_disabled") + return UM.Theme.getColor("text_field") } switch(propertyProvider.properties.validationState) { @@ -76,18 +76,10 @@ SettingItem return UM.Theme.getColor("setting_validation_ok") default: - return UM.Theme.getColor("setting_control") + return UM.Theme.getColor("text_field") } } - Rectangle - { - anchors.fill: parent - anchors.margins: Math.round(UM.Theme.getSize("default_lining").width) - color: UM.Theme.getColor("setting_control_highlight") - opacity: !control.hovered ? 0 : propertyProvider.properties.validationState == "ValidatorState.Valid" ? 1.0 : 0.35 - } - UM.Label { anchors diff --git a/resources/qml/ToolTip.qml b/resources/qml/ToolTip.qml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/resources/qml/Widgets/ComboBox.qml b/resources/qml/Widgets/ComboBox.qml index f84772e609..5d31348597 100644 --- a/resources/qml/Widgets/ComboBox.qml +++ b/resources/qml/Widgets/ComboBox.qml @@ -33,7 +33,7 @@ ComboBox { name: "highlighted" when: control.hovered || control.activeFocus - PropertyChanges { target: background; liningColor: UM.Theme.getColor("border_main_light")} + PropertyChanges { target: background; liningColor: UM.Theme.getColor("border_main")} } ] diff --git a/resources/qml/Widgets/RadioButton.qml b/resources/qml/Widgets/RadioButton.qml index 428eb8a4e5..add708507c 100644 --- a/resources/qml/Widgets/RadioButton.qml +++ b/resources/qml/Widgets/RadioButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2022 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 @@ -13,32 +13,58 @@ import Cura 1.0 as Cura // RadioButton { - id: radioButton + id: control font: UM.Theme.getFont("default") states: [ State { - name: "checked" - when: radioButton.checked + name: "selected-hover" + when: control.enabled && control.checked && control.hovered PropertyChanges { - target: indicator - color: UM.Theme.getColor("accent_1") - border.width: 0 + target: indicator_background + color: UM.Theme.getColor("radio_selected") + border.color: UM.Theme.getColor("radio_border_hover") } }, - State - { - name: "disabled" - when: !radioButton.enabled - PropertyChanges { target: indicator; color: UM.Theme.getColor("background_1")} + State { + name: "selected" + when: control.enabled && control.checked + PropertyChanges + { + target: indicator_background + color: UM.Theme.getColor("radio_selected") + } }, - State - { - name: "highlighted" - when: radioButton.hovered || radioButton.activeFocus - PropertyChanges { target: indicator; border.color: UM.Theme.getColor("border_main_light")} + State { + name: "hovered" + when: control.enabled && control.hovered + PropertyChanges + { + target: indicator_background + border.color: UM.Theme.getColor("radio_border_hover") + } + }, + State { + name: "selected_disabled" + when: !control.enabled && control.checked + PropertyChanges + { + target: indicator_background + color: UM.Theme.getColor("radio_selected_disabled") + border.color: UM.Theme.getColor("radio_border_disabled") + } + }, + State { + name: "disabled" + when: !control.enabled + PropertyChanges + { + target: indicator_background + color: UM.Theme.getColor("radio_disabled") + border.color: UM.Theme.getColor("radio_border_disabled") + } } ] @@ -49,30 +75,35 @@ RadioButton indicator: Rectangle { + id: indicator_background implicitWidth: UM.Theme.getSize("radio_button").width implicitHeight: UM.Theme.getSize("radio_button").height anchors.verticalCenter: parent.verticalCenter anchors.alignWhenCentered: false radius: width / 2 - color: UM.Theme.getColor("background_2") + color: UM.Theme.getColor("radio") border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("text_disabled") + border.color: UM.Theme.getColor("radio_border") Rectangle { + id: indicator_dot width: (parent.width / 2) | 0 height: width anchors.centerIn: parent radius: width / 2 - color: radioButton.enabled ? UM.Theme.getColor("background_2") : UM.Theme.getColor("background_1") - visible: radioButton.checked + color: control.enabled ? UM.Theme.getColor("radio_dot") : UM.Theme.getColor("radio_dot_disabled") + visible: control.checked + + } } contentItem: UM.Label { - leftPadding: radioButton.indicator.width + radioButton.spacing - text: radioButton.text - font: radioButton.font + leftPadding: control.indicator.width + control.spacing + text: control.text + font: control.font + color: control.enabled ? UM.Theme.getColor("radio_text"): UM.Theme.getColor("radio_text_disabled") } } diff --git a/resources/qml/Widgets/TextField.qml b/resources/qml/Widgets/TextField.qml index 7803c17396..b708446d65 100644 --- a/resources/qml/Widgets/TextField.qml +++ b/resources/qml/Widgets/TextField.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Ultimaker B.V. +// Copyright (c) 2022 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 @@ -13,7 +13,7 @@ import Cura 1.1 as Cura // TextField { - id: textField + id: control property alias leftIcon: iconLeft.source @@ -22,7 +22,7 @@ TextField hoverEnabled: true selectByMouse: true font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") + color: UM.Theme.getColor("text_field_text") renderType: Text.NativeRendering selectionColor: UM.Theme.getColor("text_selection") leftPadding: iconLeft.visible ? iconLeft.width + UM.Theme.getSize("default_margin").width * 2 : UM.Theme.getSize("thin_margin").width @@ -31,20 +31,21 @@ TextField State { name: "disabled" - when: !textField.enabled - PropertyChanges { target: backgroundRectangle; color: UM.Theme.getColor("setting_control_disabled")} + when: !control.enabled + PropertyChanges { target: control; color: UM.Theme.getColor("text_field_text_disabled")} + PropertyChanges { target: backgroundRectangle; liningColor: UM.Theme.getColor("text_field_border_disabled")} }, State { name: "invalid" - when: !textField.acceptableInput + when: !control.acceptableInput PropertyChanges { target: backgroundRectangle; color: UM.Theme.getColor("setting_validation_error_background")} }, State { name: "hovered" - when: textField.hovered || textField.activeFocus - PropertyChanges { target: backgroundRectangle; liningColor: UM.Theme.getColor("border_main_light")} + when: control.hovered || control.activeFocus + PropertyChanges { target: backgroundRectangle; liningColor: UM.Theme.getColor("text_field_border_hovered")} } ] @@ -66,7 +67,7 @@ TextField visible: source != "" height: UM.Theme.getSize("small_button_icon").height width: visible ? height : 0 - color: textField.color + color: control.color } } } diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 8f45471344..afd36e8741 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -13,7 +13,7 @@ "accent_1": [25, 110, 240, 255], "accent_2": [16, 70, 156, 255], - "border_main": [212, 212, 212, 255], + "border_main": [118, 118, 119, 255], "border_accent_1": [255, 255, 255, 255], "border_accent_2": [16, 70, 156, 255], "border_field": [57, 57, 58, 255], @@ -23,7 +23,20 @@ "text_primary_button": [255, 255, 255, 255], "text_secondary_button": [255, 255, 255, 255], "text_link_hover": [156, 195, 255, 255], - "text_lighter": [243, 243, 243, 255] + "text_lighter": [243, 243, 243, 255], + + "um_green_1": [233, 245, 237, 255], + "um_green_5": [36, 162, 73, 255], + "um_green_9": [31, 44, 36, 255], + "um_red_1": [251, 232, 233, 255], + "um_red_5": [218, 30, 40, 255], + "um_red_9": [59, 31, 33, 255], + "um_orange_1": [255, 235, 221, 255], + "um_orange_5": [252, 123, 30, 255], + "um_orange_9": [64, 45, 32, 255], + "um_yellow_1": [255, 248, 225, 255], + "um_yellow_5": [253, 209, 58, 255], + "um_yellow_9": [64, 58, 36, 255] }, "colors": { @@ -140,10 +153,8 @@ "setting_control_disabled_text": [255, 255, 255, 101], "setting_control_disabled_border": [255, 255, 255, 101], "setting_unit": [255, 255, 255, 127], - "setting_validation_error_background": [59, 31, 53, 255], - "setting_validation_error": [212, 31, 53, 255], - "setting_validation_warning_background": [62, 54, 46, 255], - "setting_validation_warning": [245, 166, 35, 255], + "setting_validation_error_background": "um_red_9", + "setting_validation_warning_background": "um_yellow_9", "setting_validation_ok": "background_2", "progressbar_background": [255, 255, 255, 48], @@ -155,15 +166,6 @@ "slider_handle": [255, 255, 255, 255], "slider_handle_active": [68, 192, 255, 255], - "checkbox": "background_1", - "checkbox_hover": [43, 48, 52, 255], - "checkbox_border": "text_disabled", - "checkbox_border_hover": "border_main", - "checkbox_mark": "text_default", - "checkbox_square": "text_disabled", - "checkbox_text": "text_default", - "checkbox_disabled": "background_2", - "category_background": "background_3", "tooltip": "background_2", diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index ba18e5d0d2..4d89c37609 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -188,7 +188,20 @@ "text_primary_button": [255, 255, 255, 255], "text_secondary_button": [25, 110, 240, 255], "text_link_hover": [16, 70, 156, 255], - "text_lighter": [108, 108, 108, 255] + "text_lighter": [108, 108, 108, 255], + + "um_green_1": [233, 245, 237, 255], + "um_green_5": [36, 162, 73, 255], + "um_green_9": [31, 44, 36, 255], + "um_red_1": [251, 232, 233, 255], + "um_red_5": [218, 30, 40, 255], + "um_red_9": [59, 31, 33, 255], + "um_orange_1": [255, 235, 221, 255], + "um_orange_5": [252, 123, 30, 255], + "um_orange_9": [64, 45, 32, 255], + "um_yellow_1": [255, 248, 225, 255], + "um_yellow_5": [253, 209, 58, 255], + "um_yellow_9": [64, 58, 36, 255] }, "colors": { @@ -304,10 +317,10 @@ "setting_control_disabled_text": [127, 127, 127, 255], "setting_control_disabled_border": [127, 127, 127, 255], "setting_unit": [127, 127, 127, 255], - "setting_validation_error_background": [255, 66, 60, 255], - "setting_validation_error": [127, 127, 127, 255], - "setting_validation_warning_background": [255, 145, 62, 255], - "setting_validation_warning": [127, 127, 127, 255], + "setting_validation_error_background": "um_red_1", + "setting_validation_error": "um_red_5", + "setting_validation_warning_background": "um_yellow_1", + "setting_validation_warning": "um_yellow_5", "setting_validation_ok": "background_2", "material_compatibility_warning": [243, 166, 59, 255], @@ -324,13 +337,36 @@ "quality_slider_unavailable": [179, 179, 179, 255], "quality_slider_available": [0, 0, 0, 255], - "checkbox": [255, 255, 255, 255], - "checkbox_hover": "border_main", - "checkbox_border": [180, 180, 180, 255], - "checkbox_border_hover": [25, 110, 240, 255], - "checkbox_mark": [35, 35, 35, 255], + "checkbox": "background_1", + "checkbox_hover": "background_1", "checkbox_disabled": "background_2", - "checkbox_text": [0, 12, 26, 255], + "checkbox_border": [180, 180, 180, 255], + "checkbox_border_hover": "border_main", + "checkbox_border_disabled": "text_disabled", + "checkbox_mark": "text_default", + "checkbox_mark_disabled": "text_disabled", + "checkbox_square": [180, 180, 180, 255], + "checkbox_text": "text_default", + "checkbox_text_disabled": "text_disabled", + + "radio": "background_1", + "radio_disabled": "background_2", + "radio_selected": "accent_1", + "radio_selected_disabled": "text_disabled", + "radio_border": [180, 180, 180, 255], + "radio_border_hover": "border_main", + "radio_border_disabled": "text_disabled", + "radio_dot": "background_1", + "radio_dot_disabled": "background_2", + "radio_text": "text_default", + "radio_text_disabled": "text_disabled", + + "text_field": "background_1", + "text_field_border": [180, 180, 180, 255], + "text_field_border_hovered": "border_main", + "text_field_border_disabled": "border_main", + "text_field_text": "text_default", + "text_field_text_disabled": "text_disabled", "category_background": "background_2",