public void Draw() { BeginDraw(); // ushort* offset = null; _cmds.Reset(); _vertices.Reset(); _indices.Reset(); Convert(_cmds, _vertices, _indices, _convertConfig); var vertexCount = (uint)((ulong)_vertices.Count / _convertConfig.VertexSize); /* iterate over and execute each draw command */ uint offset = 0; SetBuffers(_vertices.Data, _indices.Data, _indices.Count, (int)vertexCount); for (var i = 0; i < _cmds.Count; ++i) { var cmd = _cmds[i]; if (cmd.elem_count == 0) { continue; } Draw((int)cmd.clip_rect.x, (int)cmd.clip_rect.y, (int)cmd.clip_rect.w, (int)cmd.clip_rect.h, cmd.texture.id, (int)offset, (int)(cmd.elem_count / 3)); offset += cmd.elem_count; } Nk.nk_clear(_ctx); EndDraw(); }
private NkImage LoadImage(string path) { using (var stream = File.OpenRead(GetAssetPath(path))) { var texture = Texture2D.FromStream(GraphicsDevice, stream); var result = Nk.nk_image_id(_contextWrapper.CreateTexture(texture)); result.w = (ushort)texture.Width; result.h = (ushort)texture.Height; return(result); } }
protected BaseContext() { _ctx = new NkContext(); Nk.nk_setup(_ctx, null); _convertConfig = new NkConvertConfig { VertexAlignment = 4, GlobalAlpha = 1f, ShapeAa = true, LineAa = true, CircleSegmentCount = 22, CurveSegmentCount = 22, ArcSegmentCount = 22 }; }
/// <summary> /// Grids the demo. /// </summary> /// <param name="ctx">Context.</param> /// <param name="media">Media.</param> public static void grid_demo(NuklearContext ctx, Media media) { int i; ctx.StyleSetFont(media.Font20.Handle); if (ctx.Begin("Grid Demo", Nk.nk_rect_(600, 350, 275, 250), PanelFlags.TITLE | PanelFlags.BORDER | PanelFlags.MOVABLE | PanelFlags.NO_SCROLLBAR)) { ctx.StyleSetFont(media.Font18.Handle); ctx.LayoutRowDynamic(30, 2); ctx.Label("String:", Alignment.MIDDLERIGHT); ctx.EditString(NkEditFlags.FIELD, ref EditStrings[0], 64, Nk.nk_filter_default); ctx.Label("Floating point:", Alignment.MIDDLERIGHT); ctx.EditString(NkEditFlags.FIELD, ref EditStrings[1], 64, Nk.nk_filter_float); ctx.Label("Hexadecimal:", Alignment.MIDDLERIGHT); ctx.EditString(NkEditFlags.FIELD, ref EditStrings[2], 64, Nk.nk_filter_hex); ctx.Label("Binary:", Alignment.MIDDLERIGHT); ctx.EditString(NkEditFlags.FIELD, ref EditStrings[3], 64, Nk.nk_filter_binary); ctx.Label("Checkbox:", Alignment.MIDDLERIGHT); ctx.CheckboxLabel("Check me", ref _gridCheck); ctx.Label("Combobox:", Alignment.MIDDLERIGHT); if (ctx.ComboBeginLabel(Items[_selectedItem2], Nk.nk_vec2_(ctx.WidgetWidth(), 200))) { ctx.LayoutRowDynamic(25, 1); for (i = 0; i < 3; ++i) { if (ctx.ComboItemLabel(Items[i], Alignment.MIDDLELEFT)) { _selectedItem2 = i; } } ctx.ComboEnd(); } } ctx.End(); ctx.StyleSetFont(media.Font14.Handle); }
public void SetFont(NkFont font) { Nk.nk_style_set_font(_ctx, font.Handle); }
/// <summary> /// User interfaces the piemenu. /// </summary> /// <returns>The piemenu.</returns> /// <param name="ctx">Context.</param> /// <param name="pos">Position.</param> /// <param name="radius">Radius.</param> /// <param name="icons">Icons.</param> /// <param name="item_count">Item count.</param> public static int ui_piemenu(NuklearContext ctx, NkVec2 pos, float radius, NkImage[] icons, int itemCount) { var ret = -1; /* pie menu popup */ var border = ctx.Ctx.Style.Window.border_color; var background = ctx.Ctx.Style.Window.fixed_background; ctx.Ctx.Style.Window.fixed_background = Nk.nk_style_item_hide(); ctx.Ctx.Style.Window.border_color = Nk.nk_rgba(0, 0, 0, 0); var totalSpace = ctx.WindowGetContentRegion(); ctx.Ctx.Style.Window.spacing = Nk.nk_vec2_(0, 0); ctx.Ctx.Style.Window.padding = Nk.nk_vec2_(0, 0); if (ctx.PopupBegin(NkPopupType.NK_POPUP_STATIC, "piemenu", PanelFlags.NO_SCROLLBAR, Nk.nk_rect_(pos.x - totalSpace.x - radius, pos.y - radius - totalSpace.y, 2 * radius, 2 * radius))) { var o = ctx.WindowGetCanvas(); var inp = ctx.Ctx.Input; totalSpace = ctx.WindowGetContentRegion(); ctx.Ctx.Style.Window.spacing = Nk.nk_vec2_(4, 4); ctx.Ctx.Style.Window.padding = Nk.nk_vec2_(8, 8); ctx.LayoutRowDynamic(totalSpace.h, 1); NkRect bounds; Nk.nk_widget(&bounds, ctx.Ctx); /* outer circle */ Nk.nk_fill_circle(o, bounds, Nk.nk_rgb(50, 50, 50)); int activeItem; { /* circle buttons */ var step = 2 * 3.141592654f / Math.Max(1, itemCount); float aMin = 0; var aMax = step; var center = Nk.nk_vec2_(bounds.x + bounds.w / 2.0f, bounds.y + bounds.h / 2.0f); var drag = Nk.nk_vec2_(inp.mouse.Pos.x - center.x, inp.mouse.Pos.y - center.y); var angle = (float)Math.Atan2(drag.y, drag.x); if (angle < -0.0f) { angle += 2.0f * 3.141592654f; } activeItem = (int)(angle / step); int i; for (i = 0; i < itemCount; ++i) { NkRect content; Nk.nk_fill_arc(o, center.x, center.y, bounds.w / 2.0f, aMin, aMax, activeItem == i ? Nk.nk_rgb(45, 100, 255) : Nk.nk_rgb(60, 60, 60)); /* separator line */ var rx = bounds.w / 2.0f; float ry = 0; var dx = rx * (float)Math.Cos(aMin) - ry * (float)Math.Sin(aMin); var dy = rx * (float)Math.Sin(aMin) + ry * (float)Math.Cos(aMin); Nk.nk_stroke_line(o, center.x, center.y, center.x + dx, center.y + dy, 1.0f, Nk.nk_rgb(50, 50, 50)); /* button content */ var a = aMin + (aMax - aMin) / 2.0f; rx = bounds.w / 2.5f; ry = 0; content.w = 30; content.h = 30; content.x = center.x + (rx * (float)Math.Cos(a) - ry * (float)Math.Sin(a) - content.w / 2.0f); content.y = center.y + (rx * (float)Math.Sin(a) + ry * (float)Math.Cos(a) - content.h / 2.0f); Nk.nk_draw_image(o, content, icons[i], Nk.nk_rgb(255, 255, 255)); aMin = aMax; aMax += step; } } { /* inner circle */ NkRect inner; inner.x = bounds.x + bounds.w / 2 - bounds.w / 4; inner.y = bounds.y + bounds.h / 2 - bounds.h / 4; inner.w = bounds.w / 2; inner.h = bounds.h / 2; Nk.nk_fill_circle(o, inner, Nk.nk_rgb(45, 45, 45)); /* active icon content */ bounds.w = inner.w / 2.0f; bounds.h = inner.h / 2.0f; bounds.x = inner.x + inner.w / 2 - bounds.w / 2; bounds.y = inner.y + inner.h / 2 - bounds.h / 2; Nk.nk_draw_image(o, bounds, icons[activeItem], Nk.nk_rgb(255, 255, 255)); } ctx.LayoutSpaceEnd(); if (Nk.nk_input_is_mouse_down(ctx.Ctx.Input, NkButtons.RIGHT) == 0) { ctx.PopupClose(); ret = activeItem; } } else { ret = -2; } ctx.Ctx.Style.Window.spacing = Nk.nk_vec2_(4, 4); ctx.Ctx.Style.Window.padding = Nk.nk_vec2_(8, 8); ctx.PopupEnd(); ctx.Ctx.Style.Window.fixed_background = background; ctx.Ctx.Style.Window.border_color = border; return(ret); }
public static void basic_demo(NuklearContext ctx, Media media) { int i; ctx.StyleSetFont(media.Font20.Handle); ctx.Begin("Basic Demo", Nk.nk_rect_(320, 50, 275, 610), PanelFlags.BORDER | PanelFlags.MOVABLE | PanelFlags.TITLE); ui_header(ctx, media, "Popup & Scrollbar & Images"); ui_widget(ctx, media, 35); if (ctx.ButtonImageLabel(media.Dir, "Images", Alignment.MIDDLECENTERED)) { _imageActive = !_imageActive; } ui_header(ctx, media, "Selected Image"); ui_widget_centered(ctx, media, 100); ctx.Image(media.Images[_selectedImage]); if (_imageActive) { if (ctx.PopupBegin(NkPopupType.NK_POPUP_STATIC, "Image Popup", 0, Nk.nk_rect_(265, 0, 320, 220))) { ctx.LayoutRowStatic(82, 82, 3); for (i = 0; i < 9; ++i) { if (ctx.ButtonImage(media.Images[i])) { _selectedImage = i; _imageActive = false; ctx.PopupClose(); } } ctx.PopupEnd(); } } ui_header(ctx, media, "Combo box"); ui_widget(ctx, media, 40); if (ctx.ComboBeginLabel(Items2[_selectedItem1], Nk.nk_vec2_(ctx.WidgetWidth(), 200))) { ctx.LayoutRowDynamic(35, 1); for (i = 0; i < 3; ++i) { if (ctx.ComboItemLabel(Items2[i], Alignment.MIDDLELEFT)) { _selectedItem1 = i; } } ctx.ComboEnd(); } ui_widget(ctx, media, 40); if (ctx.ComboBeginImageLabel(Items2[_selectedIcon], media.Images[_selectedIcon], Nk.nk_vec2_(ctx.WidgetWidth(), 200))) { ctx.LayoutRowDynamic(35, 1); for (i = 0; i < 3; ++i) { if (ctx.ComboItemImageLabel(media.Images[i], Items2[i], Alignment.MIDDLERIGHT)) { _selectedIcon = i; } } ctx.ComboEnd(); } ui_header(ctx, media, "Checkbox"); ui_widget(ctx, media, 30); ctx.CheckboxLabel("Flag 1", ref _check0); ui_widget(ctx, media, 30); ctx.CheckboxLabel("Flag 2", ref _check1); ui_header(ctx, media, "Progressbar"); ui_widget(ctx, media, 35); ctx.Progress(ref _prog, 100, Nk.nk_true); if (Nk.nk_input_is_mouse_click_down_in_rect(ctx.Ctx.Input, NkButtons.RIGHT, ctx.WindowGetBounds(), Nk.nk_true) != 0) { _piemenuPos = ctx.Ctx.Input.mouse.Pos; _piemenuActive = true; } if (_piemenuActive) { var ret = ui_piemenu(ctx, _piemenuPos, 140, media.Menu, 6); if (ret == -2) { _piemenuActive = false; } if (ret != -1) { Console.Write("piemenu selected: {0}\n", ret); _piemenuActive = false; } } ctx.StyleSetFont(media.Font14.Handle); ctx.End(); }
public static void button_demo(NuklearContext ctx, Media media) { ctx.StyleSetFont(media.Font20.Handle); ctx.Begin("Button Demo", Nk.nk_rect_(50, 50, 255, 610), PanelFlags.BORDER | PanelFlags.MOVABLE | PanelFlags.TITLE); /*------------------------------------------------ * MENU *------------------------------------------------*/ ctx.MenubarBegin(); { /* toolbar */ ctx.LayoutRowStatic(40, 40, 4); if (ctx.MenuBeginImage("Music", media.Play, Nk.nk_vec2_(110, 120))) { /* settings */ ctx.LayoutRowDynamic(25, 1); ctx.MenuItemImageLabel(media.Play, "Play", Alignment.MIDDLERIGHT); ctx.MenuItemImageLabel(media.Stop, "Stop", Alignment.MIDDLERIGHT); ctx.MenuItemImageLabel(media.Pause, "Pause", Alignment.MIDDLERIGHT); ctx.MenuItemImageLabel(media.Next, "Next", Alignment.MIDDLERIGHT); ctx.MenuItemImageLabel(media.Prev, "Prev", Alignment.MIDDLERIGHT); ctx.MenuEnd(); } ctx.ButtonImage(media.Tools); ctx.ButtonImage(media.Cloud); ctx.ButtonImage(media.Pen); } ctx.MenubarEnd(); /*------------------------------------------------ * BUTTON *------------------------------------------------*/ ui_header(ctx, media, "Push buttons"); ui_widget(ctx, media, 35); if (ctx.ButtonLabel("Push me")) { Console.Write("pushed!\n"); } ui_widget(ctx, media, 35); if (ctx.ButtonImageLabel(media.Rocket, "Styled", Alignment.MIDDLECENTERED)) { Console.Write("rocket!\n"); } /*------------------------------------------------ * REPEATER *------------------------------------------------*/ ui_header(ctx, media, "Repeater"); ui_widget(ctx, media, 35); if (ctx.ButtonLabel("Press me")) { Console.Write("pressed!\n"); } /*------------------------------------------------ * TOGGLE *------------------------------------------------*/ ui_header(ctx, media, "Toggle buttons"); ui_widget(ctx, media, 35); if (ctx.ButtonImageLabel(_toggle0 ? media.Checkd : media.Uncheckd, "Toggle", Alignment.MIDDLELEFT)) { _toggle0 = !_toggle0; } ui_widget(ctx, media, 35); if (ctx.ButtonImageLabel(_toggle1 ? media.Checkd : media.Uncheckd, "Toggle", Alignment.MIDDLELEFT)) { _toggle1 = !_toggle1; } ui_widget(ctx, media, 35); if (ctx.ButtonImageLabel(_toggle2 ? media.Checkd : media.Uncheckd, "Toggle", Alignment.MIDDLELEFT)) { _toggle2 = !_toggle2; } /*------------------------------------------------ * RADIO *------------------------------------------------*/ ui_header(ctx, media, "Radio buttons"); ui_widget(ctx, media, 35); if (ctx.ButtonSymbolLabel(_option == 0 ? NkSymbolType.CIRCLE_OUTLINE : NkSymbolType.CIRCLE_SOLID, "Select", Alignment.MIDDLELEFT)) { _option = 0; } ui_widget(ctx, media, 35); if (ctx.ButtonSymbolLabel(_option == 1 ? NkSymbolType.CIRCLE_OUTLINE : NkSymbolType.CIRCLE_SOLID, "Select", Alignment.MIDDLELEFT)) { _option = 1; } ui_widget(ctx, media, 35); if (ctx.ButtonSymbolLabel(_option == 2 ? NkSymbolType.CIRCLE_OUTLINE : NkSymbolType.CIRCLE_SOLID, "Select", Alignment.MIDDLELEFT)) { _option = 2; } /*------------------------------------------------ * CONTEXTUAL *------------------------------------------------*/ ctx.StyleSetFont(media.Font18.Handle); if (ctx.ContextualBegin(PanelFlags.NO_SCROLLBAR, Nk.nk_vec2_(150, 300), ctx.WindowGetBounds())) { ctx.LayoutRowDynamic(30, 1); if (ctx.ContextualItemImageLabel(media.Copy, "Clone", Alignment.MIDDLERIGHT)) { Console.Write("pressed clone!\n"); } if (ctx.ContextualItemImageLabel(media.Del, "Delete", Alignment.MIDDLERIGHT)) { Console.Write("pressed delete!\n"); } if (ctx.ContextualItemImageLabel(media.Convert, "Convert", Alignment.MIDDLERIGHT)) { Console.Write("pressed convert!\n"); } if (ctx.ContextualItemImageLabel(media.Edit, "Edit", Alignment.MIDDLERIGHT)) { Console.Write("pressed edit!\n"); } ctx.ContextualEnd(); } ctx.StyleSetFont(media.Font14.Handle); ctx.End(); }
public int insert_at(int pos, char *ptr) { return(insert_at(pos, ptr, Nk.nk_strlen(ptr))); }
public int Append(char *ptr) { return(Append(ptr, Nk.nk_strlen(ptr))); }