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