javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java
changeset 35 85266cc22c7f
parent 21 2a9601315dfc
equal deleted inserted replaced
26:dc7c549001d5 35:85266cc22c7f
    27  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
    27  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
    28  */
    28  */
    29 public abstract class Device implements Drawable {
    29 public abstract class Device implements Drawable {
    30     
    30     
    31     // Native device handle
    31     // Native device handle
    32     int paintDevice;
    32     static int paintDevice;
    33 
    33 
    34     // Device instance tracking
    34     // Device instance tracking
    35     static Device[] Devices = new Device[4];
    35     static Device[] Devices = new Device[4];
    36     
    36     
    37     // Debugging
    37     // Debugging
    38     public static boolean DEBUG; 
    38     public static boolean DEBUG; 
    39     boolean debug = DEBUG;
    39     static boolean debug = DEBUG;
    40     boolean tracking = DEBUG;
    40     static boolean tracking = DEBUG;
    41     Error [] errors;
    41     static Error [] errors;
    42     Object [] objects;
    42     static Object [] objects;
    43     Object trackingLock;
    43     static Object trackingLock;
    44 
    44 
    45     // Themed system colors
    45     // Themed system colors
    46     Color COLOR_LIST_BACKGROUND;
    46     static Color COLOR_LIST_BACKGROUND;
    47     Color COLOR_LIST_FOREGROUND;
    47     static Color COLOR_LIST_FOREGROUND;
    48     Color COLOR_LIST_SELECTION;
    48     static Color COLOR_LIST_SELECTION;
    49     Color COLOR_LIST_SELECTION_TEXT;
    49     static Color COLOR_LIST_SELECTION_TEXT;
    50     Color COLOR_TITLE_BACKGROUND;
    50     static Color COLOR_TITLE_BACKGROUND;
    51     Color COLOR_TITLE_BACKGROUND_GRADIENT;
    51     static Color COLOR_TITLE_BACKGROUND_GRADIENT;
    52     Color COLOR_TITLE_FOREGROUND;
    52     static Color COLOR_TITLE_FOREGROUND;
    53     Color COLOR_TITLE_INACTIVE_BACKGROUND;
    53     static Color COLOR_TITLE_INACTIVE_BACKGROUND;
    54     Color COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT;
    54     static Color COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT;
    55     Color COLOR_TITLE_INACTIVE_FOREGROUND;
    55     static Color COLOR_TITLE_INACTIVE_FOREGROUND;
    56     Color COLOR_WIDGET_BACKGROUND;
    56     static Color COLOR_WIDGET_BACKGROUND;
    57     Color COLOR_WIDGET_BORDER;
    57     static Color COLOR_WIDGET_BORDER;
    58     Color COLOR_WIDGET_DARK_SHADOW;
    58     static Color COLOR_WIDGET_DARK_SHADOW;
    59     Color COLOR_WIDGET_FOREGROUND;
    59     static Color COLOR_WIDGET_FOREGROUND;
    60     Color COLOR_WIDGET_HIGHLIGHT_SHADOW;
    60     static Color COLOR_WIDGET_HIGHLIGHT_SHADOW;
    61     Color COLOR_WIDGET_LIGHT_SHADOW;
    61     static Color COLOR_WIDGET_LIGHT_SHADOW;
    62     Color COLOR_WIDGET_NORMAL_SHADOW;
    62     static Color COLOR_WIDGET_NORMAL_SHADOW;
    63     
    63     
    64     // Disposed state flag
    64     // Disposed state flag, instance data
    65     protected boolean disposed;
    65     protected boolean disposed;
       
    66     
       
    67     // Initialized state flag
       
    68     static boolean initialized;
       
    69     
       
    70 	// Internal state flag telling if this is the application's instance
       
    71 	// or an internal one
       
    72     boolean internal;
    66     
    73     
    67     // Handle to the null Icon. Eventually set by Image.internal_getNullIconHandle
    74     // Handle to the null Icon. Eventually set by Image.internal_getNullIconHandle
    68     static int nullIconHandle;
    75     static int nullIconHandle;
    69     
    76     
    70     // Default height for FontData
    77     // Default height for FontData
    71     static final int FONT_DEF_HEIGHT = 12;
    78     static final int FONT_DEF_HEIGHT = 12;
    72     
    79         
    73     /*
       
    74     * TEMPORARY CODE. When a graphics object is
       
    75     * created and the device parameter is null,
       
    76     * the current Display is used. This presents
       
    77     * a problem because SWT graphics does not
       
    78     * reference classes in SWT widgets. The correct
       
    79     * fix is to remove this feature. Unfortunately,
       
    80     * too many application programs rely on this
       
    81     * feature.
       
    82     *
       
    83     * This code will be removed in the future.
       
    84     */
       
    85     protected static Device CurrentDevice;
       
    86     protected static Runnable DeviceFinder;
       
    87     static {
    80     static {
    88         try {
    81         try {
    89             Class.forName ("org.eclipse.swt.widgets.Display");
    82             Class.forName ("org.eclipse.swt.widgets.Display");
    90         } catch (Throwable e) {}
    83         } catch (Throwable e) {}
    91     }   
    84     }   
    92 
    85 
    93 /*
       
    94 * TEMPORARY CODE.
       
    95 */
       
    96 static synchronized Device getDevice () {
       
    97     if (DeviceFinder != null) DeviceFinder.run();
       
    98     Device device = CurrentDevice;  
       
    99     CurrentDevice = null;
       
   100     return device;
       
   101 }
       
   102 
       
   103 /**
    86 /**
   104  * Constructs a new instance of this class.
    87  * Constructs a new instance of this class.
   105  * <p>
    88  * <p>
   106  * You must dispose the device when it is no longer required. 
    89  * You must dispose the device when it is no longer required. 
   107  * </p>
    90  * </p>
   126  * @see #create
   109  * @see #create
   127  * @see #init
   110  * @see #init
   128  * @see DeviceData
   111  * @see DeviceData
   129  */
   112  */
   130 public Device(DeviceData data) {
   113 public Device(DeviceData data) {
       
   114 	this(data, false);
       
   115 }
       
   116 
       
   117 /**
       
   118  * <p>
       
   119  * <b>IMPORTANT:</b> This constructor is <em>not</em> part of the SWT
       
   120  * public API. It should never be referenced from application code.
       
   121  * </p>
       
   122  */
       
   123 protected Device(DeviceData data, boolean internal) {
   131     synchronized (Device.class) {
   124     synchronized (Device.class) {
       
   125     	this.internal = internal;
   132         if (data != null) {
   126         if (data != null) {
   133             debug = data.debug;
   127             debug = data.debug;
   134             tracking = data.tracking;
   128             tracking = data.tracking;
   135         }
   129         }
   136         if (tracking) {
   130         if (tracking) {
   139             trackingLock = new Object ();
   133             trackingLock = new Object ();
   140         }
   134         }
   141         // In this order
   135         // In this order
   142         init();
   136         init();
   143         register(this);
   137         register(this);
       
   138     	initialized = true;
   144     }
   139     }
   145 }
   140 }
   146 
   141 
   147 /**
   142 /**
   148  * Throws an <code>SWTException</code> if the receiver can not
   143  * Throws an <code>SWTException</code> if the receiver can not
   218             release();
   213             release();
   219             destroy();
   214             destroy();
   220             deregister(this);
   215             deregister(this);
   221         } finally {
   216         } finally {
   222             disposed = true;
   217             disposed = true;
       
   218         	initialized = false;
   223         }
   219         }
   224         if (tracking) {
   220         if (tracking) {
   225             synchronized (trackingLock) {
   221             synchronized (trackingLock) {
   226                 printErrors ();
   222                 printErrors ();
   227                 objects = null;
   223                 objects = null;
   565  * </p>
   561  * </p>
   566  * 
   562  * 
   567  * @see #create
   563  * @see #create
   568  */
   564  */
   569 protected void init () {
   565 protected void init () {
   570     int palette = OS.QApplication_swt_palette_new();
   566 	if(!initialized) {
   571     try {
   567 	    int palette = OS.QApplication_swt_palette_new();
   572         int[] rgb;
   568 	    try {
   573         
   569 	        int[] rgb;
   574         // List like widgets
   570 	        
   575         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_BASE);
   571 	        // List like widgets
   576         COLOR_LIST_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   572 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_BASE);
   577         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_TEXT);
   573 	        COLOR_LIST_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   578         COLOR_LIST_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   574 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_TEXT);
   579     
   575 	        COLOR_LIST_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   580         // Highlight
   576 	    
   581         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_HIGHLIGHT);
   577 	        // Highlight
   582         COLOR_LIST_SELECTION = new Color(this, rgb[0], rgb[1], rgb[2]);
   578 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_HIGHLIGHT);
   583         COLOR_TITLE_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);    
   579 	        COLOR_LIST_SELECTION = new Color(this, rgb[0], rgb[1], rgb[2]);
   584         COLOR_TITLE_BACKGROUND_GRADIENT = new Color(this, rgb[0], rgb[1], rgb[2]);
   580 	        COLOR_TITLE_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);    
   585         COLOR_WIDGET_HIGHLIGHT_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   581 	        COLOR_TITLE_BACKGROUND_GRADIENT = new Color(this, rgb[0], rgb[1], rgb[2]);
   586         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_HIGHLIGHTTEXT);
   582 	        COLOR_WIDGET_HIGHLIGHT_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   587         COLOR_LIST_SELECTION_TEXT = new Color(this, rgb[0], rgb[1], rgb[2]);
   583 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_HIGHLIGHTTEXT);
   588         COLOR_TITLE_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   584 	        COLOR_LIST_SELECTION_TEXT = new Color(this, rgb[0], rgb[1], rgb[2]);
   589     
   585 	        COLOR_TITLE_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   590         // Inactive highlight
   586 	    
   591         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_DISABLED, OS.QPALETTE_COLORROLE_HIGHLIGHT);
   587 	        // Inactive highlight
   592         COLOR_TITLE_INACTIVE_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   588 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_DISABLED, OS.QPALETTE_COLORROLE_HIGHLIGHT);
   593         COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = new Color(this, rgb[0], rgb[1], rgb[2]);
   589 	        COLOR_TITLE_INACTIVE_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   594         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_DISABLED, OS.QPALETTE_COLORROLE_TEXT);
   590 	        COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = new Color(this, rgb[0], rgb[1], rgb[2]);
   595         COLOR_TITLE_INACTIVE_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   591 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_DISABLED, OS.QPALETTE_COLORROLE_TEXT);
   596         
   592 	        COLOR_TITLE_INACTIVE_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   597         // Window
   593 	        
   598         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_WINDOW);
   594 	        // Window
   599         COLOR_WIDGET_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   595 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_WINDOW);
   600         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_WINDOWTEXT);
   596 	        COLOR_WIDGET_BACKGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   601         COLOR_WIDGET_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   597 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_WINDOWTEXT);
   602         
   598 	        COLOR_WIDGET_FOREGROUND = new Color(this, rgb[0], rgb[1], rgb[2]);
   603         // Shadows: Black <= Shadow < [Dark] < [Mid] < [Button] < Midlight < Light <= White
   599 	        
   604         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_DARK);
   600 	        // Shadows: Black <= Shadow < [Dark] < [Mid] < [Button] < Midlight < Light <= White
   605         COLOR_WIDGET_DARK_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);    
   601 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_DARK);
   606         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_MID);
   602 	        COLOR_WIDGET_DARK_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);    
   607         COLOR_WIDGET_BORDER = new Color(this, rgb[0], rgb[1], rgb[2]);
   603 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_MID);
   608         COLOR_WIDGET_NORMAL_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   604 	        COLOR_WIDGET_BORDER = new Color(this, rgb[0], rgb[1], rgb[2]);
   609         rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_BUTTON);
   605 	        COLOR_WIDGET_NORMAL_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   610         COLOR_WIDGET_LIGHT_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   606 	        rgb = OS.QPalette_color(palette, OS.QPALETTE_COLORGROUP_NORMAL, OS.QPALETTE_COLORROLE_BUTTON);
   611     } finally {
   607 	        COLOR_WIDGET_LIGHT_SHADOW = new Color(this, rgb[0], rgb[1], rgb[2]);
   612         OS.QPalette_delete(palette);
   608 	    } finally {
   613     }
   609 	        OS.QPalette_delete(palette);
   614     paintDevice = OS.QApplication_swt_desktopPaintDevice();
   610 	    }
       
   611 	    paintDevice = OS.QApplication_swt_desktopPaintDevice();
       
   612 	}
   615 }
   613 }
   616 
   614 
   617 /**  
   615 /**  
   618  * Invokes platform specific functionality to allocate a new GC handle.
   616  * Invokes platform specific functionality to allocate a new GC handle.
   619  * <p>
   617  * <p>
   759     if (deviceCount() == 1) {
   757     if (deviceCount() == 1) {
   760         if ( nullIconHandle != 0 ){ 
   758         if ( nullIconHandle != 0 ){ 
   761             OS.QIcon_delete( nullIconHandle );
   759             OS.QIcon_delete( nullIconHandle );
   762             nullIconHandle = 0;
   760             nullIconHandle = 0;
   763         }
   761         }
       
   762         COLOR_LIST_BACKGROUND.dispose();
       
   763         COLOR_LIST_FOREGROUND.dispose();
       
   764         COLOR_LIST_SELECTION.dispose();
       
   765         COLOR_LIST_SELECTION_TEXT.dispose();
       
   766         COLOR_TITLE_BACKGROUND.dispose();
       
   767         COLOR_TITLE_BACKGROUND_GRADIENT.dispose();
       
   768         COLOR_TITLE_FOREGROUND.dispose();
       
   769         COLOR_TITLE_INACTIVE_BACKGROUND.dispose();
       
   770         COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT.dispose();
       
   771         COLOR_TITLE_INACTIVE_FOREGROUND.dispose();
       
   772         COLOR_WIDGET_BACKGROUND.dispose();
       
   773         COLOR_WIDGET_BORDER.dispose();
       
   774         COLOR_WIDGET_DARK_SHADOW.dispose();
       
   775         COLOR_WIDGET_FOREGROUND.dispose();
       
   776         COLOR_WIDGET_HIGHLIGHT_SHADOW.dispose();
       
   777         COLOR_WIDGET_LIGHT_SHADOW.dispose();
       
   778         COLOR_WIDGET_NORMAL_SHADOW.dispose();
       
   779         
       
   780         COLOR_LIST_BACKGROUND = null;
       
   781         COLOR_LIST_FOREGROUND = null;
       
   782         COLOR_LIST_SELECTION = null;
       
   783         COLOR_LIST_SELECTION_TEXT = null;
       
   784         COLOR_TITLE_BACKGROUND = null;
       
   785         COLOR_TITLE_BACKGROUND_GRADIENT = null;
       
   786         COLOR_TITLE_FOREGROUND = null;
       
   787         COLOR_TITLE_INACTIVE_BACKGROUND = null;
       
   788         COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = null;
       
   789         COLOR_TITLE_INACTIVE_FOREGROUND = null;
       
   790         COLOR_WIDGET_BACKGROUND = null;
       
   791         COLOR_WIDGET_BORDER = null;
       
   792         COLOR_WIDGET_DARK_SHADOW = null;
       
   793         COLOR_WIDGET_FOREGROUND = null;
       
   794         COLOR_WIDGET_HIGHLIGHT_SHADOW = null;
       
   795         COLOR_WIDGET_LIGHT_SHADOW = null;
       
   796         COLOR_WIDGET_NORMAL_SHADOW = null;
       
   797         
       
   798         paintDevice = 0;
   764     }
   799     }
   765     
   800     
   766     // Non static data follows
   801     // Non static data follows
   767     COLOR_LIST_BACKGROUND.dispose();
   802     // No non-static data to release
   768     COLOR_LIST_FOREGROUND.dispose();
       
   769     COLOR_LIST_SELECTION.dispose();
       
   770     COLOR_LIST_SELECTION_TEXT.dispose();
       
   771     COLOR_TITLE_BACKGROUND.dispose();
       
   772     COLOR_TITLE_BACKGROUND_GRADIENT.dispose();
       
   773     COLOR_TITLE_FOREGROUND.dispose();
       
   774     COLOR_TITLE_INACTIVE_BACKGROUND.dispose();
       
   775     COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT.dispose();
       
   776     COLOR_TITLE_INACTIVE_FOREGROUND.dispose();
       
   777     COLOR_WIDGET_BACKGROUND.dispose();
       
   778     COLOR_WIDGET_BORDER.dispose();
       
   779     COLOR_WIDGET_DARK_SHADOW.dispose();
       
   780     COLOR_WIDGET_FOREGROUND.dispose();
       
   781     COLOR_WIDGET_HIGHLIGHT_SHADOW.dispose();
       
   782     COLOR_WIDGET_LIGHT_SHADOW.dispose();
       
   783     COLOR_WIDGET_NORMAL_SHADOW.dispose();
       
   784     
       
   785     COLOR_LIST_BACKGROUND = null;
       
   786     COLOR_LIST_FOREGROUND = null;
       
   787     COLOR_LIST_SELECTION = null;
       
   788     COLOR_LIST_SELECTION_TEXT = null;
       
   789     COLOR_TITLE_BACKGROUND = null;
       
   790     COLOR_TITLE_BACKGROUND_GRADIENT = null;
       
   791     COLOR_TITLE_FOREGROUND = null;
       
   792     COLOR_TITLE_INACTIVE_BACKGROUND = null;
       
   793     COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = null;
       
   794     COLOR_TITLE_INACTIVE_FOREGROUND = null;
       
   795     COLOR_WIDGET_BACKGROUND = null;
       
   796     COLOR_WIDGET_BORDER = null;
       
   797     COLOR_WIDGET_DARK_SHADOW = null;
       
   798     COLOR_WIDGET_FOREGROUND = null;
       
   799     COLOR_WIDGET_HIGHLIGHT_SHADOW = null;
       
   800     COLOR_WIDGET_LIGHT_SHADOW = null;
       
   801     COLOR_WIDGET_NORMAL_SHADOW = null;
       
   802     
       
   803     paintDevice = 0;
       
   804 }
   803 }
   805 
   804 
   806 /**
   805 /**
   807  * If the underlying window system supports printing warning messages
   806  * If the underlying window system supports printing warning messages
   808  * to the console, setting warnings to <code>false</code> prevents these
   807  * to the console, setting warnings to <code>false</code> prevents these