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.
- #init__(image, painter) ⇒ Object
-
#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.
-
#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.
- #updateCanvas__(image, painter) ⇒ Object
- #width ⇒ Object
Instance Method Details
#angleMode(mode) ⇒ nil
Sets angle mode.
1031 1032 1033 1034 1035 1036 1037 1038 |
# File 'lib/rubysketch/processing.rb', line 1031 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.
1373 1374 1375 1376 1377 1378 1379 1380 |
# File 'lib/rubysketch/processing.rb', line 1373 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.
1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 |
# File 'lib/rubysketch/processing.rb', line 1261 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.
1462 1463 1464 1465 1466 |
# File 'lib/rubysketch/processing.rb', line 1462 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.
1358 1359 1360 |
# File 'lib/rubysketch/processing.rb', line 1358 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.
983 984 985 986 987 988 989 990 991 992 993 994 |
# File 'lib/rubysketch/processing.rb', line 983 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.
1543 1544 1545 1546 1547 |
# File 'lib/rubysketch/processing.rb', line 1543 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.
1443 1444 1445 1446 1447 |
# File 'lib/rubysketch/processing.rb', line 1443 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.
1343 1344 1345 1346 1347 1348 |
# File 'lib/rubysketch/processing.rb', line 1343 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)
1071 1072 1073 |
# File 'lib/rubysketch/processing.rb', line 1071 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.
1118 1119 1120 1121 |
# File 'lib/rubysketch/processing.rb', line 1118 def fill (*args) @painter__.fill(*toRGBA__(*args)) nil end |
#height ⇒ Object
963 964 965 |
# File 'lib/rubysketch/processing.rb', line 963 def height () @image__.height end |
#image(img, a, b) ⇒ nil #image(img, a, b, c, d) ⇒ nil
Draws an image.
1518 1519 1520 1521 1522 1523 1524 |
# File 'lib/rubysketch/processing.rb', line 1518 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)
1085 1086 1087 |
# File 'lib/rubysketch/processing.rb', line 1085 def imageMode (mode) @imageMode__ = mode end |
#init__(image, 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 init__ (image, painter) @drawing__ = false @hsbColor__ = false @colorMaxes__ = [1.0] * 4 @angleScale__ = 1.0 @rectMode__ = nil @ellipseMode__ = nil @imageMode__ = nil @textAlignH__ = nil @textAlignV__ = nil @matrixStack__ = [] @styleStack__ = [] updateCanvas__ image, painter colorMode RGB, 255 angleMode RADIANS rectMode CORNER ellipseMode CENTER imageMode CORNER textAlign LEFT fill 255 stroke 0 strokeWeight 1 end |
#line(x1, y1, x2, y2) ⇒ nil
Draws a line.
1298 1299 1300 1301 1302 |
# File 'lib/rubysketch/processing.rb', line 1298 def line (x1, y1, x2, y2) assertDrawing__ @painter__.line x1, y1, x2, y2 nil end |
#noFill ⇒ nil
Disables filling.
1183 1184 1185 1186 |
# File 'lib/rubysketch/processing.rb', line 1183 def noFill () @painter__.fill nil nil end |
#noStroke ⇒ nil
Disables drawing stroke.
1192 1193 1194 1195 |
# File 'lib/rubysketch/processing.rb', line 1192 def noStroke () @painter__.stroke nil nil end |
#point(x, y) ⇒ nil
Draws a point.
1281 1282 1283 1284 1285 1286 1287 |
# File 'lib/rubysketch/processing.rb', line 1281 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.
1692 1693 1694 1695 |
# File 'lib/rubysketch/processing.rb', line 1692 def pop () popMatrix popStyle end |
#popMatrix ⇒ nil
Pops the current transformation matrix from stack.
1609 1610 1611 1612 1613 1614 |
# File 'lib/rubysketch/processing.rb', line 1609 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.
1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 |
# File 'lib/rubysketch/processing.rb', line 1657 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.
1679 1680 1681 1682 1683 1684 1685 1686 |
# File 'lib/rubysketch/processing.rb', line 1679 def push (&block) pushMatrix pushStyle if block block.call pop end end |
#pushMatrix(&block) ⇒ nil
Pushes the current transformation matrix to stack.
1595 1596 1597 1598 1599 1600 1601 1602 1603 |
# File 'lib/rubysketch/processing.rb', line 1595 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.
1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 |
# File 'lib/rubysketch/processing.rb', line 1630 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.
1424 1425 1426 1427 1428 |
# File 'lib/rubysketch/processing.rb', line 1424 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.
1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 |
# File 'lib/rubysketch/processing.rb', line 1322 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)
1056 1057 1058 |
# File 'lib/rubysketch/processing.rb', line 1056 def rectMode (mode) @rectMode__ = mode end |
#resetMatrix ⇒ nil
Reset current transformation matrix with identity matrix.
1620 1621 1622 1623 1624 |
# File 'lib/rubysketch/processing.rb', line 1620 def resetMatrix () assertDrawing__ @painter__.matrix = 1 nil end |
#rotate(angle) ⇒ nil
Applies rotation matrix to current transformation matrix.
1585 1586 1587 1588 1589 |
# File 'lib/rubysketch/processing.rb', line 1585 def rotate (angle) assertDrawing__ @painter__.rotate toAngle__ angle nil end |
#scale(s) ⇒ nil #scale(x, y) ⇒ nil
Applies scale matrix to current transformation matrix.
1573 1574 1575 1576 1577 |
# File 'lib/rubysketch/processing.rb', line 1573 def scale (x, y) assertDrawing__ @painter__.scale x, y nil end |
#square(x, y, extent) ⇒ nil
Draws a square.
1390 1391 1392 |
# File 'lib/rubysketch/processing.rb', line 1390 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.
1141 1142 1143 1144 |
# File 'lib/rubysketch/processing.rb', line 1141 def stroke (*args) @painter__.stroke(*toRGBA__(*args)) nil end |
#strokeCap(cap) ⇒ nil
Sets stroke cap mode.
1163 1164 1165 1166 |
# File 'lib/rubysketch/processing.rb', line 1163 def strokeCap (cap) @painter__.stroke_cap cap nil end |
#strokeJoin(join) ⇒ nil
Sets stroke join mode.
1174 1175 1176 1177 |
# File 'lib/rubysketch/processing.rb', line 1174 def strokeJoin (join) @painter__.stroke_join join nil end |
#strokeWeight(weight) ⇒ nil
Sets stroke weight.
1152 1153 1154 1155 |
# File 'lib/rubysketch/processing.rb', line 1152 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.
1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 |
# File 'lib/rubysketch/processing.rb', line 1484 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
1232 1233 1234 1235 |
# File 'lib/rubysketch/processing.rb', line 1232 def textAlign (horizontal, vertical = BASELINE) @textAlignH__ = horizontal @textAlignV__ = vertical end |
#textAscent ⇒ Object
1224 1225 1226 |
# File 'lib/rubysketch/processing.rb', line 1224 def textAscent () @painter__.font.ascent end |
#textDescent ⇒ Object
1228 1229 1230 |
# File 'lib/rubysketch/processing.rb', line 1228 def textDescent () @painter__.font.descent end |
#textFont(name = nil, size = nil) ⇒ Font
Sets font.
1204 1205 1206 1207 |
# File 'lib/rubysketch/processing.rb', line 1204 def textFont (name = nil, size = nil) setFont__ name, size if name || size Font.new @painter__.font end |
#textSize(size) ⇒ nil
Sets text size.
1215 1216 1217 1218 |
# File 'lib/rubysketch/processing.rb', line 1215 def textSize (size) setFont__ @painter__.font.name, size nil end |
#textWidth(str) ⇒ Object
1220 1221 1222 |
# File 'lib/rubysketch/processing.rb', line 1220 def textWidth (str) @painter__.font.width str end |
#translate(x, y) ⇒ nil
Applies translation matrix to current transformation matrix.
1556 1557 1558 1559 1560 |
# File 'lib/rubysketch/processing.rb', line 1556 def translate (x, y) assertDrawing__ @painter__.translate x, y nil end |
#triangle(x1, y1, x2, y2, x3, y3) ⇒ nil
Draws a triangle.
1405 1406 1407 1408 1409 |
# File 'lib/rubysketch/processing.rb', line 1405 def triangle (x1, y1, x2, y2, x3, y3) assertDrawing__ @painter__.line x1, y1, x2, y2, x3, y3, loop: true nil end |
#updateCanvas__(image, painter) ⇒ Object
943 944 945 |
# File 'lib/rubysketch/processing.rb', line 943 def updateCanvas__ (image, painter) @image__, @painter__ = image, painter end |
#width ⇒ Object
959 960 961 |
# File 'lib/rubysketch/processing.rb', line 959 def width () @image__.width end |