ehmkah / imgdiff Goto Github PK
View Code? Open in Web Editor NEWImgDiff is a plugin for IntelliJ which shows the diff between two images in IntelliJ's diff screen
License: Apache License 2.0
ImgDiff is a plugin for IntelliJ which shows the diff between two images in IntelliJ's diff screen
License: Apache License 2.0
if next two images are compared than the diff should be updated
show a nice icon for the plugin in the marketplace so developers that this plugin is fresh and give it a try.
Clicking F4 on imageDiff does not jump to image source.
Workaround: changeDiff Viewer to BinaryView , click f4
If pixels in two images are all same, but one image has an other resolution then both images are not equals.
When comparing images, in almost all situation you want to compare same coordinates on original and second image.
Right now when zooming in original and compare same area in second image its quite hard and same scroll action must be done.
(In general, images have same height and width. If they are different, in our use cases height content is increased to bottom, widht is increased to the right.)
Describe the solution you'd like
An option in IntelliJ, which is enabled by default, which will sync scroll position between original, diff and second image as well as zoom level.
Describe alternatives you've considered
manual scroll/zoom in all 3 image views to have same view
Additional context
something like https://intellij-support.jetbrains.com/hc/en-us/community/posts/206793965-Custom-exception-reporting would be cool. With this exceptions from plugin can be reported directly to github.
the icon for imgdiff should not be shown if a text-diff is shown
If one of the two compared images is corrupt a strange error.
Reproduce:
Solution:
stop java, start kotlin :-)
currently the diff will be shown if action is executed. It would be better if the diff would be displayed in the diff view between "old image" and "new image".
That was my first approach but I did not found the place where it needs to be configured.
Sometimes difference ist not detected and both images are said to be identical. this should not happen
Plugin should look dark in darkula-mode.
Sometime intellij detects images to be different altough they are not. This happens, if they differ in file-size for example.
Since imgdiff uses bufferedimage for comparing it can see whether there is a real difference. If it detects no difference it should make it easier to show that both images are equal. Simplifies the task if there is only one pixel which is different
use junit5
Describe the bug
A clear and concise description of what the bug is.
When using imgdiff for comparing local changes in git, the comparision itself works, but intellij pops up permanently a loading bar (screenshot) so that Intellij is almost unusable.
To Reproduce
Open an image with local changes in the diff editor
Expected behavior
It should just load once and then display the changes.
Screenshots
Sorry for the splitted screenshot. I don't want to expose the actual content.
Desktop (please complete the following information):
Additional context
Stacktrace from the IntelliJ console:
Oh no. There is a memory-leak, somewhere.
jetbrains found some issues with the plugin. this should not be.
see: https://plugins.jetbrains.com/plugin/12691-image-diff/update/65246
Describe the bug
Unable to view image differences with Original background or White background. Got 'Error: Cannot show diff' in the editor.
Additional context
In idea logs, the exceptions below is raised:
2021-10-21 09:54:47,906 [ 223297] ERROR - diff.impl.DiffRequestProcessor - baseFile.parent must not be null
java.lang.IllegalStateException: baseFile.parent must not be null
at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)
at com.intellij.openapi.roots.impl.RootIndex.getInfoForFile(RootIndex.java:627)
at com.intellij.openapi.roots.impl.DirectoryIndexImpl.getInfoForFile(DirectoryIndexImpl.java:186)
at com.intellij.openapi.roots.impl.FileIndexBase.getInfoForFileOrDirectory(FileIndexBase.java:96)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getInfoForFileOrDirectory(ProjectFileIndexImpl.java:27)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:100)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:92)
at com.intellij.openapi.module.ModuleUtilCore.findModuleForFile(ModuleUtilCore.java:72)
at com.android.tools.idea.editors.manifest.ManifestEditorProvider.accept(ManifestEditorProvider.java:33)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:51)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:854)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$1(FileEditorProviderManagerImpl.java:47)
at com.intellij.util.SlowOperations.allowSlowOperations(SlowOperations.java:146)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:47)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:93)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:82)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.<init>(ThreesideDiffViewer.java:63)
at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.<init>(ThreesideBinaryDiffViewer.java:29)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)
at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:269)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:344)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:223)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:338)
at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:757)
at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:328)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:310)
at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:184)
at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:101)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:186)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:175)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:181)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:41)
at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:318)
at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:297)
at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:108)
at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:91)
at com.intellij.diff.impl.DiffRequestProcessor.updateRequest(DiffRequestProcessor.java:180)
at com.intellij.diff.impl.DiffRequestProcessor$DiffToolToggleAction.actionPerformed(DiffRequestProcessor.java:683)
at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:240)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:261)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:240)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:252)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:242)
at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:228)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.ui.popup.AbstractPopup.lambda$dispose$18(AbstractPopup.java:1503)
at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:101)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:186)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:175)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:36)
at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1500)
at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:163)
at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:337)
at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:287)
at com.intellij.openapi.util.ObjectTree.runWithTrace(ObjectTree.java:136)
at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:166)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:155)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:143)
at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:266)
at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:444)
at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:416)
at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:372)
at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:304)
at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:629)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6652)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:706)
at java.desktop/java.awt.Component.processEvent(Component.java:6417)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5027)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2784)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
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:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:885)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:814)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:751)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:441)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:825)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:440)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:492)
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)
2021-10-21 09:54:47,907 [ 223298] ERROR - diff.impl.DiffRequestProcessor - IntelliJ IDEA 2021.2.3 Build #IU-212.5457.46
2021-10-21 09:54:47,907 [ 223298] ERROR - diff.impl.DiffRequestProcessor - JDK: 11.0.12; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o.
2021-10-21 09:54:47,907 [ 223298] ERROR - diff.impl.DiffRequestProcessor - OS: Linux
2021-10-21 09:54:47,908 [ 223299] ERROR - diff.impl.DiffRequestProcessor - Plugin to blame: Image Diff version: 1.7.0
2021-10-21 09:54:49,130 [ 224521] WARN - ctionSystem.impl.ActionUpdater - Slow (292 ms) `com.intellij.diff.impl.DiffRequestProcessor$MyChangeDiffToolAction#update`. Consider speeding it up and/or implementing UpdateInBackground.
gradle should be used for building. simplifies hacking for others
if two images have different sizes the plugin crashes . This should not happen. Instead: red and green pixel should be shown for missing or additional pixels.
use intellij diff for text as default color-pattern
Describe the bug
Can't get the plugin to work in IntelliJ IDEA 2021.1. The diff window doesn't have any ImageDiff controls.
To Reproduce
Expected behavior
The diff window has the ImageDiff controls (dropdown, middle diff image)
Screenshots
Desktop (please complete the following information):
Ubuntu Linux 20.04
IntelliJ IDEA 2021.1 (Ultimate Edition)
Build #IU-211.6693.111, built on April 6, 2021
ImageDiff plugin v1.9.0
colleague tries to compare local branch with remote branch - via Project - Git - Compare with Branch ... other attempts also failed ( local with local etc.)
IDE : IntelliJ Ultimate 2020.2.3(Ulitmate Edition) Build #IU-202.7660.26
java.lang.IllegalStateException: baseFile.parent must not be null at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)at com.intellij.facet.impl.FacetFinderImpl.findFacets(FacetFinderImpl.java:116)at com.intellij.facet.impl.FacetFinderImpl.findFacet(FacetFinderImpl.java:101)at com.intellij.javaee.facet.JavaeeFacetUtilImpl.getJavaeeFacet(JavaeeFacetUtilImpl.java:87)at com.intellij.javaee.module.view.AbstractJavaeeFileEditorProvider.getEditedElement(AbstractJavaeeFileEditorProvider.java:54)at com.intellij.javaee.module.view.AbstractJavaeeFileEditorProvider.accept(AbstractJavaeeFileEditorProvider.java:68)at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:48)at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:865)at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:44)at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:106)at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:95)at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)at com.intellij.diff.tools.util.side.ThreesideDiffViewer.(ThreesideDiffViewer.java:63)at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.(ThreesideBinaryDiffViewer.java:42)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:276)at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:351)at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:192)at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:349)at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:756)at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:335)at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:317)at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:187)at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2254)at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:178)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:184)at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:41)at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:325)at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:304)at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:106)at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:89)at com.intellij.diff.impl.DiffRequestProcessor.updateRequest(DiffRequestProcessor.java:187)at com.intellij.diff.impl.DiffRequestProcessor$DiffToolToggleAction.actionPerformed(DiffRequestProcessor.java:654)at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282)at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:276)at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:224)at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:214)at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:208)at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)at com.intellij.ui.popup.AbstractPopup.lambda$dispose$16(AbstractPopup.java:1464)at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2254)at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:178)at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:36)at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1460)at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:158)at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:326)at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:304)at com.intellij.openapi.util.ObjectNode.lambda$execute$0(ObjectNode.java:111)at com.intellij.openapi.util.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:193)at com.intellij.openapi.util.ObjectNode.execute(ObjectNode.java:71)at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:141)at com.intellij.openapi.util.Disposer.dispose(Disposer.java:130)at com.intellij.openapi.util.Disposer.dispose(Disposer.java:120)at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:261)at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:461)at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:415)at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:361)at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:324)at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:526)at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:583)at java.desktop/java.awt.Component.processEvent(Component.java:6419)at java.desktop/java.awt.Container.processEvent(Container.java:2263)at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)at java.base/java.security.AccessController.doPrivileged(Native Method)at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)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:748)at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:906)at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)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)
Describe the bug
I am using the plugin to find changes in merge requests. I am opening the diffs from Jetbrains Space integration panel.
When I open the first changed image file, it shows the diff. But not for the following few. There is no diff only the label "Unsupported DiffViewer" and a link "Reload". Reload link does nothing.
When I close the tab entirely, and open it again, it does show the diff for the second file. So that is what I do now for every file, but it is annoying.
To Reproduce
Expected behavior
A diff should be available for all files without reopening the tab.
Desktop (please complete the following information):
WebStorm 2023.2.5
Build #WS-232.10227.9, built on November 11, 2023
Licensed to Mikhail Turkeev
You have a perpetual fallback license for this version.
Subscription is active until September 23, 2024.
Runtime version: 17.0.9+7-b1000.46 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 6.2.0-37-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 32
Registry:
ide.experimental.ui=true
Non-Bundled Plugins:
OpenGL-Plugin (1.0.72)
de.ehmkah.projects.imgdiff (1.11.0)
Current Desktop: ubuntu:GNOME
:-( - not working correctly fopr intellig 2019.3
shortcut would be handy to open diff: "F8" => a key near F7 (which jumps to next diff)
sometimes git thinks images changed but they have not changed. (both images are identical) a button might be nice which forwards diff to first changed image
Is your feature request related to a problem? Please describe.
When having to deal with very small differences between images, is difficult to easily spot them when using the white background.
In my case for example I'm tracking differences in charts where circles are drawn with a slightly different technique or with a slightly different radius. The actual difference is just a few bytes but its interesting can be hardly visible on the current implementation.
Describe the solution you'd like
As provided by the rich diff in GitHub, a swipe function to swipe between the two overlapping images can be very helpful to spot such differences easily and compare the two images.
Describe alternatives you've considered
An alternative is to increase the contrast or at least make configurable the diff color used on the "white background" view. This can increase the contrast with the background and easing the visibility of differences
Additional context
One example of differences that are barely visible
This is anyway already a great and very useful plugin! Thank you
Describe the bug
When comparing images after screenshot test plugin is showing "Error: can't show diff"
Desktop (please complete the following information):
Additional context
Log from IDEA
java.lang.IllegalStateException: baseFile.parent must not be null
at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)
at com.intellij.openapi.roots.impl.RootIndex.getInfoForFile(RootIndex.java:605)
at com.intellij.openapi.roots.impl.DirectoryIndexImpl.getInfoForFile(DirectoryIndexImpl.java:181)
at com.intellij.openapi.roots.impl.FileIndexBase.getInfoForFileOrDirectory(FileIndexBase.java:98)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getInfoForFileOrDirectory(ProjectFileIndexImpl.java:27)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:100)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:92)
at com.intellij.openapi.module.ModuleUtilCore.findModuleForFile(ModuleUtilCore.java:72)
at com.android.tools.idea.editors.manifest.ManifestEditorProvider.accept(ManifestEditorProvider.java:33)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:48)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:885)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:44)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:92)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:81)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.(ThreesideDiffViewer.java:63)
at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.(ThreesideBinaryDiffViewer.java:42)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)
at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:273)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:348)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:658)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:610)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:65)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:218)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:342)
at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:761)
at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:332)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:314)
at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:182)
at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:88)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2194)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:173)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:179)
at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$2(FocusManagerImpl.java:187)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:216)
at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:24)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:199)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:324)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:85)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:134)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:190)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
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:746)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:976)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:843)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:501)
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)
Sometimes it is useful to see the original or modified image behind the diff to spot what has been changed.
The parts which differ should be easily be detected.
Solution:
image is fixed to 200X300
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.