Ultra Paint 0.7.3: the changes made to paint.rs 0.7.3 (https://github.com/daijro/paint.rs/tree/v0.7.3). Apply with `git apply` in that source, then build as paint.rs README "Web" says. Changes: the product name, a few messages, the app icon, and the About/Welcome credits text. GPL-3.0-or-later, like paint.rs. diff --git a/assets/app-icon.svg b/assets/app-icon.svg index f5d62f0..24f7aee 100644 --- a/assets/app-icon.svg +++ b/assets/app-icon.svg @@ -1,59 +1 @@ - - Crab with paintbrush - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/assets/help/bb/bbPolygonStars.md b/assets/help/bb/bbPolygonStars.md index df32350..dc11d66 100644 --- a/assets/help/bb/bbPolygonStars.md +++ b/assets/help/bb/bbPolygonStars.md @@ -6,6 +6,6 @@ Set Verticies first, then Star depth. Adjust Size/Orientation for size, the angl Compare an eight-vertex shape at Star depth 0, 0.5 and 1.0: the polygon develops increasingly pointed connections. More vertices allow more distinct star-depth steps. -The original plugin uses Windows GDI+ for most strokes, with a separate pixel-line routine for one-pixel lines without antialiasing. paint.rs reproduces those stroke behaviors using its own renderer. +The original plugin uses Windows GDI+ for most strokes, with a separate pixel-line routine for one-pixel lines without antialiasing. Ultra Paint reproduces those stroke behaviors using its own renderer. For questions about the original effects, visit the [Paint.NET forum](https://forums.getpaint.net/). diff --git a/crates/paintrs/src/dialogs/about.rs b/crates/paintrs/src/dialogs/about.rs index 4d34ec1..938c4d9 100644 --- a/crates/paintrs/src/dialogs/about.rs +++ b/crates/paintrs/src/dialogs/about.rs @@ -26,7 +26,7 @@ use crate::theme::{self, *}; pub const WELCOME_DISMISSED_KEY: &str = "paintdotjs.welcome.dismissed"; /// The app's name in user-visible text (R219). -pub(crate) const PRODUCT: &str = "paint.rs"; +pub(crate) const PRODUCT: &str = "Ultra Paint"; /// `PdjInfo.version()`: " ()". fn version() -> String { @@ -40,8 +40,7 @@ fn version() -> String { /// The banner heading's tagline, beside the version. fn tagline() -> &'static str { - "An open source, clean-room reimplementation of Paint.NET for Windows, macOS, Linux, and the \ - web." + "Draw and edit pictures right in your browser." } /// The wordmark's face: Inter at `font-weight: 300` (`kit::fonts`' "Inter Light"). @@ -387,34 +386,23 @@ fn draw_wordmark(ui: &Ui, top_left: Pos2, color: Color32) { text::record_text_rect(ui.ctx(), ink.intersect(painter.clip_rect())); } -/// The credits paragraph's runs. +/// The credits box: only the notice the GNU GPL asks for (licence, no warranty, where the source is). fn credits<'a>(theme: &theme::Theme) -> Vec<(Run<'a>, Option<&'a str>)> { let text = theme.menu_item_text; - let mut runs = vec![ - (bold("Credits: ", text), None), - (plain("Paint.NET was created by ", text), None), + vec![ ( - link("Rick Brewster", theme), - Some("https://www.getpaint.net/"), + plain( + "Free software under the GNU GPL version 3 or later, with no warranty. \ + Copyright \u{a9} the paint.rs contributors. Source code: ", + text, + ), + None, ), - ]; - let (port, unofficial) = ( - ". All credit for the original application, its design, concepts, and behavior belongs \ - to him and the Paint.NET contributors.\n\npaint.js by ", - " served as a reference during the development of paint.rs. paint.rs is unofficial and \ - is not affiliated with or endorsed by Paint.NET or dotPDN LLC.\n\nIncludes code adapted \ - from PhotoCraft (MIT). Some plugins were inspired by BoltBait's Paint.NET plugin pack \ - and by dpy's and Tanel's plugins from the Paint.NET forum.", - ); - runs.extend([ - (plain(port, text), None), ( - link("LabyStudio", theme), - Some("https://github.com/LabyStudio"), + link("github.com/daijro/paint.rs", theme), + Some("https://github.com/daijro/paint.rs"), ), - (plain(unofficial, text), None), - ]); - runs + ] } /// Everything below the banner, laid out for the copy's width. @@ -498,6 +486,8 @@ impl Dialog for AboutDialog { .collect(); } let credits_h = copy.credits.height(line) + 2.0 * credit_py; + // Ultra Paint: the licence notice shows in About only; Welcome is the banner and heading. + let credits_block = if self.welcome { 0.0 } else { copy_gap + credits_h }; // About: the font licenses below the credits; Welcome ends with the credits. let details_h = if self.welcome { 0.0 @@ -513,7 +503,7 @@ impl Dialog for AboutDialog { copy_w - version_w - PROJECT_INFO_HEADING_GAP, ); let heading_h = tagline.len() as f32 * line; - let copy_h = copy_top + heading_h + copy_gap + credits_h + details_h + copy_x; + let copy_h = copy_top + heading_h + credits_block + details_h + copy_x; let body_h = pad_top + PROJECT_INFO_BANNER + copy_h + pad_bottom; let list_content = 2.0 * list_py as f64 + entries.len() as f64 * list_line as f64; @@ -560,6 +550,9 @@ impl Dialog for AboutDialog { theme.muted_text, ); } + if welcome { + return; + } y += heading_h + copy_gap; // .project-info-highlight-credit let credit = Rect::from_min_size(Pos2::new(x, y), Vec2::new(copy_w, credits_h)); @@ -583,9 +576,6 @@ impl Dialog for AboutDialog { line, theme.link_hover, ); - if welcome { - return; - } y += credits_h + copy_gap; // .project-info-summary-details let heading_spec = FontSpec::new(DIALOG_FONT_SIZE).bold().line_height(line); diff --git a/crates/paintrs/src/dialogs/settings/icon_packs.rs b/crates/paintrs/src/dialogs/settings/icon_packs.rs index db2b192..c0fd7c7 100644 --- a/crates/paintrs/src/dialogs/settings/icon_packs.rs +++ b/crates/paintrs/src/dialogs/settings/icon_packs.rs @@ -54,8 +54,8 @@ pub fn show(e: &mut EntryUi) { e.state.status = m.status.clone(); let mut rows = vec![( "paint-rs".to_owned(), - "paint.rs".to_owned(), - "Bundled SVG icons · original paint.rs artwork".to_owned(), + "Ultra Paint".to_owned(), + "Bundled SVG icons".to_owned(), "The default colour icon set.".to_owned(), )]; rows.extend(m.packs.iter().map(|p| { diff --git a/crates/paintrs/src/dialogs/settings/info_pages.rs b/crates/paintrs/src/dialogs/settings/info_pages.rs index 24f6009..80f5359 100644 --- a/crates/paintrs/src/dialogs/settings/info_pages.rs +++ b/crates/paintrs/src/dialogs/settings/info_pages.rs @@ -142,12 +142,12 @@ fn diagnostic_values() -> Vec<(&'static str, String)> { let mut rows = vec![ ( "Application", - format!("paint.rs {}", env!("CARGO_PKG_VERSION")), + format!("Ultra Paint {}", env!("CARGO_PKG_VERSION")), ), ( "User agent", format!( - "paint.rs / {} / {}", + "Ultra Paint / {} / {}", std::env::consts::OS, std::env::consts::ARCH ), diff --git a/crates/paintrs/src/dialogs/settings/ui.rs b/crates/paintrs/src/dialogs/settings/ui.rs index c933b92..cdcc583 100644 --- a/crates/paintrs/src/dialogs/settings/ui.rs +++ b/crates/paintrs/src/dialogs/settings/ui.rs @@ -58,7 +58,7 @@ pub(super) fn show(e: &mut EntryUi) { ]), &scheme, ); - let mut packs = vec![("paint-rs".to_owned(), "paint.rs".to_owned())]; + let mut packs = vec![("paint-rs".to_owned(), "Ultra Paint".to_owned())]; if let Some(manager) = e.cx.asset_library.as_deref() { packs.extend( manager diff --git a/crates/paintrs/src/dialogs/task.rs b/crates/paintrs/src/dialogs/task.rs index b55be3b..2c7876a 100644 --- a/crates/paintrs/src/dialogs/task.rs +++ b/crates/paintrs/src/dialogs/task.rs @@ -1117,7 +1117,7 @@ mod tests { crate::install_fonts(&ctx, pdn_core::fonts::FontPolicy::Bundled, "Selawik"); let mut stack = DialogStack::default(); let error_box = |choices: Vec| TaskDialogSpec { - title: "paint.rs".into(), + title: "Ultra Paint".into(), message: Some("Could not use the Clone Stamp.\n\nUse Ctrl+Click.".into()), choices, cancel_value: "cancel", diff --git a/crates/paintrs/src/live.rs b/crates/paintrs/src/live.rs index 4d31a14..2d7ee7f 100644 --- a/crates/paintrs/src/live.rs +++ b/crates/paintrs/src/live.rs @@ -585,7 +585,7 @@ fn read(bytes: &[u8]) -> Result { } let mut r = Reader { bytes, at: 0 }; if r.take(MAGIC.len())? != MAGIC { - return Err(invalid("not a paint.rs live document")); + return Err(invalid("not an Ultra Paint live document")); } let (mut json, mut sections, mut total) = (Vec::new(), Vec::new(), 0usize); loop { diff --git a/crates/paintrs/src/main.rs b/crates/paintrs/src/main.rs index a0eb290..25759fa 100644 --- a/crates/paintrs/src/main.rs +++ b/crates/paintrs/src/main.rs @@ -29,7 +29,7 @@ fn main() -> std::process::ExitCode { #[cfg(not(target_os = "macos"))] { eframe::run_native( - "paint.rs", + "Ultra Paint", run_options(renderer, log), Box::new(move |cc| { started.set(true); @@ -86,7 +86,7 @@ static XWAYLAND: std::sync::OnceLock = std::sync::OnceLock::new(); fn native_options() -> eframe::NativeOptions { // js/platform/desktop/main.js: default1080×720, minimum640×480; OS owns DPI. let viewport = egui::ViewportBuilder::default() - .with_title("paint.rs") + .with_title("Ultra Paint") .with_inner_size([1080.0, 720.0]) .with_min_inner_size([640.0, 480.0]) .with_icon(egui::IconData { diff --git a/crates/paintrs/src/platform/clipboard_image.rs b/crates/paintrs/src/platform/clipboard_image.rs index e3c93e6..c34b02f 100644 --- a/crates/paintrs/src/platform/clipboard_image.rs +++ b/crates/paintrs/src/platform/clipboard_image.rs @@ -239,7 +239,7 @@ impl super::Clipboard { // paint.rs already succeeded, so a browser refusing the system clipboard is no error to show. if let Some(completion) = weak.upgrade() { if let Err(error) = &result { - warn(&format!("paint.rs: clipboard image write failed: {error}")); + warn(&format!("Ultra Paint: clipboard image write failed: {error}")); } *completion.lock().expect("clipboard image write") = Some(result); } diff --git a/crates/paintrs/src/shell/mod.rs b/crates/paintrs/src/shell/mod.rs index ea9b984..7f15de6 100644 --- a/crates/paintrs/src/shell/mod.rs +++ b/crates/paintrs/src/shell/mod.rs @@ -1178,7 +1178,7 @@ impl Shell { "pasteSelectionAction.error.noSelection", ), Err(e) => { - eprintln!("paint.rs: reading the clipboard failed: {e}"); + eprintln!("Ultra Paint: reading the clipboard failed: {e}"); message( "menu.edit.pasteSelection.text", "pasteSelectionAction.error.transferFromClipboard", @@ -1191,7 +1191,7 @@ impl Shell { match self.clipboard.read_image() { Ok(image) => image.and_then(|i| app.clipboard.read(Some(i)).cloned()), Err(e) => { - eprintln!("paint.rs: reading the clipboard image failed: {e}"); + eprintln!("Ultra Paint: reading the clipboard image failed: {e}"); let title = match kind { PasteKind::IntoNewImage => "menu.edit.pasteInToNewImage.text", _ => "expandCanvasQuestion.title", diff --git a/crates/paintrs/src/shell/titlebar.rs b/crates/paintrs/src/shell/titlebar.rs index 1cfae91..1c501d6 100644 --- a/crates/paintrs/src/shell/titlebar.rs +++ b/crates/paintrs/src/shell/titlebar.rs @@ -15,7 +15,7 @@ use egui::{Color32, Pos2, Rect, ResizeDirection, Sense, Ui, Vec2, ViewportComman use pdn_core::app::AppWorkspace; pub fn title(app: &AppWorkspace) -> String { - let product = format!("paint.rs {}", env!("CARGO_PKG_VERSION")); + let product = format!("Ultra Paint {}", env!("CARGO_PKG_VERSION")); app.active_ws().map_or_else( || product.clone(), |ws| { diff --git a/crates/pdn-core/src/effect/bb/chart/xml.rs b/crates/pdn-core/src/effect/bb/chart/xml.rs index 1305c07..cd8d098 100644 --- a/crates/pdn-core/src/effect/bb/chart/xml.rs +++ b/crates/pdn-core/src/effect/bb/chart/xml.rs @@ -231,7 +231,7 @@ pub fn from_xml(xml: &str) -> Result { let doc = roxmltree::Document::parse_with_options(xml, options).map_err(invalid)?; let root = doc.root_element(); if root.tag_name().name() != "Chart" || root.tag_name().namespace().is_some() { - return Err(invalid("the file is not paint.rs chart data")); + return Err(invalid("the file is not Ultra Paint chart data")); } let mut a = attrs(root); let mut chart = Chart { diff --git a/index.html b/index.html index b1152f0..b06313f 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - paint.rs + Ultra Paint @@ -64,6 +64,6 @@ -

paint.rs needs a newer browser: Chrome 96, Firefox 113 or Safari 16.4, or later.

+

Ultra Paint needs a newer browser: Chrome 96, Firefox 113 or Safari 16.4, or later.