Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c
Original file line number Diff line number Diff line change
Expand Up @@ -1066,6 +1066,72 @@ JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1drag_1source_1set_1icon)
}
#endif

#ifndef NO_gtk_1drawing_1area_1get_1content_1height
JNIEXPORT jint JNICALL GTK4_NATIVE(gtk_1drawing_1area_1get_1content_1height)
(JNIEnv *env, jclass that, jlong arg0)
{
jint rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1get_1content_1height_FUNC);
rc = (jint)gtk_drawing_area_get_content_height((GtkDrawingArea *)arg0);
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1get_1content_1height_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1drawing_1area_1get_1content_1width
JNIEXPORT jint JNICALL GTK4_NATIVE(gtk_1drawing_1area_1get_1content_1width)
(JNIEnv *env, jclass that, jlong arg0)
{
jint rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1get_1content_1width_FUNC);
rc = (jint)gtk_drawing_area_get_content_width((GtkDrawingArea *)arg0);
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1get_1content_1width_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1drawing_1area_1new
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1drawing_1area_1new)
(JNIEnv *env, jclass that)
{
jlong rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1new_FUNC);
rc = (jlong)gtk_drawing_area_new();
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1new_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1drawing_1area_1set_1content_1height
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1drawing_1area_1set_1content_1height)
(JNIEnv *env, jclass that, jlong arg0, jint arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1set_1content_1height_FUNC);
gtk_drawing_area_set_content_height((GtkDrawingArea *)arg0, (int)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1set_1content_1height_FUNC);
}
#endif

#ifndef NO_gtk_1drawing_1area_1set_1content_1width
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1drawing_1area_1set_1content_1width)
(JNIEnv *env, jclass that, jlong arg0, jint arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1set_1content_1width_FUNC);
gtk_drawing_area_set_content_width((GtkDrawingArea *)arg0, (int)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1set_1content_1width_FUNC);
}
#endif

#ifndef NO_gtk_1drawing_1area_1set_1draw_1func
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1drawing_1area_1set_1draw_1func)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jlong arg2, jlong arg3)
{
GTK4_NATIVE_ENTER(env, that, gtk_1drawing_1area_1set_1draw_1func_FUNC);
gtk_drawing_area_set_draw_func((GtkDrawingArea *)arg0, (GtkDrawingAreaDrawFunc)arg1, (gpointer)arg2, (GDestroyNotify)arg3);
GTK4_NATIVE_EXIT(env, that, gtk_1drawing_1area_1set_1draw_1func_FUNC);
}
#endif

#ifndef NO_gtk_1drop_1target_1async_1new
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1drop_1target_1async_1new)
(JNIEnv *env, jclass that, jlong arg0, jint arg1)
Expand Down Expand Up @@ -2072,6 +2138,116 @@ JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1native_1get_1surface)
}
#endif

#ifndef NO_gtk_1overlay_1add_1overlay
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1overlay_1add_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1add_1overlay_FUNC);
gtk_overlay_add_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1add_1overlay_FUNC);
}
#endif

#ifndef NO_gtk_1overlay_1get_1child
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1overlay_1get_1child)
(JNIEnv *env, jclass that, jlong arg0)
{
jlong rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1get_1child_FUNC);
rc = (jlong)gtk_overlay_get_child((GtkOverlay *)arg0);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1get_1child_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1overlay_1get_1clip_1overlay
JNIEXPORT jboolean JNICALL GTK4_NATIVE(gtk_1overlay_1get_1clip_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
jboolean rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1get_1clip_1overlay_FUNC);
rc = (jboolean)gtk_overlay_get_clip_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1get_1clip_1overlay_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1overlay_1get_1measure_1overlay
JNIEXPORT jboolean JNICALL GTK4_NATIVE(gtk_1overlay_1get_1measure_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
jboolean rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1get_1measure_1overlay_FUNC);
rc = (jboolean)gtk_overlay_get_measure_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1get_1measure_1overlay_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1overlay_1get_1type
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1overlay_1get_1type)
(JNIEnv *env, jclass that)
{
jlong rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1get_1type_FUNC);
rc = (jlong)gtk_overlay_get_type();
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1get_1type_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1overlay_1new
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1overlay_1new)
(JNIEnv *env, jclass that)
{
jlong rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1new_FUNC);
rc = (jlong)gtk_overlay_new();
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1new_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1overlay_1remove_1overlay
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1overlay_1remove_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1remove_1overlay_FUNC);
gtk_overlay_remove_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1remove_1overlay_FUNC);
}
#endif

#ifndef NO_gtk_1overlay_1set_1child
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1overlay_1set_1child)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1set_1child_FUNC);
gtk_overlay_set_child((GtkOverlay *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1set_1child_FUNC);
}
#endif

#ifndef NO_gtk_1overlay_1set_1clip_1overlay
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1overlay_1set_1clip_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jboolean arg2)
{
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1set_1clip_1overlay_FUNC);
gtk_overlay_set_clip_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1, (gboolean)arg2);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1set_1clip_1overlay_FUNC);
}
#endif

#ifndef NO_gtk_1overlay_1set_1measure_1overlay
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1overlay_1set_1measure_1overlay)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jboolean arg2)
{
GTK4_NATIVE_ENTER(env, that, gtk_1overlay_1set_1measure_1overlay_FUNC);
gtk_overlay_set_measure_overlay((GtkOverlay *)arg0, (GtkWidget *)arg1, (gboolean)arg2);
GTK4_NATIVE_EXIT(env, that, gtk_1overlay_1set_1measure_1overlay_FUNC);
}
#endif

#ifndef NO_gtk_1picture_1new
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1picture_1new)
(JNIEnv *env, jclass that)
Expand Down
16 changes: 16 additions & 0 deletions bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4_stats.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ typedef enum {
gtk_1drag_1source_1new_FUNC,
gtk_1drag_1source_1set_1actions_FUNC,
gtk_1drag_1source_1set_1icon_FUNC,
gtk_1drawing_1area_1get_1content_1height_FUNC,
gtk_1drawing_1area_1get_1content_1width_FUNC,
gtk_1drawing_1area_1new_FUNC,
gtk_1drawing_1area_1set_1content_1height_FUNC,
gtk_1drawing_1area_1set_1content_1width_FUNC,
gtk_1drawing_1area_1set_1draw_1func_FUNC,
gtk_1drop_1target_1async_1new_FUNC,
gtk_1drop_1target_1async_1set_1formats_FUNC,
gtk_1editable_1get_1delegate_FUNC,
Expand Down Expand Up @@ -169,6 +175,16 @@ typedef enum {
gtk_1named_1action_1new_FUNC,
gtk_1native_1get_1for_1surface_FUNC,
gtk_1native_1get_1surface_FUNC,
gtk_1overlay_1add_1overlay_FUNC,
gtk_1overlay_1get_1child_FUNC,
gtk_1overlay_1get_1clip_1overlay_FUNC,
gtk_1overlay_1get_1measure_1overlay_FUNC,
gtk_1overlay_1get_1type_FUNC,
gtk_1overlay_1new_FUNC,
gtk_1overlay_1remove_1overlay_FUNC,
gtk_1overlay_1set_1child_FUNC,
gtk_1overlay_1set_1clip_1overlay_FUNC,
gtk_1overlay_1set_1measure_1overlay_FUNC,
gtk_1picture_1new_FUNC,
gtk_1picture_1set_1can_1shrink_FUNC,
gtk_1picture_1set_1paintable_FUNC,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1064,4 +1064,78 @@ public class GTK4 {
*/
public static final native long gtk_gesture_get_last_updated_sequence(long gesture);

/**
*/
public static final native long gtk_drawing_area_new();
/**
*
* @param self cast=(GtkDrawingArea *)
* @param draw_func cast=(GtkDrawingAreaDrawFunc)
* @param user_data cast=(gpointer)
* @param destroy cast=(GDestroyNotify)
*/
public static final native void gtk_drawing_area_set_draw_func(long self, long draw_func, long user_data, long destroy);
/**
* @param self cast=(GtkDrawingArea *)
*/
public static final native int gtk_drawing_area_get_content_height (long self);
/**
* @param self cast=(GtkDrawingArea *)
*/
public static final native int gtk_drawing_area_get_content_width (long self);
/**
* @param self cast=(GtkDrawingArea *)
* @param height cast=(int)
*/
public static final native void gtk_drawing_area_set_content_height (long self, int height);
/**
* @param self cast=(GtkDrawingArea *)
* @param width cast=(int)
*/
public static final native void gtk_drawing_area_set_content_width (long self, int width);

public static final native long gtk_overlay_get_type();
public static final native long gtk_overlay_new();

/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
*/
public static final native void gtk_overlay_add_overlay (long overlay, long widget);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
*/
public static final native void gtk_overlay_remove_overlay (long overlay, long widget);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
*/
public static final native void gtk_overlay_set_child (long overlay, long widget);
/**
* @param overlay cast=(GtkOverlay *)
*/
public static final native long gtk_overlay_get_child (long overlay);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
*/
public static final native boolean gtk_overlay_get_measure_overlay (long overlay, long widget);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
* @param measure cast=(gboolean)
*/
public static final native void gtk_overlay_set_measure_overlay (long overlay, long widget, boolean measure);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
*/
public static final native boolean gtk_overlay_get_clip_overlay (long overlay, long widget);
/**
* @param overlay cast=(GtkOverlay *)
* @param widget cast=(GtkWidget *)
* @param clip_overlay cast=(gboolean)
*/
public static final native void gtk_overlay_set_clip_overlay (long overlay, long widget, boolean clip_overlay);
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@
* @noextend This class is not intended to be subclassed by clients.
*/
public class Button extends Control {
long boxHandle, labelHandle, imageHandle, arrowHandle, groupHandle;
private long drawingAreaHandle;
private long overlayaHandle;
private long boxHandle, labelHandle, imageHandle, arrowHandle, groupHandle;
boolean selected, grayed;
/** True iff this toggle button requires special theme handling. See bug 546552.*/
boolean toggleButtonTheming;
Expand Down Expand Up @@ -389,7 +391,16 @@ void createHandle (int index) {
if (imageHandle == 0) error(SWT.ERROR_NO_HANDLES);

if (GTK.GTK4) {
GTK.gtk_widget_set_parent(boxHandle, handle);
drawingAreaHandle = GTK4.gtk_drawing_area_new();
GTK.gtk_widget_set_hexpand(drawingAreaHandle, true);
GTK.gtk_widget_set_vexpand(drawingAreaHandle, true);
GTK4.gtk_drawing_area_set_draw_func(drawingAreaHandle, display.gtk4DrawProc, handle, 0);

overlayaHandle = GTK4.gtk_overlay_new();
GTK4.gtk_overlay_add_overlay(overlayaHandle, drawingAreaHandle);

GTK.gtk_widget_set_parent(overlayaHandle, handle);
GTK4.gtk_overlay_set_child(overlayaHandle, boxHandle);
GTK4.gtk_box_append(boxHandle, imageHandle);
GTK4.gtk_box_append(boxHandle, labelHandle);
} else {
Expand Down Expand Up @@ -454,6 +465,8 @@ void checkBackground() {
@Override
void deregister () {
super.deregister ();
if (drawingAreaHandle != 0) display.removeWidget (drawingAreaHandle);
if (overlayaHandle != 0) display.removeWidget (overlayaHandle);
if (boxHandle != 0) display.removeWidget (boxHandle);
if (labelHandle != 0) display.removeWidget (labelHandle);
if (imageHandle != 0) display.removeWidget (imageHandle);
Expand Down Expand Up @@ -720,6 +733,8 @@ boolean mnemonicMatch (char key) {
@Override
void register () {
super.register ();
if (drawingAreaHandle != 0) display.addWidget (drawingAreaHandle, this);
if (overlayaHandle != 0) display.addWidget (overlayaHandle, this);
if (boxHandle != 0) display.addWidget (boxHandle, this);
if (labelHandle != 0) display.addWidget (labelHandle, this);
if (imageHandle != 0) display.addWidget (imageHandle, this);
Expand All @@ -729,6 +744,7 @@ void register () {
@Override
void releaseHandle () {
super.releaseHandle ();
overlayaHandle = drawingAreaHandle = 0;
boxHandle = imageHandle = labelHandle = arrowHandle = 0;
}

Expand All @@ -737,7 +753,9 @@ void releaseWidget() {
super.releaseWidget();

if (GTK.GTK4) {
if (boxHandle != 0) GTK.gtk_widget_unparent(boxHandle);
// TODO review this with the new overlay work
if (overlayaHandle != 0) GTK.gtk_widget_unparent(overlayaHandle);
// if (boxHandle != 0) GTK.gtk_widget_unparent(boxHandle);
}

// Release reference to hidden GtkCheckButton that allows for SWT.RADIO behavior
Expand Down Expand Up @@ -1290,6 +1308,7 @@ public void setText (String string) {
}

private void updateWidgetsVisibility() {
// TODO what do I need to do on show widget for overlay/drawing area
if (text.length() == 0 && image == null) {
gtk_widget_hide (boxHandle);
gtk_widget_hide (labelHandle);
Expand All @@ -1310,6 +1329,7 @@ private void updateWidgetsVisibility() {
@Override
void showWidget () {
super.showWidget ();
// TODO what do I need to do on show widget for overlay/drawing area
if (boxHandle != 0 && ((text != null && text.length() != 0) || image != null)) gtk_widget_show (boxHandle);
if (labelHandle != 0 && text != null && text.length() != 0) gtk_widget_show (labelHandle);
if (arrowHandle != 0) gtk_widget_show (arrowHandle);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,11 @@ long gtk_draw (long widget, long cairo) {
}

@Override
void gtk4_draw (long widget, long cairo, Rectangle bounds) {
if ((state & OBSCURED) != 0) return;
super.gtk4_draw (widget, cairo, bounds);
drawCaretInFocus(widget, cairo);
void gtk4_draw (long cairo, int width, int height) {
// TODO
// if ((state & OBSCURED) != 0) return;
// super.gtk4_draw (widget, cairo, bounds);
// drawCaretInFocus(widget, cairo);
}

void drawCaretInFocus(long widget, long cairo) {
Expand Down
Loading
Loading