コード例 #1
0
        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();
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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
            };
        }
コード例 #4
0
ファイル: GUI.cs プロジェクト: raizam/NuklearSharp
        /// <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);
        }
コード例 #5
0
 public void SetFont(NkFont font)
 {
     Nk.nk_style_set_font(_ctx, font.Handle);
 }
コード例 #6
0
ファイル: GUI.cs プロジェクト: raizam/NuklearSharp
        /// <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);
        }
コード例 #7
0
ファイル: GUI.cs プロジェクト: raizam/NuklearSharp
        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();
        }
コード例 #8
0
ファイル: GUI.cs プロジェクト: raizam/NuklearSharp
        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();
        }
コード例 #9
0
 public int insert_at(int pos, char *ptr)
 {
     return(insert_at(pos, ptr, Nk.nk_strlen(ptr)));
 }
コード例 #10
0
 public int Append(char *ptr)
 {
     return(Append(ptr, Nk.nk_strlen(ptr)));
 }