RoundedRectangle: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
 
(4 intermediate revisions by 3 users not shown)
Line 2: Line 2:
<lowercasetitle></lowercasetitle>
<lowercasetitle></lowercasetitle>
__NOTOC__
__NOTOC__
This function is make a rounded rectangle.
This function draws a rounded corner rectangle.


==Syntax==
==Syntax==
<syntaxhighlight lang="lua">bool roundedRectangle ( float startX, float startY, float width, float height [, int tocolor ( int red, int green, int blue [, int alpha = 255 ] ) , bool postGUI = false ] )</syntaxhighlight>
<syntaxhighlight lang="lua">nil dxDrawRoundedRectangle(x, y, width, height, radius, color, align, postGUI, subPixelPositioning)</syntaxhighlight>


==Example==
==Example==
Line 11: Line 11:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
local sx, sy = guiGetScreenSize()
local sx, sy = guiGetScreenSize()
roundedRectangle(sx/2, sy/2, 100, 100, tocolor(0,0,0,200))
local x, y, w, h = sx/2-200, sy/2-200, 400, 400
local rounded = 10
local color = tocolor(0, 0, 0, 200)


function roundedRectangle(x, y, w, h, borderColor, bgColor, postGUI)
addEventHandler('onClientRender', root, function ()
if (x and y and w and h) then
    dxDrawRoundedRectangle(x, y, w, h, rounded, color)
if (not borderColor) then
end)
borderColor = tocolor(0, 0, 0, 200);
</syntaxhighlight>
end
Example by @IQ65
if (not bgColor) then
</section>
bgColor = borderColor;
 
end
==Code 1==
dxDrawRectangle(x, y, w, h, bgColor, postGUI);
<section name="Client side" class="client" show="true">
dxDrawRectangle(x + 2, y - 1, w - 4, 1, borderColor, postGUI);
<syntaxhighlight lang="lua">
dxDrawRectangle(x + 2, y + h, w - 4, 1, borderColor, postGUI);
function dxDrawRoundedRectangle(x, y, width, height, radius, color, postGUI, subPixelPositioning)
dxDrawRectangle(x - 1, y + 2, 1, h - 4, borderColor, postGUI);
    dxDrawRectangle(x+radius, y+radius, width-(radius*2), height-(radius*2), color, postGUI, subPixelPositioning)
dxDrawRectangle(x + w, y + 2, 1, h - 4, borderColor, postGUI);
    dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
end
    dxDrawCircle(x+radius, (y+height)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
    dxDrawCircle((x+width)-radius, (y+height)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
    dxDrawCircle((x+width)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)
    dxDrawRectangle(x, y+radius, radius, height-(radius*2), color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+radius, y+height-radius, width-(radius*2), radius, color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+width-radius, y+radius, radius, height-(radius*2), color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+radius, y, width-(radius*2), radius, color, postGUI, subPixelPositioning)
end
end
</syntaxhighlight>
</section>
==Code 2==
==Syntax==
<syntaxhighlight lang="lua">nil dxDrawRoundedRectangle(x, y, w, h, radius = 10, color = tocolor(255, 255, 255, 255), align = 'full', postGUI = false, subPixelPositioning = false)</syntaxhighlight>
==Example==
<section name="Client side" class="client" show="true">
<syntaxhighlight lang="lua">
local data = {}
data.resolution = {}
data.resolution.x, data.resolution.y = guiGetScreenSize()
data.mainRect = {}
data.mainRect.width = 300
data.mainRect.height = 500
dxDrawRoundedRectangle(
    data.resolution.x-data.mainRect.width,
    data.resolution.y-data.mainRect.height,
    data.mainRect.width,
    data.mainRect.height,
    10,
    0xffffffff,
    'top',
    false,
    false
)
</syntaxhighlight>
</syntaxhighlight>
</section>
</section>
Line 34: Line 71:
<section name="Client side" class="client" show="true">
<section name="Client side" class="client" show="true">
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function roundedRectangle(x, y, w, h, borderColor, bgColor, postGUI)
function dxDrawRoundedRectangle(x, y, w, h, radius, color, align, postGUI)
if (x and y and w and h) then
if not x or not y or not w or not h then return end
if (not borderColor) then
 
borderColor = tocolor(0, 0, 0, 200);
local radius = radius or 10
local color = color or tocolor(255, 255, 255, 255)
local align = align or 'full'
 
if w < radius then
w = 0
radius = 0
elseif h < radius then
h = 0
radius = 0
end
if align == 'full' or align == 'top' or align == 'right' or align == 'left' then
if align == 'right' then
dxDrawRectangle(x, y, w - radius, radius, color, postGUI)
dxDrawCircle((x+w)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)
 
elseif align == 'left' then
dxDrawRectangle(x + radius, y, w - radius, radius, color, postGUI)
dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
else
dxDrawRectangle(x + radius, y, w - (radius * 2), radius, color, postGUI)
dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
dxDrawCircle((x+w)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)
end
end
if (not bgColor) then
 
bgColor = borderColor;
if align == 'top' or align == 'right' or align == 'left' then
dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
end
end
dxDrawRectangle(x, y, w, h, bgColor, postGUI);
end
dxDrawRectangle(x + 2, y - 1, w - 4, 1, borderColor, postGUI);
 
dxDrawRectangle(x + 2, y + h, w - 4, 1, borderColor, postGUI);
if align == 'full' or align == 'bottom' or align == 'right' or align == 'left' then
dxDrawRectangle(x - 1, y + 2, 1, h - 4, borderColor, postGUI);
if align == 'right' then
dxDrawRectangle(x + w, y + 2, 1, h - 4, borderColor, postGUI);
dxDrawRectangle(x, y + h - radius, w - radius, radius, color, postGUI)
dxDrawCircle((x+w)-radius, (y+h)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
elseif align == 'left' then
dxDrawRectangle(x + radius, y + h - radius, w - radius, radius, color, postGUI)
dxDrawCircle(x+radius, (y+h)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
else
dxDrawRectangle(x + radius, y + h - radius, w - (radius * 2), radius, color, postGUI)
dxDrawCircle(x+radius, (y+h)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
dxDrawCircle((x+w)-radius, (y+h)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
end
 
if align == 'bottom' or align == 'right' or align == 'left' then
dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
end
end
if align == 'full' then
dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
end
end
end
end
Line 52: Line 132:
</section>
</section>


Written by: ExTasY[https://wiki.multitheftauto.com/wiki/User:Extasy]
Original by [[User:Extasy]]
 
Rewritten by [[User:Woovie]]
 
Code 2 by [[User:.WhiteBlue]]

Latest revision as of 14:13, 15 November 2023

This function draws a rounded corner rectangle.

Syntax

nil dxDrawRoundedRectangle(x, y, width, height, radius, color, align, postGUI, subPixelPositioning)

Example

Click to collapse [-]
Client side
local sx, sy = guiGetScreenSize()
local x, y, w, h = sx/2-200, sy/2-200, 400, 400
local rounded = 10
local color = tocolor(0, 0, 0, 200)

addEventHandler('onClientRender', root, function ()
    dxDrawRoundedRectangle(x, y, w, h, rounded, color)
end)

Example by @IQ65

Code 1

Click to collapse [-]
Client side
function dxDrawRoundedRectangle(x, y, width, height, radius, color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+radius, y+radius, width-(radius*2), height-(radius*2), color, postGUI, subPixelPositioning)
    dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
    dxDrawCircle(x+radius, (y+height)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
    dxDrawCircle((x+width)-radius, (y+height)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
    dxDrawCircle((x+width)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)
    dxDrawRectangle(x, y+radius, radius, height-(radius*2), color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+radius, y+height-radius, width-(radius*2), radius, color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+width-radius, y+radius, radius, height-(radius*2), color, postGUI, subPixelPositioning)
    dxDrawRectangle(x+radius, y, width-(radius*2), radius, color, postGUI, subPixelPositioning)
end

Code 2

Syntax

nil dxDrawRoundedRectangle(x, y, w, h, radius = 10, color = tocolor(255, 255, 255, 255), align = 'full', postGUI = false, subPixelPositioning = false)

Example

Click to collapse [-]
Client side
local data = {}
data.resolution = {}
data.resolution.x, data.resolution.y = guiGetScreenSize()
data.mainRect = {}
data.mainRect.width = 300
data.mainRect.height = 500

dxDrawRoundedRectangle(
    data.resolution.x-data.mainRect.width,
    data.resolution.y-data.mainRect.height,
    data.mainRect.width,
    data.mainRect.height,
    10,
    0xffffffff,
    'top',
    false,
    false
)

Code

Click to collapse [-]
Client side
function dxDrawRoundedRectangle(x, y, w, h, radius, color, align, postGUI)
	if not x or not y or not w or not h then return end

	local radius = radius or 10
	local color = color or tocolor(255, 255, 255, 255)
	local align = align or 'full'

	if w < radius then
		w = 0
		radius = 0
		
	elseif h < radius then
		h = 0
		radius = 0
	end
	
	if align == 'full' or align == 'top' or align == 'right' or align == 'left' then
		if align == 'right' then
			dxDrawRectangle(x, y, w - radius, radius, color, postGUI)
			dxDrawCircle((x+w)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)

		elseif align == 'left' then
			dxDrawRectangle(x + radius, y, w - radius, radius, color, postGUI)
			dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
		else
			dxDrawRectangle(x + radius, y, w - (radius * 2), radius, color, postGUI)
			dxDrawCircle(x+radius, y+radius, radius, 180, 270, color, color, 16, 1, postGUI)
			dxDrawCircle((x+w)-radius, y+radius, radius, 270, 360, color, color, 16, 1, postGUI)
		end

		if align == 'top' or align == 'right' or align == 'left' then
			dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
		end
	end

	if align == 'full' or align == 'bottom' or align == 'right' or align == 'left' then
		if align == 'right' then
			dxDrawRectangle(x, y + h - radius, w - radius, radius, color, postGUI)
			dxDrawCircle((x+w)-radius, (y+h)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
			
		elseif align == 'left' then
			dxDrawRectangle(x + radius, y + h - radius, w - radius, radius, color, postGUI)
			dxDrawCircle(x+radius, (y+h)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
		else
			dxDrawRectangle(x + radius, y + h - radius, w - (radius * 2), radius, color, postGUI)
			dxDrawCircle(x+radius, (y+h)-radius, radius, 90, 180, color, color, 16, 1, postGUI)
			dxDrawCircle((x+w)-radius, (y+h)-radius, radius, 0, 90, color, color, 16, 1, postGUI)
		end

		if align == 'bottom' or align == 'right' or align == 'left' then
			dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
		end
	end
		
	if align == 'full' then
		dxDrawRectangle(x, y + radius, w, h - (radius * 2), color, postGUI)
	end
end

Original by User:Extasy

Rewritten by User:Woovie

Code 2 by User:.WhiteBlue