2
Copyright (C) 2002 Jeroen Frijters
4
This software is provided 'as-is', without any express or implied
5
warranty. In no event will the authors be held liable for any damages
6
arising from the use of this software.
8
Permission is granted to anyone to use this software for any purpose,
9
including commercial applications, and to alter it and redistribute it
10
freely, subject to the following restrictions:
12
1. The origin of this software must not be misrepresented; you must not
13
claim that you wrote the original software. If you use this software
14
in a product, an acknowledgment in the product documentation would be
15
appreciated but is not required.
16
2. Altered source versions must be plainly marked as such, and must not be
17
misrepresented as being the original software.
18
3. This notice may not be removed or altered from any source distribution.
26
using System.Threading;
27
using System.Windows.Forms;
29
using System.ComponentModel;
30
using java.awt.datatransfer;
38
delegate void SetVoid();
39
delegate void SetBool(bool b);
40
delegate void SetInt(int i);
41
delegate void SetXYWH(int x, int y, int w, int h);
42
delegate void SetString(string s);
43
delegate string GetString();
44
delegate void SetStringInt(string s, int i);
45
delegate void SetRectangle(Rectangle r);
46
delegate void SetColor(Color c);
47
delegate java.awt.Dimension GetDimension();
49
class UndecoratedForm : Form
51
public UndecoratedForm()
53
this.FormBorderStyle = FormBorderStyle.None;
57
public class NetToolkit : gnu.java.awt.ClasspathToolkit
59
private static java.awt.EventQueue eventQueue = new java.awt.EventQueue();
60
private static Form bogusForm;
61
private static Delegate createControlInstance;
62
private int resolution;
64
private delegate Control CreateControlInstanceDelegate(Type type);
66
private static void MessageLoop()
68
createControlInstance = new CreateControlInstanceDelegate(CreateControlImpl);
69
Form form = new Form();
71
// HACK I have no idea why this line is necessary...
72
IntPtr p = form.Handle;
77
internal static Control CreateControlImpl(Type type)
79
Control control = (Control)Activator.CreateInstance(type);
80
control.CreateControl();
81
// HACK here we go again...
82
IntPtr p = control.Handle;
86
internal static Control CreateControl(Type type)
88
return (Control)bogusForm.Invoke(createControlInstance, new object[] { type });
93
lock(typeof(NetToolkit))
95
System.Diagnostics.Debug.Assert(bogusForm == null);
97
Thread thread = new Thread(new ThreadStart(MessageLoop));
99
// TODO don't use polling...
100
while(bogusForm == null)
107
protected override void loadSystemColors(int[] systemColors)
109
// initialize all colors to purple to make the ones we might have missed stand out
110
for(int i = 0; i < systemColors.Length; i++)
112
systemColors[i] = Color.Purple.ToArgb();
114
systemColors[java.awt.SystemColor.DESKTOP] = SystemColors.Desktop.ToArgb();
115
systemColors[java.awt.SystemColor.ACTIVE_CAPTION] = SystemColors.ActiveCaption.ToArgb();
116
systemColors[java.awt.SystemColor.ACTIVE_CAPTION_TEXT] = SystemColors.ActiveCaptionText.ToArgb();
117
systemColors[java.awt.SystemColor.ACTIVE_CAPTION_BORDER] = SystemColors.ActiveBorder.ToArgb();
118
systemColors[java.awt.SystemColor.INACTIVE_CAPTION] = SystemColors.InactiveCaption.ToArgb();
119
systemColors[java.awt.SystemColor.INACTIVE_CAPTION_TEXT] = SystemColors.InactiveCaptionText.ToArgb();
120
systemColors[java.awt.SystemColor.INACTIVE_CAPTION_BORDER] = SystemColors.InactiveBorder.ToArgb();
121
systemColors[java.awt.SystemColor.WINDOW] = SystemColors.Window.ToArgb();
122
systemColors[java.awt.SystemColor.WINDOW_BORDER] = SystemColors.WindowFrame.ToArgb();
123
systemColors[java.awt.SystemColor.WINDOW_TEXT] = SystemColors.WindowText.ToArgb();
124
systemColors[java.awt.SystemColor.MENU] = SystemColors.Menu.ToArgb();
125
systemColors[java.awt.SystemColor.MENU_TEXT] = SystemColors.MenuText.ToArgb();
126
systemColors[java.awt.SystemColor.TEXT] = SystemColors.Window.ToArgb();
127
systemColors[java.awt.SystemColor.TEXT_TEXT] = SystemColors.WindowText.ToArgb();
128
systemColors[java.awt.SystemColor.TEXT_HIGHLIGHT] = SystemColors.Highlight.ToArgb();
129
systemColors[java.awt.SystemColor.TEXT_HIGHLIGHT_TEXT] = SystemColors.HighlightText.ToArgb();
130
systemColors[java.awt.SystemColor.TEXT_INACTIVE_TEXT] = SystemColors.GrayText.ToArgb();
131
systemColors[java.awt.SystemColor.CONTROL] = SystemColors.Control.ToArgb();
132
systemColors[java.awt.SystemColor.CONTROL_TEXT] = SystemColors.ControlText.ToArgb();
133
systemColors[java.awt.SystemColor.CONTROL_HIGHLIGHT] = SystemColors.ControlLight.ToArgb();
134
systemColors[java.awt.SystemColor.CONTROL_LT_HIGHLIGHT] = SystemColors.ControlLightLight.ToArgb();
135
systemColors[java.awt.SystemColor.CONTROL_SHADOW] = SystemColors.ControlDark.ToArgb();
136
systemColors[java.awt.SystemColor.CONTROL_DK_SHADOW] = SystemColors.ControlDarkDark.ToArgb();
137
systemColors[java.awt.SystemColor.SCROLLBAR] = SystemColors.ScrollBar.ToArgb();
138
systemColors[java.awt.SystemColor.INFO] = SystemColors.Info.ToArgb();
139
systemColors[java.awt.SystemColor.INFO_TEXT] = SystemColors.InfoText.ToArgb();
142
protected override java.awt.peer.ButtonPeer createButton(java.awt.Button target)
144
return new NetButtonPeer(target, (Button)CreateControl(typeof(Button)));
147
protected override java.awt.peer.TextFieldPeer createTextField(java.awt.TextField target)
149
return new NetTextFieldPeer(target, (TextBox)CreateControl(typeof(TextBox)));
152
protected override java.awt.peer.LabelPeer createLabel(java.awt.Label target)
154
return new NetLabelPeer(target, (Label)CreateControl(typeof(Label)));
157
protected override java.awt.peer.ListPeer createList(java.awt.List target)
159
return new NetListPeer(target, (ListBox)CreateControl(typeof(ListBox)));
162
protected override java.awt.peer.CheckboxPeer createCheckbox(java.awt.Checkbox target)
164
throw new NotImplementedException();
167
protected override java.awt.peer.ScrollbarPeer createScrollbar(java.awt.Scrollbar target)
169
throw new NotImplementedException();
172
protected override java.awt.peer.ScrollPanePeer createScrollPane(java.awt.ScrollPane target)
174
throw new NotImplementedException();
177
protected override java.awt.peer.TextAreaPeer createTextArea(java.awt.TextArea target)
179
return new NetTextAreaPeer(target, (TextBox)CreateControl(typeof(TextBox)));
182
protected override java.awt.peer.ChoicePeer createChoice(java.awt.Choice target)
184
throw new NotImplementedException();
187
protected override java.awt.peer.FramePeer createFrame(java.awt.Frame target)
189
return new NetFramePeer(target, (Form)CreateControl(typeof(Form)));
192
protected override java.awt.peer.CanvasPeer createCanvas(java.awt.Canvas target)
194
return new NewCanvasPeer(target, (Control)CreateControl(typeof(Control)));
197
protected override java.awt.peer.PanelPeer createPanel(java.awt.Panel target)
199
return new NetPanelPeer(target, (ContainerControl)CreateControl(typeof(ContainerControl)));
202
protected override java.awt.peer.WindowPeer createWindow(java.awt.Window target)
204
return new NetWindowPeer(target, (Form)CreateControl(typeof(UndecoratedForm)));
207
protected override java.awt.peer.DialogPeer createDialog(java.awt.Dialog target)
209
throw new NotImplementedException();
211
protected override java.awt.peer.MenuBarPeer createMenuBar(java.awt.MenuBar target)
213
throw new NotImplementedException();
215
protected override java.awt.peer.MenuPeer createMenu(java.awt.Menu target)
217
throw new NotImplementedException();
219
protected override java.awt.peer.PopupMenuPeer createPopupMenu(java.awt.PopupMenu target)
221
throw new NotImplementedException();
223
protected override java.awt.peer.MenuItemPeer createMenuItem(java.awt.MenuItem target)
225
throw new NotImplementedException();
227
protected override java.awt.peer.FileDialogPeer createFileDialog(java.awt.FileDialog target)
229
throw new NotImplementedException();
231
protected override java.awt.peer.CheckboxMenuItemPeer createCheckboxMenuItem(java.awt.CheckboxMenuItem target)
233
throw new NotImplementedException();
235
protected override java.awt.peer.FontPeer getFontPeer(string name, int style)
237
throw new NotImplementedException();
240
public override java.awt.Dimension getScreenSize()
242
return new java.awt.Dimension(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
245
public override int getScreenResolution()
249
using(Graphics g = bogusForm.CreateGraphics())
251
resolution = (int)Math.Round(g.DpiY);
257
public override ColorModel getColorModel()
259
throw new NotImplementedException();
262
public override string[] getFontList()
264
throw new NotImplementedException();
267
public override java.awt.FontMetrics getFontMetrics(java.awt.Font font)
269
return new NetFontMetrics(font, NetGraphics.NetFontFromJavaFont(font, getScreenResolution()), null, null);
272
public override void sync()
274
throw new NotImplementedException();
277
public override java.awt.Image getImage(string filename)
281
using(System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite))
283
return new NetBufferedImage(new Bitmap(Image.FromStream(stream)));
288
return new NoImage();
292
public override java.awt.Image getImage(URL url)
294
throw new NotImplementedException();
297
public override java.awt.Image createImage(string filename)
299
throw new NotImplementedException();
301
public override java.awt.Image createImage(URL url)
303
throw new NotImplementedException();
306
public override bool prepareImage(java.awt.Image image, int width, int height, java.awt.image.ImageObserver observer)
308
// HACK for now we call checkImage to obtain the status and fire the observer
309
return (checkImage(image, width, height, observer) & 32) != 0;
312
public override int checkImage(java.awt.Image image, int width, int height, java.awt.image.ImageObserver observer)
314
if(image.getWidth(null) == -1)
318
observer.imageUpdate(image, 64, 0, 0, -1, -1);
324
observer.imageUpdate(image, 1 + 2 + 16 + 32, 0, 0, image.getWidth(null), image.getHeight(null));
326
// HACK we cannot use the constants defined in the interface from C#, so we hardcode the flags
327
return 1 + 2 + 16 + 32; // WIDTH + HEIGHT + FRAMEBITS + ALLBITS
330
public override java.awt.Image createImage(java.awt.image.ImageProducer producer)
332
throw new NotImplementedException();
335
public override java.awt.Image createImage(sbyte[] imagedata, int imageoffset, int imagelength)
337
throw new NotImplementedException();
340
public override java.awt.PrintJob getPrintJob(java.awt.Frame frame, string jobtitle, Properties props)
342
throw new NotImplementedException();
345
public override void beep()
347
throw new NotImplementedException();
350
public override java.awt.datatransfer.Clipboard getSystemClipboard()
352
throw new NotImplementedException();
355
protected override java.awt.EventQueue getSystemEventQueueImpl()
360
public override java.awt.dnd.peer.DragSourceContextPeer createDragSourceContextPeer(java.awt.dnd.DragGestureEvent dge)
362
throw new NotImplementedException();
365
public override Map mapInputMethodHighlight(java.awt.im.InputMethodHighlight highlight)
367
throw new NotImplementedException();
370
protected override java.awt.peer.LightweightPeer createComponent(java.awt.Component target)
372
if(target is java.awt.Container)
374
return new NetLightweightContainerPeer((java.awt.Container)target);
376
return new NetLightweightComponentPeer(target);
379
public override java.awt.Font createFont(int format, java.io.InputStream stream)
381
throw new NotImplementedException();
384
public override gnu.java.awt.peer.ClasspathFontPeer getClasspathFontPeer(string name, java.util.Map attrs)
386
return new NetFontPeer(name, attrs);
389
public override java.awt.GraphicsEnvironment getLocalGraphicsEnvironment()
391
throw new NotImplementedException();
395
class NetFontPeer : gnu.java.awt.peer.ClasspathFontPeer
397
internal NetFontPeer(string name, java.util.Map attrs)
402
public override bool canDisplay(java.awt.Font param1, char param2)
404
throw new NotImplementedException();
407
public override int canDisplayUpTo(java.awt.Font param1, java.text.CharacterIterator param2, int param3, int param4)
409
throw new NotImplementedException();
412
public override java.awt.font.GlyphVector createGlyphVector(java.awt.Font param1, java.awt.font.FontRenderContext param2, int[] param3)
414
throw new NotImplementedException();
417
public override java.awt.font.GlyphVector createGlyphVector(java.awt.Font param1, java.awt.font.FontRenderContext param2, java.text.CharacterIterator param3)
419
throw new NotImplementedException();
422
public override sbyte getBaselineFor(java.awt.Font param1, char param2)
424
throw new NotImplementedException();
427
public override java.awt.FontMetrics getFontMetrics(java.awt.Font param)
429
throw new NotImplementedException();
432
public override string getGlyphName(java.awt.Font param1, int param2)
434
throw new NotImplementedException();
437
public override java.awt.font.LineMetrics getLineMetrics(java.awt.Font param1, java.text.CharacterIterator param2, int param3, int param4, java.awt.font.FontRenderContext param5)
439
throw new NotImplementedException();
442
public override java.awt.geom.Rectangle2D getMaxCharBounds(java.awt.Font param1, java.awt.font.FontRenderContext param2)
444
throw new NotImplementedException();
447
public override int getMissingGlyphCode(java.awt.Font param)
449
throw new NotImplementedException();
452
public override int getNumGlyphs(java.awt.Font param)
454
throw new NotImplementedException();
457
public override string getPostScriptName(java.awt.Font param)
459
throw new NotImplementedException();
462
public override java.awt.geom.Rectangle2D getStringBounds(java.awt.Font param1, java.text.CharacterIterator param2, int param3, int param4, java.awt.font.FontRenderContext param5)
464
throw new NotImplementedException();
467
public override bool hasUniformLineMetrics(java.awt.Font param)
469
throw new NotImplementedException();
472
public override java.awt.font.GlyphVector layoutGlyphVector(java.awt.Font param1, java.awt.font.FontRenderContext param2, char[] param3, int param4, int param5, int param6)
474
throw new NotImplementedException();
477
public override string getSubFamilyName(java.awt.Font param1, Locale param2)
479
throw new NotImplementedException();
483
class NetLightweightComponentPeer : NetComponentPeer, java.awt.peer.LightweightPeer
485
public NetLightweightComponentPeer(java.awt.Component target)
486
: base(target, ((NetComponentPeer)target.getParent().getPeer()).control)
491
class NetLightweightContainerPeer : NetContainerPeer, java.awt.peer.LightweightPeer
493
public NetLightweightContainerPeer(java.awt.Container target)
494
: base(target, (ContainerControl)((NetContainerPeer)target.getParent().getPeer()).control)
499
class NoImage : java.awt.Image
501
public override int getWidth(java.awt.image.ImageObserver observer)
506
public override int getHeight(java.awt.image.ImageObserver observer)
511
public override ImageProducer getSource()
516
public override java.awt.Graphics getGraphics()
518
// TODO throw java.lang.IllegalAccessError: getGraphics() only valid for images created with createImage(w, h)
522
public override object getProperty(string name, java.awt.image.ImageObserver observer)
527
public override void flush()
532
class NetGraphics : java.awt.Graphics2D
534
private bool disposable;
536
private java.awt.Color jcolor;
537
private Color color = SystemColors.WindowText;
538
private Color bgcolor;
539
private java.awt.Font font;
540
private Font netfont;
541
private java.awt.Rectangle _clip;
543
public NetGraphics(Graphics g, java.awt.Font font, Color bgcolor, bool disposable)
547
font = new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12);
551
netfont = NetFontFromJavaFont(font, g.DpiY);
552
this.bgcolor = bgcolor;
553
this.disposable = disposable;
556
_clip = new java.awt.Rectangle((int)Math.Round(g.ClipBounds.Left), (int)Math.Round(g.ClipBounds.Top), (int)Math.Round(g.ClipBounds.Width), (int)Math.Round(g.ClipBounds.Height));
560
public override void clearRect(int x, int y, int width, int height)
562
using(SolidBrush b = new SolidBrush(bgcolor))
564
g.FillRectangle(b, x, y, width, height);
568
public override void clipRect(int param1, int param2, int param3, int param4)
573
public override void copyArea(int param1, int param2, int param3, int param4, int param5, int param6)
578
public override java.awt.Graphics create(int param1, int param2, int param3, int param4)
583
public override java.awt.Graphics create()
585
// TODO we need to actually recreate a new underlying Graphics object, but .NET doesn't
586
// seem to have a way of doing that, so we probably need access to the underlying surface.
588
NetGraphics newg = new NetGraphics(g, font, bgcolor, false);
589
// TODO copy other attributes
593
public override void dispose()
603
public override void draw3DRect(int param1, int param2, int param3, int param4, bool param5)
608
public override void drawArc(int param1, int param2, int param3, int param4, int param5, int param6)
613
public override void drawBytes(sbyte[] param1, int param2, int param3, int param4, int param5)
618
public override void drawChars(char[] param1, int param2, int param3, int param4, int param5)
623
public override bool drawImage(java.awt.Image param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, java.awt.Color param10, java.awt.image.ImageObserver param11)
628
public override bool drawImage(java.awt.Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, java.awt.image.ImageObserver observer)
630
if(img is NetBufferedImage)
632
Rectangle destRect = new Rectangle(dx1, dy1, dx2 - dx1, dy2 - dy1);
633
Rectangle srcRect = new Rectangle(sx1, sy1, sx2 - sx1, sy2 - sy1);
634
g.DrawImage(((NetBufferedImage)img).bitmap, destRect, srcRect, GraphicsUnit.Pixel);
638
throw new NotImplementedException();
643
public override bool drawImage(java.awt.Image param1, int param2, int param3, int param4, int param5, java.awt.Color param6, java.awt.image.ImageObserver param7)
648
public override bool drawImage(java.awt.Image param1, int param2, int param3, java.awt.Color param4, java.awt.image.ImageObserver param5)
653
public override bool drawImage(java.awt.Image param1, int param2, int param3, int param4, int param5, java.awt.image.ImageObserver param6)
658
public override bool drawImage(java.awt.Image img, int x, int y, java.awt.image.ImageObserver observer)
660
if(img is NetBufferedImage)
662
g.DrawImage(((NetBufferedImage)img).bitmap, x, y);
666
throw new NotImplementedException();
671
public override void drawLine(int x1, int y1, int x2, int y2)
673
using(Pen p = new Pen(color, 1))
675
// HACK DrawLine doesn't appear to draw the last pixel, so for single pixel lines, we have
676
// a freaky workaround
677
if(x1 == x2 && y1 == y2)
679
g.DrawLine(p, x1, y1, x1 + 0.01f, y2 + 0.01f);
683
g.DrawLine(p, x1, y1, x2, y2);
688
public override void drawOval(int param1, int param2, int param3, int param4)
693
public override void drawPolygon(java.awt.Polygon param)
698
public override void drawPolygon(int[] param1, int[] param2, int param3)
703
public override void drawPolyline(int[] param1, int[] param2, int param3)
708
public override void drawRect(int x, int y, int width, int height)
710
using(Pen pen = new Pen(color))
712
g.DrawRectangle(pen, x, y, width, height);
716
public override void drawRoundRect(int param1, int param2, int param3, int param4, int param5, int param6)
721
public override void drawString(java.text.AttributedCharacterIterator param1, int param2, int param3)
726
public override void drawString(string str, int x, int y)
728
using(Brush brush = new SolidBrush(color))
730
int descent = netfont.FontFamily.GetCellDescent(netfont.Style);
731
int descentPixel = (int)Math.Round(netfont.Size * descent / netfont.FontFamily.GetEmHeight(netfont.Style));
732
g.DrawString(str, netfont, brush, x, y - netfont.Height + descentPixel);
736
public override void fill3DRect(int param1, int param2, int param3, int param4, bool param5)
741
public override void fillArc(int param1, int param2, int param3, int param4, int param5, int param6)
746
public override void fillOval(int param1, int param2, int param3, int param4)
751
public override void fillPolygon(java.awt.Polygon param)
756
public override void fillPolygon(int[] param1, int[] param2, int param3)
761
public override void fillRect(int x, int y, int width, int height)
763
using(Brush brush = new SolidBrush(color))
765
g.FillRectangle(brush, x, y, width, height);
769
public override void fillRoundRect(int param1, int param2, int param3, int param4, int param5, int param6)
774
public override java.awt.Shape getClip()
776
return getClipBounds();
779
public override java.awt.Rectangle getClipBounds(java.awt.Rectangle r)
785
r.width = _clip.width;
786
r.height = _clip.height;
791
public override java.awt.Rectangle getClipBounds()
793
return getClipRect();
796
public override java.awt.Rectangle getClipRect()
800
return (java.awt.Rectangle)_clip.clone();
805
public override java.awt.Color getColor()
809
jcolor = new java.awt.Color(color.ToArgb());
814
public override java.awt.Font getFont()
819
internal static Font NetFontFromJavaFont(java.awt.Font f, float dpi)
827
fam = FontFamily.GenericMonospace;
830
fam = FontFamily.GenericSerif;
837
fam = FontFamily.GenericSansSerif;
842
fam = new FontFamily(f.getName());
844
catch(ArgumentException)
846
fam = FontFamily.GenericSansSerif;
850
// NOTE Regular is guaranteed zero
851
FontStyle style = FontStyle.Regular;
854
style |= FontStyle.Bold;
858
style |= FontStyle.Italic;
860
float em = fam.GetEmHeight(style);
861
float line = fam.GetLineSpacing(style);
862
return new Font(fam, (int)Math.Round(((f.getSize() * dpi) / 72) * em / line), style, GraphicsUnit.Pixel);
865
public override java.awt.FontMetrics getFontMetrics(java.awt.Font f)
867
return new NetFontMetrics(f, NetFontFromJavaFont(f, g.DpiY), g, null);
870
public override java.awt.FontMetrics getFontMetrics()
872
return new NetFontMetrics(font, netfont, g, null);
875
public override bool hitClip(int param1, int param2, int param3, int param4)
880
public override void setClip(int x, int y, int width, int height)
882
_clip = new java.awt.Rectangle(x, y, width, height);
883
g.Clip = new Region(new Rectangle(x, y, width, height));
886
public override void setClip(java.awt.Shape param)
888
// NOTE we only support rectangular clipping for the moment
889
java.awt.Rectangle r = param.getBounds();
890
setClip(r.x, r.y, r.width, r.height);
893
public override void setColor(java.awt.Color color)
896
this.color = Color.FromArgb(color.getRGB());
899
public override void setFont(java.awt.Font f)
901
Font newfont = NetFontFromJavaFont(f, g.DpiY);
907
public override void setPaintMode()
912
public override void setXORMode(java.awt.Color param)
917
public override void translate(int x, int y)
919
System.Drawing.Drawing2D.Matrix matrix = g.Transform;
920
matrix.Translate(x, y);
921
g.Transform = matrix;
924
public override void draw(java.awt.Shape shape)
928
public override bool drawImage(java.awt.Image image, java.awt.geom.AffineTransform xform, ImageObserver obs)
933
public override void drawImage(java.awt.image.BufferedImage image, BufferedImageOp op, int x, int y)
937
public override void drawRenderedImage(java.awt.image.RenderedImage image, java.awt.geom.AffineTransform xform)
941
public override void drawRenderableImage(java.awt.image.renderable.RenderableImage image, java.awt.geom.AffineTransform xform)
945
public override void drawString(string text, float x, float y)
949
public override void drawString(java.text.AttributedCharacterIterator iterator, float x, float y)
953
public override void fill(java.awt.Shape shape)
957
public override bool hit(java.awt.Rectangle rect, java.awt.Shape text, bool onStroke)
962
public override java.awt.GraphicsConfiguration getDeviceConfiguration()
967
public override void setComposite(java.awt.Composite comp)
971
public override void setPaint(java.awt.Paint paint)
975
public override void setStroke(java.awt.Stroke stroke)
979
public override void setRenderingHint(java.awt.RenderingHints.Key hintKey, Object hintValue)
983
public override object getRenderingHint(java.awt.RenderingHints.Key hintKey)
988
public override void setRenderingHints(java.util.Map hints)
992
public override void addRenderingHints(java.util.Map hints)
996
public override java.awt.RenderingHints getRenderingHints()
1001
public override void translate(double tx, double ty)
1005
public override void rotate(double theta)
1009
public override void rotate(double theta, double x, double y)
1013
public override void scale(double scaleX, double scaleY)
1017
public override void shear(double shearX, double shearY)
1021
public override void transform(java.awt.geom.AffineTransform Tx)
1025
public override void setTransform(java.awt.geom.AffineTransform Tx)
1029
public override java.awt.geom.AffineTransform getTransform()
1034
public override java.awt.Paint getPaint()
1039
public override java.awt.Composite getComposite()
1044
public override void setBackground(java.awt.Color color)
1048
public override java.awt.Color getBackground()
1053
public override java.awt.Stroke getStroke()
1058
public override void clip(java.awt.Shape s)
1062
public override java.awt.font.FontRenderContext getFontRenderContext()
1067
public override void drawGlyphVector(java.awt.font.GlyphVector g, float x, float y)
1072
class NetFontMetrics : java.awt.FontMetrics
1074
private Font netFont;
1078
public NetFontMetrics(java.awt.Font f, Font netFont, Graphics g, Control c) : base(f)
1080
this.netFont = netFont;
1085
public override int getHeight()
1087
return netFont.Height;
1090
public override int getLeading()
1092
// HACK we always return 1
1096
public override int getMaxAdvance()
1099
return charWidth('M');
1102
public override int charWidth(char ch)
1104
// HACK we average 20 characters to decrease the influence of the pre/post spacing
1105
return stringWidth(new String(ch, 20)) / 20;
1108
public override int charsWidth(char[] data, int off, int len)
1110
return stringWidth(new String(data, off, len));
1113
public override int getAscent()
1115
int ascent = netFont.FontFamily.GetCellAscent(netFont.Style);
1116
return (int)Math.Round(netFont.Size * ascent / netFont.FontFamily.GetEmHeight(netFont.Style));
1119
public override int getDescent()
1121
int descent = netFont.FontFamily.GetCellDescent(netFont.Style);
1122
return (int)Math.Round(netFont.Size * descent / netFont.FontFamily.GetEmHeight(netFont.Style));
1125
public override int stringWidth(string s)
1131
return (int)Math.Round(g.MeasureString(s, netFont).Width);
1133
catch(ObjectDisposedException)
1140
using(Graphics g1 = c.CreateGraphics())
1142
return (int)Math.Round(g1.MeasureString(s, netFont).Width);
1145
// as a last resort, we make a lame guess
1146
return s.Length * getHeight() / 2;
1150
class NetComponentPeer : ComponentPeer
1152
internal readonly java.awt.Component component;
1153
internal readonly Control control;
1154
private int offsetX;
1155
private int offsetY;
1157
public NetComponentPeer(java.awt.Component component, Control control)
1159
this.control = control;
1160
this.component = component;
1161
java.awt.Container parent = component.getParent();
1162
if(parent != null && !(this is java.awt.peer.LightweightPeer))
1166
((Form)control).Owner = (Form)((NetComponentPeer)parent.getPeer()).control;
1170
control.Parent = ((NetComponentPeer)parent.getPeer()).control;
1172
if(parent is java.awt.Frame)
1174
java.awt.Insets ins = ((NetFramePeer)parent.getPeer()).getInsets();
1175
offsetX = -ins.left;
1179
if(component.isFontSet())
1181
setFont(component.getFont());
1183
// we need the null check, because for a Window, at this time it doesn't have a foreground yet
1184
if(component.getForeground() != null)
1186
setForeground(component.getForeground());
1188
// we need the null check, because for a Window, at this time it doesn't have a background yet
1189
if(component.getBackground() != null)
1191
setBackground(component.getBackground());
1193
setEnabled(component.isEnabled());
1194
//setBounds(component.getX(), component.getY(), component.getWidth(), component.getHeight());
1195
control.Invoke(new SetVoid(Setup));
1196
control.Paint += new PaintEventHandler(OnPaint);
1197
component.invalidate();
1200
private void OnPaint(object sender, PaintEventArgs e)
1202
// TODO figure out if we need an update or a paint
1203
java.awt.Rectangle rect = new java.awt.Rectangle(e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle.Width, e.ClipRectangle.Height);
1204
//postEvent(new java.awt.@event.PaintEvent(component, java.awt.@event.PaintEvent.UPDATE, rect));
1205
postEvent(new java.awt.@event.PaintEvent(component, java.awt.@event.PaintEvent.PAINT, rect));
1208
private void Setup()
1210
// TODO we really only should hook these events when they are needed...
1211
control.KeyDown += new KeyEventHandler(OnKeyDown);
1212
control.KeyUp += new KeyEventHandler(OnKeyUp);
1213
control.KeyPress += new KeyPressEventHandler(OnKeyPress);
1214
control.MouseMove += new MouseEventHandler(OnMouseMove);
1215
control.MouseDown += new MouseEventHandler(OnMouseDown);
1216
control.MouseUp += new MouseEventHandler(OnMouseUp);
1219
private static int MapKeyCode(Keys key)
1228
protected virtual void OnKeyDown(object sender, KeyEventArgs e)
1230
// TODO set all this stuff...
1233
int keyCode = MapKeyCode(e.KeyCode);
1235
int keyLocation = 0;
1236
postEvent(new java.awt.@event.KeyEvent(component, java.awt.@event.KeyEvent.KEY_PRESSED, when, modifiers, keyCode, keyChar, keyLocation));
1239
protected virtual void OnKeyUp(object sender, KeyEventArgs e)
1241
// TODO set all this stuff...
1244
int keyCode = MapKeyCode(e.KeyCode);
1246
int keyLocation = 0;
1247
postEvent(new java.awt.@event.KeyEvent(component, java.awt.@event.KeyEvent.KEY_RELEASED, when, modifiers, keyCode, keyChar, keyLocation));
1250
protected virtual void OnKeyPress(object sender, KeyPressEventArgs e)
1252
// TODO set all this stuff...
1256
char keyChar = e.KeyChar;
1257
int keyLocation = 0;
1258
postEvent(new java.awt.@event.KeyEvent(component, java.awt.@event.KeyEvent.KEY_TYPED, when, modifiers, keyCode, keyChar, keyLocation));
1261
protected virtual void OnMouseMove(object sender, MouseEventArgs e)
1263
// TODO set all this stuff...
1266
postEvent(new java.awt.@event.MouseEvent(component, java.awt.@event.MouseEvent.MOUSE_MOVED, when, modifiers, e.X, e.Y, 0, false));
1269
protected virtual void OnMouseDown(object sender, MouseEventArgs e)
1271
// TODO set all this stuff...
1274
postEvent(new java.awt.@event.MouseEvent(component, java.awt.@event.MouseEvent.MOUSE_PRESSED, when, modifiers, e.X, e.Y, e.Clicks, false));
1277
protected virtual void OnMouseUp(object sender, MouseEventArgs e)
1279
// TODO set all this stuff...
1282
// TODO set popupTrigger
1283
postEvent(new java.awt.@event.MouseEvent(component, java.awt.@event.MouseEvent.MOUSE_RELEASED, when, modifiers, e.X, e.Y, e.Clicks, false));
1284
// TODO send MOUSE_CLICKED if the mouse didn't move more than whatever the threshold is
1287
protected void postEvent(java.awt.AWTEvent evt)
1289
getToolkit().getSystemEventQueue().postEvent(evt);
1292
public int checkImage(java.awt.Image img, int width, int height, java.awt.image.ImageObserver ob)
1294
return getToolkit().checkImage(img, width, height, ob);
1297
public java.awt.Image createImage(java.awt.image.ImageProducer prod)
1299
throw new NotImplementedException();
1302
public java.awt.Image createImage(int width, int height)
1304
return new NetBufferedImage(width, height);
1307
public void disable()
1309
throw new NotImplementedException();
1312
public void dispose()
1314
control.Invoke(new SetVoid(disposeImpl));
1317
private void disposeImpl()
1319
// HACK we should dispose the control here, but that hangs in an infinite loop...
1323
public void enable()
1325
throw new NotImplementedException();
1328
public ColorModel getColorModel()
1330
throw new NotImplementedException();
1333
public java.awt.FontMetrics getFontMetrics(java.awt.Font f)
1335
// HACK this is a very heavy weight way to determine DPI, it should be possible
1336
// to do this without creating a Graphics object
1337
using(Graphics g = control.CreateGraphics())
1339
return new NetFontMetrics(f, NetGraphics.NetFontFromJavaFont(f, g.DpiY), null, control);
1343
public virtual java.awt.Graphics getGraphics()
1345
return new NetGraphics(control.CreateGraphics(), component.getFont(), control.BackColor, true);
1348
public java.awt.Point getLocationOnScreen()
1350
throw new NotImplementedException();
1353
public java.awt.Dimension getMinimumSize()
1355
return minimumSize();
1358
public virtual java.awt.Dimension getPreferredSize()
1360
return preferredSize();
1363
public java.awt.Toolkit getToolkit()
1365
return java.awt.Toolkit.getDefaultToolkit();
1368
public void handleEvent(java.awt.AWTEvent e)
1370
if(e is java.awt.@event.PaintEvent)
1372
java.awt.Graphics g = component.getGraphics();
1375
component.update(g);
1384
Console.WriteLine("NOTE: NetComponentPeer.handleEvent not implemented: " + e);
1390
throw new NotImplementedException();
1393
public bool isFocusTraversable()
1395
throw new NotImplementedException();
1398
public java.awt.Dimension minimumSize()
1400
return component.getSize();
1403
public java.awt.Dimension preferredSize()
1405
return minimumSize();
1408
public void paint(java.awt.Graphics graphics)
1410
//throw new NotImplementedException();
1413
public bool prepareImage(java.awt.Image img, int width, int height, ImageObserver ob)
1415
return getToolkit().prepareImage(img, width, height, ob);
1418
public void print(java.awt.Graphics graphics)
1420
throw new NotImplementedException();
1423
public void repaint(long tm, int x, int y, int width, int height)
1425
// TODO do something with the tm parameter
1426
Rectangle rect = new Rectangle(x, y, width, height);
1427
rect.Offset(offsetX, offsetY);
1428
control.Invoke(new SetRectangle(control.Invalidate), new object[] { rect });
1431
public void requestFocus()
1433
control.Invoke(new SetVoid(requestFocusImpl), null);
1436
private void requestFocusImpl()
1441
public bool requestFocus(java.awt.Component source, bool bool1, bool bool2, long x)
1443
throw new NotImplementedException();
1446
public void reshape(int x, int y, int width, int height)
1448
throw new NotImplementedException();
1451
public void setBackground(java.awt.Color color)
1453
control.Invoke(new SetColor(SetBackColorImpl), new object[] { Color.FromArgb(color.getRGB()) });
1456
private void SetBackColorImpl(Color c)
1458
control.BackColor = c;
1461
private void setBoundsImpl(int x, int y, int width, int height)
1463
control.SetBounds(x, y, width, height);
1466
public void setBounds(int x, int y, int width, int height)
1468
control.Invoke(new SetXYWH(setBoundsImpl), new object[] { x + offsetX, y + offsetY, width, height });
1471
public void setCursor(java.awt.Cursor cursor)
1473
switch(cursor.getType())
1475
case java.awt.Cursor.WAIT_CURSOR:
1476
control.Cursor = Cursors.WaitCursor;
1478
case java.awt.Cursor.DEFAULT_CURSOR:
1479
control.Cursor = Cursors.Default;
1482
Console.WriteLine("setCursor not implement for: " + cursor);
1487
private void setEnabledImpl(bool enabled)
1489
control.Enabled = enabled;
1492
public void setEnabled(bool enabled)
1494
control.Invoke(new SetBool(setEnabledImpl), new object[] { enabled });
1497
public void setFont(java.awt.Font font)
1499
// TODO use control.Invoke
1500
control.Font = NetGraphics.NetFontFromJavaFont(font, component.getToolkit().getScreenResolution());
1503
public void setForeground(java.awt.Color color)
1505
control.Invoke(new SetColor(SetForeColorImpl), new object[] { Color.FromArgb(color.getRGB()) });
1508
private void SetForeColorImpl(Color c)
1510
control.ForeColor = c;
1513
private void setVisibleImpl(bool visible)
1515
control.Visible = visible;
1516
postEvent(new java.awt.@event.ComponentEvent(component,
1517
visible ? java.awt.@event.ComponentEvent.COMPONENT_SHOWN : java.awt.@event.ComponentEvent.COMPONENT_HIDDEN));
1520
public void setVisible(bool visible)
1522
control.Invoke(new SetBool(setVisibleImpl), new object[] { visible });
1527
throw new NotImplementedException();
1530
public java.awt.GraphicsConfiguration getGraphicsConfiguration()
1532
return new NetGraphicsConfiguration();
1535
public void setEventMask (long mask)
1537
Console.WriteLine("NOTE: NetComponentPeer.setEventMask not implemented");
1540
public bool isObscured()
1542
throw new NotImplementedException();
1545
public bool canDetermineObscurity()
1547
throw new NotImplementedException();
1550
public void coalescePaintEvent(java.awt.@event.PaintEvent e)
1552
throw new NotImplementedException();
1555
public void updateCursorImmediately()
1557
throw new NotImplementedException();
1560
public VolatileImage createVolatileImage(int width, int height)
1562
throw new NotImplementedException();
1565
public bool handlesWheelScrolling()
1567
throw new NotImplementedException();
1570
public void createBuffers(int x, java.awt.BufferCapabilities capabilities)
1572
throw new NotImplementedException();
1575
public java.awt.Image getBackBuffer()
1577
throw new NotImplementedException();
1580
public void flip(java.awt.BufferCapabilities.FlipContents contents)
1582
throw new NotImplementedException();
1585
public void destroyBuffers()
1587
throw new NotImplementedException();
1590
public bool isFocusable()
1597
// HACK Classpath should have a working BufferedImage, but currently it doesn't, until then, we
1598
// provide a hacked up version
1599
class NetBufferedImage : java.awt.image.BufferedImage
1601
internal Bitmap bitmap;
1603
internal NetBufferedImage(Bitmap bitmap)
1604
: base(bitmap.Width, bitmap.Height, java.awt.image.BufferedImage.TYPE_INT_RGB)
1606
this.bitmap = bitmap;
1609
internal NetBufferedImage(int width, int height)
1610
: base(width, height, java.awt.image.BufferedImage.TYPE_INT_RGB)
1612
bitmap = new Bitmap(width, height);
1613
using(Graphics g = Graphics.FromImage(bitmap))
1615
g.Clear(Color.White);
1619
public override java.awt.Graphics2D createGraphics()
1621
Graphics g = Graphics.FromImage(bitmap);
1622
// HACK for off-screen images we don't want ClearType or anti-aliasing
1623
// TODO I'm sure Java 2D has a way to control text rendering quality, we should honor that
1624
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
1625
return new NetGraphics(g, null, Color.White, true);
1628
public override java.awt.image.ImageProducer getSource()
1630
int[] pix = new int[bitmap.Width * bitmap.Height];
1631
for(int y = 0; y < bitmap.Height; y++)
1633
for(int x = 0; x < bitmap.Width; x++)
1635
pix[x + y * bitmap.Width] = bitmap.GetPixel(x, y).ToArgb();
1638
return new java.awt.image.MemoryImageSource(bitmap.Width, bitmap.Height, pix, 0, bitmap.Width);
1642
class NetGraphicsConfiguration : java.awt.GraphicsConfiguration
1644
public override java.awt.image.BufferedImage createCompatibleImage(int param1, int param2, int param3)
1646
throw new NotImplementedException();
1649
public override java.awt.image.BufferedImage createCompatibleImage(int width, int height)
1651
return new NetBufferedImage(width, height);
1654
public override java.awt.image.VolatileImage createCompatibleVolatileImage(int param1, int param2, java.awt.ImageCapabilities param3)
1656
throw new NotImplementedException();
1659
public override java.awt.image.VolatileImage createCompatibleVolatileImage(int param1, int param2)
1661
throw new NotImplementedException();
1664
public override java.awt.Rectangle getBounds()
1666
throw new NotImplementedException();
1669
public override java.awt.BufferCapabilities getBufferCapabilities()
1671
throw new NotImplementedException();
1674
public override java.awt.image.ColorModel getColorModel(int param)
1676
throw new NotImplementedException();
1679
public override java.awt.image.ColorModel getColorModel()
1681
throw new NotImplementedException();
1684
public override java.awt.geom.AffineTransform getDefaultTransform()
1686
throw new NotImplementedException();
1689
public override java.awt.GraphicsDevice getDevice()
1691
throw new NotImplementedException();
1694
public override java.awt.ImageCapabilities getImageCapabilities()
1696
throw new NotImplementedException();
1699
public override java.awt.geom.AffineTransform getNormalizingTransform()
1701
throw new NotImplementedException();
1705
class NetButtonPeer : NetComponentPeer, ButtonPeer
1707
public NetButtonPeer(java.awt.Button awtbutton, Button button)
1708
: base(awtbutton, button)
1710
if(!awtbutton.isBackgroundSet())
1712
awtbutton.setBackground(java.awt.SystemColor.control);
1714
button.BackColor = Color.FromArgb(awtbutton.getBackground().getRGB());
1715
setLabel(awtbutton.getLabel());
1716
control.Invoke(new SetVoid(Setup));
1719
private void Setup()
1721
((Button)control).Click += new EventHandler(OnClick);
1724
private void OnClick(object sender, EventArgs e)
1726
// TODO set all these properties correctly
1730
postEvent(new java.awt.@event.ActionEvent(component, java.awt.@event.ActionEvent.ACTION_PERFORMED, cmd, when, modifiers));
1733
private void setLabelImpl(string label)
1735
control.Text = label;
1738
public void setLabel(string label)
1740
control.Invoke(new SetString(setLabelImpl), new object[] { label });
1743
public override java.awt.Dimension getPreferredSize()
1745
using(Graphics g = control.CreateGraphics())
1747
// TODO get these fudge factors from somewhere
1748
return new java.awt.Dimension((int)Math.Round(12 + g.MeasureString(control.Text, control.Font).Width) * 8 / 7, 6 + control.Font.Height * 8 / 7);
1753
class NetTextComponentPeer : NetComponentPeer, TextComponentPeer
1755
public NetTextComponentPeer(java.awt.TextComponent textComponent, TextBox textBox)
1756
: base(textComponent, textBox)
1758
control.Invoke(new SetVoid(Setup));
1761
private void Setup()
1763
if(!component.isBackgroundSet())
1765
component.setBackground(java.awt.SystemColor.window);
1767
TextBox textBox = (TextBox)control;
1768
setBackground(component.getBackground());
1769
textBox.AutoSize = false;
1770
textBox.Text = ((java.awt.TextComponent)component).getText();
1773
protected override void OnKeyPress(object sender, KeyPressEventArgs e)
1775
base.OnKeyPress(sender, e);
1776
// TODO for TextAreas this probably isn't the right behaviour
1777
if(e.KeyChar == '\r')
1779
// TODO set all these properties correctly
1783
postEvent(new java.awt.@event.ActionEvent(component, java.awt.@event.ActionEvent.ACTION_PERFORMED, cmd, when, modifiers));
1787
public int getSelectionEnd()
1789
throw new NotImplementedException();
1791
public int getSelectionStart()
1793
throw new NotImplementedException();
1796
private string getTextImpl()
1798
return control.Text;
1801
public string getText()
1803
return (string)control.Invoke(new GetString(getTextImpl));
1806
private void setTextImpl(string text)
1808
control.Text = text;
1811
public void setText(string text)
1813
control.Invoke(new SetString(setTextImpl), new object[] { text });
1816
public void select(int start_pos, int end_pos)
1818
throw new NotImplementedException();
1820
public void setEditable(bool editable)
1822
throw new NotImplementedException();
1824
public int getCaretPosition()
1826
throw new NotImplementedException();
1828
public void setCaretPosition(int pos)
1830
throw new NotImplementedException();
1832
public long filterEvents(long filter)
1834
throw new NotImplementedException();
1836
public int getIndexAtPoint(int x, int y)
1838
throw new NotImplementedException();
1840
public java.awt.Rectangle getCharacterBounds(int pos)
1842
throw new NotImplementedException();
1846
class NetLabelPeer : NetComponentPeer, LabelPeer
1848
public NetLabelPeer(java.awt.Label jlabel, Label label)
1849
: base(jlabel, label)
1851
label.Text = jlabel.getText();
1852
setAlignment(jlabel.getAlignment());
1855
public void setAlignment(int align)
1859
case java.awt.Label.LEFT:
1860
control.Invoke(new SetInt(setAlignImpl), new object[] { ContentAlignment.TopLeft });
1862
case java.awt.Label.CENTER:
1863
control.Invoke(new SetInt(setAlignImpl), new object[] { ContentAlignment.TopCenter });
1865
case java.awt.Label.RIGHT:
1866
control.Invoke(new SetInt(setAlignImpl), new object[] { ContentAlignment.TopRight });
1871
private void setAlignImpl(int align)
1873
((Label)control).TextAlign = (ContentAlignment)align;
1876
public void setText(string s)
1878
control.Invoke(new SetString(setTextImpl), new Object[] { s });
1881
private void setTextImpl(string s)
1886
public override java.awt.Dimension getPreferredSize()
1888
return (java.awt.Dimension)control.Invoke(new GetDimension(getPreferredSizeImpl), null);
1891
private java.awt.Dimension getPreferredSizeImpl()
1893
Label lab = (Label)control;
1894
// HACK get these fudge factors from somewhere
1895
return new java.awt.Dimension(lab.PreferredWidth, 2 + lab.PreferredHeight);
1899
class NetTextFieldPeer : NetTextComponentPeer, TextFieldPeer
1901
public NetTextFieldPeer(java.awt.TextField textField, TextBox textBox)
1902
: base(textField, textBox)
1906
public java.awt.Dimension minimumSize(int len)
1908
throw new NotImplementedException();
1911
public java.awt.Dimension preferredSize(int len)
1913
throw new NotImplementedException();
1916
public java.awt.Dimension getMinimumSize(int len)
1918
return getPreferredSize(len);
1921
public java.awt.Dimension getPreferredSize(int len)
1923
// TODO use control.Invoke
1924
using(Graphics g = control.CreateGraphics())
1926
return new java.awt.Dimension((int)Math.Round((g.MeasureString("abcdefghijklm", control.Font).Width * len) / 13), ((TextBox)control).PreferredHeight);
1930
public void setEchoChar(char echo_char)
1932
throw new NotImplementedException();
1935
public void setEchoCharacter(char echo_char)
1937
throw new NotImplementedException();
1941
class NetTextAreaPeer : NetTextComponentPeer, TextAreaPeer
1943
public NetTextAreaPeer(java.awt.TextArea textArea, TextBox textBox)
1944
: base(textArea, textBox)
1946
control.Invoke(new SetVoid(Setup));
1949
private void Setup()
1951
TextBox textBox = (TextBox)control;
1952
textBox.ReadOnly = !((java.awt.TextArea)component).isEditable();
1953
textBox.WordWrap = false;
1954
textBox.ScrollBars = ScrollBars.Both;
1955
textBox.Multiline = true;
1958
private void insertImpl(string text, int pos)
1960
control.Text = control.Text.Insert(pos, text);
1963
public void insert(string text, int pos)
1965
control.Invoke(new SetStringInt(insertImpl), new Object[] { text, pos });
1968
public void insertText(string text, int pos)
1970
throw new NotImplementedException();
1972
public java.awt.Dimension minimumSize(int rows, int cols)
1974
throw new NotImplementedException();
1976
public java.awt.Dimension getMinimumSize(int rows, int cols)
1978
throw new NotImplementedException();
1980
public java.awt.Dimension preferredSize(int rows, int cols)
1982
throw new NotImplementedException();
1985
public java.awt.Dimension getPreferredSize(int rows, int cols)
1987
Console.WriteLine("NOTE: NetTextAreaPeer.getPreferredSize not implemented");
1988
return new java.awt.Dimension(10 * cols, 15 * rows);
1991
public void replaceRange(string text, int start_pos, int end_pos)
1993
throw new NotImplementedException();
1995
public void replaceText(string text, int start_pos, int end_pos)
1997
throw new NotImplementedException();
2001
class NetContainerPeer : NetComponentPeer, ContainerPeer
2003
public NetContainerPeer(java.awt.Container awtcontainer, ContainerControl container)
2004
: base(awtcontainer, container)
2008
public java.awt.Insets insets()
2010
throw new NotImplementedException();
2013
public virtual java.awt.Insets getInsets()
2015
Console.WriteLine("NOTE: NetContainerPeer.getInsets not implemented");
2016
return new java.awt.Insets(0, 0, 0, 0);
2019
public void beginValidate()
2021
Console.WriteLine("NOTE: NetContainerPeer.beginValidate not implemented");
2024
public void endValidate()
2026
Console.WriteLine("NOTE: NetContainerPeer.endValidate not implemented");
2028
public void beginLayout()
2030
throw new NotImplementedException();
2032
public void endLayout()
2034
throw new NotImplementedException();
2036
public bool isPaintPending()
2038
throw new NotImplementedException();
2042
class NetPanelPeer : NetContainerPeer, PanelPeer
2044
public NetPanelPeer(java.awt.Panel panel, ContainerControl container)
2045
: base(panel, container)
2050
class NewCanvasPeer : NetComponentPeer, CanvasPeer
2052
public NewCanvasPeer(java.awt.Canvas canvas, Control control)
2053
: base(canvas, control)
2058
class NetWindowPeer : NetContainerPeer, WindowPeer
2060
public NetWindowPeer(java.awt.Window window, Form form)
2061
: base(window, form)
2063
if(!window.isFontSet())
2065
window.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
2067
if(!window.isForegroundSet())
2069
window.setForeground(java.awt.SystemColor.windowText);
2071
if(!window.isBackgroundSet())
2073
window.setBackground(java.awt.SystemColor.window);
2075
setFont(window.getFont());
2076
setForeground(window.getForeground());
2077
setBackground(window.getBackground());
2078
form.SetBounds(window.getX(), window.getY(), window.getWidth(), window.getHeight());
2081
public void toBack()
2083
((Form)control).SendToBack();
2086
public void toFront()
2088
((Form)control).Activate();
2092
class NetFramePeer : NetWindowPeer, FramePeer
2094
public NetFramePeer(java.awt.Frame frame, Form form)
2097
setTitle(frame.getTitle());
2098
control.Invoke(new SetVoid(Setup));
2101
private void Setup()
2103
Form form = (Form)control;
2104
form.Resize += new EventHandler(Resize);
2105
form.Closing += new CancelEventHandler(Closing);
2108
private void Closing(object sender, CancelEventArgs e)
2111
postEvent(new java.awt.@event.WindowEvent((java.awt.Window)component, java.awt.@event.WindowEvent.WINDOW_CLOSING));
2114
private void Resize(object sender, EventArgs e)
2116
// TODO I have no clue what I should do here...
2117
Rectangle r = control.Bounds;
2118
component.setBounds(r.X, r.Y, r.Width, r.Height);
2119
component.invalidate();
2120
component.validate();
2121
postEvent(new java.awt.@event.ComponentEvent(component, java.awt.@event.ComponentEvent.COMPONENT_RESIZED));
2124
public override java.awt.Graphics getGraphics()
2126
NetGraphics g = new NetGraphics(control.CreateGraphics(), component.getFont(), control.BackColor, true);
2127
java.awt.Insets insets = ((java.awt.Frame)component).getInsets();
2128
g.translate(-insets.left, -insets.top);
2129
g.setClip(insets.left, insets.top, control.ClientRectangle.Width, control.ClientRectangle.Height);
2133
public void setIconImage(java.awt.Image image)
2135
throw new NotImplementedException();
2137
public void setMenuBar(java.awt.MenuBar mb)
2139
throw new NotImplementedException();
2141
public void setResizable(bool resizable)
2143
throw new NotImplementedException();
2145
private void setTitleImpl(string title)
2147
control.Text = title;
2149
public void setTitle(string title)
2151
control.Invoke(new SetString(setTitleImpl), new object[] { title });
2154
public override java.awt.Insets getInsets()
2156
// TODO use control.Invoke
2157
Form f = (Form)control;
2158
Rectangle client = f.ClientRectangle;
2159
Rectangle r = f.RectangleToScreen(client);
2160
int x = r.Location.X - f.Location.X;
2161
int y = r.Location.Y - f.Location.Y;
2162
return new java.awt.Insets(y, x, control.Height - client.Height - y, control.Width - client.Width - x);
2165
public int getState()
2167
throw new NotImplementedException();
2169
public void setState(int state)
2171
throw new NotImplementedException();
2173
public void setMaximizedBounds(java.awt.Rectangle r)
2175
throw new NotImplementedException();
2179
class NetListPeer : NetComponentPeer, ListPeer
2181
internal NetListPeer(java.awt.List target, ListBox listbox)
2182
: base(target, listbox)
2186
public void add(String item, int index)
2188
throw new NotImplementedException();
2191
public void addItem(String item, int index)
2193
throw new NotImplementedException();
2198
throw new NotImplementedException();
2201
public void delItems(int start_index, int end_index)
2203
throw new NotImplementedException();
2206
public void deselect(int index)
2208
throw new NotImplementedException();
2211
public int[] getSelectedIndexes()
2213
throw new NotImplementedException();
2216
public void makeVisible(int index)
2218
throw new NotImplementedException();
2221
public java.awt.Dimension minimumSize(int s)
2223
throw new NotImplementedException();
2226
public java.awt.Dimension preferredSize(int s)
2228
throw new NotImplementedException();
2231
public void removeAll()
2233
throw new NotImplementedException();
2236
public void select(int index)
2238
throw new NotImplementedException();
2241
public void setMultipleMode(bool multi)
2243
throw new NotImplementedException();
2246
public void setMultipleSelections(bool multi)
2248
throw new NotImplementedException();
2251
public java.awt.Dimension getPreferredSize(int s)
2253
throw new NotImplementedException();
2256
public java.awt.Dimension getMinimumSize(int s)
2258
throw new NotImplementedException();