javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Graphics.java
branchRCL_3
changeset 25 9ac0a0a7da70
parent 19 04becd199f91
child 46 4376525cdefb
--- a/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Graphics.java	Tue May 11 16:07:20 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Graphics.java	Tue May 25 12:34:19 2010 +0300
@@ -157,6 +157,7 @@
     private Font    iScalableFont;
     private boolean iFontSet;
     private boolean iScalableFontSet;
+    private boolean iM3Gdraw;
 
     private int iOnScreenWidth;  // width of screen
     private int iOnScreenHeight; // height of screen
@@ -195,7 +196,7 @@
         iToolkit = aToolkit;
         iBuffer = aToolkit.iBuffer;
         iTarget = aTarget;
-
+        iM3Gdraw = false;
         iIsSetTargetSize = false;
         // If a Graphics is drawing to image then a image is saved. Null otherwise
         iImage = (aTarget instanceof Image) ? (Image)aTarget : null;
@@ -954,8 +955,17 @@
             {
                 // checking of anchor
                 aAnchor = checkAnchor(aAnchor, IMAGE_ANCHOR_MASK);
-                // send image with drawing point to native side
-                iBuffer.write(iHandle, OP_DRAW_IMAGE, aImage.iHandle, aX, aY, aAnchor);
+
+                // Prevent aImage to be disposed when in use
+                synchronized (aImage)
+                {
+                    // Check that aImage haven't been disposed yet
+                    if (aImage.iHandle != 0)
+                    {
+                        // send image with drawing point to native side
+                        iBuffer.write(iHandle, OP_DRAW_IMAGE, aImage.iHandle, aX, aY, aAnchor);
+                    }
+                }
             }
         }
     }
@@ -1388,18 +1398,27 @@
         {
             synchronized (iBuffer)
             {
-                // If downscaling off, then it only send data to native side
-                iBuffer.write(iHandle,
-                              OP_DRAW_REGION,
-                              aImage.iHandle,
-                              aXsrc,
-                              aYsrc,
-                              aWidth,
-                              aHeight,
-                              aTransform,
-                              aXdest,
-                              aYdest,
-                              aAnchor);
+                // Prevent aImage to be disposed when in use
+                synchronized (aImage)
+                {
+                    // Check that aImage haven't been disposed yet
+                    if (aImage.iHandle != 0)
+                    {
+                        // If downscaling off, 
+                        // then it only send data to native side
+                        iBuffer.write(iHandle,
+                                      OP_DRAW_REGION,
+                                      aImage.iHandle,
+                                      aXsrc,
+                                      aYsrc,
+                                      aWidth,
+                                      aHeight,
+                                      aTransform,
+                                      aXdest,
+                                      aYdest,
+                                      aAnchor);
+                    }
+                }
             }
         }
     }
@@ -1457,14 +1476,33 @@
     }
 
     /**
+     *this function blocking downscaled when M3G drawing some content    
+     **/    
+    void M3Gdraw(int aM3Gdraw)
+    {
+       if (aM3Gdraw == 0) 
+          {
+             iM3Gdraw = false;
+          }
+       else
+       { 
+          iM3Gdraw = true; 
+       }
+    }
+    /**
      * This function return flag if Graphics is downscaled.
      * Graphics is downscaled on if we have set original size, this size is bigger then screen
      * (at least on one measure) and iTarget is Canvas in full screen Canvas or a target size is
      * smaller than original size.
      * @return true if Graphics is downscaled, false otherwise
-     */
+     */ 
     boolean isDownscaled()
     {
+       // If M3G is drawnig then downscaling is turn off.
+       if (iM3Gdraw)
+          { 
+             return false;
+          }
         if ((iTarget instanceof Canvas) && ((Canvas)iTarget).getFullScreenMode()
                 && iIsSetOriginalSize)
         {