Code Monkey home page Code Monkey logo

tarsila's Introduction

checks build tests codecov

NOTE: this project is a work in progress, if you want to use it, please save your work as frequently as possible to avoid losing it.

alt text

Tarsila is a pixel art and spritesheet editor written in Rust with macroquad as graphics backend and egui for GUI. The project consists of 2 crates:

  • tarsila: the frontend GUI of the editor;
  • lapix: the backend/core of the editor, where all interesting things happen.

To learn more about the architecture take a look at ARCHITECTURE.md.

To contribute, take a look at CONTRIBUTING.md.

Getting Started

Check out our installation instructions.

To learn how to use, take a look at the user guide.

Known Issues

Have in mind that this project is a work in progress and might have a lot of bugs, incomplete or missing features and suboptimal performance here and there. Some of the main gaps currently are:

  • Works as intended on Linux, but there are some compatibility issues with MacOS (file dialog window does not open, modifier keys do not work); Windows is reported to be working as intended;
  • There are a few unit tests, but integration tests are missing, and coverage is far from 100%;
  • There is room to improve when it comes to performance

Visit our issues page for known problems/bugs.

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

tarsila's People

Contributors

crumblingstatue avatar keysym avatar quiet-bear avatar yds12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

tarsila's Issues

Define process to generate MacOS installer

Define and document a process to generate a MacOS installer, that will be made available with every release.

Hopefully something as easy as the process to generate the debian installer with cargo-deb.

Canvas: fit to drawing

Add an option to the canvas menu called "fit to drawing" that resizes the canvas to the size of the area that has pixels with alpha > 0, if necessary moving the area to the origin.

Save and Load Palettes

Palettes can currently be saved and loaded via PNG files, but we should be able to save palette specific files, and load from those files.

Transform: rotate

A tool that allows rotating the selected image. Initially we could do with only 90-degree rotations.

Crosshair cursor

The current tool icons provide a quick way to see what tool you are using, but sometimes they may not be precise enough when it comes to seeing which pixel you are on. A crosshair cursor would be ideal for this (similar to the one used for the move tool).

For now, we need to decide when should this cursor be used:

  • for all tools
  • for some tools such as brush
  • activated/toggled with some keyboard shortcut or UI button

As we don't have yet configurability for shortcuts, we should decide how this can be used for the moment.

Tiled mode

When activated, this mode shows 8 replicas of the canvas on all sides, so that we can easily see how the drawing would look as a tile.

Configurable scale to export images

Currently we can only export the image at 100% scale. That's usually too small to be seen without zoom. We should offer the option to scale the image by any factor.

Error handling

At this point, all errors are panicking. We need to eliminate every unwrap, expect and panic, and do proper error handling.

Consider adding a license file.

The member crates are licensed under MIT according to their manifest, but it's good practice to also add a LICENSE file to the top-level of the repo, along with a notice in the README file.

Furthermore, I would recommend to license under MIT/Apache-2.0 (instead of just MIT) for compatibility with the wider Rust ecosystem.

Effects: change colors

Under the transform menu (should probably be renamed to effects or something else), we should have options to change brightness, contrast, hue, saturation and value (HSV and HSB color models).

Oval tool

Tool for drawing ovals and circles. UX should be the same as for rectangle (drag mouse, shape will fill the rectangular area defined by the mouse move, with preview).

Define process to generate Windows installer

Define and document a process to generate a Windows installer, that will be made available with every release.

Hopefully something as easy as the process to generate the debian installer with cargo-deb.

Autosave

As tarsila panics on errors, an autosave could be great to avoid losing progress.

Should autosave...

  • Overwrite the existing .tarsila OR write to a .tmp/.backup file to recover later in case of a panic?
  • Save on a time interval OR based on user events?

Default palettes

Tarsila should offer a set of default palettes other than the initial one that the user can easily choose.

Enable github discussions on the repo

In the repo settings, it's possible to enable a discussions feature to give a lightweight forum to have discussions about the project.
image

It would allow users to ask questions and the like without spamming the issue tracker.

Canvas: fit to selection

Add a "fit to selection" option to the canvas menu that resizes the canvas to fit exactly the selected area (moving the selection to the origin).

Bucket: replace all areas with color

We need to add some configuration options to tools. One of them is for bucket, the option of replacing all pixels in the canvas that have a color with another.

Exporting to JPEG causing artifacts

OS: Windows 11

Exporting to JPEG artifacts the image (doing what JPEG does best). However, in the case of pixel art, I don't believe the compression should be this bad. Since there's no option for setting compression level, JPEG doesn't seem viable for smaller images at the moment. It might be good to set compression to the lowest it can go and revisit whenever there's a dedicated menu for tweaking export settings.

Imports don't seem to be affected.

Example Example-JPEG

Steps to reproduce:

  • Create an image ( doesn't matter whether it's created, imported, or opened from a project file)
  • Export, making sure to save the file as JPEG

Help menu

Add a help menu item on the top menu bar with an about section and a section with a user guide.

Bucket: adjustable tolerance

Like #25, another option for the bucket tool. This one is to add a tolerance option. With the minimum tolerance, only the area with the same color as the clicked pixel is filled, with the maximum tolerance the whole canvas is filled, and for a tolerance value in between, colors that are similar might also be included in the area.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.