diff options
author | Kurt Zenker <kz@openoffice.org> | 2004-10-04 18:56:29 +0000 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2004-10-04 18:56:29 +0000 |
commit | 9fdb743dc40609c37bf9677874e9aa9d9c2aad7f (patch) | |
tree | f7fe8a042593911d6f6cde54a7d8300ad0b85787 /embeddedobj/test | |
parent | 9c79155b39029c46aa6c756b3f579bace847c262 (diff) |
INTEGRATION: CWS mav09 (1.1.2); FILE ADDED
2004/02/23 09:43:34 mav 1.1.2.3: #115011# improve object painting
2004/02/19 10:31:37 mav 1.1.2.2: #115011# embedded object representation
2004/01/28 08:58:34 mav 1.1.2.1: #115011# bitmap painting
Diffstat (limited to 'embeddedobj/test')
-rw-r--r-- | embeddedobj/test/Container1/BitmapPainter.java | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/embeddedobj/test/Container1/BitmapPainter.java b/embeddedobj/test/Container1/BitmapPainter.java new file mode 100644 index 000000000000..2910eab3f224 --- /dev/null +++ b/embeddedobj/test/Container1/BitmapPainter.java @@ -0,0 +1,286 @@ +package embeddedobj.test; + +import java.awt.*; +import java.applet.*; +import java.awt.event.*; +import java.net.*; +import java.io.*; + +import com.sun.star.awt.XBitmap; +import com.sun.star.awt.XDevice; +import com.sun.star.awt.XDisplayBitmap; +import com.sun.star.awt.XGraphics; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XSystemChildFactory; +import com.sun.star.awt.WindowDescriptor; +import com.sun.star.awt.WindowClass; +import com.sun.star.awt.WindowAttribute; + +import com.sun.star.awt.XPaintListener; +import com.sun.star.awt.PaintEvent; +import com.sun.star.awt.XMouseListener; +import com.sun.star.awt.XMouseMotionListener; +import com.sun.star.awt.MouseEvent; +import com.sun.star.awt.Point; + +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.Any; +import com.sun.star.lang.XMultiServiceFactory; + +import com.sun.star.task.XJob; +import com.sun.star.beans.NamedValue; + + +class BitmapPainter implements XPaintListener, XMouseListener, XMouseMotionListener, XJob +{ + private XWindow m_xWindow; + private XBitmap m_xBitmap; + + private com.sun.star.awt.Rectangle m_aDrawRect; + + private Object m_oImageLock; + + private PaintThread m_aPaintThread; + + // private XJob m_xMainThreadExecutor; + // private NamedValue[] m_pValuesForExecutor; + + private boolean m_bFree = true; + + private boolean m_bProceedWithPainting = true; + +// Methods + //------------------------------------------------------ + public BitmapPainter( XJob xJob, XWindow xWindow, XBitmap xBitmap, com.sun.star.awt.Rectangle aDrawRect ) + { + if ( xJob == null ) + { + System.out.println( "No mainthreadexecutor is provided to BimapPainter on init!" ); + throw new com.sun.star.uno.RuntimeException(); + } + + if ( xWindow == null ) + { + System.out.println( "No window is provided to BimapPainter on init!" ); + throw new com.sun.star.uno.RuntimeException(); + } + + // m_xMainThreadExecutor = xJob; + // m_pValuesForExecutor = new NamedValue[1]; + // m_pValuesForExecutor[0] = new NamedValue( "JobToExecute", (Object)this ); + + m_xWindow = xWindow; + m_xBitmap = xBitmap; + + m_aDrawRect = aDrawRect; + + m_oImageLock = new Object(); + + m_aPaintThread = new PaintThread( m_xWindow ); + m_aPaintThread.start(); + + m_xWindow.addPaintListener( this ); + m_xWindow.addMouseListener( this ); + m_xWindow.addMouseMotionListener( this ); + } + + //------------------------------------------------------ + public void disconnectListener() + { + m_aPaintThread.disposeThread(); + m_xWindow.removePaintListener( this ); + m_xWindow.removeMouseListener( this ); + m_xWindow.removeMouseMotionListener( this ); + } + + //------------------------------------------------------ + public void setBitmap( XBitmap xBitmap ) + { + synchronized( m_oImageLock ) + { + m_xBitmap = xBitmap; + } + } + + //------------------------------------------------------ + public void setPos( com.sun.star.awt.Point aPoint ) + { + synchronized( m_oImageLock ) + { + m_aDrawRect.X = aPoint.X; + m_aDrawRect.Y = aPoint.Y; + } + } + + //------------------------------------------------------ + public void setRect( com.sun.star.awt.Rectangle aRect ) + { + synchronized( m_oImageLock ) + { + m_aDrawRect = aRect; + } + } + + //------------------------------------------------------ + public void setSize( com.sun.star.awt.Size aSize ) + { + synchronized( m_oImageLock ) + { + m_aDrawRect.Width = aSize.Width; + m_aDrawRect.Height = aSize.Height; + } + } + + //------------------------------------------------------ + public void stopPainting() + { + m_bProceedWithPainting = false; + } + + //------------------------------------------------------ + public void startPainting() + { + m_bProceedWithPainting = true; + } + + // XPaintListener + //------------------------------------------------------ + public void windowPaint( PaintEvent e ) + { + if ( !m_bProceedWithPainting ) + return; + + XBitmap xBitmap = null; + com.sun.star.awt.Rectangle aRect = null; + // boolean bFree = false; + + synchronized( m_oImageLock ) + { + xBitmap = m_xBitmap; + aRect = m_aDrawRect; + // if ( m_bFree ) + // { + // bFree = true; + // m_bFree = false; + // } + } + + m_aPaintThread.setPaintRequest( xBitmap, aRect, e.UpdateRect ); + // if ( bFree ) + // { + // try { + // m_xMainThreadExecutor.execute( m_pValuesForExecutor ); + // } catch( Exception ex ) + // { + // m_bFree = true; + // } + // } + + System.out.println( "VCL window paint event!" ); + } + + // XMouseListener + //------------------------------------------------------ + public void mousePressed( MouseEvent e ) + { + } + + //------------------------------------------------------ + public void mouseReleased( MouseEvent e ) + { + } + + //------------------------------------------------------ + public void mouseEntered( MouseEvent e ) + { + } + + //------------------------------------------------------ + public void mouseExited( MouseEvent e ) + { + } + + // XMouseMotionListener + //------------------------------------------------------ + public void mouseDragged( MouseEvent e ) + { + // TODO: react to resizing of object bitmap + // if the object is inplace active the object must control resizing + } + + //------------------------------------------------------ + public void mouseMoved( MouseEvent e ) + { + + } + + // XEventListener + //------------------------------------------------------ + public void disposing( com.sun.star.lang.EventObject e ) + { + // do nothing, the window can die only when the application is closed + } + + // XJob + //------------------------------------------------------ + public Object execute( NamedValue[] pValues ) + { +/* + // means request for painting + + XBitmap xBitmap = null; + com.sun.star.awt.Rectangle aRect = null; + + synchronized( m_oImageLock ) + { + xBitmap = m_xBitmap; + aRect = m_aDrawRect; + } + + System.out.println( "The bitmap is going to be painted!" ); + + try { + XDevice xDevice = (XDevice)UnoRuntime.queryInterface( XDevice.class, m_xWindow ); + if ( xDevice != null ) + { + System.out.println( "Step1" ); + XGraphics xGraphics = xDevice.createGraphics(); + if ( xBitmap != null ) + { + System.out.println( "Step2" ); + XDisplayBitmap xDisplayBitmap = xDevice.createDisplayBitmap( xBitmap ); + + com.sun.star.awt.Size aSize = xBitmap.getSize(); + xGraphics.draw( xDisplayBitmap, 0, 0, aSize.Width, aSize.Height, + aRect.X, aRect.Y, aRect.Width, aRect.Height ); + } + + System.out.println( "Step3" ); + xGraphics.drawRect( aRect.X - 1, aRect.Y - 1, aRect.Width + 2, aRect.Height + 2 ); + + // draw resize squares + System.out.println( "Step4" ); + xGraphics.drawRect( aRect.X - 2, aRect.Y - 2, 4, 4 ); + xGraphics.drawRect( aRect.X + aRect.Width - 2, aRect.Y - 2, 4, 4 ); + xGraphics.drawRect( aRect.X - 2, aRect.Y + aRect.Height - 2, 4, 4 ); + xGraphics.drawRect( aRect.X + aRect.Width - 2, aRect.Y + aRect.Height - 2, 4, 4 ); + + System.out.println( "Step5" ); + + System.out.println( "The bitmap is painted by BitmapPainter!" ); + } + } + catch ( Exception e ) + { + } + + m_bFree = true; + +*/ + return Any.VOID; + } + +}; + |