package org.jacorb.demo.notification.whiteboard; import java.util.Iterator; import java.util.List; import org.omg.CORBA.ORB; import org.omg.CosEventComm.Disconnected; import org.omg.CosNotification.StructuredEvent; import org.omg.CosNotifyChannelAdmin.StructuredProxyPushConsumer; /** * @author Alphonse Bendt */ public class ExtendedPixelImage extends BrushSizePixelImage implements WhiteboardVars { StructuredProxyPushConsumer myConsumer_; StructuredEvent event_; ORB orb_; public void setPixels(int[] pixels) { for (int x=0; x<m_pixels.length;x++) m_pixels[x] = pixels[x]; } public ExtendedPixelImage(int w, int h) { super(w,h); } public void setOrb(ORB orb) { orb_ = orb; } public void setEvent(StructuredEvent event) { event_ = event; } // lo"schen mitschreiben und lo"schen synchronized public void clearAll() { WhiteboardUpdate _update = new WhiteboardUpdate(); _update.clear(true); super.clearAll(); } // lo"schen nur lokal public void localClearAll() { super.clearAll(); } // dieses drawLine wird von 'remote' aufgerufen // und merkt sich u"ber den aufruf die bei uns eingestellte // brushSize synchronized public void drawLine(int x0, int y0, int x1, int y1, int red, int green, int blue, int brushSize) { int x = getBrushSize(); setBrushSize(brushSize); super.drawLine(x0,y0,x1,y1,red,green,blue); setBrushSize(x); } // gezeichnete Linien mitschreiben ansonsten // normal zeichnen synchronized public void drawLine(int x0, int y0, int x1, int y1, int red, int green, int blue) { WhiteboardUpdate _update = new WhiteboardUpdate(); super.drawLine(x0,y0,x1,y1,red,green,blue); _update.line(new LineData(x0, y0, x1, y1, red, green, blue, getBrushSize())); try { if (myConsumer_ != null) { WhiteboardUpdateHelper.insert(event_.remainder_of_body, _update); myConsumer_.push_structured_event(event_); } } catch (Disconnected d) { d.printStackTrace(); myConsumer_ = null; } } // wird vom ghostWriter aufgerufen ... // also A"nderung zeichnen // und merken synchronized public void drawLine(UpdateLine ul, boolean v) { drawLine(ul); //lines.addElement(ul); } // drawLine das auf UpdateLine Objekten arbeitet void drawLine(UpdateLine ul) { if ( !ul.clearScreen() ) drawLine( ul.getX0(), ul.getY0(), ul.getX1(), ul.getY1(), ul.getRed(), ul.getGreen(), ul.getBlue(), ul.getBrushSize() ); else super.clearAll(); } // UpdateLines auspacken und alle einzeichnen public void drawLine(List uls) { Iterator i = uls.iterator(); while (i.hasNext()) { drawLine((UpdateLine)i.next() ); } } }