Citrys
Участник
Автор темы
-
- 167
-
- 5
-
22 Авг 2021
-
#1
- Версия MoonLoader
-
Другое
как поменять размер imgui.Button?
Решение
-
chapo
- 22 Авг 2021
Lua:
imgui.Button('text', imgui.ImVec2(ширина, высота))
Сортировка по дате
Сортировка по голосам
chapo
vk.com/chaposcripts
Модератор
-
- 7,817
-
- 8,408
-
22 Авг 2021
- Решение
-
#2
Lua:
imgui.Button('text', imgui.ImVec2(ширина, высота))
Реакции:
MAHEKEH
Позитивный голос
0
Негативный голос
Решение
Citrys
Участник
Автор темы
-
- 167
-
- 5
-
22 Авг 2021
-
#3
Джон Кристo написал(а):
Lua:
imgui.Button('text', imgui.ImVec2(ширина, высота))
Нажмите для раскрытия…
Спасибо, работает. Только текст на кнопке не посередине, может есть способ как это решить? (я растянул кнопку 600 на 20)
Позитивный голос
0
Негативный голос
Войдите или зарегистрируйтесь для ответа.
Похожие темы
-
-
Решено
[LUA] Выравнивание текста кнопки
- Castiel_Chrysler
- 21 Мар 2021
- Помощь
- Ответы
- 1
- Просмотры
- 638
Помощь
21 Мар 2021
Hatiko
-
-
-
Вопрос
Почему не работает Popup?
- smurf1k➹
- 12 Янв 2020
- Вопросы
- Ответы
- 5
- Просмотры
- 634
Вопросы
12 Янв 2020
redcode
R
-
-
-
Вопрос
Как добавить реконект на тот сервер на котором я сейчас ?
- cort
- 29 Янв 2022
- Помощь
- Ответы
- 1
- Просмотры
- 187
Помощь
29 Янв 2022
barjik
B
-
-
W
-
Решено
Как сделать ожидание второго нажатия кнопки imgui
- wintreist
- 9 Мар 2022
- Вопросы
- Ответы
- 7
- Просмотры
- 329
Вопросы
10 Мар 2022
awserver
-
-
А
-
Решено
как при нажатии вкладки покрасить её?
- аронакич
- 22 Сен 2022
- Вопросы
- Ответы
- 3
- Просмотры
- 321
Вопросы
22 Сен 2022
defaultz0ne
-
Поделиться:
Ссылка
Всех приветствую! Сегодня речь пойдет о работе с библиотекой ImGui, которая нужна для создания пользовательских интерфейсов. В этом гайде я затрону стандартный функционал библиотеки, а также расскажу, как его использовать для реализации ваших фантазий.
Начать стоит с того, что ImGui представляет из себя библиотеку, для отрисовки, которой требуется оверлей. Для данной цели подойдет DirectX или DiscordHook. Затрагивать реализацию оверлея в этой теме мы не будем т.к в большинстве готовых читов это уже реализовано. А значит теперь мы можем перейти к тому, какие функции есть и как они работают.
Начать стоит с главной функции ImGui это
Функция нужна для начала отрисовки меню и имеет большое количество настроек или же флагов. Флаги окна представляют из себя команды, которые прописываются после инициализации функции. Пример:
ImGui::Begin(xorstr("Ваше окно"), &opened, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollbar);
Разберем аргументы функции. Первый аргумент это название вашего окна, второй булевая переменна для проверки того будет ли окно отрисовано, а затем идут сами флаги окна. Все флаги окна я перечислять не буду, вы можете посмотреть их сами просто поставив запятую после второго аргумента. В нашем случае мы создадим окно с названием «Ваше окно». Затем проверим открыто ли оно с помощью булевой переменной opened и только после проверим флаги нашего окна. В моем случае мы не можем изменить размер, а также свернуть и сохранить функции нашего окна. Перед реализацией этой функции стоит также поставить такие функции как:
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(ImVec2(ширина, высота));
С помощью этих функций вы зададите окну стартовую позицию и размер. Затем можно перейти к созданию первого элемента. К примеру создадим кнопку.
Для начала нужно создать функцию, которая определит откуда начать рисовать:
ImGui::SetCursorPos(ImVec2(координата X, координата Y));
В ImGui используется механика кисточки или же курсора, а все элементы рисуются по его текущей позиции. Мы нарисуем кнопку на координате 36 по X и 22 по Y. Выглядеть это будет примерно вот так:
Теперь создадим кнопку функцией:
if (ImGui::Button(xorstr("Some text"), ImVec2(ширина, высота)))
// код при нажатии кнопки
Стоит знать, что кнопка вернет True только после нажатии и сделает это один раз, то есть после того как вы отпустите кнопку код выполнен не будет.
Для того, чтобы делать код, который будет выполняться всегда создадим Checkbox. Изменим позицию курсора и нарисуем чекбокс. Не забудьте создать булевую переменную:
ImGui::SetCursorPos(ImVec2(позиция x, позиция y));
static bool test = false;
ImGui::Checkbox("Text", &test);
После чего у вас появится чекбокс, который по нажатию будет возвращать True, а по повторному нажатию False.
Теперь создадим текст:
ImGui::SetCursorPos(ImVec2(позиция x, позиция y));
ImGui::Text("Text");
Отлично. Теперь у нас кнопка, чекбокс и текст. С помощью этих элементов вы уже можете создать свое первое меню.
Закончим наше меню функцией:
ImGui::End();
ImGui::EndFrame();
В следующих уроках мы разберем другие элементы ImGui и создадим полноценное меню. Удачи!
Contents
- 1 ImGui Custom Font
- 2 ImGui Centered Text & Colored Text
- 3 ImGui Buttons
- 4 File open/save dialog project example
- 5 ImGui Snap to Grid
Here you will find various resources to help you create GUI with Dear ImGui in Gideros Studio.
note: you may have to provide your own assets (fonts, gfx, …).
ImGui Custom Font
require "ImGui" -- imgui self.imgui = ImGui.new() -- imgui font local imguiio = self.imgui:getIO() local fontatlas = imguiio:getFonts() local myfont = fontatlas:addFont("fonts/Cabin-Regular-TTF.ttf", 22) -- your custom font here imguiio:setFontDefault(myfont) fontatlas:build() -- imgui style local imguistyle = self.imgui:getStyle() imguistyle:setWindowMinSize(64*4, 96) -- 64*6, 96
ImGui Centered Text & Colored Text
Here we center our text and introduce some more functionalities
require "ImGui" local imgui = ImGui.new() stage:addChild(imgui) -- some imgui params local IO = imgui:getIO() IO:setFontGlobalScale(2.5) --imgui:setLightStyle() --imgui:setClassicStyle() -- some vars local xtext, xtext2 = "Centered Text", "Colored Text" -- the loop function enterFrame(e) local CW = application:getContentWidth() -- 1 begin imgui:newFrame(e.deltaTime) -- 2 our GUI if (imgui:beginFullScreenWindow("Hello ImGui", nil)) then -- some spacing imgui:dummy(CW, 32 * 2) -- imgui:dummy(w, h) -- a centered text local textW = imgui:calcTextSize(xtext) local textMid = (CW - textW) / 2 imgui:dummy(textMid, 0) imgui:sameLine(0, 0) -- puts the next element on the same line with no gap, for gaps use imgui:sameLine() imgui:text(xtext) -- some spacing imgui:dummy(CW, 32 * 4) -- a colored text imgui:textColored(xtext2, 0xff00ff) imgui:endWindow() -- 3 end end imgui:endFrame() imgui:render() end -- the listeners stage:addEventListener("enterFrame", enterFrame)
ImGui Buttons
Here we make some buttons
require "ImGui" -- Setup ImGui local imgui = ImGui.new() stage:addChild(imgui) -- some imgui params local IO = imgui:getIO() IO:setFontGlobalScale(2.5) imgui:setClassicStyle() stage:addChild(imgui) -- some vars local xtext = "Centered Text" -- image to draw local imageTex = Texture.new("gfx/image.jpg") function enterFrame(e) -- 1 begin imgui:newFrame(e.deltaTime) local CW = application:getContentWidth() -- 2 our GUI if (imgui:beginFullScreenWindow("Hello ImGui", nil)) then -- some spacing imgui:dummy(CW, 32 * 2) -- a centered text? local textW = imgui:calcTextSize(xtext) local textMid = (CW - textW) / 2 imgui:dummy(textMid, 0) imgui:sameLine(0, 0) imgui:text(xtext) -- some spacing imgui:dummy(CW, 32 * 2) -- a button imgui:text("A button") imgui:pushStyleVar(ImGui.StyleVar_ButtonTextAlign, 0.5, 0.5) imgui:button(("x"), 128, 64) -- text, w, h imgui:popStyleVar() -- some spacing imgui:dummy(CW, 32 * 1) -- a grid of buttons imgui:text("A grid of buttons") local i = 0 for x = 0,1,0.5 do for y = 0,1,0.5 do imgui:pushStyleVar(ImGui.StyleVar_ButtonTextAlign, x, y) if(imgui:button(("[%.1f, %.1f]"):format(x,y), application:getContentWidth() / 3, 100)) then print(x, y) end imgui:popStyleVar() -- count elements i += 1 -- make new line on 3d element if (i % 3 ~= 0) then imgui:sameLine() end end end -- some spacing imgui:dummy(application:getContentWidth(), 32 * 1) -- an image button with text imgui:text("An image button nwith text") if(imgui:imageButtonWithText(imageTex, "button", 16, 16)) then print("pressed") end end imgui:endWindow() -- 3 end imgui:endFrame() imgui:render() end -- add listener to draw GUI stage:addEventListener("enterFrame", enterFrame)
File open/save dialog project example
GitHub
ImGui Snap to Grid
Here is a grid snaped window snippet
require "ImGui" GRID_CELL @ 64 application:setBackgroundColor(0x323232) local CW = application:getContentWidth() local CH = application:getContentHeight() for i = 1, CW, GRID_CELL do local line = Pixel.new(0xffffff, 1, 1, CH) line:setX(i) stage:addChild(line) end for i = 1, CH, GRID_CELL do local line = Pixel.new(0xffffff, 1, CW, 1) line:setY(i) stage:addChild(line) end local imgui = ImGui.new() stage:addChild(imgui) local mainWindowOpen, drawMainWindowOpen = true, false local snapX,snapY = 0, 0 local offsetX, offsetY = 0, 0 local dragFlag = false local function myResizeCallback(x,y,cw,ch,dw,dh) return (dw // GRID_CELL) * GRID_CELL, (dh // GRID_CELL) * GRID_CELL end function enterFrame(e) imgui:newFrame(e.deltaTime) if (mainWindowOpen) then imgui:setNextWindowPos(snapX, snapY) imgui:setNextWindowSizeConstraints(GRID_CELL*2, GRID_CELL*1, GRID_CELL*8, GRID_CELL*8) mainWindowOpen, drawMainWindowOpen = imgui:beginWindow("My window", mainWindowOpen, nil, myResizeCallback) local mouseClicked = imgui:isMouseClicked(KeyCode.MOUSE_LEFT) if not dragFlag and mouseClicked and imgui:isWindowHovered() then dragFlag=true end if imgui:isWindowFocused() and dragFlag then local mx,my = imgui:getMousePos() local wx, wy = imgui:getWindowPos() if mouseClicked or imgui:isMouseReleased(KeyCode.MOUSE_LEFT) then offsetX, offsetY = mx - wx, my - wy end if imgui:isMouseDragging(KeyCode.MOUSE_LEFT, 0) then snapX = ((mx - offsetX) // GRID_CELL) * GRID_CELL snapY = ((my - offsetY) // GRID_CELL) * GRID_CELL else dragFlag = false end end if (drawMainWindowOpen) then -- do stuff end imgui:endWindow() end imgui:endFrame() imgui:render() end stage:addEventListener("mouseDown", function(e) imgui:onMouseDown(e) end) stage:addEventListener("mouseUp", function(e) imgui:onMouseUp(e) end) stage:addEventListener("mouseHover", function(e) imgui:onMouseHover(e) end) stage:addEventListener("mouseMove", function(e) imgui:onMouseMove(e) end) stage:addEventListener("mouseWheel", function(e) imgui:onMouseWheel(e) end) stage:addEventListener("keyDown", function(e) imgui:onKeyDown(e) end) stage:addEventListener("keyUp", function(e) imgui:onKeyUp(e) end) stage:addEventListener("keyChar", function(e) imgui:onKeyChar(e) end) stage:addEventListener("enterFrame", enterFrame)
Main Page