Icedtea-web splashscreen implementation
Jiri Vanek
jvanek at redhat.com
Tue Oct 23 10:51:06 PDT 2012
On 10/15/2012 07:39 PM, Omair Majid wrote:
> Hi Jiri,
>
> Sorry for the long delay in reviewing this.
Np:)
Thank you!
>
> On 08/13/2012 11:15 AM, Jiri Vanek wrote:
>> Attached is patch with integration "adapted for head"
>
> Comments in-line below.
>
>> + synchronized (mutex) {
>
> Please consider renaming 'mutex' to indicate what code it is making
> mutually exclusive.
I have checked, and it is simple Object lock. As far as I have not touched this code i kept it as it was.
>
>> + try {
>> + SwingUtilities.invokeAndWait(new Runnable() {
>>
>> - splashScreen.setSplashImageURL(splashImageURL);
>> + @Override
>> + public void run() {
>> + splashScreen = new JNLPSplashScreen(resourceTracker, file);
>> + }
>> + });
>> + } catch (InterruptedException ie) {
>> + // Wait till splash screen is created
>> + while (splashScreen == null);
>> + } catch (InvocationTargetException ite) {
>> + ite.printStackTrace();
>> }
>> + try {
>> + SwingUtilities.invokeAndWait(new Runnable() {
>> +
>> + @Override
>> + public void run() {
>> + splashScreen.setSplashImageURL(splashImageURL);
>> + }
>> + });
>> + } catch (InterruptedException ie) {
>> + // Wait till splash screen is created
>> + while (splashScreen == null);
>
> This doesn't make sense to me. The variable would have bee initialized
> in the previous try block. If it didn't (say an invocation exception was
> thrown in the previous try block and this try block throws an
> interrupted exception), than this will cause an infinite loop.
You are right! It does no sense at all. I have overlooked. As I'm loading image in this step, I have added loop to wait to until image is loaded. Thank you for catch this!
>
>> + // Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
>> + // setLocation((screenSize.width - minimumWidth) / 2,
>> + // (screenSize.height - minimumHeight) / 2);
>> + //Above works always, but center only to middle of all monitors
>> + //below works on 1.4 and higher, and center to middle of primary monmtor
>
> Please remove the commented out code. The comment by itself should be
> enough:
> // center to middle of primary monitor
>
Fixed. Although I have added a little bit longer comment.
>> + setLocationRelativeTo(null);
>> }
>
> Also, is it possible to center to monitor where the application was
> started (as opposed to the primary monitor)?
I mus admit I don't know how:(
At the end i have just desperately googled whole sentences..:-/shame on me/-:
Instead of primary monitor I can show on active (or random :) )monitor. But it is quite a lot of code to do something I'm not sure is good idea.
So i have left untouched for now:(
>
>
>> + AppletInstance applet = null;
>> try {
>> - AppletInstance applet = createApplet(file, enableCodeBase, cont);
>> + applet = createApplet(file, enableCodeBase, cont);
>> applet.initialize();
>>
>> applet.getAppletEnvironment().startApplet(); // this should be a direct call to applet instance
>> return applet;
>> } catch (LaunchException lex) {
>> + SplashUtils.showErrorCaught(lex, applet);
>
> Please consider letting LaunchHander (or some new interface) handle this
> without invoking SplashUtils directly. It just adds extra code
> everywhere we want to handle exceptions. It's easy for a programmer to
> miss it.
I have extracted to already widely used launchError method.
>
snip...
>
>> diff -r a86af88a8ecd plugin/icedteanp/java/sun/applet/PluginAppletViewer.java
>> --- a/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java Mon Aug 13 15:52:03 2012 +0200
>> +++ b/plugin/icedteanp/java/sun/applet/PluginAppletViewer.java Mon Aug 13 16:52:21 2012 +0200
>
> I am not very familiar with this code. Another set of eyes will be
> appreciated!
No volunteer :(
>
>
>> appletFrame.appletEventListener = new AppletEventListener(appletFrame, appletFrame);
...
typos fixed
...
>>
>> + public void run() {
>> + splashPanel.getSplashComponent().setVisible(false);
>> + splashPanel.stopAnimation();
>
> stopAnimation is called twice here too.
>
Well it is :) I wanted probably to be double sure :)
Count of calls reduced to one for each method (I was hesitating which one is better. At the end I kept stopAnimation in run{} block)
>
>> * the parent class's update() just does a couple of checks (both of
>> * which are accounted for) and then calls paint anyway.
>> */
>> - public void update(Graphics g) {
>> + public void paint(Graphics g) {
>>
>> // If the image or the graphics don't exist, create new ones
>> if (bufFrameImg == null || bufFrameImgGraphics == null) {
>> @@ -2112,11 +2248,18 @@
>> }
>>
>> // Paint off-screen
>> - paint(bufFrameImgGraphics);
>> + for (Component c: this.getComponents()) {
>> + c.update(bufFrameImgGraphics);
>
> This should be c.paint(), no?
Fixed
>
> But perhaps a better approach would be to only override paintComponent()
> method in this class, and not paint()/update().
Well probably. But I'm hesitating to touch this class more then I'm already touching.
>
Thank you for comments!
J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: splash_Integration_VIII.diff
Type: text/x-patch
Size: 32647 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/distro-pkg-dev/attachments/20121023/0f06cec5/splash_Integration_VIII.diff
More information about the distro-pkg-dev
mailing list