GithubHelp home page GithubHelp logo

mitchcurtis / slate Goto Github PK

View Code? Open in Web Editor NEW
1.0K 37.0 102.0 13.89 MB

Pixel Art Editor

License: GNU General Public License v3.0

C++ 76.54% QML 22.26% C 0.24% CMake 0.80% Shell 0.04% GLSL 0.12%
pixel-art-editor pixel-art bitmap-editor sprite sprites tilesets qt qt5 qtquick qtquick-controls2

slate's Introduction

Slate - Pixel Art Editor

Slate is a bitmap editor available for Linux, Windows and Mac. With Slate, you can:

  • Edit images directly
  • Use layers
  • Create seamless 2D tilesets
  • Preview sprite sheet animations

Slate was built for pixel art, and its goal is to simplify the creation of sprites and tilesets by offering a user-friendly, customisable interface.

Contents

Screenshots

Screenshot of Slate on Linux

Screenshot of Slate v0.4.0 on Mac

Screenshot of Slate v0.4.0 on Mac

Downloads

- Slate 0.9.0 for Linux

- Slate 0.9.0 for Mac

- Slate 0.9.0 for Windows

See the releases page for the full list of available downloads.

Note that the Linux binaries are built on Ubuntu 18.04.3 and may not work with other distributions. If you encounter issues running Slate on Linux, try building from source.

Installing

All Slate builds are portable, meaning that no installation is necessary. On Windows, however, it may be necessary to run the vc_redist.x64.exe file that comes with the download in order to install certain Microsoft C++ libraries if you've never installed any applications that require this prior to running Slate.

Documentation

Discussion

Join Slate's Discord server for discussion: https://discord.gg/ZtAAg5D

It's fine to ask questions here on GitHub as well - just create an issue and I will label it accordingly.

Donations

If you like Slate, feel free to stop by the Discord server and let me know. I'm always excited to know that people are using it.

You can also say thank you by donating via PayPal or itch.io.

Building From Source

Dependencies

  • Qt 6.5

Note that the dependencies above are for the current branch that you are viewing, and GitHub shows the master branch by default. If you want to build the latest stable release, see https://github.com/mitchcurtis/slate/tree/release#dependencies.

Cloning

master is the branch where development is done, and release is the stable branch where releases are made from. I also tag releases.

Initialise the submodules after cloning:

git submodule update --init

Building

Slate can be built with Qbs or CMake.

Qt Creator

It's recommended to build using Qt Creator for convenience.

Open slate.qbs or CMakeLists.txt in Qt Creator, configure the project using a kit with a Qt version that meets the requirement listed in the Dependencies section, and then build it.

Command Line

Qbs

First, follow Qbs' setup guide. Once you've set it up, choose one of the following approaches.

In-source builds:

cd /path/to/slate-source-dir
qbs

Shadow builds:

mkdir slate-build
cd slate-build
qbs /path/to/slate-source-dir/slate.qbs

For more information about building Qbs applications, see this page.

CMake

In-source builds:

cd /path/to/slate-source-dir
cmake .
cmake --build .

Shadow builds:

mkdir slate-build
cd slate-build
cmake /path/to/slate-source-dir
cmake --build .

To run all test cases:

cd slate-build
ctest

List of assets used in the screenshots:

OS icons taken from font-os.

slate's People

Contributors

ahmedhussein89 avatar bjorn avatar fgaz avatar lpotter avatar lzw-723 avatar mitchcurtis avatar nezticle avatar not-surt avatar peteschuster avatar swarnimarun avatar waqar144 avatar wow2006 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  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

slate's Issues

Gaps in drawing when moving the cursor quickly

#38

painting is dotted if we move to fast

This one has been around for a while. It's indeed not nice, but I also don't consider it a huge priority for Slate, as it's meant for doing up-close, pixel-by-pixel stuff, not sketches.

Layers are all screwy

  1. Copy an image from somewhere
  2. Create a new layered image project with the dimensions of that image
  3. Create a new layer and make it the active layer
  4. Paste the image into that layer
  5. Rename the layer to "tiles"
  6. Rename the first layer to "bg"
  7. Hide the "tiles" layer; the bg layer will be hidden instead
  8. Unhide the "tiles" layer; the bg layer is still hidden

Releases for Linux?

Hi, I wanted to try this editor, but I couldn't find any released binaries for Linux. I decided to try and build it myself, so I went looking for QT 5.11 โ€” turns out it's not released yet. Then I tried to build the beta release of it, and it doesn't build on Linux due to ^M characters in all the configure scripts. At this point I simply gave up.

Any chance for Linux binaries to be included in the releases?

Custom cursors lag under Linux

Using the new Linux build, I noticed that wherever Slate shows a custom cursor (a box or a cross), it lags perceptibly compared to the mouse movement.

Add auto-export feature

This per-project, opt-in feature would allow the export shortcut to automatically save (and overwrite without prompting) to a certain file. To start with, it could simply be a .png named after the .slp file.

Add ability to save after non-undoable actions

Animation playback settings are stored in each layered image project's .slp file, but they don't need to be in the undo system, as they don't affect the image itself, just its playback in the animation panel. However, currently an undoable action must be performed (e.g. hiding and showing a layer) in order to save after changing these settings.

The simplest way to achieve this might be to make Project::canSave() virtual, and then store a mMetaDataChangesMade member in LayeredImageProject, which is OR'd with the result of Project::canSave(). After a change to e.g. animation playback settings is made, mMetaDataChangesMade would be set to true, and cleared upon saving.

Add "move by" feature

To move the selection/image (all layers) by a certain amount of pixels. E.g.:

  • Edit > Move Selection By
  • Image > Move Image By

Assertion failure in ImageCanvas::updateSelectionArea()

It's happened a couple of times now, but is hard to reproduce:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff7df27e3e __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff7e066150 pthread_kill + 333
2 libsystem_c.dylib 0x00007fff7de84312 abort + 127
3 org.qt-project.QtCore 0x000000010cae97d9 qt_message_fatal(QtMsgType, QMessageLogContext const&, QString const&) + 9
4 org.qt-project.QtCore 0x000000010caeafbf QMessageLogger::fatal(char const*, ...) const + 213
5 org.qt-project.QtCore 0x000000010cae59ec qt_assert(char const*, char const*, int) + 71
6 com.yourcompany.slate 0x000000010bd3490e ImageCanvas::updateSelectionArea() + 62 (imagecanvas.cpp:1211)
7 com.yourcompany.slate 0x000000010bd39e76 ImageCanvas::mouseMoveEvent(QMouseEvent*) + 422 (imagecanvas.cpp:2175)
8 org.qt-project.QtQuick 0x000000010d1ed2dd QQuickItem::event(QEvent*) + 173
9 org.qt-project.QtWidgets 0x000000010bf3a62d QApplicationPrivate::notify_helper(QObject*, QEvent*) + 269
10 org.qt-project.QtWidgets 0x000000010bf3b9ca QApplication::notify(QObject*, QEvent*) + 362
11 org.qt-project.QtCore 0x000000010ccb0048 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 168
12 org.qt-project.QtQuick 0x000000010d203482 QQuickWindowPrivate::deliverMouseEvent(QQuickPointerMouseEvent*) + 578
13 org.qt-project.QtQuick 0x000000010d2051e2 QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent*) + 98
14 org.qt-project.QtQuick 0x000000010d205e7f QQuickWindowPrivate::handleMouseEvent(QMouseEvent*) + 1743
15 org.qt-project.QtGui 0x000000010c58ec25 QWindow::event(QEvent*) + 261
16 org.qt-project.QtQuick 0x000000010d2019c9 QQuickWindow::event(QEvent*) + 265
17 org.qt-project.QtWidgets 0x000000010bf3a62d QApplicationPrivate::notify_helper(QObject*, QEvent*) + 269
18 org.qt-project.QtWidgets 0x000000010bf3b9ca QApplication::notify(QObject*, QEvent*) + 362
19 org.qt-project.QtCore 0x000000010ccb0048 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 168
20 org.qt-project.QtGui 0x000000010c57fd3e QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) + 3422
21 org.qt-project.QtGui 0x000000010c565adb QWindowSystemInterface::sendWindowSystemEvents(QFlagsQEventLoop::ProcessEventsFlag) + 171
22 libqcocoa.dylib 0x0000000110831bce QCocoaEventDispatcherPrivate::processPostedEvents() + 190
23 libqcocoa.dylib 0x0000000110832491 QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void*) + 33
24 com.apple.CoreFoundation 0x00007fff564df721 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17
25 com.apple.CoreFoundation 0x00007fff565990ac __CFRunLoopDoSource0 + 108
26 com.apple.CoreFoundation 0x00007fff564c2260 __CFRunLoopDoSources0 + 208
27 com.apple.CoreFoundation 0x00007fff564c16dd __CFRunLoopRun + 1293
28 com.apple.CoreFoundation 0x00007fff564c0f43 CFRunLoopRunSpecific + 483
29 com.apple.HIToolbox 0x00007fff557d8e26 RunCurrentEventLoopInMode + 286
30 com.apple.HIToolbox 0x00007fff557d8a9f ReceiveNextEventCommon + 366
31 com.apple.HIToolbox 0x00007fff557d8914 _BlockUntilNextEventMatchingListInModeWithFilter + 64
32 com.apple.AppKit 0x00007fff53aa3f5f _DPSNextEvent + 2085
33 com.apple.AppKit 0x00007fff54239b4c -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 3044
34 com.apple.AppKit 0x00007fff53a98d6d -[NSApplication run] + 764
35 libqcocoa.dylib 0x000000011083127d QCocoaEventDispatcher::processEvents(QFlagsQEventLoop::ProcessEventsFlag) + 2381
36 org.qt-project.QtCore 0x000000010ccabbce QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag) + 398
37 org.qt-project.QtCore 0x000000010ccb0741 QCoreApplication::exec() + 369
38 com.yourcompany.slate 0x000000010bd0d10e Application::run() + 30 (application.cpp:140)
39 com.yourcompany.slate 0x000000010bd8afa0 main + 112 (main.cpp:6)
40 libdyld.dylib 0x00007fff7ddd8115 start + 1

Sprite animation view

This would add some kind of animation view to the editor. If it's added as a panel on the right amongst the other panels, they'll probably have to be made collapsible to make room.

  • Only usable in image and layered image projects.
  • In layered image projects, the frame count, playback rate, etc. are stored in the .slp.
  • In layered image projects, uses flattened image as animation source.
  • Configurable frame count, playback rate (frames per second), frame width/height.
  • Playback controls: play, pause, stop, step, restart.
  • View shows which frame is currently displayed with e.g. red outline.

Unable to clone the submodules

Hi,

As mentioned in the README doc, I tried to clone the submodules, but I was getting the following errors. Could anyone please help me on this?

git submodule init
Submodule '3rdparty/pickawinner' ([email protected]:mitchcurtis/pickawinner.git) registered for path '3rdparty/pickawinner'
Submodule '3rdparty/qt-undo' ([email protected]:mitchcurtis/qt-undo.git) registered for path '3rdparty/qt-undo'

git submodule update
Cloning into 'E:/all_files/projects/qt/slate_code/slate/3rdparty/pickawinner'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:mitchcurtis/pickawinner.git' into submodule path 'E:/all_files/projects/qt/slate_code/slate/3rdparty/pickawinner' failed
Failed to clone '3rdparty/pickawinner'. Retry scheduled
Cloning into 'E:/all_files/projects/qt/slate_code/slate/3rdparty/qt-undo'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:mitchcurtis/qt-undo.git' into submodule path 'E:/all_files/projects/qt/slate_code/slate/3rdparty/qt-undo' failed
Failed to clone '3rdparty/qt-undo'. Retry scheduled
Cloning into 'E:/all_files/projects/qt/slate_code/slate/3rdparty/pickawinner'...
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:mitchcurtis/pickawinner.git' into submodule path 'E:/all_files/projects/qt/slate_code/slate/3rdparty/pickawinner' failed
Failed to clone '3rdparty/pickawinner' a second time, aborting

Add canvas size change preview

Until the crop tool is implemented, this would be a nice indicator when changing the canvas size.

E.g. dim the cropped out area.

Many issues

Compilation issues

  • explain we must install undo in Qt
  • application.cpp remove #include "url.h"

Test

Totals: 54 passed, 44 failed, 0 skipped, 0 blacklisted

Application

Qt 5.11 on Fedora 27

  • no menu
  • zooming seems buggy
  • painting is dotted if we move to fast

Scrolling is not smooth when using a mouse wheel

#38

zooming seems buggy

I'm guessing you mean that it's too slow? I changed it a while back to improve it on the MacBook touchpad, but then it started being crappy with a mouse. I need to find a sweet spot.

x/y pixel guide for selections

This would draw dotted lines along the x and y axes, intersecting at the point of the cursor to make it easier to select the right stuff with the selection tool.

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.