It looks like you're new here. If you want to get involved, click one of these buttons!
function CSprite.CreateRoundRect(alpha, rgb, w, h, border_apha, border_color, border_width, border_radius, shadow_offsetx, shadow_offsety, shadow_alpha, shadow_color, filtering) shadow_offsetx = shadow_offsetx or 0 shadow_offsety = shadow_offsety or 0 shadow_alpha = shadow_alpha or 0 border_apha = border_apha or 0 border_width = border_width or 0 border_radius = border_radius or 0 -- create rtt local rtt = RenderTarget.new(w + shadow_offsetx, h + shadow_offsety, filtering) rtt:clear(0, 0) bitmap = Bitmap.new(rtt) -- create shape local shape = Shape.new() shape:setFillStyle(Shape.SOLID, rgb, alpha) if border_apha > 0 and border_width > 0 then shape:setLineStyle(border_width, border_color, border_apha) end shape:beginPath() local x, y = nil,nil if border_radius > 0 then local min_r = math.min(math.max(border_radius*0.01, 1), 10) local plot = math.min(floor(math.asin(min_r/border_radius)*180/pi + 0.5), 15) shape:moveTo(0, border_radius) for alpha = 180, 270, plot do x = border_radius*_cos(alpha) + border_radius y = border_radius*_sin(alpha) + border_radius shape:lineTo(x, y) end shape:lineTo(border_radius, 0) shape:lineTo(w - border_width - border_radius - 1, 0) for alpha = 270, 360, plot do x = border_radius*_cos(alpha) + (w - border_width - border_radius - 1) y = border_radius*_sin(alpha) + border_radius shape:lineTo(x, y) end shape:lineTo(w, border_radius) shape:lineTo(w, h-border_radius) for alpha = 0, 90, plot do x = border_radius*_cos(alpha) + (w - border_width - border_radius - 1) y = border_radius*_sin(alpha) + (h-border_radius) shape:lineTo(x, y) end shape:lineTo(w - border_width - border_radius - 1, h) shape:lineTo(border_radius, h) for alpha = 90, 180, plot do x = border_radius*_cos(alpha) + border_radius y = border_radius*_sin(alpha) + (h-border_radius) shape:lineTo(x, y) end shape:lineTo(0, h-border_radius) shape:lineTo(0, border_radius) else shape:moveTo(0, 0) shape:lineTo(w, 0) shape:lineTo(w, h) shape:lineTo(0, h) end shape:endPath() -- draw shadow if ((shadow_offsetx > 0 or shadow_offsety > 0) and shadow_alpha > 0) then local red = ((floor(rgb/65536) % 256)/256) local shadow_red = ((floor(shadow_color/65536) % 256)/256) red = red * shadow_red local green = ((floor(rgb/256) % 256)/256) local shadow_green = ((floor(shadow_color/256) % 256)/256) green = green * shadow_green local blue = ((rgb % 256)/256) local shadow_blue = (shadow_color % 256)/256 blue = blue * shadow_blue shape:setColorTransform(red, green, blue, shadow_alpha) shape:setPosition(shadow_offsetx, shadow_offsety) rtt:draw(shape) end -- draw shape shape:setColorTransform(1, 1, 1, 1) shape:setPosition(0, 0) rtt:draw(shape) return bitmap end --example CreateRoundRect( 1, 0xffffff, -- alpha, color 0, 0, 0, -- border line 20, --border radius 100, 100, -- size 0, 3, 0.5, 0x0, --shadow false --filtering ) |
Likes: altai, vitalitymobile