Module: RubySketch::Processing::GraphicsContext
Overview
Drawing context
Constant Summary collapse
- PI =
PI
Math::PI
- HALF_PI =
PI / 2
PI / 2
- QUARTER_PI =
PI / 4
PI / 4
- TWO_PI =
PI * 2
PI * 2
- TAU =
PI * 2
PI * 2
- RGB =
RGB mode for colorMode().
:RGB- HSB =
HSB mode for colorMode().
:HSB- RADIANS =
Radian mode for angleMode().
:RADIANS- DEGREES =
Degree mode for angleMode().
:DEGREES- CORNER =
Mode for rectMode(), ellipseMode() and imageMode().
:CORNER- CORNERS =
Mode for rectMode(), ellipseMode() and imageMode().
:CORNERS- CENTER =
Mode for rectMode(), ellipseMode(), imageMode() and textAlign().
:CENTER- RADIUS =
Mode for rectMode() and ellipseMode().
:RADIUS- LEFT =
Mode for textAlign().
:LEFT- RIGHT =
Mode for textAlign().
:RIGHT- TOP =
Mode for textAlign().
:TOP- BOTTOM =
Mode for textAlign().
:BOTTOM- BASELINE =
Mode for textAlign().
:BASELINE- BUTT =
Mode for strokeCap().
:butt- MITER =
Mode for strokeJoin().
:miter- ROUND =
Mode for strokeCap() and strokeJoin().
:round- SQUARE =
Mode for strokeCap() and strokeJoin().
:square
Instance Method Summary collapse
-
#angleMode(mode) ⇒ nil
Sets angle mode.
-
#arc(a, b, c, d, start, stop) ⇒ nil
Draws an arc.
-
#background(*args) ⇒ nil
Clears screen.
-
#bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2) ⇒ nil
Draws a Bezier spline curve.
-
#circle(x, y, extent) ⇒ nil
Draws a circle.
-
#colorMode(mode, *maxes) ⇒ nil
Sets color mode and max color values.
-
#copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh) ⇒ nil
Copies image.
-
#curve(cx1, cy1, x1, y1, x2, y2, cx2, cy2) ⇒ nil
Draws a Catmull-Rom spline curve.
-
#ellipse(a, b, c, d) ⇒ nil
Draws an ellipse.
-
#ellipseMode(mode) ⇒ nil
Sets ellipse mode.
-
#fill(*args) ⇒ nil
Sets fill color.
- #height ⇒ Object
-
#image(img, a, b, c = nil, d = nil) ⇒ nil
Draws an image.
-
#imageMode(mode) ⇒ nil
Sets image mode.
-
#line(x1, y1, x2, y2) ⇒ nil
Draws a line.
-
#noFill ⇒ nil
Disables filling.
-
#noStroke ⇒ nil
Disables drawing stroke.
-
#point(x, y) ⇒ nil
Draws a point.
-
#pop ⇒ nil
Restore styles and transformations from stack.
-
#popMatrix ⇒ nil
Pops the current transformation matrix from stack.
-
#popStyle ⇒ nil
Restore style values from the style stack.
-
#push(&block) ⇒ nil
Save current styles and transformations to stack.
-
#pushMatrix(&block) ⇒ nil
Pushes the current transformation matrix to stack.
-
#pushStyle(&block) ⇒ nil
Save current style values to the style stack.
-
#quad(x1, y1, x2, y2, x3, y3, x4, y4) ⇒ nil
Draws a quad.
-
#rect(a, b, c, d, *args) ⇒ nil
Draws a rectangle.
-
#rectMode(mode) ⇒ nil
Sets rect mode.
-
#resetMatrix ⇒ nil
Reset current transformation matrix with identity matrix.
-
#rotate(angle) ⇒ nil
Applies rotation matrix to current transformation matrix.
-
#scale(x, y) ⇒ nil
Applies scale matrix to current transformation matrix.
- #setup__(painter) ⇒ Object
-
#square(x, y, extent) ⇒ nil
Draws a square.
-
#stroke(*args) ⇒ nil
Sets stroke color.
-
#strokeCap(cap) ⇒ nil
Sets stroke cap mode.
-
#strokeJoin(join) ⇒ nil
Sets stroke join mode.
-
#strokeWeight(weight) ⇒ nil
Sets stroke weight.
-
#text(str, x, y, x2 = nil, y2 = nil) ⇒ nil
Draws a text.
- #textAlign(horizontal, vertical = BASELINE) ⇒ Object
- #textAscent ⇒ Object
- #textDescent ⇒ Object
-
#textFont(name = nil, size = nil) ⇒ Font
Sets font.
-
#textSize(size) ⇒ nil
Sets text size.
- #textWidth(str) ⇒ Object
-
#translate(x, y) ⇒ nil
Applies translation matrix to current transformation matrix.
-
#triangle(x1, y1, x2, y2, x3, y3) ⇒ nil
Draws a triangle.
- #width ⇒ Object
Instance Method Details
#angleMode(mode) ⇒ nil
Sets angle mode.
1027 1028 1029 1030 1031 1032 1033 1034 |
# File 'lib/rubysketch/processing.rb', line 1027 def angleMode (mode) @angleScale__ = case mode.upcase.to_sym when RADIANS then RAD2DEG__ when DEGREES then 1.0 else raise ArgumentError, "invalid angle mode: #{mode}" end nil end |
#arc(a, b, c, d, start, stop) ⇒ nil
Draws an arc.
1369 1370 1371 1372 1373 1374 1375 1376 |
# File 'lib/rubysketch/processing.rb', line 1369 def arc (a, b, c, d, start, stop) assertDrawing__ x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d start = toAngle__ -start stop = toAngle__ -stop @painter__.ellipse x, y, w, h, from: start, to: stop nil end |
#background(str) ⇒ nil #background(str, alpha) ⇒ nil #background(gray) ⇒ nil #background(gray, alpha) ⇒ nil #background(r, g, b) ⇒ nil #background(r, g, b, alpha) ⇒ nil
Clears screen.
1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 |
# File 'lib/rubysketch/processing.rb', line 1257 def background (*args) assertDrawing__ rgba = toRGBA__ *args if rgba[3] == 1 @painter__.background *rgba else @painter__.push fill: rgba, stroke: nil do |_| @painter__.rect 0, 0, width, height end end nil end |
#bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2) ⇒ nil
Draws a Bezier spline curve.
1458 1459 1460 1461 1462 |
# File 'lib/rubysketch/processing.rb', line 1458 def bezier (x1, y1, cx1, cy1, cx2, cy2, x2, y2) assertDrawing__ @painter__.bezier x1, y1, cx1, cy1, cx2, cy2, x2, y2 nil end |
#circle(x, y, extent) ⇒ nil
Draws a circle.
1354 1355 1356 |
# File 'lib/rubysketch/processing.rb', line 1354 def circle (x, y, extent) ellipse x, y, extent, extent end |
#colorMode(mode) ⇒ nil #colorMode(mode, max) ⇒ nil #colorMode(mode, max1, max2, max3) ⇒ nil #colorMode(mode, max1, max2, max3, maxA) ⇒ nil
Sets color mode and max color values.
979 980 981 982 983 984 985 986 987 988 989 990 |
# File 'lib/rubysketch/processing.rb', line 979 def colorMode (mode, *maxes) mode = mode.upcase.to_sym raise ArgumentError, "invalid color mode: #{mode}" unless [RGB, HSB].include?(mode) raise ArgumentError unless [0, 1, 3, 4].include?(maxes.size) @hsbColor__ = mode == HSB case maxes.size when 1 then @colorMaxes__ = [maxes.first.to_f] * 4 when 3, 4 then @colorMaxes__[0...maxes.size] = maxes.map &:to_f end nil end |
#copy(sx, sy, sw, sh, dx, dy, dw, dh) ⇒ nil #copy(img, sx, sy, sw, sh, dx, dy, dw, dh) ⇒ nil
Copies image.
1539 1540 1541 1542 1543 |
# File 'lib/rubysketch/processing.rb', line 1539 def copy (img = nil, sx, sy, sw, sh, dx, dy, dw, dh) assertDrawing__ src = img&.getInternal__ || @window__.canvas @painter__.image src, sx, sy, sw, sh, dx, dy, dw, dh end |
#curve(cx1, cy1, x1, y1, x2, y2, cx2, cy2) ⇒ nil
Draws a Catmull-Rom spline curve.
1439 1440 1441 1442 1443 |
# File 'lib/rubysketch/processing.rb', line 1439 def curve (cx1, cy1, x1, y1, x2, y2, cx2, cy2) assertDrawing__ @painter__.curve cx1, cy1, x1, y1, x2, y2, cx2, cy2 nil end |
#ellipse(a, b, c, d) ⇒ nil
Draws an ellipse.
1339 1340 1341 1342 1343 1344 |
# File 'lib/rubysketch/processing.rb', line 1339 def ellipse (a, b, c, d) assertDrawing__ x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d @painter__.ellipse x, y, w, h nil end |
#ellipseMode(mode) ⇒ nil
Sets ellipse mode. Default is CENTER.
CORNER -> ellipse(left, top, width, height) CORNERS -> ellipse(left, top, right, bottom) CENTER -> ellipse(center_x, center_y, width, height) RADIUS -> ellipse(center_x, center_y, radius_h, radius_v)
1067 1068 1069 |
# File 'lib/rubysketch/processing.rb', line 1067 def ellipseMode (mode) @ellipseMode__ = mode end |
#fill(rgb) ⇒ nil #fill(rgb, alpha) ⇒ nil #fill(gray) ⇒ nil #fill(gray, alpha) ⇒ nil #fill(r, g, b) ⇒ nil #fill(r, g, b, alpha) ⇒ nil
Sets fill color.
1114 1115 1116 1117 |
# File 'lib/rubysketch/processing.rb', line 1114 def fill (*args) @painter__.fill(*toRGBA__(*args)) nil end |
#height ⇒ Object
959 960 961 |
# File 'lib/rubysketch/processing.rb', line 959 def height () @image__.height end |
#image(img, a, b) ⇒ nil #image(img, a, b, c, d) ⇒ nil
Draws an image.
1514 1515 1516 1517 1518 1519 1520 |
# File 'lib/rubysketch/processing.rb', line 1514 def image (img, a, b, c = nil, d = nil) assertDrawing__ i = img.getInternal__ x, y, w, h = toXYWH__ @imageMode__, a, b, c || i.width, d || i.height @painter__.image i, x, y, w, h nil end |
#imageMode(mode) ⇒ nil
Sets image mode. Default is CORNER.
CORNER -> image(img, left, top, width, height) CORNERS -> image(img, left, top, right, bottom) CENTER -> image(img, center_x, center_y, width, height)
1081 1082 1083 |
# File 'lib/rubysketch/processing.rb', line 1081 def imageMode (mode) @imageMode__ = mode end |
#line(x1, y1, x2, y2) ⇒ nil
Draws a line.
1294 1295 1296 1297 1298 |
# File 'lib/rubysketch/processing.rb', line 1294 def line (x1, y1, x2, y2) assertDrawing__ @painter__.line x1, y1, x2, y2 nil end |
#noFill ⇒ nil
Disables filling.
1179 1180 1181 1182 |
# File 'lib/rubysketch/processing.rb', line 1179 def noFill () @painter__.fill nil nil end |
#noStroke ⇒ nil
Disables drawing stroke.
1188 1189 1190 1191 |
# File 'lib/rubysketch/processing.rb', line 1188 def noStroke () @painter__.stroke nil nil end |
#point(x, y) ⇒ nil
Draws a point.
1277 1278 1279 1280 1281 1282 1283 |
# File 'lib/rubysketch/processing.rb', line 1277 def point (x, y) assertDrawing__ w = @painter__.stroke_width w = 1 if w == 0 @painter__.ellipse x - (w / 2.0), y - (w / 2.0), w, w nil end |
#pop ⇒ nil
Restore styles and transformations from stack.
1688 1689 1690 1691 |
# File 'lib/rubysketch/processing.rb', line 1688 def pop () popMatrix popStyle end |
#popMatrix ⇒ nil
Pops the current transformation matrix from stack.
1605 1606 1607 1608 1609 1610 |
# File 'lib/rubysketch/processing.rb', line 1605 def popMatrix () assertDrawing__ raise "matrix stack underflow" if @matrixStack__.empty? @painter__.matrix = @matrixStack__.pop nil end |
#popStyle ⇒ nil
Restore style values from the style stack.
1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 |
# File 'lib/rubysketch/processing.rb', line 1653 def popStyle () assertDrawing__ raise "style stack underflow" if @styleStack__.empty? @painter__.fill, @painter__.stroke, @painter__.stroke_width, @painter__.stroke_cap, @painter__.stroke_join, @painter__.font, @hsbColor__, @colorMaxes__, @angleScale__, @rectMode__, @ellipseMode__, @imageMode__ = @styleStack__.pop nil end |
#push(&block) ⇒ nil
Save current styles and transformations to stack.
1675 1676 1677 1678 1679 1680 1681 1682 |
# File 'lib/rubysketch/processing.rb', line 1675 def push (&block) pushMatrix pushStyle if block block.call pop end end |
#pushMatrix(&block) ⇒ nil
Pushes the current transformation matrix to stack.
1591 1592 1593 1594 1595 1596 1597 1598 1599 |
# File 'lib/rubysketch/processing.rb', line 1591 def pushMatrix (&block) assertDrawing__ @matrixStack__.push @painter__.matrix if block block.call popMatrix end nil end |
#pushStyle(&block) ⇒ nil
Save current style values to the style stack.
1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 |
# File 'lib/rubysketch/processing.rb', line 1626 def pushStyle (&block) assertDrawing__ @styleStack__.push [ @painter__.fill, @painter__.stroke, @painter__.stroke_width, @painter__.stroke_cap, @painter__.stroke_join, @painter__.font, @hsbColor__, @colorMaxes__, @angleScale__, @rectMode__, @ellipseMode__, @imageMode__ ] if block block.call popStyle end nil end |
#quad(x1, y1, x2, y2, x3, y3, x4, y4) ⇒ nil
Draws a quad.
1420 1421 1422 1423 1424 |
# File 'lib/rubysketch/processing.rb', line 1420 def quad (x1, y1, x2, y2, x3, y3, x4, y4) assertDrawing__ @painter__.line x1, y1, x2, y2, x3, y3, x4, y4, loop: true nil end |
#rect(a, b, c, d) ⇒ nil #rect(a, b, c, d, r) ⇒ nil #rect(a, b, c, d, tl, tr, br, bl) ⇒ nil
Draws a rectangle.
1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 |
# File 'lib/rubysketch/processing.rb', line 1318 def rect (a, b, c, d, *args) assertDrawing__ x, y, w, h = toXYWH__ @rectMode__, a, b, c, d case args.size when 0 then @painter__.rect x, y, w, h when 1 then @painter__.rect x, y, w, h, round: args[0] when 4 then @painter__.rect x, y, w, h, lt: args[0], rt: args[1], rb: args[2], lb: args[3] else raise ArgumentError # ToDo: refine error message end nil end |
#rectMode(mode) ⇒ nil
Sets rect mode. Default is CORNER.
CORNER -> rect(left, top, width, height) CORNERS -> rect(left, top, right, bottom) CENTER -> rect(center_x, center_y, width, height) RADIUS -> rect(center_x, center_y, radius_h, radius_v)
1052 1053 1054 |
# File 'lib/rubysketch/processing.rb', line 1052 def rectMode (mode) @rectMode__ = mode end |
#resetMatrix ⇒ nil
Reset current transformation matrix with identity matrix.
1616 1617 1618 1619 1620 |
# File 'lib/rubysketch/processing.rb', line 1616 def resetMatrix () assertDrawing__ @painter__.matrix = 1 nil end |
#rotate(angle) ⇒ nil
Applies rotation matrix to current transformation matrix.
1581 1582 1583 1584 1585 |
# File 'lib/rubysketch/processing.rb', line 1581 def rotate (angle) assertDrawing__ @painter__.rotate toAngle__ angle nil end |
#scale(s) ⇒ nil #scale(x, y) ⇒ nil
Applies scale matrix to current transformation matrix.
1569 1570 1571 1572 1573 |
# File 'lib/rubysketch/processing.rb', line 1569 def scale (x, y) assertDrawing__ @painter__.scale x, y nil end |
#setup__(painter) ⇒ Object
916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 |
# File 'lib/rubysketch/processing.rb', line 916 def setup__ (painter) @painter__ = painter @painter__.miter_limit = 10 @drawing__ = false @hsbColor__ = false @colorMaxes__ = [1.0] * 4 @angleScale__ = 1.0 @rectMode__ = nil @ellipseMode__ = nil @imageMode__ = nil @textAlignH__ = nil @textAlignV__ = nil @matrixStack__ = [] @styleStack__ = [] colorMode RGB, 255 angleMode RADIANS rectMode CORNER ellipseMode CENTER imageMode CORNER textAlign LEFT fill 255 stroke 0 end |
#square(x, y, extent) ⇒ nil
Draws a square.
1386 1387 1388 |
# File 'lib/rubysketch/processing.rb', line 1386 def square (x, y, extent) rect x, y, extent, extent end |
#stroke(rgb) ⇒ nil #stroke(rgb, alpha) ⇒ nil #stroke(gray) ⇒ nil #stroke(gray, alpha) ⇒ nil #stroke(r, g, b) ⇒ nil #stroke(r, g, b, alpha) ⇒ nil
Sets stroke color.
1137 1138 1139 1140 |
# File 'lib/rubysketch/processing.rb', line 1137 def stroke (*args) @painter__.stroke(*toRGBA__(*args)) nil end |
#strokeCap(cap) ⇒ nil
Sets stroke cap mode.
1159 1160 1161 1162 |
# File 'lib/rubysketch/processing.rb', line 1159 def strokeCap (cap) @painter__.stroke_cap cap nil end |
#strokeJoin(join) ⇒ nil
Sets stroke join mode.
1170 1171 1172 1173 |
# File 'lib/rubysketch/processing.rb', line 1170 def strokeJoin (join) @painter__.stroke_join join nil end |
#strokeWeight(weight) ⇒ nil
Sets stroke weight.
1148 1149 1150 1151 |
# File 'lib/rubysketch/processing.rb', line 1148 def strokeWeight (weight) @painter__.stroke_width weight nil end |
#text(str) ⇒ nil #text(str, x, y) ⇒ nil #text(str, a, b, c, d) ⇒ nil
Draws a text.
1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 |
# File 'lib/rubysketch/processing.rb', line 1480 def text (str, x, y, x2 = nil, y2 = nil) assertDrawing__ if x2 raise ArgumentError, "missing y2 parameter" unless y2 x, y, w, h = toXYWH__ @rectMode__, x, y, x2, y2 case @textAlignH__ when RIGHT then x += w - @painter__.font.width(str) when CENTER then x += (w - @painter__.font.width(str)) / 2 end case @textAlignV__ when BOTTOM then y += h - @painter__.font.height when CENTER then y += (h - @painter__.font.height) / 2 else end else y -= @painter__.font.ascent end @painter__.text str, x, y nil end |
#textAlign(horizontal, vertical = BASELINE) ⇒ Object
1228 1229 1230 1231 |
# File 'lib/rubysketch/processing.rb', line 1228 def textAlign (horizontal, vertical = BASELINE) @textAlignH__ = horizontal @textAlignV__ = vertical end |
#textAscent ⇒ Object
1220 1221 1222 |
# File 'lib/rubysketch/processing.rb', line 1220 def textAscent () @painter__.font.ascent end |
#textDescent ⇒ Object
1224 1225 1226 |
# File 'lib/rubysketch/processing.rb', line 1224 def textDescent () @painter__.font.descent end |
#textFont(name = nil, size = nil) ⇒ Font
Sets font.
1200 1201 1202 1203 |
# File 'lib/rubysketch/processing.rb', line 1200 def textFont (name = nil, size = nil) setFont__ name, size if name || size Font.new @painter__.font end |
#textSize(size) ⇒ nil
Sets text size.
1211 1212 1213 1214 |
# File 'lib/rubysketch/processing.rb', line 1211 def textSize (size) setFont__ @painter__.font.name, size nil end |
#textWidth(str) ⇒ Object
1216 1217 1218 |
# File 'lib/rubysketch/processing.rb', line 1216 def textWidth (str) @painter__.font.width str end |
#translate(x, y) ⇒ nil
Applies translation matrix to current transformation matrix.
1552 1553 1554 1555 1556 |
# File 'lib/rubysketch/processing.rb', line 1552 def translate (x, y) assertDrawing__ @painter__.translate x, y nil end |
#triangle(x1, y1, x2, y2, x3, y3) ⇒ nil
Draws a triangle.
1401 1402 1403 1404 1405 |
# File 'lib/rubysketch/processing.rb', line 1401 def triangle (x1, y1, x2, y2, x3, y3) assertDrawing__ @painter__.line x1, y1, x2, y2, x3, y3, loop: true nil end |
#width ⇒ Object
955 956 957 |
# File 'lib/rubysketch/processing.rb', line 955 def width () @image__.width end |