xref: /AOO42X/main/embeddedobj/test/Container1/BitmapPainter.java (revision b0efeae40e43e6d4ccd561d22ec612d42773857b)
1*113d1ee9SAndrew Rist /**************************************************************
2*113d1ee9SAndrew Rist  *
3*113d1ee9SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*113d1ee9SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*113d1ee9SAndrew Rist  * distributed with this work for additional information
6*113d1ee9SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*113d1ee9SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*113d1ee9SAndrew Rist  * "License"); you may not use this file except in compliance
9*113d1ee9SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*113d1ee9SAndrew Rist  *
11*113d1ee9SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*113d1ee9SAndrew Rist  *
13*113d1ee9SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*113d1ee9SAndrew Rist  * software distributed under the License is distributed on an
15*113d1ee9SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*113d1ee9SAndrew Rist  * KIND, either express or implied.  See the License for the
17*113d1ee9SAndrew Rist  * specific language governing permissions and limitations
18*113d1ee9SAndrew Rist  * under the License.
19*113d1ee9SAndrew Rist  *
20*113d1ee9SAndrew Rist  *************************************************************/
21*113d1ee9SAndrew Rist 
22cdf0e10cSrcweir package embeddedobj.test;
23cdf0e10cSrcweir 
24cdf0e10cSrcweir import java.awt.*;
25cdf0e10cSrcweir import java.applet.*;
26cdf0e10cSrcweir import java.awt.event.*;
27cdf0e10cSrcweir import java.net.*;
28cdf0e10cSrcweir import java.io.*;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir import com.sun.star.awt.XBitmap;
31cdf0e10cSrcweir import com.sun.star.awt.XDevice;
32cdf0e10cSrcweir import com.sun.star.awt.XDisplayBitmap;
33cdf0e10cSrcweir import com.sun.star.awt.XGraphics;
34cdf0e10cSrcweir import com.sun.star.awt.XWindow;
35cdf0e10cSrcweir import com.sun.star.awt.XWindowPeer;
36cdf0e10cSrcweir import com.sun.star.awt.XToolkit;
37cdf0e10cSrcweir import com.sun.star.awt.XSystemChildFactory;
38cdf0e10cSrcweir import com.sun.star.awt.WindowDescriptor;
39cdf0e10cSrcweir import com.sun.star.awt.WindowClass;
40cdf0e10cSrcweir import com.sun.star.awt.WindowAttribute;
41cdf0e10cSrcweir 
42cdf0e10cSrcweir import com.sun.star.awt.XPaintListener;
43cdf0e10cSrcweir import com.sun.star.awt.PaintEvent;
44cdf0e10cSrcweir import com.sun.star.awt.XMouseListener;
45cdf0e10cSrcweir import com.sun.star.awt.XMouseMotionListener;
46cdf0e10cSrcweir import com.sun.star.awt.MouseEvent;
47cdf0e10cSrcweir import com.sun.star.awt.Point;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
50cdf0e10cSrcweir import com.sun.star.uno.Any;
51cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
52cdf0e10cSrcweir 
53cdf0e10cSrcweir import com.sun.star.task.XJob;
54cdf0e10cSrcweir import com.sun.star.beans.NamedValue;
55cdf0e10cSrcweir 
56cdf0e10cSrcweir 
57cdf0e10cSrcweir class BitmapPainter implements XPaintListener, XMouseListener, XMouseMotionListener, XJob
58cdf0e10cSrcweir {
59cdf0e10cSrcweir     private XWindow m_xWindow;
60cdf0e10cSrcweir     private XBitmap m_xBitmap;
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     private com.sun.star.awt.Rectangle m_aDrawRect;
63cdf0e10cSrcweir 
64cdf0e10cSrcweir     private Object m_oImageLock;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir     private PaintThread m_aPaintThread;
67cdf0e10cSrcweir 
68cdf0e10cSrcweir     // private XJob m_xMainThreadExecutor;
69cdf0e10cSrcweir     // private NamedValue[] m_pValuesForExecutor;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     private boolean m_bFree = true;
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     private boolean m_bProceedWithPainting = true;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir // Methods
76cdf0e10cSrcweir     //------------------------------------------------------
BitmapPainter( XJob xJob, XWindow xWindow, XBitmap xBitmap, com.sun.star.awt.Rectangle aDrawRect )77cdf0e10cSrcweir     public BitmapPainter( XJob xJob, XWindow xWindow, XBitmap xBitmap, com.sun.star.awt.Rectangle aDrawRect )
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         if ( xJob == null )
80cdf0e10cSrcweir         {
81cdf0e10cSrcweir             System.out.println( "No mainthreadexecutor is provided to BimapPainter on init!" );
82cdf0e10cSrcweir             throw new com.sun.star.uno.RuntimeException();
83cdf0e10cSrcweir         }
84cdf0e10cSrcweir 
85cdf0e10cSrcweir         if ( xWindow == null )
86cdf0e10cSrcweir         {
87cdf0e10cSrcweir             System.out.println( "No window is provided to BimapPainter on init!" );
88cdf0e10cSrcweir             throw new com.sun.star.uno.RuntimeException();
89cdf0e10cSrcweir         }
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         // m_xMainThreadExecutor = xJob;
92cdf0e10cSrcweir         // m_pValuesForExecutor = new NamedValue[1];
93cdf0e10cSrcweir         // m_pValuesForExecutor[0] = new NamedValue( "JobToExecute", (Object)this );
94cdf0e10cSrcweir 
95cdf0e10cSrcweir         m_xWindow = xWindow;
96cdf0e10cSrcweir         m_xBitmap = xBitmap;
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         m_aDrawRect = aDrawRect;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir         m_oImageLock = new Object();
101cdf0e10cSrcweir 
102cdf0e10cSrcweir         m_aPaintThread = new PaintThread( m_xWindow );
103cdf0e10cSrcweir         m_aPaintThread.start();
104cdf0e10cSrcweir 
105cdf0e10cSrcweir         m_xWindow.addPaintListener( this );
106cdf0e10cSrcweir         m_xWindow.addMouseListener( this );
107cdf0e10cSrcweir         m_xWindow.addMouseMotionListener( this );
108cdf0e10cSrcweir     }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir     //------------------------------------------------------
disconnectListener()111cdf0e10cSrcweir     public void disconnectListener()
112cdf0e10cSrcweir     {
113cdf0e10cSrcweir         m_aPaintThread.disposeThread();
114cdf0e10cSrcweir         m_xWindow.removePaintListener( this );
115cdf0e10cSrcweir         m_xWindow.removeMouseListener( this );
116cdf0e10cSrcweir         m_xWindow.removeMouseMotionListener( this );
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir 
119cdf0e10cSrcweir     //------------------------------------------------------
setBitmap( XBitmap xBitmap )120cdf0e10cSrcweir     public void setBitmap( XBitmap xBitmap )
121cdf0e10cSrcweir     {
122cdf0e10cSrcweir         synchronized( m_oImageLock )
123cdf0e10cSrcweir         {
124cdf0e10cSrcweir             m_xBitmap = xBitmap;
125cdf0e10cSrcweir         }
126cdf0e10cSrcweir     }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir     //------------------------------------------------------
setPos( com.sun.star.awt.Point aPoint )129cdf0e10cSrcweir     public void setPos( com.sun.star.awt.Point aPoint )
130cdf0e10cSrcweir     {
131cdf0e10cSrcweir         synchronized( m_oImageLock )
132cdf0e10cSrcweir         {
133cdf0e10cSrcweir             m_aDrawRect.X = aPoint.X;
134cdf0e10cSrcweir             m_aDrawRect.Y = aPoint.Y;
135cdf0e10cSrcweir         }
136cdf0e10cSrcweir     }
137cdf0e10cSrcweir 
138cdf0e10cSrcweir     //------------------------------------------------------
setRect( com.sun.star.awt.Rectangle aRect )139cdf0e10cSrcweir     public void setRect( com.sun.star.awt.Rectangle aRect )
140cdf0e10cSrcweir     {
141cdf0e10cSrcweir         synchronized( m_oImageLock )
142cdf0e10cSrcweir         {
143cdf0e10cSrcweir             m_aDrawRect = aRect;
144cdf0e10cSrcweir         }
145cdf0e10cSrcweir     }
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     //------------------------------------------------------
setSize( com.sun.star.awt.Size aSize )148cdf0e10cSrcweir     public void setSize( com.sun.star.awt.Size aSize )
149cdf0e10cSrcweir     {
150cdf0e10cSrcweir         synchronized( m_oImageLock )
151cdf0e10cSrcweir         {
152cdf0e10cSrcweir             m_aDrawRect.Width = aSize.Width;
153cdf0e10cSrcweir             m_aDrawRect.Height = aSize.Height;
154cdf0e10cSrcweir         }
155cdf0e10cSrcweir     }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir     //------------------------------------------------------
stopPainting()158cdf0e10cSrcweir     public void stopPainting()
159cdf0e10cSrcweir     {
160cdf0e10cSrcweir         m_bProceedWithPainting = false;
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     //------------------------------------------------------
startPainting()164cdf0e10cSrcweir     public void startPainting()
165cdf0e10cSrcweir     {
166cdf0e10cSrcweir         m_bProceedWithPainting = true;
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     // XPaintListener
170cdf0e10cSrcweir     //------------------------------------------------------
windowPaint( PaintEvent e )171cdf0e10cSrcweir     public void windowPaint( PaintEvent e )
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         if ( !m_bProceedWithPainting )
174cdf0e10cSrcweir             return;
175cdf0e10cSrcweir 
176cdf0e10cSrcweir         XBitmap xBitmap = null;
177cdf0e10cSrcweir         com.sun.star.awt.Rectangle aRect = null;
178cdf0e10cSrcweir         // boolean bFree = false;
179cdf0e10cSrcweir 
180cdf0e10cSrcweir         synchronized( m_oImageLock )
181cdf0e10cSrcweir         {
182cdf0e10cSrcweir             xBitmap = m_xBitmap;
183cdf0e10cSrcweir             aRect = m_aDrawRect;
184cdf0e10cSrcweir             // if ( m_bFree )
185cdf0e10cSrcweir             // {
186cdf0e10cSrcweir                 // bFree = true;
187cdf0e10cSrcweir                 // m_bFree = false;
188cdf0e10cSrcweir             // }
189cdf0e10cSrcweir         }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir         m_aPaintThread.setPaintRequest( xBitmap, aRect, e.UpdateRect );
192cdf0e10cSrcweir         // if ( bFree )
193cdf0e10cSrcweir         // {
194cdf0e10cSrcweir             // try {
195cdf0e10cSrcweir                 // m_xMainThreadExecutor.execute( m_pValuesForExecutor );
196cdf0e10cSrcweir             // } catch( Exception ex )
197cdf0e10cSrcweir             // {
198cdf0e10cSrcweir                 // m_bFree = true;
199cdf0e10cSrcweir             // }
200cdf0e10cSrcweir         // }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir         System.out.println( "VCL window paint event!" );
203cdf0e10cSrcweir     }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir     // XMouseListener
206cdf0e10cSrcweir     //------------------------------------------------------
mousePressed( MouseEvent e )207cdf0e10cSrcweir     public void mousePressed( MouseEvent e )
208cdf0e10cSrcweir     {
209cdf0e10cSrcweir     }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir     //------------------------------------------------------
mouseReleased( MouseEvent e )212cdf0e10cSrcweir     public void mouseReleased( MouseEvent e )
213cdf0e10cSrcweir     {
214cdf0e10cSrcweir     }
215cdf0e10cSrcweir 
216cdf0e10cSrcweir     //------------------------------------------------------
mouseEntered( MouseEvent e )217cdf0e10cSrcweir     public void mouseEntered( MouseEvent e )
218cdf0e10cSrcweir     {
219cdf0e10cSrcweir     }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir     //------------------------------------------------------
mouseExited( MouseEvent e )222cdf0e10cSrcweir     public void mouseExited( MouseEvent e )
223cdf0e10cSrcweir     {
224cdf0e10cSrcweir     }
225cdf0e10cSrcweir 
226cdf0e10cSrcweir     // XMouseMotionListener
227cdf0e10cSrcweir     //------------------------------------------------------
mouseDragged( MouseEvent e )228cdf0e10cSrcweir     public void mouseDragged( MouseEvent e )
229cdf0e10cSrcweir     {
230cdf0e10cSrcweir         // TODO: react to resizing of object bitmap
231cdf0e10cSrcweir         // if the object is inplace active the object must control resizing
232cdf0e10cSrcweir     }
233cdf0e10cSrcweir 
234cdf0e10cSrcweir     //------------------------------------------------------
mouseMoved( MouseEvent e )235cdf0e10cSrcweir     public void mouseMoved( MouseEvent e )
236cdf0e10cSrcweir     {
237cdf0e10cSrcweir 
238cdf0e10cSrcweir     }
239cdf0e10cSrcweir 
240cdf0e10cSrcweir     // XEventListener
241cdf0e10cSrcweir     //------------------------------------------------------
disposing( com.sun.star.lang.EventObject e )242cdf0e10cSrcweir     public void disposing( com.sun.star.lang.EventObject e )
243cdf0e10cSrcweir     {
244cdf0e10cSrcweir         // do nothing, the window can die only when the application is closed
245cdf0e10cSrcweir     }
246cdf0e10cSrcweir 
247cdf0e10cSrcweir     // XJob
248cdf0e10cSrcweir     //------------------------------------------------------
execute( NamedValue[] pValues )249cdf0e10cSrcweir     public Object execute( NamedValue[] pValues )
250cdf0e10cSrcweir     {
251cdf0e10cSrcweir /*
252cdf0e10cSrcweir         // means request for painting
253cdf0e10cSrcweir 
254cdf0e10cSrcweir         XBitmap xBitmap = null;
255cdf0e10cSrcweir         com.sun.star.awt.Rectangle aRect = null;
256cdf0e10cSrcweir 
257cdf0e10cSrcweir         synchronized( m_oImageLock )
258cdf0e10cSrcweir         {
259cdf0e10cSrcweir             xBitmap = m_xBitmap;
260cdf0e10cSrcweir             aRect = m_aDrawRect;
261cdf0e10cSrcweir         }
262cdf0e10cSrcweir 
263cdf0e10cSrcweir         System.out.println( "The bitmap is going to be painted!" );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir         try {
266cdf0e10cSrcweir             XDevice xDevice = (XDevice)UnoRuntime.queryInterface( XDevice.class, m_xWindow );
267cdf0e10cSrcweir             if ( xDevice != null )
268cdf0e10cSrcweir             {
269cdf0e10cSrcweir                 System.out.println( "Step1" );
270cdf0e10cSrcweir                 XGraphics xGraphics = xDevice.createGraphics();
271cdf0e10cSrcweir                 if ( xBitmap != null )
272cdf0e10cSrcweir                 {
273cdf0e10cSrcweir                     System.out.println( "Step2" );
274cdf0e10cSrcweir                     XDisplayBitmap xDisplayBitmap = xDevice.createDisplayBitmap( xBitmap );
275cdf0e10cSrcweir 
276cdf0e10cSrcweir                     com.sun.star.awt.Size aSize = xBitmap.getSize();
277cdf0e10cSrcweir                     xGraphics.draw( xDisplayBitmap, 0, 0, aSize.Width, aSize.Height,
278cdf0e10cSrcweir                                                 aRect.X, aRect.Y, aRect.Width, aRect.Height );
279cdf0e10cSrcweir                 }
280cdf0e10cSrcweir 
281cdf0e10cSrcweir                 System.out.println( "Step3" );
282cdf0e10cSrcweir                 xGraphics.drawRect( aRect.X - 1, aRect.Y - 1, aRect.Width + 2, aRect.Height + 2 );
283cdf0e10cSrcweir 
284cdf0e10cSrcweir                 // draw resize squares
285cdf0e10cSrcweir                 System.out.println( "Step4" );
286cdf0e10cSrcweir                 xGraphics.drawRect( aRect.X - 2, aRect.Y - 2, 4, 4 );
287cdf0e10cSrcweir                 xGraphics.drawRect( aRect.X + aRect.Width - 2, aRect.Y - 2, 4, 4 );
288cdf0e10cSrcweir                 xGraphics.drawRect( aRect.X - 2, aRect.Y + aRect.Height - 2, 4, 4 );
289cdf0e10cSrcweir                 xGraphics.drawRect( aRect.X + aRect.Width - 2, aRect.Y + aRect.Height - 2, 4, 4 );
290cdf0e10cSrcweir 
291cdf0e10cSrcweir                 System.out.println( "Step5" );
292cdf0e10cSrcweir 
293cdf0e10cSrcweir                 System.out.println( "The bitmap is painted by BitmapPainter!" );
294cdf0e10cSrcweir             }
295cdf0e10cSrcweir         }
296cdf0e10cSrcweir         catch ( Exception e )
297cdf0e10cSrcweir         {
298cdf0e10cSrcweir         }
299cdf0e10cSrcweir 
300cdf0e10cSrcweir         m_bFree = true;
301cdf0e10cSrcweir 
302cdf0e10cSrcweir */
303cdf0e10cSrcweir         return Any.VOID;
304cdf0e10cSrcweir     }
305cdf0e10cSrcweir 
306cdf0e10cSrcweir };
307