/** * Sets the font that the receiver will use to paint textual information for the specified cell in * this item to the font specified by the argument, or to the default font for that kind of * control if the argument is null. * * @param index the column index * @param font the new font (or null) * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed * </ul> * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver * </ul> * * @since 3.0 */ public void setFont(int index, Font font) { checkWidget(); if (font != null && font.isDisposed()) { SWT.error(SWT.ERROR_INVALID_ARGUMENT); } int count = Math.max(1, parent.getColumnCount()); if (0 > index || index > count - 1) return; if (cellFont == null) { if (font == null) return; cellFont = new Font[count]; } Font oldFont = cellFont[index]; if (oldFont == font) return; cellFont[index] = font; if (oldFont != null && oldFont.equals(font)) return; int modelIndex = parent.columnCount == 0 ? Table.FIRST_COLUMN : parent.columns[index].modelIndex; int /*long*/ fontHandle = font != null ? font.handle : 0; OS.gtk_list_store_set(parent.modelHandle, handle, modelIndex + Table.CELL_FONT, fontHandle, -1); /* * Bug in GTK. When using fixed-height-mode, * row changes do not cause the row to be repainted. The fix is to * invalidate the row when it is cleared. */ if ((parent.style & SWT.VIRTUAL) != 0) { if (OS.GTK_VERSION >= OS.VERSION(2, 3, 2) && OS.GTK_VERSION < OS.VERSION(2, 6, 3)) { redraw(); } } cached = true; if (font != null) { boolean customDraw = (parent.columnCount == 0) ? parent.firstCustomDraw : parent.columns[index].customDraw; if (!customDraw) { if ((parent.style & SWT.VIRTUAL) == 0) { int /*long*/ parentHandle = parent.handle; int /*long*/ column = 0; if (parent.columnCount > 0) { column = parent.columns[index].handle; } else { column = OS.gtk_tree_view_get_column(parentHandle, index); } if (column == 0) return; int /*long*/ textRenderer = parent.getTextRenderer(column); int /*long*/ imageRenderer = parent.getPixbufRenderer(column); OS.gtk_tree_view_column_set_cell_data_func( column, textRenderer, display.cellDataProc, parentHandle, 0); OS.gtk_tree_view_column_set_cell_data_func( column, imageRenderer, display.cellDataProc, parentHandle, 0); } if (parent.columnCount == 0) { parent.firstCustomDraw = true; } else { parent.columns[index].customDraw = true; } } } }
/** * Creates a new <code>Shell</code>. This Shell is the root for the SWT widgets that will be * embedded within the AWT canvas. * * @param display the display for the new Shell * @param parent the parent <code>java.awt.Canvas</code> of the new Shell * @return a <code>Shell</code> to be the parent of the embedded SWT widgets * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the display is null * <li>ERROR_NULL_ARGUMENT - if the parent is null * <li>ERROR_INVALID_ARGUMENT - if the parent's peer is not created * </ul> * * @since 3.0 */ public static Shell new_Shell(final Display display, final Canvas parent) { if (display == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); int /*long*/ handle = 0; try { loadLibrary(); handle = getAWTHandle(parent); } catch (Throwable e) { SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e); } if (handle == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " [peer not created]"); final Shell shell = Shell.gtk_new(display, handle); final ComponentListener listener = new ComponentAdapter() { public void componentResized(ComponentEvent e) { display.syncExec( new Runnable() { public void run() { if (shell.isDisposed()) return; Dimension dim = parent.getSize(); shell.setSize(dim.width, dim.height); } }); } }; parent.addComponentListener(listener); shell.addListener( SWT.Dispose, new Listener() { public void handleEvent(Event event) { parent.removeComponentListener(listener); } }); shell.setVisible(true); return shell; }
/** * Sets the receiver's background color to the color specified by the argument, or to the default * system color for the item if the argument is null. * * @param color the new color (or null) * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed * </ul> * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver * </ul> * * @since 2.0 */ public void setBackground(Color color) { checkWidget(); if (color != null && color.isDisposed()) { SWT.error(SWT.ERROR_INVALID_ARGUMENT); } if (_getBackground().equals(color)) return; GdkColor gdkColor = color != null ? color.handle : null; OS.gtk_list_store_set(parent.modelHandle, handle, Table.BACKGROUND_COLUMN, gdkColor, -1); /* * Bug in GTK. When using fixed-height-mode, * row changes do not cause the row to be repainted. The fix is to * invalidate the row when it is cleared. */ if ((parent.style & SWT.VIRTUAL) != 0) { if (OS.GTK_VERSION >= OS.VERSION(2, 3, 2) && OS.GTK_VERSION < OS.VERSION(2, 6, 3)) { redraw(); } } cached = true; }
/** * Sets the font that the receiver will use to paint textual information for this item to the font * specified by the argument, or to the default font for that kind of control if the argument is * null. * * @param font the new font (or null) * @exception IllegalArgumentException * <ul> * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed * </ul> * * @exception SWTException * <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver * </ul> * * @since 3.0 */ public void setFont(Font font) { checkWidget(); if (font != null && font.isDisposed()) { SWT.error(SWT.ERROR_INVALID_ARGUMENT); } Font oldFont = this.font; if (oldFont == font) return; this.font = font; if (oldFont != null && oldFont.equals(font)) return; int /*long*/ fontHandle = font != null ? font.handle : 0; OS.gtk_list_store_set(parent.modelHandle, handle, Table.FONT_COLUMN, fontHandle, -1); /* * Bug in GTK. When using fixed-height-mode, * row changes do not cause the row to be repainted. The fix is to * invalidate the row when it is cleared. */ if ((parent.style & SWT.VIRTUAL) != 0) { if (OS.GTK_VERSION >= OS.VERSION(2, 3, 2) && OS.GTK_VERSION < OS.VERSION(2, 6, 3)) { redraw(); } } cached = true; }
static { menuItemSelectedFunc = new Callback(ToolBar.class, "MenuItemSelectedProc", 2); if (menuItemSelectedFunc.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS); }
/** * Creates a new <code>java.awt.Frame</code>. This frame is the root for the AWT components that * will be embedded within the composite. In order for the embedding to succeed, the composite * must have been created with the SWT.EMBEDDED style. * * <p>IMPORTANT: As of JDK1.5, the embedded frame does not receive mouse events. When a * lightweight component is added as a child of the embedded frame, the cursor does not change. In * order to work around both these problems, it is strongly recommended that a heavyweight * component such as <code>java.awt.Panel</code> be added to the frame as the root of all * components. * * @param parent the parent <code>Composite</code> of the new <code>java.awt.Frame</code> * @return a <code>java.awt.Frame</code> to be the parent of the embedded AWT components * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the parent is null * <li>ERROR_INVALID_ARGUMENT - if the parent Composite does not have the SWT.EMBEDDED style * </ul> * * @since 3.0 */ public static Frame new_Frame(final Composite parent) { if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if ((parent.getStyle() & SWT.EMBEDDED) == 0) { SWT.error(SWT.ERROR_INVALID_ARGUMENT); } int /*long*/ handle = parent.embeddedHandle; /* * Some JREs have implemented the embedded frame constructor to take an integer * and other JREs take a long. To handle this binary incompatibility, use * reflection to create the embedded frame. */ Class clazz = null; try { String className = embeddedFrameClass != null ? embeddedFrameClass : "sun.awt.X11.XEmbeddedFrame"; clazz = Class.forName(className); } catch (Throwable e) { SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e, " [need JDK 1.5 or greater]"); } initializeSwing(); Object value = null; Constructor constructor = null; try { constructor = clazz.getConstructor(new Class[] {int.class, boolean.class}); value = constructor.newInstance(new Object[] {new Integer((int) /*64*/ handle), Boolean.TRUE}); } catch (Throwable e1) { try { constructor = clazz.getConstructor(new Class[] {long.class, boolean.class}); value = constructor.newInstance(new Object[] {new Long(handle), Boolean.TRUE}); } catch (Throwable e2) { SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e2); } } final Frame frame = (Frame) value; parent.setData(EMBEDDED_FRAME_KEY, frame); if (Device.DEBUG) { loadLibrary(); setDebug(frame, true); } try { /* Call registerListeners() to make XEmbed focus traversal work */ Method method = clazz.getMethod("registerListeners", null); if (method != null) method.invoke(value, null); } catch (Throwable e) { } final AWTEventListener awtListener = new AWTEventListener() { public void eventDispatched(AWTEvent event) { if (event.getID() == WindowEvent.WINDOW_OPENED) { final Window window = (Window) event.getSource(); if (window.getParent() == frame) { parent .getDisplay() .asyncExec( new Runnable() { public void run() { if (parent.isDisposed()) return; Shell shell = parent.getShell(); loadLibrary(); int /*long*/ awtHandle = getAWTHandle(window); if (awtHandle == 0) return; int /*long*/ xWindow = OS.gdk_x11_drawable_get_xid( OS.GTK_WIDGET_WINDOW(OS.gtk_widget_get_toplevel(shell.handle))); OS.XSetTransientForHint( OS.gdk_x11_display_get_xdisplay(OS.gdk_display_get_default()), awtHandle, xWindow); } }); } } } }; frame.getToolkit().addAWTEventListener(awtListener, AWTEvent.WINDOW_EVENT_MASK); final Listener shellListener = new Listener() { public void handleEvent(Event e) { switch (e.type) { case SWT.Deiconify: EventQueue.invokeLater( new Runnable() { public void run() { frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_DEICONIFIED)); } }); break; case SWT.Iconify: EventQueue.invokeLater( new Runnable() { public void run() { frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_ICONIFIED)); } }); break; } } }; Shell shell = parent.getShell(); shell.addListener(SWT.Deiconify, shellListener); shell.addListener(SWT.Iconify, shellListener); Listener listener = new Listener() { public void handleEvent(Event e) { switch (e.type) { case SWT.Dispose: Shell shell = parent.getShell(); shell.removeListener(SWT.Deiconify, shellListener); shell.removeListener(SWT.Iconify, shellListener); parent.setVisible(false); EventQueue.invokeLater( new Runnable() { public void run() { frame.getToolkit().removeAWTEventListener(awtListener); frame.dispose(); } }); break; case SWT.Resize: if (Library.JAVA_VERSION >= Library.JAVA_VERSION(1, 6, 0)) { final Rectangle clientArea = parent.getClientArea(); EventQueue.invokeLater( new Runnable() { public void run() { frame.setSize(clientArea.width, clientArea.height); } }); } break; } } }; parent.addListener(SWT.Dispose, listener); parent.addListener(SWT.Resize, listener); parent .getDisplay() .asyncExec( new Runnable() { public void run() { if (parent.isDisposed()) return; final Rectangle clientArea = parent.getClientArea(); EventQueue.invokeLater( new Runnable() { public void run() { frame.setSize(clientArea.width, clientArea.height); frame.validate(); } }); } }); return frame; }
/** * Returns a <code>java.awt.Frame</code> which is the embedded frame associated with the specified * composite. * * @param parent the parent <code>Composite</code> of the <code>java.awt.Frame</code> * @return a <code>java.awt.Frame</code> the embedded frame or <code>null</code>. * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT - if the parent is null * </ul> * * @since 3.2 */ public static Frame getFrame(Composite parent) { if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if ((parent.getStyle() & SWT.EMBEDDED) == 0) return null; return (Frame) parent.getData(EMBEDDED_FRAME_KEY); }
/** * Create a GLCanvas widget using the attributes described in the GLData object provided. * * @param parent a composite widget * @param style the bitwise OR'ing of widget styles * @param data the requested attributes of the GLCanvas * @exception IllegalArgumentException * <ul> * <li>ERROR_NULL_ARGUMENT when the data is null * <li>ERROR_UNSUPPORTED_DEPTH when the requested attributes cannot be provided * </ul> * </ul> */ public GLCanvas(Composite parent, int style, GLData data) { super(parent, style); if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); int glxAttrib[] = new int[MAX_ATTRIBUTES]; int pos = 0; glxAttrib[pos++] = GLX.GLX_RGBA; if (data.doubleBuffer) glxAttrib[pos++] = GLX.GLX_DOUBLEBUFFER; if (data.stereo) glxAttrib[pos++] = GLX.GLX_STEREO; if (data.redSize > 0) { glxAttrib[pos++] = GLX.GLX_RED_SIZE; glxAttrib[pos++] = data.redSize; } if (data.greenSize > 0) { glxAttrib[pos++] = GLX.GLX_GREEN_SIZE; glxAttrib[pos++] = data.greenSize; } if (data.blueSize > 0) { glxAttrib[pos++] = GLX.GLX_BLUE_SIZE; glxAttrib[pos++] = data.blueSize; } if (data.alphaSize > 0) { glxAttrib[pos++] = GLX.GLX_ALPHA_SIZE; glxAttrib[pos++] = data.alphaSize; } if (data.depthSize > 0) { glxAttrib[pos++] = GLX.GLX_DEPTH_SIZE; glxAttrib[pos++] = data.depthSize; } if (data.stencilSize > 0) { glxAttrib[pos++] = GLX.GLX_STENCIL_SIZE; glxAttrib[pos++] = data.stencilSize; } if (data.accumRedSize > 0) { glxAttrib[pos++] = GLX.GLX_ACCUM_RED_SIZE; glxAttrib[pos++] = data.accumRedSize; } if (data.accumGreenSize > 0) { glxAttrib[pos++] = GLX.GLX_ACCUM_GREEN_SIZE; glxAttrib[pos++] = data.accumGreenSize; } if (data.accumBlueSize > 0) { glxAttrib[pos++] = GLX.GLX_ACCUM_BLUE_SIZE; glxAttrib[pos++] = data.accumBlueSize; } if (data.accumAlphaSize > 0) { glxAttrib[pos++] = GLX.GLX_ACCUM_ALPHA_SIZE; glxAttrib[pos++] = data.accumAlphaSize; } if (data.sampleBuffers > 0) { glxAttrib[pos++] = GLX.GLX_SAMPLE_BUFFERS; glxAttrib[pos++] = data.sampleBuffers; } if (data.samples > 0) { glxAttrib[pos++] = GLX.GLX_SAMPLES; glxAttrib[pos++] = data.samples; } glxAttrib[pos++] = 0; OS.gtk_widget_realize(handle); int /*long*/ window = OS.GTK_WIDGET_WINDOW(handle); int /*long*/ xDisplay = OS.gdk_x11_drawable_get_xdisplay(window); int /*long*/ infoPtr = GLX.glXChooseVisual(xDisplay, OS.XDefaultScreen(xDisplay), glxAttrib); if (infoPtr == 0) { dispose(); SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH); } vinfo = new XVisualInfo(); GLX.memmove(vinfo, infoPtr, XVisualInfo.sizeof); OS.XFree(infoPtr); int /*long*/ screen = OS.gdk_screen_get_default(); int /*long*/ gdkvisual = OS.gdk_x11_screen_lookup_visual(screen, vinfo.visualid); // FIXME- share lists // context = GLX.glXCreateContext (xDisplay, info, share == null ? 0 : share.context, true); context = GLX.glXCreateContext(xDisplay, vinfo, 0, true); if (context == 0) SWT.error(SWT.ERROR_NO_HANDLES); GdkWindowAttr attrs = new GdkWindowAttr(); attrs.width = 1; attrs.height = 1; attrs.event_mask = OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK | OS.GDK_FOCUS_CHANGE_MASK | OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK | OS.GDK_BUTTON_RELEASE_MASK | OS.GDK_ENTER_NOTIFY_MASK | OS.GDK_LEAVE_NOTIFY_MASK | OS.GDK_EXPOSURE_MASK | OS.GDK_VISIBILITY_NOTIFY_MASK | OS.GDK_POINTER_MOTION_HINT_MASK; attrs.window_type = OS.GDK_WINDOW_CHILD; attrs.visual = gdkvisual; glWindow = OS.gdk_window_new(window, attrs, OS.GDK_WA_VISUAL); OS.gdk_window_set_user_data(glWindow, handle); if ((style & SWT.NO_BACKGROUND) != 0) OS.gdk_window_set_back_pixmap(window, 0, false); xWindow = OS.gdk_x11_drawable_get_xid(glWindow); OS.gdk_window_show(glWindow); Listener listener = new Listener() { public void handleEvent(Event event) { switch (event.type) { case SWT.Paint: /** * Bug in MESA. MESA does some nasty sort of polling to try and ensure that their * buffer sizes match the current X state. This state can be updated using * glViewport(). FIXME: There has to be a better way of doing this. */ int[] viewport = new int[4]; GLX.glGetIntegerv(GLX.GL_VIEWPORT, viewport); GLX.glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); break; case SWT.Resize: Rectangle clientArea = getClientArea(); OS.gdk_window_move(glWindow, clientArea.x, clientArea.y); OS.gdk_window_resize(glWindow, clientArea.width, clientArea.height); break; case SWT.Dispose: int /*long*/ window = OS.GTK_WIDGET_WINDOW(handle); int /*long*/ xDisplay = OS.gdk_x11_drawable_get_xdisplay(window); if (context != 0) { if (GLX.glXGetCurrentContext() == context) { GLX.glXMakeCurrent(xDisplay, 0, 0); } GLX.glXDestroyContext(xDisplay, context); context = 0; } if (glWindow != 0) { OS.gdk_window_destroy(glWindow); glWindow = 0; } break; } } }; addListener(SWT.Resize, listener); addListener(SWT.Paint, listener); addListener(SWT.Dispose, listener); }
static Table checkNull(Table control) { if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); return control; }