public MapMenu(Map g) { map = g; GLBaseControl.Themer = Theme; // names of MS* are on screen items hidden during main menu presentation GLImage menuimage = new GLImage("MSMainMenu", new Rectangle(10, 10, iconsize, iconsize), Properties.Resources.hamburgermenu); menuimage.ToolTipText = "Open configuration menu"; map.displaycontrol.Add(menuimage); menuimage.MouseClick = (o, e1) => { ShowMenu(); }; GLImage tpback = new GLImage("MSTPBack", new Rectangle(50, 10, iconsize, iconsize), Properties.Resources.GoBackward); tpback.ToolTipText = "Go back one system"; map.displaycontrol.Add(tpback); tpback.MouseClick = (o, e1) => { g.GoToTravelSystem(-1); }; GLImage tphome = new GLImage("MSTPHome", new Rectangle(90, 10, iconsize, iconsize), Properties.Resources.GoToHomeSystem); tphome.ToolTipText = "Go to current home system"; map.displaycontrol.Add(tphome); tphome.MouseClick = (o, e1) => { g.GoToTravelSystem(0); }; GLImage tpforward = new GLImage("MSTPForward", new Rectangle(130, 10, iconsize, iconsize), Properties.Resources.GoForward); tpforward.ToolTipText = "Go forward one system"; map.displaycontrol.Add(tpforward); tpforward.MouseClick = (o, e1) => { g.GoToTravelSystem(1); }; GLTextBoxAutoComplete tptextbox = new GLTextBoxAutoComplete(EntryTextName, new Rectangle(170, 10, 300, iconsize), ""); tptextbox.TextAlign = ContentAlignment.MiddleLeft; tptextbox.BackColor = Color.FromArgb(96, 50, 50, 50); tptextbox.BorderColor = Color.Gray; tptextbox.BorderWidth = 1; map.displaycontrol.Add(tptextbox); GLToolTip maintooltip = new GLToolTip("MTT", Color.FromArgb(180, 50, 50, 50)); maintooltip.ForeColor = Color.Orange; map.displaycontrol.Add(maintooltip); status = new GLLabel("Status", new Rectangle(10, 500, 600, 24), "x"); status.Dock = DockingType.BottomLeft; status.ForeColor = Color.Orange; status.BackColor = Color.FromArgb(50, 50, 50, 50); map.displaycontrol.Add(status); // detect mouse press with menu open and close it map.displaycontrol.GlobalMouseDown += (ctrl, e) => { // if map open, and no ctrl hit or ctrl is not a child of galmenu if (map.displaycontrol["Galmenu"] != null && (ctrl == null || !map.displaycontrol["Galmenu"].IsThisOrChildOf(ctrl))) { ((GLForm)map.displaycontrol["Galmenu"]).Close(); } }; }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Closed += ShaderTest_Closed; items.Add(new GLMatrixCalcUniformBlock(), "MCUB"); // create a matrix uniform block int front = -20000, back = front + 90000, left = -45000, right = left + 90000, vsize = 2000; Vector4[] displaylines = new Vector4[] { new Vector4(left, -vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, back, 1), }; GLRenderState rl = GLRenderState.Lines(1); { items.Add(new GLFixedShader(System.Drawing.Color.Yellow), "LINEYELLOW"); rObjects.Add(items.Shader("LINEYELLOW"), GLRenderableItem.CreateVector4(items, PrimitiveType.Lines, rl, displaylines)); } float h = 0; if (h != -1) { items.Add(new GLColorShaderWorld(), "COS-1L"); int dist = 1000; Color cr = Color.FromArgb(100, Color.White); rObjects.Add(items.Shader("COS-1L"), // horizontal GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(left, h, back), new Vector3(dist, 0, 0), (back - front) / dist + 1), new Color4[] { cr }) ); rObjects.Add(items.Shader("COS-1L"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(right, h, front), new Vector3(0, 0, dist), (right - left) / dist + 1), new Color4[] { cr }) ); } GLMatrixCalc mc = new GLMatrixCalc(); mc.PerspectiveNearZDistance = 1f; mc.PerspectiveFarZDistance = 500000f; mc.ResizeViewPort(this, glwfc.Size); // must establish size before starting displaycontrol = new GLControlDisplay(items, glwfc, mc); // hook form to the window - its the master, it takes its size fro mc.ScreenCoordMax displaycontrol.Focusable = true; // we want to be able to focus and receive key presses. displaycontrol.Name = "displaycontrol"; displaycontrol.Font = new Font("Times", 8); GLForm pform; if (true) { pform = new GLForm("Form1", "GL Form demonstration", new Rectangle(0, 0, 1000, 800)); //pform.BackColor = Color.FromArgb(200, Color.Red); //pform.Opacity = 0.7f; // pform.BackColorGradientDir = 90; // pform.BackColorGradientAlt = Color.FromArgb(200, Color.Yellow); //pform.ScaleWindow = new SizeF(0.75f, 0.75f); //pform.AlternatePos = new RectangleF(100, 100, 500, 400); //pform.AlternatePos = new RectangleF(100, 100, 1200, 1000); // pform.ScaleWindow = new SizeF(0.0f, 0.0f); // pform.Animators.Add(new AnimateScale(100, 1000, true, new SizeF(1, 1),removeafterend:true)); // pform.Animators.Add(new AnimateTranslate(glwfc.ElapsedTimems + 100, glwfc.ElapsedTimems + 1000, false, new Point(100, 100), removeafterend: true)); // pform.Animators.Add(new AnimateOpacity(glwfc.ElapsedTimems + 100, glwfc.ElapsedTimems + 2000, false, 1.0f,0.0f, removeafterend: true)); int taborder = 0; if (true) { GLLabel lab1 = new GLLabel("Lab1", new Rectangle(400, 0, 0, 0), "From Check"); pform.Add(lab1); GLButton b1 = new GLButton("B1", new Rectangle(5, 10, 80, 30), "Configuration Dialog"); b1.Margin = new MarginType(2); b1.AutoSize = true; b1.TabOrder = taborder++; b1.Padding = new PaddingType(5); b1.Click += (c, ev) => { ConfDialog(); }; b1.ToolTipText = "Button 1 tip\r\nLine 2 of it"; pform.Add(b1); GLButton b2 = new GLButton("B2", new Rectangle(5, 50, 0, 0), "Msg1"); b2.Image = Properties.Resources.ImportSphere; b2.TabOrder = taborder++; b2.ImageAlign = ContentAlignment.MiddleLeft; b2.TextAlign = ContentAlignment.MiddleRight; b2.Click += (c, ev) => { MsgDialog1(); }; b2.ToolTipText = "Button 2 tip\r\nLine 2 of it"; pform.Add(b2); GLButton b3 = new GLButton("B3", new Rectangle(100, 10, 80, 30), "Font"); b3.Margin = new MarginType(2); b3.TabOrder = taborder++; b3.Padding = new PaddingType(5); b3.ToolTipText = "Button 3 tip\r\nLine 2 of it"; b3.Click += (c, ev) => { displaycontrol.Font = new Font("Times", 12); }; pform.Add(b3); GLButton b4 = new GLButton("B4", new Rectangle(100, 50, 80, 30), "Msg2"); b4.TabOrder = taborder++; b4.Padding = new PaddingType(2); b4.ToolTipText = "Button 4 tip\r\nLine 2 of it"; b4.Click += (c, ev) => { MsgDialog2(); }; pform.Add(b4); GLButton b5 = new GLButton("B5", new Rectangle(200, 10, 80, 30), "Conf2"); b5.TabOrder = taborder++; b5.Padding = new PaddingType(2); b5.ToolTipText = "Button 5 tip\r\nLine 2 of it"; b5.Click += (c, ev) => { ConfDialog2(); }; pform.Add(b5); GLButton b6 = new GLButton("B3", new Rectangle(200, 50, 80, 30), "Disabled"); b6.TabOrder = taborder++; b6.ToolTipText = "Button 6 tip\r\nLine 2 of it"; b6.Enabled = false; pform.Add(b6); } if (true) { GLComboBox cb1 = new GLComboBox("CB", new Rectangle(0, 100, 0, 0), new List <string>() { "one", "two", "three" }); cb1.Margin = new MarginType(16, 8, 16, 8); cb1.TabOrder = taborder++; cb1.ToolTipText = "Combo Box"; pform.Add(cb1); GLComboBox cbstars = new GLComboBox("GalaxyStarsNumber", new Rectangle(100, 100, 100, 32)); cbstars.ToolTipText = "Control how many stars are shown when zoomes in"; cbstars.Items = new List <string>() { "Ultra", "High", "Medium", "Low" }; cbstars.TabOrder = taborder++; var list = new List <int>() { 1000000, 500000, 250000, 100000 }; int itemno = 1; cbstars.SelectedIndex = itemno >= 0 ? itemno : 1; // high default pform.Add(cbstars); } if (true) { GLCheckBox chk1 = new GLCheckBox("Checkbox1", new Rectangle(0, 150, 0, 0), "Normal"); chk1.Margin = new MarginType(16, 0, 0, 0); chk1.TabOrder = taborder++; pform.Add(chk1); GLCheckBox chk2 = new GLCheckBox("Checkbox2", new Rectangle(100, 150, 0, 0), "Radio"); chk2.Appearance = GLCheckBox.CheckBoxAppearance.Radio; chk2.TabOrder = taborder++; chk2.Checked = true; pform.Add(chk2); GLCheckBox chk3 = new GLCheckBox("Checkbox3", new Rectangle(200, 150, 0, 0), "Button"); chk3.Appearance = GLCheckBox.CheckBoxAppearance.Button; chk3.TabOrder = taborder++; chk3.BackColor = Color.FromArgb(200, 200, 200); pform.Add(chk3); GLCheckBox chk4 = new GLCheckBox("Checkbox4", new Rectangle(300, 150, 0, 0), ""); chk4.TabOrder = taborder++; pform.Add(chk4); GLCheckBox chk5 = new GLCheckBox("Checkbox5", new Rectangle(350, 150, 0, 0), "R1"); chk5.Appearance = GLCheckBox.CheckBoxAppearance.Radio; chk5.GroupRadioButton = true; chk5.TabOrder = taborder++; pform.Add(chk5); GLCheckBox chk6 = new GLCheckBox("Checkbox6", new Rectangle(400, 150, 0, 0), "R2"); chk6.Appearance = GLCheckBox.CheckBoxAppearance.Radio; chk6.GroupRadioButton = true; chk6.TabOrder = taborder++; pform.Add(chk6); GLCheckBox chk7 = new GLCheckBox("Checkbox7", new Rectangle(0, 175, 0, 0), "Disabled"); chk7.TabOrder = taborder++; chk7.Enabled = false; pform.Add(chk7); GLCheckBox chk8 = new GLCheckBox("Checkbox8", new Rectangle(100, 175, 0, 0), "Disabled"); chk8.Appearance = GLCheckBox.CheckBoxAppearance.Radio; chk8.TabOrder = taborder++; chk8.Enabled = false; pform.Add(chk8); GLCheckBox chk9 = new GLCheckBox("Checkbox9", new Rectangle(200, 175, 0, 0), "CDisabled"); chk9.TabOrder = taborder++; chk9.Enabled = false; chk9.Checked = true; pform.Add(chk9); GLCheckBox chk10 = new GLCheckBox("Checkbox10", new Rectangle(300, 175, 0, 0), "CDisabled"); chk10.Appearance = GLCheckBox.CheckBoxAppearance.Radio; chk10.TabOrder = taborder++; chk10.Enabled = false; chk10.Checked = true; pform.Add(chk10); } if (true) { GLDateTimePicker dtp = new GLDateTimePicker("DTP", new Rectangle(0, 210, 500, 30), DateTime.Now); dtp.Culture = System.Globalization.CultureInfo.GetCultureInfo("de-AT"); dtp.Format = GLDateTimePicker.DateTimePickerFormat.Long; //dtp.CustomFormat = "'start' dddd 'hello there' MMMM' and here 'yyyy"; dtp.Font = new Font("Ms Sans Serif", 11); dtp.ShowCheckBox = true; dtp.ShowCalendar = true; dtp.ShowUpDown = true; dtp.AutoSize = true; //dtp.Culture = CultureInfo.GetCultureInfo("es"); dtp.TabOrder = taborder++; pform.Add(dtp); } if (true) { List <string> i1 = new List <string>() { "one two three four five six seven eight", "two", "three", "four", "five", "six", "seven is very long too to check", "eight", "nine", "ten", "eleven", "twelve" }; GLListBox lb1 = new GLListBox("LB1", new Rectangle(0, 260, 260, 100), i1); lb1.Font = new Font("Microsoft Sans Serif", 12f); lb1.TabOrder = taborder++; lb1.ShowFocusBox = true; lb1.ScrollBarTheme.SliderColor = Color.AliceBlue; lb1.ScrollBarTheme.ThumbButtonColor = Color.Blue; //lb1.FitToItemsHeight = false; pform.Add(lb1); lb1.SelectedIndexChanged += (s, si) => { System.Diagnostics.Debug.WriteLine("Selected index " + si); }; } if (true) { GLUpDownControl upc1 = new GLUpDownControl("UPC1", new Rectangle(0, 600, 26, 46)); upc1.TabOrder = taborder++; pform.Add(upc1); upc1.Clicked += (s, upe) => System.Diagnostics.Debug.WriteLine("Up down control {0} {1}", s.Name, upe); } if (true) { GLCalendar cal = new GLCalendar("Cal", new Rectangle(500, 10, 300, 200)); cal.TabOrder = taborder++; //cal.Culture = CultureInfo.GetCultureInfo("es"); cal.AutoSize = true; cal.Font = new Font("Arial", 10); pform.Add(cal); } if (true) { GLNumberBoxFloat glf = new GLNumberBoxFloat("FLOAT", new Rectangle(500, 250, 100, 25), 23.4f); glf.BackColor = Color.AliceBlue; glf.TabOrder = taborder++; glf.Font = new Font("Ms Sans Serif", 12); glf.Minimum = -1000; glf.Maximum = 1000; glf.ValueChanged += (a) => { System.Diagnostics.Debug.WriteLine("GLF value changed"); }; glf.ValidityChanged += (a, b) => { System.Diagnostics.Debug.WriteLine($"GLF validity changed {b}"); }; pform.Add(glf); GLButton glfbut = new GLButton("FLOATBUT", new Rectangle(610, 250, 40, 15), "Value"); glfbut.Click += (e1, b1) => { glf.Value = 20.22f; }; pform.Add(glfbut); GLTextBoxAutoComplete gla = new GLTextBoxAutoComplete("ACTB", new Rectangle(500, 300, 100, 25)); gla.TabOrder = taborder++; gla.Font = new Font("Ms Sans Serif", 12); gla.PerformAutoCompleteInThread += (s, a, set) => { var r = new List <string>() { "one", "two", "three" }; foreach (var x in r) { if (x.StartsWith(s) || s.IsEmpty()) { set.Add(x); } } }; gla.SelectedEntry += (s) => { System.Diagnostics.Debug.WriteLine($"Autocomplete selected {s.Text}"); }; pform.Add(gla); } if (true) { GLButton b1 = new GLButton("BD1", new Rectangle(5, 10, 80, 30), "Bottom 1"); b1.TabOrder = taborder++; b1.Dock = DockingType.Bottom; displaycontrol.Add(b1); GLButton b2 = new GLButton("BD2", new Rectangle(5, 10, 80, 30), "Bottom 2"); b2.TabOrder = taborder++; b2.Dock = DockingType.Bottom; displaycontrol.Add(b2); } displaycontrol.Add(pform); } if (true) { GLForm pform2 = new GLForm("Form2", "Form 2 GL Control demonstration", new Rectangle(1100, 0, 400, 400)); pform2.BackColor = Color.FromArgb(200, Color.Red); pform2.Font = new Font("Ms sans serif", 10); pform2.BackColorGradientDir = 90; pform2.BackColorGradientAlt = Color.FromArgb(200, Color.Blue); displaycontrol.Add(pform2); GLButton b1 = new GLButton("*********** F2B1", new Rectangle(5, 10, 80, 30), "F2B1"); pform2.Add(b1); } if (true) { GLToolTip tip = new GLToolTip("ToolTip"); displaycontrol.Add(tip); } displaycontrol.GlobalMouseDown += (ctrl, ex) => { if (ctrl == null || !pform.IsThisOrChildOf(ctrl)) { // System.Diagnostics.Debug.WriteLine("Not on form"); } else { // System.Diagnostics.Debug.WriteLine("Click on form"); } }; gl3dcontroller = new Controller3D(); gl3dcontroller.ZoomDistance = 5000F; gl3dcontroller.YHoldMovement = true; gl3dcontroller.PaintObjects = Controller3dDraw; gl3dcontroller.KeyboardTravelSpeed = (ms, eyedist) => { return((float)ms * 10.0f); }; gl3dcontroller.MatrixCalc.InPerspectiveMode = true; if (displaycontrol != null) { gl3dcontroller.Start(mc, displaycontrol, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events displaycontrol.Paint += (o, ts) => // subscribing after start means we paint over the scene, letting transparency work { displaycontrol.Render(glwfc.RenderState, ts); // we use the same matrix calc as done in controller 3d draw }; } else { gl3dcontroller.Start(glwfc, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events } systemtimer.Start(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Closed += ShaderTest_Closed; items.Add(new GLMatrixCalcUniformBlock(), "MCUB"); // create a matrix uniform block int front = -20000, back = front + 90000, left = -45000, right = left + 90000, vsize = 2000; Vector4[] displaylines = new Vector4[] { new Vector4(left, -vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, back, 1), }; GLRenderState rl = GLRenderState.Lines(1); { items.Add(new GLFixedShader(System.Drawing.Color.Yellow), "LINEYELLOW"); rObjects.Add(items.Shader("LINEYELLOW"), GLRenderableItem.CreateVector4(items, PrimitiveType.Lines, rl, displaylines)); } float h = 0; if (h != -1) { items.Add(new GLColorShaderWorld(), "COS-1L"); int dist = 1000; Color cr = Color.FromArgb(100, Color.White); rObjects.Add(items.Shader("COS-1L"), // horizontal GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(left, h, back), new Vector3(dist, 0, 0), (back - front) / dist + 1), new Color4[] { cr }) ); rObjects.Add(items.Shader("COS-1L"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(right, h, front), new Vector3(0, 0, dist), (right - left) / dist + 1), new Color4[] { cr }) ); } GLMatrixCalc mc = new GLMatrixCalc(); mc.PerspectiveNearZDistance = 1f; mc.PerspectiveFarZDistance = 500000f; mc.ResizeViewPort(this, glwfc.Size); // must establish size before starting displaycontrol = new GLControlDisplay(items, glwfc, mc); // hook form to the window - its the master, it takes its size fro mc.ScreenCoordMax displaycontrol.Focusable = true; // we want to be able to focus and receive key presses. displaycontrol.Name = "displaycontrol"; pform = new GLForm("Form1", "GL Control demonstration", new Rectangle(10, 10, 700, 800)); displaycontrol.Add(pform); if (true) { dgv = new GLDataGridView("DGV-1", new Rectangle(10, 10, 600, 500)); dgv.Dock = DockingType.Fill; dgv.DefaultAltRowCellStyle.BackColor = Color.FromArgb(255, 240, 240, 240); dgv.DefaultAltRowCellStyle.ForeColor = Color.DarkBlue; dgv.SelectRowOnRightClick = true; // dgv.ColumnFillMode = GLDataGridView.ColFillMode.FillWidth; var col0 = dgv.CreateColumn(); var col1 = dgv.CreateColumn(); var col2 = dgv.CreateColumn(); var col3 = dgv.CreateColumn(); col0.Width = 20; col0.MinimumWidth = 30; col0.Text = "Col0"; col1.Width = 150; col1.Text = "Col1"; col1.MinimumWidth = 50; col2.Width = 150; col2.Text = "Col2"; col3.Width = 150; col3.Text = "Col3"; dgv.AddColumn(col0); dgv.AddColumn(col1); dgv.AddColumn(col2); dgv.AddColumn(col3); pform.BackColor = Color.FromArgb(128, 128, 128, 128); pform.ForeColor = Color.DarkOrange; dgv.DefaultCellStyle.Padding = new PaddingType(5); dgv.BackColor = Color.FromArgb(128, 60, 60, 0); dgv.DefaultColumnHeaderStyle.ForeColor = dgv.DefaultRowHeaderStyle.ForeColor = dgv.DefaultCellStyle.ForeColor = dgv.DefaultAltRowCellStyle.ForeColor = Color.DarkOrange; dgv.UpperLeftBackColor = dgv.DefaultColumnHeaderStyle.BackColor = dgv.DefaultRowHeaderStyle.BackColor = Color.FromArgb(192, 64, 64, 64); dgv.DefaultCellStyle.BackColor = Color.FromArgb(200, 40, 40, 40); dgv.DefaultAltRowCellStyle.BackColor = Color.FromArgb(200, 50, 50, 50); dgv.ScrollBarTheme.BackColor = Color.Transparent; dgv.ScrollBarTheme.SliderColor = Color.FromArgb(0, 64, 64, 64); dgv.ScrollBarTheme.ThumbButtonColor = Color.DarkOrange; dgv.ScrollBarTheme.MouseOverButtonColor = Color.Orange; dgv.ScrollBarTheme.MousePressedButtonColor = Color.FromArgb(255, 255, 192, 0); dgv.ScrollBarTheme.ArrowButtonColor = Color.Transparent; dgv.ScrollBarTheme.ArrowColor = Color.DarkOrange; col2.SortCompare = GLDataGridViewSorts.SortCompareNumeric; for (int i = 0; i < 200; i++) { var row = dgv.CreateRow(); if (i < 2 || i > 5) { row.AutoSize = true; } string prefix = char.ConvertFromUtf32(i + 65); var imgcell = new GLDataGridViewCellImage(Properties.Resources.GoBackward); imgcell.Style.ContentAlignment = ContentAlignment.MiddleLeft; imgcell.Size = new Size(16, 16); row.AddCell(imgcell); row.AddCell(new GLDataGridViewCellText($"{prefix} R{i,2}C1 long bit of text for it to wrap again and again and again")); var but = new GLButton("EmbBut" + i, new Rectangle(0, 0, 30, 15), "But" + i); row.AddCell(new GLDataGridViewCellText($"{i}")); dgv.AddRow(row); } var butcel = new GLDataGridViewCellButton(new Rectangle(0, 0, 80, 24), "Buttext"); butcel.MouseClick += (e2, e3) => { System.Diagnostics.Debug.WriteLine("Click on grid button"); }; butcel.Style.Padding = new PaddingType(3); butcel.Style.ContentAlignment = ContentAlignment.MiddleLeft; dgv.Rows[0].AddCell(butcel); dgv.Rows[1].Height = 40; // dgv.Rows[1].Cells[0].Selected = true; { GLContextMenu cm = new GLContextMenu("CMContent"); GLMenuItem cm1 = new GLMenuItem("CM1A", "Menu-1"); GLMenuItem cm2 = new GLMenuItem("CM1B", "Menu-2"); cm2.CheckOnClick = true; GLMenuItem cm3 = new GLMenuItem("CM1C", "Menu-3"); cm.Add(cm1); cm.Add(cm2); cm.Add(cm3); cm.Opening += (e1, tag) => { GLDataGridView.RowColPos g = (GLDataGridView.RowColPos)tag; System.Diagnostics.Debug.WriteLine($"Open menu content at {g.Row} {g.Column} {g.Location}"); }; dgv.ContextMenuGrid = cm; } { GLContextMenu cm = new GLContextMenu("CMColheader"); GLMenuItem cm1 = new GLMenuItem("CM1A", "Colheader1"); GLMenuItem cm2 = new GLMenuItem("CM1B", "ColHeader2"); cm.Add(cm1); cm.Add(cm2); cm.Opening += (e1, tag) => { GLDataGridView.RowColPos g = (GLDataGridView.RowColPos)tag; System.Diagnostics.Debug.WriteLine($"Open menu col header at {g.Row} {g.Column} {g.Location}"); }; dgv.ContextMenuColumnHeaders = cm; } { GLContextMenu cm = new GLContextMenu("CMRowheader"); GLMenuItem cm1 = new GLMenuItem("CM1A", "RowHeader-1"); cm1.Click = (ctrlb) => { GLMessageBox msg = new GLMessageBox("Confirm", displaycontrol, new Point(int.MinValue, 0), "Ag", "Warning", GLMessageBox.MessageBoxButtons.OKCancel); }; GLMenuItem cm2 = new GLMenuItem("CM1B", "RowHeader-2"); cm.Add(cm1); cm.Add(cm2); cm.Opening += (e1, tag) => { GLDataGridView.RowColPos g = (GLDataGridView.RowColPos)tag; System.Diagnostics.Debug.WriteLine($"Open menu row header at {g.Row} {g.Column} {g.Location}"); }; dgv.ContextMenuRowHeaders = cm; } dgv.MouseClickOnGrid += (r, c, e1) => { System.Diagnostics.Debug.WriteLine($"Mouse click on grid {r} {c}"); }; dgv.SelectedRow += (rw, state) => { System.Diagnostics.Debug.WriteLine($"Row Selected {rw.Index} {state}"); var rowset = dgv.GetSelectedRows(); foreach (var r in rowset) { System.Diagnostics.Debug.WriteLine($".. Row {r.Index} selected"); } }; dgv.SelectedCell += (cell, state) => { System.Diagnostics.Debug.WriteLine($"Cell Selected {cell.RowParent.Index} {cell.Index} "); var cellset = dgv.GetSelectedCells(); foreach (var c in cellset) { System.Diagnostics.Debug.WriteLine($".. Cell {c.RowParent.Index} {c.Index} "); } }; dgv.SelectionCleared += () => { System.Diagnostics.Debug.WriteLine($"Selection cleared"); }; pform.Add(dgv); } { GLToolTip tip = new GLToolTip("ToolTip"); displaycontrol.Add(tip); } gl3dcontroller = new Controller3D(); gl3dcontroller.ZoomDistance = 5000F; gl3dcontroller.YHoldMovement = true; gl3dcontroller.PaintObjects = Controller3dDraw; gl3dcontroller.KeyboardTravelSpeed = (ms, eyedist) => { return((float)ms * 10.0f); }; gl3dcontroller.MatrixCalc.InPerspectiveMode = true; if (displaycontrol != null) { gl3dcontroller.Start(mc, displaycontrol, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events displaycontrol.Paint += (o, ts) => // subscribing after start means we paint over the scene, letting transparency work { //System.Diagnostics.Debug.WriteLine(ts + " Render"); displaycontrol.Render(glwfc.RenderState, ts); // we use the same matrix calc as done in controller 3d draw }; } else { gl3dcontroller.Start(glwfc, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events } systemtimer.Interval = 25; systemtimer.Tick += new EventHandler(SystemTick); systemtimer.Start(); }
public MapMenu(Map g, Map.Parts parts) { map = g; // names of MS* are on screen items hidden during main menu presentation int leftmargin = 4; int vpos = 4; int hpad = 8; int hpos = leftmargin; GLImage menuimage = new GLImage("MSMainMenu", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.hamburgermenu")); menuimage.ToolTipText = "Open configuration menu"; map.displaycontrol.Add(menuimage); menuimage.MouseClick = (o, e1) => { ShowMenu(parts); }; hpos += menuimage.Width + hpad; if ((parts & Map.Parts.TravelPath) != 0) { GLImage tpback = new GLImage("MSTPBack", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.GoBackward")); tpback.ToolTipText = "Go back one system"; map.displaycontrol.Add(tpback); tpback.MouseClick = (o, e1) => { g.GoToTravelSystem(-1); }; hpos += iconsize + hpad; GLImage tphome = new GLImage("MSTPHome", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.GoToHomeSystem")); tphome.ToolTipText = "Go to current system"; map.displaycontrol.Add(tphome); tphome.MouseClick = (o, e1) => { g.GoToCurrentSystem(); }; hpos += iconsize + hpad; GLImage tpforward = new GLImage("MSTPForward", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.GoForward")); tpforward.ToolTipText = "Go forward one system"; map.displaycontrol.Add(tpforward); tpforward.MouseClick = (o, e1) => { g.GoToTravelSystem(1); }; hpos += iconsize + hpad; } if ((parts & Map.Parts.GalaxyResetPos) != 0) { GLImage tpgalview = new GLImage("MSTPGalaxy", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.ShowGalaxy")); tpgalview.ToolTipText = "View Galaxy"; map.displaycontrol.Add(tpgalview); tpgalview.MouseClick = (o, e1) => { g.ViewGalaxy(); }; hpos += iconsize + hpad; } if ((parts & Map.Parts.Bookmarks) != 0) { GLCheckBox butbkmks = new GLCheckBox("MSTPBookmarks", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.ShowBookmarks"), null); butbkmks.ToolTipText = "Show bookmark list"; butbkmks.CheckOnClick = true; butbkmks.CheckChanged += (e1) => { g.ToggleBookmarkList(butbkmks.Checked); }; map.displaycontrol.Add(butbkmks); hpos += butbkmks.Width + hpad; } if ((parts & Map.Parts.SearchBox) != 0) { EntryTextBox = new GLTextBoxAutoComplete("MSTPEntryText", new Rectangle(hpos, vpos, 300, iconsize), ""); EntryTextBox.TextAlign = ContentAlignment.MiddleLeft; EntryTextBox.BackColor = Color.FromArgb(96, 50, 50, 50); EntryTextBox.BorderColor = Color.Gray; EntryTextBox.BorderWidth = 1; map.displaycontrol.Add(EntryTextBox); hpos += EntryTextBox.Width + hpad; } if ((parts & Map.Parts.PrepopulateEDSMLocalArea) != 0) { GLImage butpopstars = new GLImage("MSPopulate", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.ShowMoreStars")); butpopstars.ToolTipText = "Load star box at current look location"; butpopstars.MouseClick = (o, e1) => { g.AddMoreStarsAtLookat(); }; map.displaycontrol.Add(butpopstars); hpos += butpopstars.Width + hpad; } DBStatus = new GLImage("MSDB", new Rectangle(hpos, vpos, iconsize, iconsize), BaseUtils.Icons.IconSet.GetBitmap("GalMap.db")); DBStatus.Dock = DockingType.BottomRight; DBStatus.ToolTipText = "Reading from DB"; DBStatus.Visible = false; map.displaycontrol.Add(DBStatus); status = new GLLabel("Status", new Rectangle(leftmargin, 500, 600, 24), "x"); status.Dock = DockingType.BottomLeft; status.ForeColor = Color.Orange; status.BackColor = Color.FromArgb(50, 50, 50, 50); map.displaycontrol.Add(status); GLToolTip maintooltip = new GLToolTip("MTT", Color.FromArgb(180, 50, 50, 50)); maintooltip.ForeColor = Color.Orange; map.displaycontrol.Add(maintooltip); // detect mouse press with menu open and close it map.displaycontrol.GlobalMouseDown += (ctrl, e) => { // if map open, and no ctrl hit or ctrl is not a child of galmenu if (map.displaycontrol["Galmenu"] != null && (ctrl == null || !map.displaycontrol["Galmenu"].IsThisOrChildOf(ctrl))) { ((GLForm)map.displaycontrol["Galmenu"]).Close(); } }; }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Closed += ShaderTest_Closed; items.Add(new GLMatrixCalcUniformBlock(), "MCUB"); // create a matrix uniform block int front = -20000, back = front + 90000, left = -45000, right = left + 90000, vsize = 2000; Vector4[] displaylines = new Vector4[] { new Vector4(left, -vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, front, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, +vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, -vsize, back, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, -vsize, front, 1), new Vector4(left, -vsize, back, 1), new Vector4(left, +vsize, front, 1), new Vector4(left, +vsize, back, 1), new Vector4(right, -vsize, front, 1), new Vector4(right, -vsize, back, 1), new Vector4(right, +vsize, front, 1), new Vector4(right, +vsize, back, 1), }; GLRenderState rl = GLRenderState.Lines(1); { items.Add(new GLFixedShader(System.Drawing.Color.Yellow), "LINEYELLOW"); rObjects.Add(items.Shader("LINEYELLOW"), GLRenderableItem.CreateVector4(items, PrimitiveType.Lines, rl, displaylines)); } float h = 0; if (h != -1) { items.Add(new GLColorShaderWorld(), "COS-1L"); int dist = 1000; Color cr = Color.FromArgb(100, Color.White); rObjects.Add(items.Shader("COS-1L"), // horizontal GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(left, h, back), new Vector3(dist, 0, 0), (back - front) / dist + 1), new Color4[] { cr }) ); rObjects.Add(items.Shader("COS-1L"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, rl, GLShapeObjectFactory.CreateLines(new Vector3(left, h, front), new Vector3(right, h, front), new Vector3(0, 0, dist), (right - left) / dist + 1), new Color4[] { cr }) ); } { items.Add(new GLTexturedShaderObjectTranslation(), "TEX"); items.Add(new GLTexture2D(Properties.Resources.dotted2, SizedInternalFormat.Rgba8), "dotted2"); GLRenderState rt = GLRenderState.Tri(); rObjects.Add(items.Shader("TEX"), GLRenderableItem.CreateVector4Vector2(items, OpenTK.Graphics.OpenGL4.PrimitiveType.Triangles, rt, GLCubeObjectFactory.CreateSolidCubeFromTriangles(2000f), GLCubeObjectFactory.CreateCubeTexTriangles(), new GLRenderDataTranslationRotationTexture(items.Tex("dotted2"), new Vector3(-2, 0, 0)) )); } { items.Add(new GLFixedColorShaderWorld(Color.FromArgb(150, Color.Green)), "FCS1"); items.Add(new GLFixedColorShaderWorld(Color.FromArgb(80, Color.Red)), "FCS2"); GLRenderState rq = GLRenderState.Quads(); rObjects.Add(items.Shader("FCS1"), GLRenderableItem.CreateVector4(items, OpenTK.Graphics.OpenGL4.PrimitiveType.Quads, rq, GLShapeObjectFactory.CreateQuad(1000, pos: new Vector3(4000, 500, 0)))); rObjects.Add(items.Shader("FCS2"), GLRenderableItem.CreateVector4(items, OpenTK.Graphics.OpenGL4.PrimitiveType.Quads, rq, GLShapeObjectFactory.CreateQuad(1000, pos: new Vector3(4000, 1000, 0)))); } MatrixCalcSpecial mc = new MatrixCalcSpecial(); mc.PerspectiveNearZDistance = 1f; mc.PerspectiveFarZDistance = 500000f; mc.ResizeViewPort(this, glwfc.Size); // must establish size before starting displaycontrol = new GLControlDisplay(items, glwfc, mc); // hook form to the window - its the master, it takes its size fro mc.ScreenCoordMax displaycontrol.Focusable = true; // we want to be able to focus and receive key presses. displaycontrol.Name = "displaycontrol"; GLForm pform = new GLForm("Form1", "GL Control demonstration", new Rectangle(0, 0, 1000, 850)); // pform.BackColor = Color.FromArgb(200, Color.Red); //pform.BackColorGradientDir = 90; //pform.BackColorGradientAlt = Color.FromArgb(200, Color.Yellow); displaycontrol.Add(pform); if (true) { GLPanel p1 = new GLPanel("P3", new Size(150, 150), DockingType.TopLeft, 0); p1.SetMarginBorderWidth(new MarginType(1), 1, Color.Black, new PaddingType(1)); pform.Add(p1); } if (true) { GLTableLayoutPanel ptable = new GLTableLayoutPanel("tablelayout", new Rectangle(5, 200, 190, 190)); ptable.Margin = new MarginType(2); ptable.Padding = new PaddingType(2); ptable.BorderWidth = 1; ptable.Rows = new List <GLTableLayoutPanel.Style> { new GLTableLayoutPanel.Style(GLTableLayoutPanel.Style.SizeTypeEnum.Weight, 50), new GLTableLayoutPanel.Style(GLTableLayoutPanel.Style.SizeTypeEnum.Weight, 50) }; ptable.Columns = new List <GLTableLayoutPanel.Style> { new GLTableLayoutPanel.Style(GLTableLayoutPanel.Style.SizeTypeEnum.Weight, 50), new GLTableLayoutPanel.Style(GLTableLayoutPanel.Style.SizeTypeEnum.Weight, 50) }; pform.Add(ptable); GLImage pti1 = new GLImage("PTI1", new Rectangle(0, 0, 24, 24), Properties.Resources.dotted); pti1.Column = 0; pti1.Row = 0; pti1.Dock = DockingType.Fill; ptable.Add(pti1); GLImage pti2 = new GLImage("PTI2", new Rectangle(100, 0, 24, 24), Properties.Resources.dotted2); pti2.Column = 1; pti1.Row = 0; ptable.Add(pti2); GLImage pti3 = new GLImage("PTI3", new Rectangle(100, 0, 48, 48), Properties.Resources.ImportSphere); pti3.Column = 0; pti3.Row = 1; pti3.Dock = DockingType.LeftCenter; pti3.ImageStretch = true; ptable.Add(pti3); GLImage pti4 = new GLImage("PTI4", new Rectangle(100, 0, 64, 64), Properties.Resources.Logo8bpp); pti4.Column = 1; pti4.Row = 1; pti4.Dock = DockingType.Center; ptable.Add(pti4); } if (true) { GLFlowLayoutPanel pflow1 = new GLFlowLayoutPanel("flowlayout", new Rectangle(5, 400, 190, 190)); pflow1.SetMarginBorderWidth(new MarginType(2), 1, Color.Black, new PaddingType(2)); pflow1.FlowPadding = new PaddingType(10, 5, 0, 0); pform.Add(pflow1); GLImage pti1 = new GLImage("PTI1", new Rectangle(0, 0, 24, 24), Properties.Resources.dotted); pflow1.Add(pti1); GLImage pti2 = new GLImage("PTI2", new Rectangle(100, 0, 32, 32), Properties.Resources.dotted2); pflow1.Add(pti2); GLImage pti3 = new GLImage("PTI3", new Rectangle(100, 0, 48, 48), Properties.Resources.ImportSphere); pflow1.Add(pti3); GLImage pti4 = new GLImage("PTI4", new Rectangle(100, 0, 64, 64), Properties.Resources.Logo8bpp); pflow1.Add(pti4); } if (true) { GLScrollPanel sp1 = new GLScrollPanel("VSP1", new Rectangle(5, 600, 200, 200)); sp1.BorderWidth = 1; sp1.BackColor = Color.Yellow; // sp1.SetMarginBorderWidth(new Margin(2), 1, Color.Black, new GLOFC.GL4.Controls.Padding(2)); pform.Add(sp1); GLImage sp1i1 = new GLImage("SP1I1", new Rectangle(0, 0, 190, 100), Properties.Resources.dotted); sp1.Add(sp1i1); GLImage sp1i2 = new GLImage("SP1I22", new Rectangle(10, 150, 100, 100), Properties.Resources.dotted); sp1.Add(sp1i2); GLImage sp1i3 = new GLImage("SP1I23", new Rectangle(100, 100, 200, 200), Properties.Resources.dotted2); sp1.Add(sp1i3); sp1.VertScrollPos = 0; sp1.HorzScrollPos = 0; GLScrollBar sb1 = new GLScrollBar("SB1", new Rectangle(220, 600, 20, 100), 0, 200); sb1.Scroll += (c, s1e) => sp1.VertScrollPos = s1e.NewValue; pform.Add(sb1); GLScrollBar sb2 = new GLScrollBar("SB2", new Rectangle(260, 600, 100, 20), 0, 200); sb2.HorizontalScroll = true; sb2.Scroll += (c, s1e) => sp1.HorzScrollPos = s1e.NewValue; pform.Add(sb2); } int col2 = 200; if (true) { GLScrollPanelScrollBar spb1 = new GLScrollPanelScrollBar("CSPan", new Rectangle(col2, 5, 190, 190)); spb1.ScrollBackColor = Color.Yellow; spb1.SetMarginBorderWidth(new MarginType(2), 1, Color.Black, new PaddingType(2)); pform.Add(spb1); GLImage spb1i1 = new GLImage("SPB1I1", new Rectangle(10, 10, 100, 100), Properties.Resources.dotted); spb1.Add(spb1i1); GLButton but = new GLButton("SPB1BUT1", new Rectangle(40, 120, 40, 20), "But1"); but.Click += (en, eb) => { System.Diagnostics.Debug.WriteLine("Click on SP Button"); }; spb1.Add(but); GLImage spb1i2 = new GLImage("SPB1I2", new Rectangle(10, 150, 100, 100), Properties.Resources.dotted); spb1.Add(spb1i2); spb1.EnableHorzScrolling = false; } { GLButton but = new GLButton("ButExample", new Rectangle(40, 160, 40, 20), "But1"); but.Click += (en, eb) => { System.Diagnostics.Debug.WriteLine("Click on SP Button"); }; pform.Add(but); } int col3 = 400; if (true) { GLScrollPanelScrollBar spb1 = new GLScrollPanelScrollBar("CSPan2", new Rectangle(col3, 5, 190, 190)); spb1.ScrollBackColor = Color.Blue; spb1.ScrollBarTheme.ThumbButtonColor = Color.Red; spb1.SetMarginBorderWidth(new MarginType(2), 1, Color.Black, new PaddingType(2)); pform.Add(spb1); GLImage spb1i1 = new GLImage("SPB1I1", new Rectangle(10, 10, 100, 100), Properties.Resources.dotted); spb1.Add(spb1i1); GLImage spb1i2 = new GLImage("SPB1I2", new Rectangle(10, 120, 100, 100), Properties.Resources.dotted); spb1.Add(spb1i2); GLImage spb1i3 = new GLImage("SPB1I3", new Rectangle(150, 50, 100, 100), Properties.Resources.dotted2); spb1.Add(spb1i3); } if (true) { //GLGroupBox p3 = new GLGroupBox("GB1", "Group Box Very Long Title", new Rectangle(col2,200,190,190)); GLGroupBox p3 = new GLGroupBox("GB1", "Group Box", new Rectangle(col2, 200, 190, 190)); p3.TextAlign = ContentAlignment.MiddleRight; p3.AutoSize = true; GLImage spb1i1 = new GLImage("SPB1I1", new Rectangle(10, 10, 100, 100), Properties.Resources.dotted); p3.Add(spb1i1); pform.Add(p3); } if (true) { GLTabControl tc = new GLTabControl("Tabc", new Rectangle(col2, 400, 200, 190)); tc.TabNotSelectedColor = Color.Yellow; tc.TabSelectedColor = Color.Red; tc.TabStyle = new TabStyleRoundedEdge(); //tc.TabStyle = new TabStyleSquare(); //tc.TabStyle = new TabStyleAngled(); tc.Font = new Font("Ms Sans Serif", 9); GLTabPage tabp1 = new GLTabPage("tabp1", "TAB 1", Color.Blue); tc.Add(tabp1); GLButton tabp1b1 = new GLButton("B1", new Rectangle(5, 5, 80, 40), "Button 1"); tabp1.Add(tabp1b1); tabp1b1.Click += (c, ev) => { System.Diagnostics.Debug.WriteLine("On click for " + c.Name + " " + ev.Button); }; tabp1b1.ToolTipText = "Button 1"; GLTabPage tabp2 = new GLTabPage("tabp2", "TAB Page 2", Color.Yellow); GLButton tabp2b1 = new GLButton("B2-2", new Rectangle(5, 25, 80, 40), "Button 2-2"); tabp2.Add(tabp2b1); tc.Add(tabp2); GLTabPage tabp3 = new GLTabPage("tabp3", "TAB Page 3", Color.Green); tc.Add(tabp3); GLTabPage tabp4 = new GLTabPage("tabp4", "TAB Page 4", Color.Magenta); tc.Add(tabp4); pform.Add(tc); // tc.SelectedTab = 0; GLButton tabselnone = new GLButton("BTSN", new Rectangle(col2 + 200 + 5, 400, 40, 15), "None"); tabselnone.Click += (c12, ev2) => { tc.SelectedTab = -1; }; pform.Add(tabselnone); } if (true) { GLPanel pouter = new GLPanel("outerflow", new Rectangle(col3, 200, 1300, 30)); // make it very wide, so the child has all the width it wants to flow into pouter.SetMarginBorderWidth(new MarginType(5), 1, Color.Blue, new PaddingType(5)); pouter.AutoSize = true; GLFlowLayoutPanel pflow2; pflow2 = new GLFlowLayoutPanel("Flowlayout2", new Rectangle(0, 0, 10, 10)); pflow2.AutoSize = true; pflow2.Margin = new MarginType(2); pflow2.Padding = new PaddingType(2); pflow2.BorderWidth = 1; pflow2.FlowPadding = new PaddingType(10, 5, 0, 5); GLImage pti1 = new GLImage("PTI1", new Rectangle(0, 0, 24, 24), Properties.Resources.dotted2); pflow2.Add(pti1); GLImage pti2 = new GLImage("PTI2", new Rectangle(0, 0, 32, 32), Properties.Resources.dotted2); pflow2.Add(pti2); GLImage pti3 = new GLImage("PTI3", new Rectangle(0, 0, 48, 48), Properties.Resources.ImportSphere); pflow2.Add(pti3); for (int i = 0; i < 5; i++) { GLImage pti4 = new GLImage("PTI00" + i, new Rectangle(0, 0, 64, 64), Properties.Resources.Logo8bpp); pflow2.Add(pti4); } pouter.Add(pflow2); pform.Add(pouter); } { GLToolTip tip = new GLToolTip("ToolTip"); displaycontrol.Add(tip); } gl3dcontroller = new Controller3D(); gl3dcontroller.ZoomDistance = 5000F; gl3dcontroller.YHoldMovement = true; gl3dcontroller.PaintObjects = Controller3dDraw; gl3dcontroller.KeyboardTravelSpeed = (ms, eyedist) => { return((float)ms * 10.0f); }; gl3dcontroller.MatrixCalc.InPerspectiveMode = true; if (displaycontrol != null) { gl3dcontroller.Start(mc, displaycontrol, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events displaycontrol.Paint += (o, ts) => // subscribing after start means we paint over the scene, letting transparency work { //System.Diagnostics.Debug.WriteLine(ts + " Render"); displaycontrol.Render(glwfc.RenderState, ts); // we use the same matrix calc as done in controller 3d draw }; } else { gl3dcontroller.Start(glwfc, new Vector3(0, 0, 10000), new Vector3(140.75f, 0, 0), 0.5F); // HOOK the 3dcontroller to the form so it gets Form events } systemtimer.Interval = 25; systemtimer.Tick += new EventHandler(SystemTick); systemtimer.Start(); }