--------------------------------------------------
-- Ф-я инициализирует gfx-окно с заданными параметрами
-- Кроме того, установим шрифт, который будем использовать
function Init()
local name,width,height,dockstate,xpos,ypos = "Test", 1000, 200, 0, 200, 200
gfx.init(name,width,height,dockstate,xpos,ypos)
local fontidx, fontface, fontsz, fontflags = 1, "Verdana", 20
gfx.setfont(1,"Verdana",20) -- set font 1
end
--------------------------------------------------
-- Здесь будем рисовать каждый кадр, в дефолтный framebuffer
-- Описываю подробно встречающиеся ф-и, хотя все это в документации
function Draw()
-- Информационная строка -------------
gfx.set(1,0.6,1,1) -- r,g,b,a, устанавливаем цвет, которым будем рисовать info
gfx.x, gfx.y = 10, 10 -- уст. gfx.x, gfx.y, строки рисуются отталкиваясь от этих координат!
local info = "Внутри окна нажмите правую, левую кнопку мыши, Alt, Ctrl, Shift, нажмите все одновременно."
gfx.drawstr(info)
-- Иллюстрация -----------------------
gfx.set(1,0.7,0.4,1) -- цвет, которым будем рисовать иллюстрацию
-- Текущее значение mouse_cap --
gfx.x, gfx.y = 10, 80
gfx.drawstr("mouse_cap = " .. gfx.mouse_cap)
local x, y = 900, 80 -- начальные координаты, рисовать будем справа налево, от младшего к старшим разрядам
local w, h = 40, 40 -- здесь зададим ширину и высоту квадратиков, соответствующих разрядам
for i = 0, 15, 1 do -- будем идти от нулевого, до 15 разряда. В Lua счет от единицы, но нам здесь удобнее, никто не запрещает!
gfx.rect(x, y, w, h, 0) -- рисуем квадратик, соотв. разряду
-- над квадратиком - номер разряда
gfx.x, gfx.y = x, y - h -- уст. gfx.x, gfx.y
-- от gfx.x, gfx.y - говорил выше, но...здесь тоже есть возможность выравнивания, опять же, используются флаги!!!
gfx.drawstr(tostring(i), 5, gfx.x + w, gfx.y + h) -- над квадратиком - номер разряда, flags = 5!
------------------------------
-- вот здесь мы создадим битовую маску
local Mask = 1<<i -- с помощью сдвига влево("<<") устанавливаем один конкретный бит
if gfx.mouse_cap&Mask ~= 0 then -- с помощью побитового "И"("&") проверяем, установлен ли этот бит в mouse_cap
-- в квадратике - значение маски
gfx.x, gfx.y = x, y
gfx.drawstr(tostring(Mask), 5, gfx.x + w, gfx.y + h)
end
------------------------------
x = x - w
end
end
--------------------------------------------------
-- Осн. луп будет вызывать ф-ю Draw() примерно 30 раз в секунду, пока gfx-окно открыто
function mainloop()
---------------
Draw()
---------------
local char = gfx.getchar() -- символ с клавиатуры, а если =-1 - окно gfx закрыто
if char~=-1 then reaper.defer(mainloop) end -- defer(пока окно открыто)
gfx.update() -- обновляет кадр
end
--------------------------------------------------
Init() -- Инициализируем окно
mainloop() -- Запускаем осн. луп