RFR: 8271398: GTK3 drag view image swaps red and blue color channels [v4]
Kevin Rushforth
kcr at openjdk.java.net
Thu Sep 16 22:09:57 UTC 2021
On Fri, 20 Aug 2021 22:22:51 GMT, Thiago Milczarek Sayao <tsayao at openjdk.org> wrote:
>> It seems raw images need to be converted BRGA -> RGBA.
>>
>> It was being converted on gtk2 code path, but gtk3 only uses `gtk_drag_set_icon_pixbuf`.
>>
>> I have simplified the gtk2 `DragView::View::expose` to paint with `gdk_cairo_set_source_pixbuf` (that is available since Gtk 2.8) because the old way was somehow converting again.
>>
>> Run the issue sample with `-Djdk.gtk.version=2` to test the gtk2 code path.
>>
>> To test:
>>
>> `./gradlew apps`
>>
>>
>> java @build/run.args -cp apps/toys/DragDrop/dist/DragDrop.jar dragdrop.DragDropWithControls
>> java @build/run.args -cp apps/toys/DragDrop/dist/DragDrop.jar dragdrop.DragDropColor
>>
>> java -Djdk.gtk.version=2 @build/run.args -cp apps/toys/DragDrop/dist/DragDrop.jar dragdrop.DragDropWithControls
>> java -Djdk.gtk.version=2 @build/run.args -cp apps/toys/DragDrop/dist/DragDrop.jar dragdrop.DragDropColor
>
> Thiago Milczarek Sayao has updated the pull request incrementally with one additional commit since the last revision:
>
> Review requests.
This fix introduces a memory leak, but otherwise looks correct. I verified that with gtk3 the new manual test passes with the fix and fails without the fix (with gtk2 is passes before and after the fix).
modules/javafx.graphics/src/main/native-glass/gtk/glass_dnd.cpp line 916:
> 914:
> 915: if (is_raw_image) {
> 916: data = (guchar*) convert_BGRA_to_RGBA((const int*) data, w * 4, h);
This will leak memory, since the original buffer allocated by the call to `g_try_malloc0` on line 911 is never freed. I recommend something like this:
guchar* origdata = data;
data = (guchar*) convert_BGRA_to_RGBA((const int*) origdata, w * 4, h);
g_free(origdata);
-------------
PR: https://git.openjdk.java.net/jfx/pull/599
More information about the openjfx-dev
mailing list