Code Monkey home page Code Monkey logo

pixelitor's Introduction

Latest Release Build Status

This is the source code of Pixelitor - an advanced Java image editor with layers, layer masks, text layers, 110+ image filters and color adjustments, multiple undo etc.

Contributions are welcome! See Contributing.

Starting Pixelitor in an IDE

Pixelitor requires Java 21+ to compile. When you start the program from an IDE, use pixelitor.Pixelitor as the main class.

Building the Pixelitor jar file from the command line

  1. OpenJDK 21+ has to be installed, and the environment variable JAVA_HOME must point to the OpenJDK installation directory.
  2. Install Maven
  3. Check the Maven installation with mvn --version
  4. Execute mvn clean package in the main directory (where the pom.xml file is), this will create an executable jar in the target subdirectory. If you didn't change anything, or if you only changed translations/icons, then you can skip the tests by running mvn clean package -Dmaven.test.skip=true instead.

Translating the Pixelitor user interface

See Translating.

pixelitor's People

Contributors

albanobattistella avatar alexax66 avatar angalq avatar anthonyyhl avatar ayushh1023 avatar dependabot-preview[bot] avatar dependabot[bot] avatar lbalazscs avatar linuxbeaver avatar lucasthecure avatar minecraftian14 avatar mohrjonas avatar nbenitez avatar patlabgit avatar vistaus 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

pixelitor's Issues

Layout elements does not shown when user press the Tab key

Severity: Minor
Priority: Low
Reproducibility: Always
Environment: Pixelitor 4.2.0, Windows 10 x64, Java 1.8.0_221
Steps to reproduce:
1) Run the Pixelitor
2) Press the Tab key 3-5 times
Actual result: Hidden layout elements not showing
Expected result: Hidden layout elements are shown

Incorrect work of "Paint Bucket Tool"

Reproducibility: Always
Severity: Major
Priority: High
Software:
Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_181

Description:
Paint Bucket Tool fills the area with black color and the rest of the empty area together. With other colors, which I used, everything is done correctly.

Steps to reproduce:

  1. Create a new picture following example:
    Example
  2. Select the "Paint Bucket Tool".
  3. Press on the area with black color.
    Example1
  4. Press "CTRL + Z".
  5. Press on the area with another color.
    Example2

"Ctrl-Z" does not work after using the "Crop tools" tool

Reproducibility: Always
Severity: Minor
Priority: Medium
Software:
Pixelitor 4.2.0
Windows 10 64 Bit
Java Version 1.8.0_221
Description:
after using the "Crop tools" tool you can not use the keyboard shortcut "Ctrl + Z" to cancel the action

Steps to reproduce:

  1. Create a new picture with an arbitrary size and color background. For example: size-500px *500 px, background color-white
  2. Select the "Crop tools"
  3. Crop with image
  4. Press "CTRL + Z"

No tooltip for erasing pixels along the line for Eraser Tool

Description: There is no tooltip in the status bar stating that it is possible to erase everything between two points with the Eraser Tool using Shift+Click
Actual result: When selecting the Eraser Tool, no tooltip stating that it is possible to erase along the line with a Shift+Click is shown in the status bar.
Expected result: When selecting the Eraser Tool, a tooltip stating that it is possible to erase along the line with a Shift+Click is shown in the status bar.

Steps to reproduce:

  1. Open the application.
  2. If the status bar is hidden, select ‘View’ -> ‘Show Status Bar’.
  3. Select Eraser Tool.
    Defect: The tooltip in the status bar contains only the words ‘Eraser Tool: click and drag to erase pixels.’

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Unfriendly behaviour

Workaround: None

Comments: ‘Medium’ severity was selected because the feature might be useful to a user, but there is no way to learn about it unless they discover it empirically, which worsens user experience.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
The tooltip for the Eraser Tool
P_006_1
Results of using the feature on a white background
P_006_2

Program error when the "Out of memory error" is received while copying a layer

Severity: Minor
Priority: Medium
Reproducibility: Always
Environment: Pixelitor 4.2.0, Windows 10 x64, Java 1.8.0_221
Steps to reproduce:

  1. Run the Pixelitor
  2. Click on the tab "File" and select "Open" in the drop-down list
  3. In the window that opens, find the path to the attached image and select it
  4. Press the button "Open"
  5. Press the button "Duplicates the active layers" located at the bottom of the layout elements "Layers"
  6. Press the button "OK" in the "Out of memory error" window

Actual result: Program error message appeared
Message: java.lang.NullPointerException Level: SEVERE Stack Trace: null java.awt.image.DirectColorModel.isCompatibleRaster(Unknown Source) java.awt.image.BufferedImage.<init>(Unknown Source) pixelitor.utils.ImageUtils.copyImage(ImageUtils.java:649) pixelitor.layers.ImageLayer.duplicate(ImageLayer.java:245) pixelitor.layers.ImageLayer.duplicate(ImageLayer.java:71) pixelitor.Composition.duplicateActiveLayer(Composition.java:335) pixelitor.layers.DuplicateLayerAction.actionPerformed(DuplicateLayerAction.java:47) javax.swing.AbstractButton.fireActionPerformed(Unknown Source) javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) javax.swing.DefaultButtonModel.setPressed(Unknown Source) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) java.awt.Component.processMouseEvent(Unknown Source) javax.swing.JComponent.processMouseEvent(Unknown Source) java.awt.Component.processEvent(Unknown Source) java.awt.Container.processEvent(Unknown Source) java.awt.Component.dispatchEventImpl(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Window.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.EventQueue.dispatchEventImpl(Unknown Source) java.awt.EventQueue.access$500(Unknown Source) java.awt.EventQueue$3.run(Unknown Source) java.awt.EventQueue$3.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue$4.run(Unknown Source) java.awt.EventQueue$4.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue.dispatchEvent(Unknown Source) java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.run(Unknown Source)
Expected result: Program error message does not appear
Attachments: 15000px*5052px
2893346171_11a4df8533_o

No error message when rewriting a file with the ‘read-only’ attribute

Description: When trying to replace a file with the ‘read-only’ attribute with its modified version, the application does not show an error message stating that it is impossible to modify the initial file. Instead, it states that the changes were saved successfully. If the modified file is closed and opened again, all changes are lost.
Actual result: the application does not show an error message saying that it is impossible to modify the file with the ‘read-only’ attribute and displays a message ‘ was saved’ in the status bar at the bottom of the window.
Expected result: the application shows a message stating that the chosen file is read-only and proposes to save the file under another name.

Steps to reproduce:

  1. Prepare and open a graphic file with the ‘read-only’ attribute.
  2. Modify it using any tool (e.g. using the Brush Tool and doing several strokes across the picture) and select ‘File’ -> ‘Save As…’.
  3. Find the initial graphic file on the disk and choose to overwrite it.
    Defect: the application closes the ‘Save As’ window and show a message ‘ was saved.’ in the status bar at the bottom of the window.

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Data corruption/loss

Workaround: None

Comments: This bug might pose a serious threat due to the fact that a user might unknowingly spend a lot of time modifying a read-only file and lose all progress after overwriting the initial file. If a modified file is saved under another name, everything works as intended.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Tools from the toolbar do not work after use of keyboard shortcuts «Alt + space»

After starting the application and pressing the key combination “Alt + Space”, work with the toolbar becomes inactive. Only restarting the application solves the problem.
Steps to reproduce:

  1. Run the application
  2. Open a file of any extension
  3. Press the keyboard shortcut "Alt + Space"
  4. Close the popup menu
  5. Select any tool from the toolbar
  6. Take an action to edit the image
    Result: Nothing happens when you try to edit the image.
    Expected Result: Image editing works.
    Restarting the application solves the problem.

Test environment: Windows 10 Home 64-bit, Pixelitor 4.2.0, Java Version 8.

Using TAB for switching Show Hidden/Hide All doesen't work after 3 switching

Reproducibility: Always
Severity: Minor
Priority: Medium
Software:
Pixelitor 4.2.0
Windows 10 64 Bit
Java Version 1.8.0_221

Description:
It is imposible to use TAB for switching Show Hidden/Hide All after 3 switching

Steps to reproduce:
1.Run Pixelitor
2.Press TAB >3 times

Expected Result:
Possibility of switching Show Hidden/Hide All by press TAB

Actual Result:
Impossible to switching Show Hidden/Hide All by press TAB

Colour selection buttons are hidden behind status bar

Description: The Set Foreground Color and Set Background Color tools are partly hidden behind the status bar when the application window is maximized on 15” display, 1366x768 resolution.
Actual result: the Set Foreground Color and Set Background Color tools are difficult to access.
Expected result: the whole tool bar is resized to fir the window size or the scroll bar appears to scroll through the tool bar.

Steps to reproduce:

Preparation: Use a 15 “ display with 1366x768 resolution.

  1. Open the application and click ‘Maximize’.
  2. Look at the bottom-left corner of the window.
    Defect: the Set Foreground Color and Set Background Color tools are partly hidden behind the status bar.

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Unfriendly behaviour

Workaround: None

Comments: Tested on: 15” display, 1366x768 resolution, Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
P_008

Application’s tools stop working after opening system menu

Description: if, while working in the application, a combination of keys ‘Alt+Space’ is pressed (opening the application’s system menu), then all of the following tools stop working: Move Tool, Crop Tool, Selection Tool, Brush Tool, Clone Stamp Tool, Eraser Tool, Smudge Tool, Gradient Tool, Paint Bucket Tool, Color Picker Tool, Pen Tool, Shapes Tool, Hand Tool and Zoom Tool.
Actual result: after closing the system menu, the tools stop working.
Expected result: after closing the system menu, the tools work correctly.

Steps to reproduce:

  1. Create or open a file.
  2. Press Alt+Space to open the system menu and close it.
  3. Select a tool and use it (e.g. by pressing left mouse button and dragging the cursor across the screen).
    Defect: any chosen tool is not working unless the application is restarted.

Reproducibility: Always

Severity: Major

Priority: Normal

Symptom: System crash

Workaround: None

Comments: System menu, opened via clicking the left mouse button in the top-left corner of the application window, does not stop the tools from working.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Saving file with special characters < and > in "File Name" field.

Severity: Minor.
Frequency: Always.
Priority: Low.
Environment: Windows 7 x64, Java 1.8.0_221, Pixelitor 4.2.0.
Action performed:

  1. Run the Pixelitor.
  2. Click on "File" and choose the "New Image...".
  3. Click "Ok".
  4. Click on "File" and choose the "Save As...".
  5. Enter text with special character '<' or '>' in "File Name" field, for example "test>".
  6. Choose the type of the file, for example "JPEG files".
  7. Choose the location to save the file.
  8. Click "Save".

Actual result: An inscription appeared that the file was saved successfully, but it is not.
Expected result: Impossible to click "Save" button, if forbidden special characters are used in the "File Name" field.

FileSave

Tool hotkeys do not work with Cyrillic keyboard layout

Description: When working with the application, tool hotkeys do not work if a Cyrillic keyboard layout is turned on.
Actual result: tool hotkeys do not work with Cyrillic keyboard layout on.
Expected result: tool hotkeys properly work with Cyrillic keyboard layout on.

Steps to reproduce:

  1. Install, if needed, a Cyrillic (e.g. Russian) keyboard layout.
  2. Create a new file in the application.
  3. Switch to the Cyrillic keyboard.
  4. Press a hotkey for a tool (e.g. E for Eraser Tool or P for Pen Tool).
    Defect: a corresponding tool does not become active if Cyrillic keyboard layout is on.

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Unexpected behaviour

Workaround: Switching back to any Western keyboard layout solves the issue.

Comments: Keyboard shortcuts, such as ‘Save As…’ (Ctrl+Shift+S), ‘Copy Layer’ (Ctrl+C), ‘Invert’ (Ctrl+I) etc., work properly with the Cyrillic keyboard, though.
The defect was tested on the Russian keyboard layout.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

"Circles" brush problem.

Reproducibility: Always
Severity: Minor
Priority: Low
Software: Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_201

Description:
Undoing "circles" brush leaves traces behind. It might be related to "Radius depends on mouse speed" brush setting. With it disabled, undoing this brush works as intended.

Steps to reproduce:

  1. Use "Circles" brush to draw something on the canvas.
  2. Press ctrl+z to undo it. Undoing leaves traces of the brush behind.
  3. Disable "Radius depends on mouse speed" setting.
  4. Draw on canvas. Undoing works as intended.

Build instructions

Hi,

there has been a request to published Pixelitor for Ubuntu.

Now I have problems creating a jar file from source. There are no build instructions.

Tried to compile the sources but I don't know how to create the jar file:

$ find src/main -name "*.java" > sources.txt
$ javac -classpath "/usr/share/java/junit-3.8.2.jar:/usr/share/java/openjfx/jre/lib/ext/jfxrt.jar:." @sources.txt

Program error when opening GIF with transparent background

Severity: Minor
Priority: Medium
Reproducibility: Always
Environment: Pixelitor 4.2.0, Windows 10 x64, Java 1.8.0_221
Steps to reproduce:
1) Run the Pixelitor
2) Click on the tab "File" and select "Open" in the drop-down list
3) In the window that opens, find the path to the image with a transparent background and select it
4) Press the button "Open"
Actual result: Program error message appeared
Message: java.lang.ArrayIndexOutOfBoundsException: 4096 Level: SEVERE Stack Trace: 4096 com.sun.imageio.plugins.gif.GIFImageReader.read(Unknown Source) pixelitor.io.TrackedIO.readFromIIS(TrackedIO.java:136) pixelitor.io.TrackedIO.read(TrackedIO.java:105) pixelitor.io.TrackedIO.uncheckedRead(TrackedIO.java:93) pixelitor.io.OpenSave.lambda$loadSimpleFile$1(OpenSave.java:84) java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source)
Expected result: The message about format is incorrect

Negative number of "Undo/Redo Levels".

Severity: Minor.
Frequency: Always.
Priority: Low.
Environment: Windows 7 x64, Java 1.8.0_221, Pixelitor 4.2.0.
Action performed:

  1. Run the Pixelitor.
  2. Click on "Edit" and choose the "Preferences...".
  3. Enter a negative number to "Undo/Redo Levels" field , for example -1.
  4. Click "Close".

Actual result: There are no limits of the usage "Undo"/"Redo" buttons.
Expected result: There is validation on non-negative "Undo/Redo Levels" values.

UndoRedo Levels

The undo function when editing an image cancels only 5 actions

Reproducibility: always
Severity: Significant
Priority: High
Software:
Pixelator 4.2.0
Windows 10 64 bit
Java Version 1.8.0_201
Description:

The features of the application indicate unlimited cancellation of the changes. The undo tool cancels only 5 actions

Playback Actions:

  1. Create a new image
  2. Select Crop Tools
  3. Draw 6 lines
  4. Press "CTRL + Z" 6 times

Expected Result:

Cancel all changes

The result obtained:

Cancel only 5 actions

Bug in the Inner Glow effect for text

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S3 Major
Priority: P1 High
Component: FUNCTIONAL

Summary:
Bug in the Inner Glow effect for text. Inner glow goes out of the text frame, while these frame become visible on the image.

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding and editing text (Filter -> Text...).
  4. Add text and enable the Inner Glow effect.
  5. Set the Opacity and Width to 100.

Expected result:
Inner glow should not goes out of the text frame.

Link (screenshots/video):
https://yadi.sk/i/OMOtYBuyFjS_Aw

"Сtrl-Z" does not work correctly when undoing a mirror Brush Tool

Software:
Pixelitor 4.2.0
Windows 10 x64
Java Version 1.8.0
Description: "Сtrl-Z" does not work correctly when undoing a mirror brush,
If you make one click of the mirror brush, then ctrl-z will erase only one point

Steps:

  1. Сhoose Brush Tool
  2. Сhoose a mirror (any)
  3. Click on any area without moving the mouse

Reproducibility: Always

Severity: Medium

Priority: Normal

Video: https://drive.google.com/file/d/12I0aQIGxOW3_Q1fo9GhZlF0WkIIuvnLb/view?usp=sharing

Comments: The eraser also behaves.

Direction of Motion Blur filter is inverted when filter quality changes

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S3 Major
Priority: P1 High
Component: FUNCTIONAL

Summary:
The direction of the Motion Blur filter is inverted when filter quality changes from Faster to High (and vice versa).

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Draw something to understand how the filter works.
  4. Open the interface of the Motion Blur filter (Filter -> Blur/Sharpen -> Motion Blur...).
  5. Set the Distance values to 200 and Direction to 135.
  6. Change Quality from Faster to High (and vice versa).

Expected result:
The direction of the filter should not change when the quality changes.

Link (screenshots/video):
https://yadi.sk/i/FQJzbvnmJmO2Ng

Problem with holding "SPACE" down to move the entire selection

Reproducibility: Always
Severity: Major
Priority: High
Software:
Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_181

Description:
Holding "SPACE" down to move the entire selection in Crop, Selection and Shapes Tools don't work on the laptops touchpad. I checked it on two laptops with high and low characteristics, but the same manufacturer Lenovo. May be it's hardware problem of laptops of this manufacturer.

Steps to reproduce:

  1. By mouse.
    Mouse.zip
  2. By laptops touchpad.
    Touchpad.zip

UTF-8 encoding not supported when insert text

When inserting text in Cyrillic through Filter -> text, rectangles are displayed on the image
Steps:

  1. Run the application and open the file
  2. Open text insertion function Filter->Text
  3. In the Text field, enter the word in Cyrillic

Result: The image shows rectangles (encoding error)
Expected Result: Cyrillic Text Displayed on Image

Screenshot:
Screenshot_1
Test environment: Windows 10 Home 64-bit, Pixelitor 4.2.0, Java Version 8.

There are no finite canvas size values when creating a new image

Reproducibility: always
Severity: Minor
Priority: Medium
Software:
Pixelator 4.2.0
Windows 10 64 bit
Java Version 1.8.0_201
Description:

When creating a new image, the program did not set the final value of the canvas size.

Playback Actions:

1.Create a new image
2. Enter value "99999" in the "Width" field
3. Enter value "99999" in the "Height" field
4. Press "OK" button

Expected Result:

Show error message with maximum field values

The result obtained:

Java error about lack of memory
Closing the application

Missing brush outline when using the " Brush Tool"

Reproducibility: Always
Severity: Major
Priority: Medium
Software:
Pixelitor 4.2.0
Windows 10 64 Bit
Java Version 1.8.0_221
Description:
When you use the Brush element, there is no outline around the element in the work area

Steps to reproduce:

  1. On the toolbar, select brush tool
  2. Move the cursor to workspace
  3. There is no outline of the brush tool on the workspace
    Screenshot_1

IllegalArgumentException: Window must not be zero with Java 10 and Java 11

I get the following exception when trying to run Pixelitor using Java 10 and Java 11.

Dialogs.showExceptionDialog: Exception in the thread 'AWT-EventQueue-0'
java.lang.ExceptionInInitializerError
	at pixelitor.gui.PixelitorWindow.getInstance(PixelitorWindow.java:151)
	at pixelitor.Pixelitor.createAndShowGUI(Pixelitor.java:101)
	at pixelitor.Pixelitor.lambda$main$0(Pixelitor.java:84)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.IllegalArgumentException: Window must not be zero
	at java.desktop/sun.awt.X11.XAtom.checkWindow(XAtom.java:774)
	at java.desktop/sun.awt.X11.XAtom.getAtomData(XAtom.java:465)
	at java.desktop/sun.awt.X11.XToolkit.getWorkArea(XToolkit.java:805)
	at java.desktop/sun.awt.X11.XToolkit.getInsets(XToolkit.java:881)
	at java.desktop/sun.awt.X11.XToolkit.getScreenInsets(XToolkit.java:869)
	at java.desktop/sun.java2d.SunGraphicsEnvironment.getUsableBounds(SunGraphicsEnvironment.java:260)
	at java.desktop/sun.awt.X11GraphicsEnvironment.getXineramaWindowBounds(X11GraphicsEnvironment.java:390)
	at java.desktop/sun.awt.X11GraphicsEnvironment.getMaximumWindowBounds(X11GraphicsEnvironment.java:314)
	at pixelitor.utils.AppPreferences.loadFramePosition(AppPreferences.java:133)
	at pixelitor.gui.PixelitorWindow.<init>(PixelitorWindow.java:69)
	at pixelitor.gui.PixelitorWindow.<init>(PixelitorWindow.java:45)
	at pixelitor.gui.PixelitorWindow$PixelitorWindowHolder.<clinit>(PixelitorWindow.java:158)
	... 16 more
java.lang.NoClassDefFoundError: Could not initialize class pixelitor.gui.PixelitorWindow$PixelitorWindowHolder
	at pixelitor.gui.PixelitorWindow.getInstance(PixelitorWindow.java:151)
	at pixelitor.utils.test.RandomGUITest.stop(RandomGUITest.java:217)
	at pixelitor.gui.utils.Dialogs.showExceptionDialog(Dialogs.java:193)
	at pixelitor.gui.GUIMessageHandler.showException(GUIMessageHandler.java:79)
	at pixelitor.utils.Messages.showException(Messages.java:69)
	at pixelitor.ExceptionHandler.uncaughtException(ExceptionHandler.java:48)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1055)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1050)
	at java.desktop/java.awt.EventDispatchThread.processException(EventDispatchThread.java:222)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:214)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Java 10 version:

java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

Java 11 version:

java version "11" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Rotation angle on the slider is not reset

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S4 Minor
Priority: P3 Low
Component: FUNCTIONAL

Summary:
Rotation angle on the slider (in the Text adding and editing interface) is not reset when pressing the Reset button when the value in the cell is 360 (important: the value was entered with the mouse by moving the slider).

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding and editing text (Filter -> Text...).
  4. In the Rotation field, use mouse to move slider to value 360.
  5. Try to reset the value by clicking on the Reset button on the right.

Expected result:
The value of the rotation angle in the cell should be reset to 0.

Link (screenshots/video):
https://yadi.sk/i/yOJG2LGDg3nWGQ

Additional Info:
These 2 bugs are available on the same sliders in the next filter interfaces: [Motion Blur], [Swirl, Pinch, Bulge], [Underwater], [Glass Tiles], [Polar Glass Tiles -> Configure [Background]], [Polar Coordinates], [Wrap Around Arc], [Kaleidoscope], [Slice], [Cells], [Marble], [Wood], [Checker Pattern], [Starburst], [Emboss], [Random Spheres], [Smear], [Striped Halftone], [Transform Layer], [Color Wheel], [Text].

Brush tool replaces foreground colour on Alt+Left or Right mouse button click

Description: While using the Brush Tool, an Alt+Left mouse button click or Alt+Right mouse button click anywhere in the current working area replaces the foreground colour of the brush with the colour that was under the cursor.
Actual result: the foreground color is replaced with the colour that was under the cursor when Alt+Left/Right mouse button was pressed (if the cursor was in the working area).
Expected result: nothing happens when on Alt+Left or Right mouse button click.

Steps to reproduce:

  1. Open a new file with a white background.
  2. Select the Brush Tool.
  3. Press D to Reset default colours (Foreground: Black, Background: White).
  4. Alt+Left mouse button click on the white background in the working area.
  5. Check that the foreground colour square in the bottom left has become white.
  6. Use Paint Bucket Tool and select any non-black and non-white colour, fill the working area.
  7. Press D to Reset default colours (Foreground: Black, Background: White).
  8. Select the Brush Tool.
  9. Alt+Right mouse button click in the working area.
  10. Check that the foreground colour square in the bottom left has become the same colour as the colour used to fill the area.
    Defect: the foreground colour is replaced with the colour that was under the cursor in the moment of the Alt+Left/Right mouse button click.

Reproducibility: Always

Severity: Minor

Priority: Normal

Symptom: Unexpected behaviour

Workaround: None

Comments: Was not sure if this is a bug, but as it is not stated in the status bar tooltip of the Brush Tool and it defies the whole purpose of the Color Picker Tool, it was decided to report it as a bug.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
The feature is not stated in the tooltip in the status bar
P_005

Unexpected resizing of a drawn shape using the Shapes Tool

Description: When using ‘Drag from the center’ (hold Alt with Left mouse button) and ‘Move the shape’ (hold Space with Left mouse button) features of the Shapes Tool in combination, an unexpected resizing of the desired shape was encountered. When the shape is configured and placed as desired, and the buttons are released, it shrinks as if the Alt button was not pressed.
Actual result: the desired shape shrinks while staying in place it was moved to.
Expected result: the desired shape retains its configuration and position.

Steps to reproduce:

  1. Create or open a file.
  2. Select the Shapes Tool.
  3. Press and hold Alt, then press and hold Left mouse button and drag the mouse to determine the configuration of a shape.
  4. While holding Alt+Left mouse button, press and hold Space to move the shape around.
  5. Release Alt and Space to leave the shape in the desired location.
  6. Without moving the mouse, release Left mouse button.
    Defect: the shape shrinks while staying in place it was moved to.

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Unexpected behaviour

Workaround: None

Comments: Releasing all the buttons (Alt, Space and Left mouse button) at the same time might lead to opening of the application’s system menu with consequent crash described in the issue #29.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
Holding Alt+Space+Left mouse button
P_004_1
After releasing the buttons
P_004_2

Random crashes on Flurry 2D Transition

2D Transition - Flurry with progress 0% sometimes crashes with the following error:

Message:
    java.lang.IllegalStateException: Error while running the filter '2D Transitions'
Stack Trace:
Error while running the filter '2D Transitions' composition = '0_2fd2b_f1fa0aad_L.jpg' layer = 'layer 1' (ImageLayer) hasMask = 'false' mask editing = 'false'
    pixelitor.filters.Filter.transformAndHandleExceptions(Filter.java:132)
    pixelitor.filters.Filter.lambda$run$0(Filter.java:85)
    ...
    java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Comparison method violates its general contract!
    java.base/java.util.TimSort.mergeLo(Unknown Source)
    java.base/java.util.TimSort.mergeAt(Unknown Source)
    java.base/java.util.TimSort.mergeCollapse(Unknown Source)
    java.base/java.util.TimSort.sort(Unknown Source)
    java.base/java.util.Arrays.sort(Unknown Source)
    com.bric.image.transition.FlurryTransition2D.getInstructions(FlurryTransition2D.java:182)
    com.bric.image.transition.Transition2D.doPaint(Transition2D.java:47)
    com.bric.image.transition.AbstractTransition.paint(AbstractTransition.java:97)
    pixelitor.filters.impl.BricTransitionFilter.filter(BricTransitionFilter.java:215)
    pixelitor.filters.Transition2D.doTransform(Transition2D.java:93)

Same problem on Java 8.

Program error when activate the "Pixel Grid" without opening image.

Severity: Minor.
Frequency: Always.
Priority: Low.
Environment: Windows 7 x64, Java 1.8.0_221, Pixelitor 4.2.0.
Action performed:

  1. Run the Pixelitor.
  2. Click on "View" and choose the "Show Pixel Grid".

Actual result: Program error message appeared.
Expected result: The field "Show Pixel Grid" is unavailable while image not opened.

Program error

Strikethrough, Underline, Kerning and Ligatures functions do not work for text effects

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S3 Major
Priority: P2 Medium
Component: FUNCTIONAL

Summary:
Strikethrough, Underline, Kerning and Ligatures functions do not work for text effects. This is very clearly seen in the Drop Shadow and Glow effects. For this reason, defects may appear in the text with the shadow/glow turned on, due to the kerning font and the shadow/glow out of sync, for which the kerning function does not work.

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding and editing text (Filter -> Text...).
  4. Add text and enable the effects of Glow, Inner Glow, Neon Border, Drop Shadow.
  5. Open advanced text settings (Advanced...).
  6. Add to text Strikethrough, Underline, Kerning, Ligatures.

Expected result:
Strikethrough, Underline, Kerning and Ligatures for text should work on text effects.

Link (screenshots/video):
https://yadi.sk/i/JCDOw9buCCCugw

Source point on image is not displayed when using clone stamp tool

Reproducibility: always
Severity: Minor
Priority: Medium
Software:
Pixelator 4.2.0
Windows 10 64 bit
Java Version 1.8.0_201
Description:

When using the Clone Stamp tool the source’s place, it is necessary to pick out it with an additional mark, otherwise using the tool becomes difficult

Playback Actions:

1.Create a new image
2.Draw line with "Brush tool"
3.Choose "Clone Stamp Tool"
4. Using ALT-CLICK, click on colored line
5. Using CLICK on white place

Expected Result:

Showed "+" mark on changeable place and source place

The result obtained:

Showed "+" mark only on changeable place

Fields in the palette use default system language

Description: Clicking on the foreground colour at the bottom of the toolbar opens a menu called ‘Set Foreground Color’ where the names of the fields responsible for Hue, Saturation, Brightness, Red, Green and Blue use system display language for their names.
Actual result: ‘Тон’, ‘Насыщенность’, ‘Яркость’, ‘Красный’, ‘Зелёный’ and ‘Синий’ (Russian words).
Expected result: ‘Hue’, ‘Sat’, ‘Bri’, ‘Red’, ‘Green’ and ‘Blue’ as in all other menus of the application.

Steps to reproduce:

  1. Set system display language to non-English language and follow the instructions for the changes to come into effect.
  2. In the application, click on the Foreground color icon in the bottom left of the screen.
  3. Check the names of the fields.
    Defect: the field names responsible for Hue, Saturation, Brightness, Red, Green and Blue use system display language.

Reproducibility: Always

Severity: Minor

Priority: Normal

Symptom: Cosmetic flaw

Workaround: Set system display language to English.

Comments: Affects only said menu, other menus and hints are still in English.
Tested on: Windows 10 Pro 64-bit with Russian and English display language, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
The menu with Russian system display language
P_007_1
The menu with English system display language
P_007_2

"Connect" brush problem.

Reproducibility: Always
Severity: Minor
Priority: Low
Software: Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_201

Description:
Undoing "Connect" brush doesn't work as intended. Lines get thicker each time you undo.

Steps to reproduce:

  1. Use "Connect" brush to draw something on the canvas.
  2. Press ctrl+z to undo it.
  3. Repeat steps 1 and 2 several times. Each time drawn line will get thicker.
  4. Open new image and draw with "Connect" brush in it.
  5. Switch back to original image. Brush will create thin lines as expected.

Arrange windows not working

Description: An error is displayed when trying to arrange windows.
Expected Result: Several windows will merge into 1 side by side.

Playback Actions:

Open the application and open some photos.
click view and select any of the items in the arrange windows line.
Defect: Error is issued

Reproducibility: always

Severity: medium

Priority: Normal

Symptom: Unfriendly Behavior

Workaround: No

Comments: Checked: 64-bit version of Windows 10 Pro, Pixelitor 4.2.0, Java update version 8 221.

Attachments:
image

Incorrect work of "Gradient Tool"

Reproducibility: Always
Severity: Major
Priority: High
Software:
Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_181

Description:
Gradient Tool fills the empty area in black color and after undone of creating of gradient in the window of layers on this layer background remains filled in black color and gradient effect.

Steps to reproduce:

  1. Create a new picture following example:
    Bug2_1
  2. Select the "Gradient Tool".
    3.Click and drag to draw gradient anywhere.
    Bug2_2
  3. Press "CTRL+Z".
    Bug2_3

Incorrect operation of the "Clone Stamp tool" after changing the brush radius

Reproducibility: Always
Severity: Major
Priority: Medium
Software:
Pixelitor 4.2.0
Windows 10 64 Bit
Java Version 1.8.0_221
Description:
After changing the brush radius while using the clone stamp tool, the cloning center is shifted

Steps to reproduce:

  1. Create a new picture with an arbitrary size and color background. For example: size-500px *500 px, background color-white
  2. Select the "brush tool". Select the settings "brush tool". Example: Radius-75, Brush-Hard
  3. Draw a circle anywhere in the workspace. For example: bottom left
  4. On the toolbar, select "Clone Stamp tool". Select the settings "Clone Stamp tool". Example: Radius-20, Brush-Hard
  5. Hold down " Alt " and press the cursor on the center of the black circle
  6. Draw a circle using the “clone stamp tool” in the upper right of the work area
  7. Change brush radius to 50
  8. Draw a circle in the same place using the "clone stamp tool"
  9. There was an offset image

the result of a bug in the screenshot:
Screenshot_3

Rotation angle slider is reset to 0

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S4 Minor
Priority: P3 Low
Component: VISUAL

Summary:
Rotation angle slider (in the Text adding and editing interface) is reset to 0 when you manually specify a 360 value in cell (you can enter 360 manually and press Enter or increase the value to 360 by clicking on the ↑ button). However, the value in the cell remains unchanged, this is a visual bug.

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding and editing text (Filter -> Text...).
  4. In the Rotation field, manually enter 360 into the angle cell and press Enter, or increase the value to 360 by clicking on the ↑ button.
  5. Watch the slider reset to 0 with the actual value of 360 in the cell.

Expected result:
The slider should remain at 360.

Link (screenshots/video):
https://yadi.sk/i/tSrjplLD47aT9g

Additional Info:
These 2 bugs are available on the same sliders in the next filter interfaces: [Motion Blur], [Swirl, Pinch, Bulge], [Underwater], [Glass Tiles], [Polar Glass Tiles -> Configure [Background]], [Polar Coordinates], [Wrap Around Arc], [Kaleidoscope], [Slice], [Cells], [Marble], [Wood], [Checker Pattern], [Starburst], [Emboss], [Random Spheres], [Smear], [Striped Halftone], [Transform Layer], [Color Wheel], [Text].

Bug in displaying strikethrough and underline text when glow effects are enabled

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S3 Major
Priority: P2 Medium
Component: VISUAL

Summary:
Bug in displaying strikethrough and underline text when glow effects are enabled. Strikethrough and underline lines are in the background and are not visible enough with certain glow settings.

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding and editing text (Filter -> Text...).
  4. Add text and enable the effects of Glow, Inner Glow, Neon Border, Drop Shadow.
  5. Open advanced text settings (Advanced...).
  6. Add to text Strikethrough and Underline.

Expected result:
Strikethrough and Underline should not be in background.

Link (screenshots/video):
https://yadi.sk/i/-TyQ2xsZS2Dktw

In the Guides interfaces when scaling the window there are problems with the display of text

Pixelitor version: 4.2.1
Java version: 1.8.0_221
OS: Windows 10 x64

Severity: S4 Minor
Priority: P3 Low
Component: UI

Summary:
In the interfaces [Add Horizontal Guide], [Add Vertical Guide], [Add Grid Guides] when scaling the window there are problems with the display of text. The text is superimposed on each other.

Steps to reproduce:

  1. Run the Pixelitor.
  2. Create a new image (Ctrl + N).
  3. Open the interface for adding horizontal guide (View -> Add Horizontal Guide...).
  4. Reduce window size.

Expected result:
Texts, sliders and other elements in interface should not be scaled when the window is reduced in size.

Link (screenshots/video):
https://yadi.sk/i/GqxOYNhS8r1xKg

Reload and Undo issue

Reproducibility: Always
Severity: Minor
Priority: Low
Software: Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_201

Description:
Parts of old image show up when drawing on canvas after working with brushes, then reloading image and undoing reload.

Steps to reproduce:

  1. Use brush to draw something on the canvas.
  2. Reload image.
  3. Press ctrl+z to undo reload. Image will still look like it was originally.
  4. Draw something with brush of different color. You will see parts of old image.

Window maximization is not saved between sessions

Description: Every time the application is launched, its window is opened as ‘Normal window’ (does not fill the whole screen). If it is maximized, closed and then the application is launched again, the window will not be maximized.
Actual result: the window does not fill the screen after maximizing it and launching the application again.
Expected result: window maximization state is saved between sessions.

Steps to reproduce:

  1. Open the application and press ‘Maximize’ in the title bar.
  2. Close application and open it again.
    Defect: the window is not maximized when launching the application again.

Reproducibility: Always

Severity: Minor

Priority: Normal

Symptom: Unfriendly behaviour

Workaround: None

Comments: If the window is not maximized and its size is changed, the window size is saved between sessions.
Also, even if the ‘Run’ setting in the application settings was changed to ‘Maximized’, the window will open as the ‘Normal window’ next time the application is launched.
Tested on: Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Null error in "View->Arrange windows" options

Reproducibility: Always
Severity: Minor
Priority: Low
Software: Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_201

Description:
Going View-Arrange windows and choosing either "Cascade" or "Tile" options throws Null error.

Steps to reproduce:

  1. Go View->Arrange windows->Cascade or Go View->Arrange windows->Tile

Incomplete tooltips for Selection, Crop and Pen tools

Description: The status bar tooltips for Selection Tool, Crop Tool and Pen Tool are incomplete on 15” display, 1366x768 resolution.
Actual result: tooltip text is cut off where it does not fit into the size of the window.
Expected result: a hint with the tooltip text is shown when the cursor is on it or the tooltip scrolls under the cursor to show the complete text.

Steps to reproduce:

Preparation: Use a 15 “ display with 1366x768 resolution.

  1. Open the application and select Selection, Crop and Pen tools.
  2. Look at the status bar.
    Defect: the tooltips for Selection Tool, Crop Tool and Pen Tool do not provide full information about the tools.

Reproducibility: Always

Severity: Medium

Priority: Normal

Symptom: Unfriendly behaviour

Workaround: None

Comments: Tested on: 15” display, 1366x768 resolution, Windows 10 Pro 64-bit, Pixelitor 4.2.0, Java Version 8 update 221.

Attachments:
Tooltip for Selection Tool
P_009_1
Tooltip for Crop Tool
P_009_2
Tooltip for Pen Tool
P_009_3

There are no scrollbars when scaling application window.

Severity: Minor.
Frequency: Always.
Priority: Low.
Environment: Windows 7 x64, Java 1.8.0_221, Pixelitor 4.2.0.
Action performed:

  1. Run the Pixelitor.
  2. Change the horizontal and\or vertical window scale.

Actual result: There are no any scrollbars and the application window is cropped.
Expected result: There are scrollbars and scrolling the application window is possible.

Scrollbars

On resolution 1366x768 not available icon "Set Background Color" in Tool me

Reproducibility: Always
Severity: Minor
Priority: Medium
Software:
Pixelitor 4.2.0
Windows 10 64 Bit
Java Version 1.8.0_221

Description:
After Runing Pixelitor on resolution 1366x768 and full screen mode icon "Set Background Color" in Tool menu is not available

Steps to reproduce:
1.Run Pixelitor on resolution 1366x768
2.Go to full screen mode

Expected Result:
Icon "Set Background Color" in Tool menu is available

Actual Result:
Icon "Set Background Color" in Tool menu is not available

Attachment
Баг

"Shapes Tool" and "Selection Tool"

Reproducibility: Always
Severity: Minor
Priority: Low
Software:
Pixelitor 4.2.0
Windows 7 Professional 64 Bit
Java Version 1.8.0_181

Description:
Selection action of Shapes Tool can't be canceled by click at some area like the same action of Selection Tool. In my opinion, would be better if this action can be canceled by click on "ESC" in both tools.

Steps to reproduce:

  1. Create a new picture following example:
    Bug3_1
  2. Select the "Selection Tool".
  3. Click and drag to select the area.
    Bug3_2
  4. Click somewhere on area.
    Bug3_3
  5. Select the "Shapes Tool" and select Action "Selection" in the tools options.
  6. Click and drag to select the area.
    Bug3_4
  7. Click somewhere on area.
  8. If you need to cancel selection action you must select the "Selection Tool" and click somewhere on area.
    Bug3_5

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.