Как изменить размер imgui button

как поменять размер imgui.Button?

Citrys

Citrys

Участник


Автор темы

167

5


  • 22 Авг 2021

  • #1

Версия MoonLoader

Другое

как поменять размер imgui.Button?

Решение

chapo


  • chapo

    chapo

  • 22 Авг 2021


Lua:

imgui.Button('text', imgui.ImVec2(ширина, высота))

Сортировка по дате

Сортировка по голосам

chapo

chapo

vk.com/chaposcripts

Модератор

7,817

8,408


  • 22 Авг 2021

  • Решение
  • #2


Lua:

imgui.Button('text', imgui.ImVec2(ширина, высота))

  • Нравится

Реакции:

MAHEKEH

Позитивный голос

0

Негативный голос


Решение

Citrys

Citrys

Участник


Автор темы

167

5


  • 22 Авг 2021

  • #3

Джон Кристo написал(а):


Lua:

imgui.Button('text', imgui.ImVec2(ширина, высота))

Нажмите для раскрытия…

Спасибо, работает. Только текст на кнопке не посередине, может есть способ как это решить? (я растянул кнопку 600 на 20)

Позитивный голос

0

Негативный голос


Войдите или зарегистрируйтесь для ответа.

Похожие темы

  1. Castiel_Chrysler

    • Решено

    [LUA] Выравнивание текста кнопки

    • Castiel_Chrysler
    • 21 Мар 2021
    • Помощь

    Ответы
    1
    Просмотры
    638

    Помощь

    21 Мар 2021

    Hatiko

    Hatiko

  2. smurf1k➹

    • Вопрос

    Почему не работает Popup?

      • Нравится
    • smurf1k➹
    • 12 Янв 2020
    • Вопросы

    Ответы
    5
    Просмотры
    634

    Вопросы

    12 Янв 2020

    redcode

    R

  3. cort

    • Вопрос

    Как добавить реконект на тот сервер на котором я сейчас ?

    • cort
    • 29 Янв 2022
    • Помощь

    Ответы
    1
    Просмотры
    187

    Помощь

    29 Янв 2022

    barjik

    B

  4. W

    • Решено

    Как сделать ожидание второго нажатия кнопки imgui

    • wintreist
    • 9 Мар 2022
    • Вопросы

    Ответы
    7
    Просмотры
    329

    Вопросы

    10 Мар 2022

    awserver

    awserver

  5. А

    • Решено

    как при нажатии вкладки покрасить её?

    • аронакич
    • 22 Сен 2022
    • Вопросы

    Ответы
    3
    Просмотры
    321

    Вопросы

    22 Сен 2022

    defaultz0ne

    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. Выглядеть это будет примерно вот так:

1620815290093.png

Теперь создадим кнопку функцией:

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
Imgui sample03.png

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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить размер img образа
  • Как изменить размер img css
  • Как изменить размер imageicon java
  • Как изменить размер gridlayout
  • Как изменить размер gpt раздела

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии