Merge remote-tracking branch 'origin/master' into CURA-7813_fix_crash_globalstack

This commit is contained in:
Jelle Spijker 2021-03-29 10:17:31 +02:00
commit c798c7b99e
No known key found for this signature in database
GPG Key ID: 6662DC033BE6B99A
23 changed files with 573 additions and 137 deletions

View File

@ -239,9 +239,6 @@ class WelcomePagesModel(ListModel):
{"id": "user_agreement",
"page_url": self._getBuiltinWelcomePagePath("UserAgreementContent.qml"),
},
{"id": "whats_new",
"page_url": self._getBuiltinWelcomePagePath("WhatsNewContent.qml"),
},
{"id": "data_collections",
"page_url": self._getBuiltinWelcomePagePath("DataCollectionsContent.qml"),
},
@ -259,13 +256,21 @@ class WelcomePagesModel(ListModel):
},
{"id": "add_cloud_printers",
"page_url": self._getBuiltinWelcomePagePath("AddCloudPrintersView.qml"),
"is_final_page": True, # If we end up in this page, the next button will close the dialog
"next_page_button_text": self._catalog.i18nc("@action:button", "Finish"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Next"),
"next_page_id": "whats_new",
},
{"id": "machine_actions",
"page_url": self._getBuiltinWelcomePagePath("FirstStartMachineActionsContent.qml"),
"should_show_function": self.shouldShowMachineActions,
},
{"id": "whats_new",
"page_url": self._getBuiltinWelcomePagePath("WhatsNewContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Skip"),
},
{"id": "changelog",
"page_url": self._getBuiltinWelcomePagePath("ChangelogContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Finish"),
},
]
pages_to_show = all_pages_list

View File

@ -1,8 +1,12 @@
# Copyright (c) 2019 Ultimaker B.V.
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from .WelcomePagesModel import WelcomePagesModel
import os
from typing import Optional, Dict, List, Tuple
from PyQt5.QtCore import pyqtProperty, pyqtSlot
from UM.Logger import Logger
from UM.Resources import Resources
#
# This Qt ListModel is more or less the same the WelcomePagesModel, except that this model is only for showing the
@ -10,13 +14,84 @@ from .WelcomePagesModel import WelcomePagesModel
#
class WhatsNewPagesModel(WelcomePagesModel):
image_formats = [".png", ".jpg", ".jpeg", ".gif", ".svg"]
text_formats = [".txt", ".htm", ".html"]
image_key = "image"
text_key = "text"
@staticmethod
def _collectOrdinalFiles(resource_type: int, include: List[str]) -> Tuple[Dict[int, str], int]:
result = {} #type: Dict[int, str]
highest = -1
try:
folder_path = Resources.getPath(resource_type, "whats_new")
for _, _, files in os.walk(folder_path):
for filename in files:
basename = os.path.basename(filename)
base, ext = os.path.splitext(basename)
if ext not in include or not base.isdigit():
continue
page_no = int(base)
highest = max(highest, page_no)
result[page_no] = os.path.join(folder_path, filename)
except FileNotFoundError:
Logger.logException("w", "Could not find 'whats_new' folder for resource-type {0}".format(resource_type))
return result, highest
@staticmethod
def _loadText(filename: str) -> str:
result = ""
try:
with open(filename, "r", encoding="utf-8") as file:
result = file.read()
except OSError:
Logger.logException("w", "Could not open {0}".format(filename))
return result
def initialize(self) -> None:
self._pages = []
self._pages.append({"id": "whats_new",
"page_url": self._getBuiltinWelcomePagePath("WhatsNewContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Skip"),
"next_page_id": "changelog"
})
self._pages.append({"id": "changelog",
"page_url": self._getBuiltinWelcomePagePath("ChangelogContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Close"),
})
self.setItems(self._pages)
images, max_image = WhatsNewPagesModel._collectOrdinalFiles(Resources.Images, WhatsNewPagesModel.image_formats)
texts, max_text = WhatsNewPagesModel._collectOrdinalFiles(Resources.Texts, WhatsNewPagesModel.text_formats)
highest = max(max_image, max_text)
self._subpages = [] #type: List[Dict[str, Optional[str]]]
for n in range(0, highest + 1):
self._subpages.append({
WhatsNewPagesModel.image_key: None if n not in images else images[n],
WhatsNewPagesModel.text_key: None if n not in texts else self._loadText(texts[n])
})
if len(self._subpages) == 0:
self._subpages.append({WhatsNewPagesModel.text_key: "~ There Is Nothing New Under The Sun ~"})
def _getSubpageItem(self, page: int, item: str) -> Optional[str]:
if 0 <= page < self.subpageCount and item in self._subpages[page]:
return self._subpages[page][item]
else:
return None
@pyqtProperty(int, constant = True)
def subpageCount(self) -> int:
return len(self._subpages)
@pyqtSlot(int, result = str)
def getSubpageImageSource(self, page: int) -> str:
result = self._getSubpageItem(page, WhatsNewPagesModel.image_key)
return "file:///" + (result if result else Resources.getPath(Resources.Images, "cura-icon.png"))
@pyqtSlot(int, result = str)
def getSubpageText(self, page: int) -> str:
result = self._getSubpageItem(page, WhatsNewPagesModel.text_key)
return result if result else "* * *"
__all__ = ["WhatsNewPagesModel"]

View File

@ -338,11 +338,6 @@ class PauseAtHeight(Script):
if current_layer < pause_layer - nbr_negative_layers:
continue
# Get X and Y from the next layer (better position for
# the nozzle)
next_layer = data[index + 1]
x, y = self.getNextXY(next_layer)
prev_layer = data[index - 1]
prev_lines = prev_layer.split("\n")
current_e = 0.
@ -353,6 +348,13 @@ class PauseAtHeight(Script):
current_e = self.getValue(prevLine, "E", -1)
if current_e >= 0:
break
# and also find last X,Y
for prevLine in reversed(prev_lines):
if prevLine.startswith(("G0", "G1", "G2", "G3")):
if self.getValue(prevLine, "X") is not None and self.getValue(prevLine, "Y") is not None:
x = self.getValue(prevLine, "X")
y = self.getValue(prevLine, "Y")
break
# Maybe redo the last layer.
if redo_layer:
@ -454,7 +456,7 @@ class PauseAtHeight(Script):
prepend_gcode += self.putValue(G = 1, E = -retraction_amount, F = 6000) + "\n"
#Move the head back
prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + "\n"
prepend_gcode += self.putValue(G = 1, Z = current_z, F = 300) + "\n"
prepend_gcode += self.putValue(G = 1, X = x, Y = y, F = 9000) + "\n"
if retraction_amount != 0:
prepend_gcode += self.putValue(G = 1, E = retraction_amount, F = 6000) + "\n"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -262,7 +262,7 @@ Item
Action
{
id: deleteSelectionAction;
text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount);
text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "edit-delete";
shortcut: StandardKey.Delete | "Backspace"
@ -272,7 +272,7 @@ Item
Action
{
id: centerSelectionAction;
text: catalog.i18ncp("@action:inmenu menubar:edit", "Center Selected Model", "Center Selected Models", UM.Selection.selectionCount);
text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "align-vertical-center";
onTriggered: CuraActions.centerSelection();
@ -281,7 +281,7 @@ Item
Action
{
id: multiplySelectionAction;
text: catalog.i18ncp("@action:inmenu menubar:edit", "Multiply Selected Model", "Multiply Selected Models", UM.Selection.selectionCount);
text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "edit-duplicate";
shortcut: "Ctrl+M"

View File

@ -18,7 +18,7 @@ OldControls.TableView
Label
{
id: tableCellLabel
color: UM.Theme.getColor("text")
color: styleData.selected ? UM.Theme.getColor("primary_button_text") : UM.Theme.getColor("text")
elide: Text.ElideRight
text: styleData.value
anchors.fill: parent
@ -29,7 +29,7 @@ OldControls.TableView
rowDelegate: Rectangle
{
color: styleData.selected ? UM.Theme.getColor("secondary") : UM.Theme.getColor("main_background")
color: styleData.selected ? UM.Theme.getColor("primary_button") : UM.Theme.getColor("main_background")
height: UM.Theme.getSize("table_row").height
}

View File

@ -215,7 +215,7 @@ Item
id: finishButton
anchors.right: parent.right
anchors.bottom: parent.bottom
text: catalog.i18nc("@button", "Finish")
text: base.currentItem.next_page_button_text
onClicked:
{
discoveredCloudPrintersModel.clear()

View File

@ -0,0 +1,59 @@
// Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
import QtQuick.Controls 2.3
import UM 1.3 as UM
import Cura 1.1 as Cura
//
// This component contains the content for the "What's new in Ultimaker Cura" page of the welcome on-boarding process.
//
Item
{
UM.I18nCatalog { id: catalog; name: "cura" }
Label
{
id: titleLabel
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@label", "Release Notes / 'Changelog'")
color: UM.Theme.getColor("primary_button")
font: UM.Theme.getFont("huge")
renderType: Text.NativeRendering
}
Cura.ScrollableTextArea
{
id: changelogTextArea
anchors.top: titleLabel.bottom
anchors.bottom: getStartedButton.top
anchors.topMargin: UM.Theme.getSize("wide_margin").height
anchors.bottomMargin: UM.Theme.getSize("wide_margin").height
anchors.left: parent.left
anchors.right: parent.right
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
textArea.text: CuraApplication.getTextManager().getChangeLogText()
textArea.textFormat: Text.RichText
textArea.wrapMode: Text.WordWrap
textArea.readOnly: true
textArea.font: UM.Theme.getFont("medium")
textArea.onLinkActivated: Qt.openUrlExternally(link)
}
Cura.PrimaryButton
{
id: getStartedButton
anchors.right: parent.right
anchors.bottom: parent.bottom
text: base.currentItem.next_page_button_text
onClicked: base.showNextPage()
}
}

View File

@ -34,93 +34,167 @@ Item
}
}
Label
{
id: titleLabel
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@label", "Ultimaker Account")
color: UM.Theme.getColor("primary_button")
font: UM.Theme.getFont("huge")
renderType: Text.NativeRendering
}
// Area where the cloud contents can be put. Pictures, texts and such.
Item
{
id: cloudContentsArea
anchors
{
top: titleLabel.bottom
top: parent.top
bottom: skipButton.top
left: parent.left
right: parent.right
topMargin: UM.Theme.getSize("default_margin").height
}
// Pictures and texts are arranged using Columns with spacing. The whole picture and text area is centered in
// the cloud contents area.
Column
{
anchors.centerIn: parent
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
height: childrenRect.height
spacing: 20 * screenScaleFactor
spacing: UM.Theme.getSize("thick_margin").height
Image // Cloud image
Label
{
id: titleLabel
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@label", "Sign in to the Ultimaker platform")
color: UM.Theme.getColor("primary_button")
font: UM.Theme.getFont("huge")
renderType: Text.NativeRendering
}
// Filler item
Item
{
height: UM.Theme.getSize("default_margin").height
width: parent.width
}
// Cloud image
Image
{
id: cloudImage
anchors.horizontalCenter: parent.horizontalCenter
source: UM.Theme.getImage("first_run_ultimaker_cloud")
fillMode: Image.PreserveAspectFit
width: UM.Theme.getSize("welcome_wizard_content_image_big").width
sourceSize.width: width
sourceSize.height: height
}
Label // A title-ish text
// Filler item
Item
{
id: highlightTextLabel
height: UM.Theme.getSize("default_margin").height
width: parent.width
}
// Motivational icons
Row
{
id: motivationRow
width: parent.width
Column
{
id: marketplaceColumn
width: Math.round(parent.width / 3)
spacing: UM.Theme.getSize("default_margin").height
Image
{
id: marketplaceImage
anchors.horizontalCenter: parent.horizontalCenter
fillMode: Image.PreserveAspectFit
width: UM.Theme.getSize("welcome_wizard_cloud_content_image").width
source: UM.Theme.getIcon("package")
sourceSize.width: width
sourceSize.height: height
}
Label
{
id: marketplaceTextLabel
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
text: catalog.i18nc("@text", "Add material settings and plugins from the Marketplace")
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@text", "Your key to connected 3D printing")
textFormat: Text.RichText
color: UM.Theme.getColor("primary")
font: UM.Theme.getFont("medium")
renderType: Text.NativeRendering
}
Label // A number of text items
{
id: textLabel
anchors.horizontalCenter: parent.horizontalCenter
text:
{
// There are 3 text items, each of which is translated separately as a single piece of text.
var full_text = ""
var t = ""
t = catalog.i18nc("@text", "- Customize your experience with more print profiles and plugins")
full_text += "<p>" + t + "</p>"
t = catalog.i18nc("@text", "- Stay flexible by syncing your setup and loading it anywhere")
full_text += "<p>" + t + "</p>"
t = catalog.i18nc("@text", "- Increase efficiency with a remote workflow on Ultimaker printers")
full_text += "<p>" + t + "</p>"
return full_text
}
textFormat: Text.RichText
font: UM.Theme.getFont("medium")
color: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
renderType: Text.NativeRendering
}
}
// "Sign in" and "Create an account" exist inside the column
Column
{
id: syncColumn
width: Math.round(parent.width / 3)
spacing: UM.Theme.getSize("default_margin").height
Image
{
id: syncImage
anchors.horizontalCenter: parent.horizontalCenter
fillMode: Image.PreserveAspectFit
width: UM.Theme.getSize("welcome_wizard_cloud_content_image").width
source: UM.Theme.getIcon("material_spool")
sourceSize.width: width
sourceSize.height: height
}
Label
{
id: syncTextLabel
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
text: catalog.i18nc("@text", "Backup and sync your material settings and plugins")
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
color: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
renderType: Text.NativeRendering
}
}
Column
{
id: communityColumn
width: Math.round(parent.width / 3)
spacing: UM.Theme.getSize("default_margin").height
Image
{
id: communityImage
anchors.horizontalCenter: communityColumn.horizontalCenter
fillMode: Image.PreserveAspectFit
width: UM.Theme.getSize("welcome_wizard_cloud_content_image").width
source: UM.Theme.getIcon("group")
sourceSize.width: width
sourceSize.height: height
}
Label
{
id: communityTextLabel
anchors.horizontalCenter: communityColumn.horizontalCenter
width: parent.width
text: catalog.i18nc("@text", "Share ideas and get help from 48,000+ users in the Ultimaker Community")
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
color: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
renderType: Text.NativeRendering
}
}
}
// Sign in Button
Cura.PrimaryButton
{
id: signInButton
height: createAccountButton.height
width: createAccountButton.width
anchors.horizontalCenter: parent.horizontalCenter
text: catalog.i18nc("@button", "Sign in")
onClicked: Cura.API.account.login()
@ -135,16 +209,15 @@ Item
}
}
Cura.SecondaryButton
// Create an account button
Cura.TertiaryButton
{
id: createAccountButton
anchors.horizontalCenter: parent.horizontalCenter
text: catalog.i18nc("@button","Create account")
text: catalog.i18nc("@text", "Create a free Ultimaker Account")
onClicked: Qt.openUrlExternally(CuraApplication.ultimakerCloudAccountRootUrl + "/app/create")
}
}
}
// The "Skip" button exists on the bottom right

View File

@ -7,7 +7,6 @@ import QtQuick.Controls 2.3
import UM 1.3 as UM
import Cura 1.1 as Cura
//
// This component contains the content for the "Welcome" page of the welcome on-boarding process.
//
@ -15,11 +14,39 @@ Item
{
UM.I18nCatalog { id: catalog; name: "cura" }
Column // Arrange the items vertically and put everything in the center
// Arrange the items vertically and put everything in the center
Column
{
anchors.centerIn: parent
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
spacing: UM.Theme.getSize("thick_margin").height
width:parent.width
spacing: 2 * UM.Theme.getSize("wide_margin").height
// Filler item
Item
{
height: UM.Theme.getSize("thick_margin").width
width: parent.width
}
Image
{
id: curaImage
anchors.horizontalCenter: parent.horizontalCenter
source: UM.Theme.getImage("first_run_welcome_cura")
fillMode: Image.PreserveAspectFit
width: UM.Theme.getSize("welcome_wizard_content_image_big").width
sourceSize.width: width
sourceSize.height: height
}
// Filler item
Item
{
height: UM.Theme.getSize("thick_margin").width
width: parent.width
}
Label
{
@ -28,35 +55,43 @@ Item
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@label", "Welcome to Ultimaker Cura")
color: UM.Theme.getColor("primary_button")
font: UM.Theme.getFont("huge")
font: UM.Theme.getFont("huge_bold")
renderType: Text.NativeRendering
}
Image
{
id: curaImage
anchors.horizontalCenter: parent.horizontalCenter
source: UM.Theme.getImage("first_run_welcome_cura")
}
Label
{
id: textLabel
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@text", "Please follow these steps to set up\nUltimaker Cura. This will only take a few moments.")
width: titleLabel.width + 2 * UM.Theme.getSize("thick_margin").width
text: catalog.i18nc("@text", "Please follow these steps to set up Ultimaker Cura. This will only take a few moments.")
wrapMode: Text.Wrap
font: UM.Theme.getFont("medium")
color: UM.Theme.getColor("text")
renderType: Text.NativeRendering
}
// Filler item
Item
{
height: UM.Theme.getSize("thick_margin").height
width: parent.width
}
Cura.PrimaryButton
{
id: getStartedButton
anchors.horizontalCenter: parent.horizontalCenter
anchors.margins: UM.Theme.getSize("wide_margin").width
text: catalog.i18nc("@button", "Get started")
onClicked: base.showNextPage()
}
// Filler item
Item
{
height: UM.Theme.getSize("thick_margin").height
width: parent.width
}
}
}

View File

@ -1,8 +1,9 @@
// Copyright (c) 2019 Ultimaker B.V.
// Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
import UM 1.3 as UM
import Cura 1.1 as Cura
@ -10,9 +11,12 @@ import Cura 1.1 as Cura
//
// This component contains the content for the "What's new in Ultimaker Cura" page of the welcome on-boarding process.
// Previously this was just the changelog, but now it will just have the larger stories, the changelog has its own page.
//
Item
{
property var manager: CuraApplication.getWhatsNewPagesModel()
UM.I18nCatalog { id: catalog; name: "cura" }
Label
@ -21,39 +25,164 @@ Item
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: catalog.i18nc("@label", "What's new in Ultimaker Cura")
text: catalog.i18nc("@label", "What's New")
color: UM.Theme.getColor("primary_button")
font: UM.Theme.getFont("huge")
renderType: Text.NativeRendering
}
Item
{
id: topSpacer
anchors.top: titleLabel.bottom
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Rectangle
{
anchors
{
top: topSpacer.bottom
bottom: whatsNewDots.top
left: parent.left
right: parent.right
margins: UM.Theme.getSize("default_margin").width * 2
}
color: UM.Theme.getColor("viewport_overlay")
StackLayout
{
id: whatsNewViewport
anchors
{
top: parent.top
topMargin: UM.Theme.getSize("default_margin").width
horizontalCenter: parent.horizontalCenter
}
height: parent.height
width: parent.width
currentIndex: whatsNewDots.currentIndex
Repeater
{
anchors
{
top: parent.top
topMargin: UM.Theme.getSize("default_margin").width / 2
horizontalCenter: parent.horizontalCenter
}
model: manager.subpageCount
Rectangle
{
Layout.alignment: Qt.AlignHCenter
color: UM.Theme.getColor("viewport_overlay")
Image
{
id: subpageImage
anchors
{
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: UM.Theme.getSize("default_margin").width
}
width: parent.width - (UM.Theme.getSize("default_margin").width * 2)
height: (parent.height - UM.Theme.getSize("default_margin").height) * 0.75
fillMode: Image.PreserveAspectFit
source: manager.getSubpageImageSource(index)
}
Cura.ScrollableTextArea
{
id: whatsNewTextArea
id: subpageText
anchors.top: titleLabel.bottom
anchors.bottom: getStartedButton.top
anchors.topMargin: UM.Theme.getSize("wide_margin").height
anchors.bottomMargin: UM.Theme.getSize("wide_margin").height
anchors.left: parent.left
anchors.right: parent.right
anchors
{
top: subpageImage.bottom
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
width: parent.width - (UM.Theme.getSize("default_margin").width * 2)
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
textArea.text: CuraApplication.getTextManager().getChangeLogText()
back_color: UM.Theme.getColor("viewport_overlay")
do_borders: false
textArea.wrapMode: TextEdit.Wrap
textArea.text: manager.getSubpageText(index)
textArea.textFormat: Text.RichText
textArea.wrapMode: Text.WordWrap
textArea.readOnly: true
textArea.font: UM.Theme.getFont("medium")
textArea.onLinkActivated: Qt.openUrlExternally(link)
}
}
}
}
}
Cura.PrimaryButton
PageIndicator
{
id: getStartedButton
anchors.right: parent.right
id: whatsNewDots
currentIndex: whatsNewViewport.currentIndex
count: whatsNewViewport.count
interactive: true
anchors
{
bottom: bottomSpacer.top
horizontalCenter: parent.horizontalCenter
}
delegate:
Rectangle
{
width: UM.Theme.getSize("thin_margin").width
height: UM.Theme.getSize("thin_margin").height
radius: width / 2
color:
index === whatsNewViewport.currentIndex ?
UM.Theme.getColor("primary") :
UM.Theme.getColor("secondary_button_shadow")
}
}
Item
{
id: bottomSpacer
anchors.bottom: whatsNewNextButton.top
height: UM.Theme.getSize("default_margin").height / 2
width: UM.Theme.getSize("default_margin").width / 2
}
Cura.TertiaryButton
{
id: whatsNewNextButton
anchors.left: parent.left
anchors.bottom: parent.bottom
text: base.currentItem.next_page_button_text
onClicked: base.showNextPage()
}
Cura.PrimaryButton
{
id: whatsNewSubpageButton
anchors.right: parent.right
anchors.bottom: parent.bottom
text: catalog.i18nc("@button", "Next")
onClicked:
whatsNewDots.currentIndex === (whatsNewDots.count - 1) ?
base.showNextPage() :
++whatsNewDots.currentIndex
}
}

View File

@ -15,13 +15,16 @@ ScrollView
{
property alias textArea: _textArea
property var back_color: UM.Theme.getColor("main_background")
property var do_borders: true
clip: true
background: Rectangle // Border
{
color: UM.Theme.getColor("main_background")
color: back_color
border.color: UM.Theme.getColor("thick_lining")
border.width: UM.Theme.getSize("default_lining").width
border.width: do_borders ? UM.Theme.getSize("default_lining").width : 0
}
TextArea

View File

@ -0,0 +1,5 @@
<h4>Hot New Feature (1/2)</h4>
<p>
Lorem ipsum et cetera ad infinitum dolce et gabana carpe diem. <br/>
Link to <a href="https://example.com">EXAMPLE</a>.
</p>

View File

@ -0,0 +1,2 @@
<h4>Hot New Feature (2/2)</h4>
<p>Pa's wijze lynx bezag vroom het fikse aquaduct.</p>

View File

@ -0,0 +1,2 @@
<h4>The other thing we wanted to tell you!</h4>
<p>The quick brown fox jumps over the lazy dog.</p>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<path style="fill:#000E1A;" d="M40.2,26.8c1.1-0.9,1.8-2.3,1.8-3.8c0-2.8-2.2-5-5-5s-5,2.2-5,5c0,1.5,0.7,2.9,1.8,3.8
c-0.5,0.3-1,0.6-1.5,1c-1.2-1.3-2.6-2.4-4.3-3.1c1.8-1.3,3-3.4,3-5.8c0-3.9-3.1-7-7-7s-7,3.1-7,7c0,2.4,1.2,4.5,3,5.8
c-1.7,0.7-3.2,1.7-4.3,3.1c-0.4-0.4-0.9-0.7-1.5-1c1.1-0.9,1.8-2.3,1.8-3.8c0-2.8-2.2-5-5-5s-5,2.2-5,5c0,1.5,0.7,2.9,1.8,3.8
C5.5,28,4,30.3,4,33v5h2v-5c0-2.8,2.2-5,5-5c1.3,0,2.6,0.5,3.5,1.5C13.6,31.1,13,33,13,35v5h2v-5c0-5,4-9,9-9s9,4,9,9v5h2v-5
c0-2-0.6-3.9-1.5-5.5c0.9-0.9,2.2-1.5,3.5-1.5c2.8,0,5,2.2,5,5v4h2v-4C44,30.3,42.5,28,40.2,26.8z M8,23c0-1.7,1.3-3,3-3s3,1.3,3,3
s-1.3,3-3,3S8,24.7,8,23z M19,19c0-2.8,2.2-5,5-5s5,2.2,5,5s-2.2,5-5,5S19,21.8,19,19z M34,23c0-1.7,1.3-3,3-3s3,1.3,3,3s-1.3,3-3,3
S34,24.7,34,23z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<path style="fill:#000E1A;" d="M24,4C13,4,4,13,4,24v18h2v-9.3C9.2,39.4,16.1,44,24,44c11,0,20-9,20-20S35,4,24,4z M24,42
c-9.9,0-18-8.1-18-18S14.1,6,24,6s18,8.1,18,18S33.9,42,24,42z M24,17c-3.9,0-7,3.1-7,7s3.1,7,7,7s7-3.1,7-7S27.9,17,24,17z M24,29
c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S26.8,29,24,29z M24,11c3.5,0,6.7,1.4,9.2,3.8l-1.4,1.4C29.7,14.1,26.9,13,24,13V11z"/>
</svg>

After

Width:  |  Height:  |  Size: 727 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<path style="fill:#000E1A;" d="M39,14V8H27v6h-6V8H9v6H7c-1.7,0-3,1.3-3,3v20c0,1.7,1.3,3,3,3h34c1.7,0,3-1.3,3-3V17
c0-1.7-1.3-3-3-3H39z M29,10h8v4c-2.1,0-4.9,0-8,0V10z M11,10h8v4c-3,0-5.8,0-8,0V10z M42,38H6V16h36V38z"/>
</svg>

After

Width:  |  Height:  |  Size: 577 B

View File

@ -1,12 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200px" height="135px" viewBox="0 0 200 135" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>Group-cloud</title>
<desc>Created with Sketch.</desc>
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M184.645934,101.269713 C184.402632,95.7100464 182.987439,90.4490704 180.637153,85.7196609 L184.851695,85.7196609 C187.817797,85.7196609 190.254237,83.3353195 190.254237,80.4326431 L190.36017,80.4326431 L190.36017,16.262763 C190.36017,15.1224259 189.40678,14.2930898 188.347457,14.2930898 L149.933791,14.2930898 L149.933791,63.9459005 C148.198887,63.7202321 146.428947,63.6037711 144.631348,63.6037711 C142.750807,63.6037711 140.900537,63.7312272 139.088982,63.9778345 L139.088982,14.2930898 L138.930084,14.2930898 L138.930084,11.4224041 C138.588831,10.5826557 137.742066,10.0297833 136.824681,10.0297833 L63.0561437,10.0297833 C61.7452327,10.0297833 60.7918428,11.0794119 60.7918428,12.2456657 L60.7918428,84.4367811 C60.7918428,87.7022917 63.5328385,90.3846758 66.8697029,90.3846758 L106.674877,90.3846758 C105.315869,94.3430337 104.579138,98.5831707 104.579138,102.99253 C104.579138,104.646987 104.68286,106.27762 104.884257,107.878484 L65.082097,107.878484 C63.771186,107.995109 62.460275,108.461611 61.5068852,109.277988 L60.7918428,109.977741 C60.0768004,111.143995 58.6467157,111.377246 57.216631,111.377246 L50.7812497,111.377246 C50.4237285,111.377246 50.0662073,111.027369 50.0662073,110.677493 L50.0662073,101.269713 L13.3474575,101.269713 C12.1822033,101.373379 11.0169491,101.788048 10.1694914,102.513717 L9.53389824,103.135719 C8.89830503,104.172389 7.62711862,104.379723 6.35593214,104.379723 L0.635593219,104.379723 C0.317796608,104.379723 -6.39488462e-14,104.068722 -6.39488462e-14,103.757721 C-6.39488462e-14,5.68872783 0.317796608,5.3777268 0.635593219,5.3777268 L50.0662073,5.3777268 L50.0662073,0.699752327 C50.0662073,0.349876165 50.4237285,-1.63424829e-13 50.7812497,-1.63424829e-13 C149.57627,-1.63424829e-13 149.933791,0.349876165 149.933791,0.699752327 L149.933791,5.3777268 L199.364407,5.3777268 C199.682204,5.3777268 200,5.68872783 200,5.99972886 L200,103.757721 C200,104.068722 199.682204,104.379723 199.364407,104.379723 L193.644068,104.379723 C192.478814,104.276056 191.313559,103.861388 190.466102,103.135719 L189.830509,102.513717 C189.194915,101.477046 187.923729,101.269713 186.652543,101.269713 L184.645934,101.269713 Z M50.0662073,14.2930898 L11.5466101,14.2930898 C10.3813559,14.2930898 9.53389824,15.2260929 9.53389824,16.262763 L9.53389824,80.4326431 C9.53389824,83.3353195 11.9703389,85.7196609 14.9364406,85.7196609 L50.0662073,85.7196609 L50.0662073,14.2930898 Z" fill="#08073F" fill-rule="nonzero"></path>
<g transform="translate(112.574850, 70.658683)" fill="#3282FF">
<path d="M32.3080573,64.1243454 C14.46481,64.1243454 1.42108547e-14,49.7696217 1.42108547e-14,32.0621727 C1.42108547e-14,14.3547237 14.46481,-4.26325641e-14 32.3080573,-4.26325641e-14 C50.1513046,-4.26325641e-14 64.6161146,14.3547237 64.6161146,32.0621727 C64.6161146,49.7696217 50.1513046,64.1243454 32.3080573,64.1243454 Z M46.2852901,26.9720257 C45.8876525,23.478071 42.9053703,20.8062233 39.3266316,20.8062233 C38.3325376,20.8062233 37.5372623,21.0117501 36.741987,21.4228035 C34.9526177,18.5454291 31.7715167,16.6956884 28.3915969,16.6956884 C22.8246701,16.6956884 18.4506561,21.2172768 18.4506561,26.9720257 C18.4506561,26.9720257 18.4506561,26.9720257 18.4506561,27.1775525 C15.0707363,27.588606 12.4860917,30.6715072 12.4860917,34.165462 C12.4860917,38.0704701 15.6671927,41.3588981 19.4447502,41.3588981 C22.4270324,41.3588981 41.7124574,41.3588981 45.2911961,41.3588981 C49.0687535,41.3588981 52.2498546,38.0704701 52.2498546,34.165462 C52.2498546,30.4659805 49.66521,27.588606 46.2852901,26.9720257 Z"></path>
</g>
</g>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 325.48 197.18">
<defs>
<style type="text/css">.cls-1,.cls-4{fill:#f3f8fe;}.cls-1,.cls-5{stroke:#061884;}.cls-1,.cls-6{stroke-miterlimit:10;}.cls-1,.cls-5,.cls-6,.cls-7{stroke-width:2px;}.cls-2,.cls-5{fill:#fff;}.cls-3{fill:#061884;}.cls-5,.cls-7{stroke-linecap:round;stroke-linejoin:round;}.cls-6,.cls-7{fill:none;stroke:#2c3278;}.cls-8{fill:#292f79;fill-rule:evenodd;}</style>
</defs>
<path class="cls-1" d="M47.68,9.26H277.81a6.1,6.1,0,0,1,6.1,6.1V172.48a0,0,0,0,1,0,0H41.57a0,0,0,0,1,0,0V15.36A6.1,6.1,0,0,1,47.68,9.26Z"/>
<path class="cls-2" d="M50.88,173.48a1,1,0,0,1-1-1V19.57a2,2,0,0,1,2-2H272.61a3,3,0,0,1,3,3V172.48a1,1,0,0,1-1,1Z"/>
<path class="cls-3" d="M272.61,18.57a2,2,0,0,1,2,2V172.48H50.88V19.57a1,1,0,0,1,1-1H272.61m0-2H51.88a3,3,0,0,0-3,3V172.48a2,2,0,0,0,2,2H274.61a2,2,0,0,0,2-2V20.57a4,4,0,0,0-4-4Z"/>
<path class="cls-4" d="M272.61,20.57V170.48H52.88V20.57H272.61m0-2H51.88a1,1,0,0,0-1,1V172.48H274.61V20.57a2,2,0,0,0-2-2Z"/>
<line class="cls-5" x1="14.64" y1="187.91" x2="310.85" y2="187.91"/>
<path class="cls-4" d="M35.34,187.91a15.49,15.49,0,0,1-15.48-15.48,1,1,0,0,1,1-1H304.63a1,1,0,0,1,1,1,15.5,15.5,0,0,1-15.49,15.48Z"/>
<path class="cls-3" d="M304.63,172.43h0a14.48,14.48,0,0,1-14.49,14.48H35.34a14.48,14.48,0,0,1-14.48-14.48H304.63m0-2H20.86a2,2,0,0,0-2,2,16.49,16.49,0,0,0,16.48,16.48h254.8a16.5,16.5,0,0,0,16.49-16.48,2,2,0,0,0-2-2Z"/>
<path class="cls-3" d="M185.24,172.43h-45v.6a4.4,4.4,0,0,0,4.4,4.4h36.21a4.4,4.4,0,0,0,4.39-4.4Z"/>
<polygon class="cls-6" points="180.22 140.51 117.36 140.51 117.36 77.7 144.3 50.78 207.16 50.78 207.16 113.59 180.22 140.51"/>
<path class="cls-7" d="M175.73,73.21H162.26a22.44,22.44,0,1,0,0,44.87h13.47"/>
<circle class="cls-2" cx="207.16" cy="50.75" r="31"/>
<path class="cls-8" d="M206.73,28.14a22.39,22.39,0,1,0,22.43,22.39A22.4,22.4,0,0,0,206.73,28.14Zm-14,36.94a17.94,17.94,0,0,1,27.91,0A20.12,20.12,0,0,1,192.77,65.08Zm4.43-18.47a9.53,9.53,0,1,1,9.53,9.51A9.53,9.53,0,0,1,197.2,46.61Zm25,16.8a20.18,20.18,0,0,0-9.87-6.48,11.79,11.79,0,1,0-11.21,0,20.13,20.13,0,0,0-9.87,6.48,20.14,20.14,0,1,1,30.95,0Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,11 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="120px" height="72px" viewBox="0 0 120 72" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>cura</title>
<desc>Created with Sketch.</desc>
<g id="Iteration-4" stroke="none" stroke-width="1" fill="#000000" fill-rule="nonzero">
<path d="M114.3,63.1 C112.104248,65.5577268 108.994324,67.0042033 105.7,67.1 L14.3,67.1 C11.0056762,67.0042033 7.89575168,65.5577268 5.7,63.1 L114.3,63.1 Z M120,59.1 L0,59.1 L0,59.9 C0,64.5 6.3,71.1 14.3,71.1 L105.7,71.1 C113.7,71.1 120,64.4 120,59.9 L120,59.1 Z" />
<path d="M106,4.9 L106,59.1 L14,59.1 L14,4.9 L106,4.9 Z M110,0.9 L10,0.9 L10,63.1 L110,63.1 L110,0.9 Z" />
<path d="M60.5,36.5 L72.3,36.5 L72.3,43.1 L60.5,43.1 C52.8,43.1 48,37.8 48,30.3 C48,22.8 52.7,17.6 60.5,17.6 L72.3,17.6 L72.3,24.2 L60.5,24.2 C56.6,24.2 54.6,27 54.6,30.3 C54.6,33.7 56.6,36.5 60.5,36.5 Z M52.3,8.9 L36.9,24.5 L36.9,55.1 L67.6,55.1 L83.2,39.5 L83.2,8.9 L52.3,8.9 Z" />
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 325.48 197.18">
<defs>
<style type="text/css">.cls-1,.cls-4{fill:#f3f8fe;}.cls-1,.cls-5{stroke:#061884;}.cls-1,.cls-6{stroke-miterlimit:10;}.cls-1,.cls-5,.cls-6,.cls-7{stroke-width:2px;}.cls-2,.cls-5{fill:#fff;}.cls-3{fill:#061884;}.cls-5,.cls-7{stroke-linecap:round;stroke-linejoin:round;}.cls-6,.cls-7{fill:none;stroke:#2c3278;}</style>
</defs>
<g id="Software">
<path class="cls-1" d="M47.68,9.26H277.81a6.1,6.1,0,0,1,6.1,6.1V172.48a0,0,0,0,1,0,0H41.57a0,0,0,0,1,0,0V15.36a6.1,6.1,0,0,1,6.1-6.1Z"/>
<path class="cls-2" d="M50.88,173.48a1,1,0,0,1-1-1V19.57a2,2,0,0,1,2-2H272.61a3,3,0,0,1,3,3V172.48a1,1,0,0,1-1,1Z"/>
<path class="cls-3" d="M272.61,18.57a2,2,0,0,1,2,2V172.48H50.88V19.57a1,1,0,0,1,1-1H272.61m0-2H51.88a3,3,0,0,0-3,3V172.48a2,2,0,0,0,2,2H274.61a2,2,0,0,0,2-2V20.57a4,4,0,0,0-4-4Z"/>
<path class="cls-4" d="M272.61,20.57V170.48H52.88V20.57H272.61m0-2H51.88a1,1,0,0,0-1,1V172.48H274.61V20.57a2,2,0,0,0-2-2Z"/>
<line class="cls-5" x1="14.64" y1="187.91" x2="310.85" y2="187.91"/>
<path class="cls-4" d="M35.34,187.91a15.49,15.49,0,0,1-15.48-15.48,1,1,0,0,1,1-1H304.63a1,1,0,0,1,1,1,15.5,15.5,0,0,1-15.49,15.48Z"/>
<path class="cls-3" d="M304.63,172.43h0a14.48,14.48,0,0,1-14.49,14.48H35.34a14.48,14.48,0,0,1-14.48-14.48H304.63m0-2H20.86a2,2,0,0,0-2,2,16.49,16.49,0,0,0,16.48,16.48h254.8a16.5,16.5,0,0,0,16.49-16.48,2,2,0,0,0-2-2Z"/>
<path class="cls-3" d="M185.24,172.43h-45v.6a4.4,4.4,0,0,0,4.4,4.4h36.21a4.4,4.4,0,0,0,4.39-4.4Z"/>
<polygon class="cls-6" points="180.22 140.51 117.36 140.51 117.36 77.7 144.3 50.78 207.16 50.78 207.16 113.59 180.22 140.51"/>
<path class="cls-7" d="M175.73,73.21H162.26a22.44,22.44,0,1,0,0,44.87h13.47"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -34,6 +34,11 @@
"weight": 50,
"family": "Noto Sans"
},
"huge_bold": {
"size": 1.8,
"weight": 63,
"family": "Noto Sans"
},
"medium": {
"size": 1.16,
"weight": 40,
@ -576,7 +581,7 @@
"monitor_preheat_temperature_control": [4.5, 2.0],
"welcome_wizard_window": [46.0, 45],
"welcome_wizard_window": [46, 45],
"modal_window_minimum": [60.0, 45],
"license_window_minimum": [45, 45],
"wizard_progress": [10.0, 0.0],
@ -633,6 +638,9 @@
"monitor_progress_bar": [16.5, 1.0],
"monitor_margin": [1.5, 1.5],
"table_row": [2.0, 2.0]
"table_row": [2.0, 2.0],
"welcome_wizard_content_image_big": [18, 15],
"welcome_wizard_cloud_content_image": [4, 4]
}
}