001: package demo.notification.whiteboard;
002:
003: import java.util.Iterator;
004: import java.util.List;
005:
006: import org.omg.CORBA.ORB;
007: import org.omg.CosEventComm.Disconnected;
008: import org.omg.CosNotification.StructuredEvent;
009: import org.omg.CosNotifyChannelAdmin.StructuredProxyPushConsumer;
010:
011: /**
012: * @author Alphonse Bendt
013: * @version $Id: ExtendedPixelImage.java,v 1.3 2004/04/28 13:52:02 alphonse.bendt Exp $
014: */
015:
016: public class ExtendedPixelImage extends BrushSizePixelImage implements
017: WhiteboardVars {
018:
019: StructuredProxyPushConsumer myConsumer_;
020: StructuredEvent event_;
021: ORB orb_;
022:
023: public void setPixels(int[] pixels) {
024: for (int x = 0; x < m_pixels.length; x++)
025: m_pixels[x] = pixels[x];
026: }
027:
028: public ExtendedPixelImage(int w, int h) {
029: super (w, h);
030: }
031:
032: public void setOrb(ORB orb) {
033: orb_ = orb;
034: }
035:
036: public void setEvent(StructuredEvent event) {
037: event_ = event;
038: }
039:
040: // lo"schen mitschreiben und lo"schen
041: synchronized public void clearAll() {
042: WhiteboardUpdate _update = new WhiteboardUpdate();
043: _update.clear(true);
044: super .clearAll();
045: }
046:
047: // lo"schen nur lokal
048: public void localClearAll() {
049: super .clearAll();
050: }
051:
052: // dieses drawLine wird von 'remote' aufgerufen
053: // und merkt sich u"ber den aufruf die bei uns eingestellte
054: // brushSize
055: synchronized public void drawLine(int x0, int y0, int x1, int y1,
056: int red, int green, int blue, int brushSize) {
057: int x = getBrushSize();
058: setBrushSize(brushSize);
059: super .drawLine(x0, y0, x1, y1, red, green, blue);
060: setBrushSize(x);
061: }
062:
063: // gezeichnete Linien mitschreiben ansonsten
064: // normal zeichnen
065: synchronized public void drawLine(int x0, int y0, int x1, int y1,
066: int red, int green, int blue) {
067:
068: WhiteboardUpdate _update = new WhiteboardUpdate();
069:
070: super .drawLine(x0, y0, x1, y1, red, green, blue);
071: _update.line(new LineData(x0, y0, x1, y1, red, green, blue,
072: getBrushSize()));
073:
074: try {
075: if (myConsumer_ != null) {
076: WhiteboardUpdateHelper.insert(event_.remainder_of_body,
077: _update);
078: myConsumer_.push_structured_event(event_);
079: }
080: } catch (Disconnected d) {
081: d.printStackTrace();
082: myConsumer_ = null;
083: }
084: }
085:
086: // wird vom ghostWriter aufgerufen ...
087: // also A"nderung zeichnen
088: // und merken
089: synchronized public void drawLine(UpdateLine ul, boolean v) {
090: drawLine(ul);
091: //lines.addElement(ul);
092: }
093:
094: // drawLine das auf UpdateLine Objekten arbeitet
095: void drawLine(UpdateLine ul) {
096: if (!ul.clearScreen())
097: drawLine(ul.getX0(), ul.getY0(), ul.getX1(), ul.getY1(), ul
098: .getRed(), ul.getGreen(), ul.getBlue(), ul
099: .getBrushSize());
100: else
101: super .clearAll();
102: }
103:
104: // UpdateLines auspacken und alle einzeichnen
105: public void drawLine(List uls) {
106: Iterator i = uls.iterator();
107: while (i.hasNext()) {
108: drawLine((UpdateLine) i.next());
109: }
110: }
111: }
|