SqueakByExample:11.9
캔버스(canvas)에 관한 좀 더 많은 내용
drawOn: 메소드는 단일 인수(sole argument)로서, 켄바스(Canvas)의 인스턴스를 갖고 있으며 켄바스(the canvas)는 키 그래픽 메소드(the key graphics)를 찾을 것입니다. 이러한 메소드들은 점(points), 라인(lines), 폴리곤(polygons), 직사각형(rectangles), 타원(ellipses), 텍스트(text), 그리고 회전(rotation)과 조정(scaling)을 준 이미지들입니다.
투명한 모프, more graphics 메소드, 안티얼라이징(antialiasing) 등을 얻기 위해 다른 종류의 켄버스들을 사용할 수 있습니다. 이 기능들을 사용하기 위해, 여러분은 AlphaBlendingCanvas 또는 BalloonCanvas가 필요합니다. 그러나 인수로서 FormCanvas의 인스턴스를 수신할 때, drawOn: 메소드에서 어떻게 이러한 켄바스(canvas)를 얻을 수 있을까요? 다행스럽게도, 여러분은 한 종류의 켄바스를 다른 종류의 켄바스로 변환할 수 있습니다.
DieMorph 에서 0.5 알파 투명도(alpha-transparency)로 캔버스(canvas)를 사용하기 위해, 다음과 같이 drawOn:을 재정의 합니다.
메소드 11.37: 반투명한 주사위(die) 그리기
DieMorph»drawOn: aCanvas
| theCanvas |
theCanvas := aCanvas asAlphaBlendingCanvas: 0.5.
super drawOn: theCanvas.
(self perform: ('face' , dieValue asString) asSymbol)
do: [:aPoint | self drawDotOn: theCanvas at: aPoint]
이것이 여러분이 해야 할 모든 것입니다.
만약 여러분이 의구심이 생긴다면 asAlphaBlendingCanvas: 메소드를 살펴보십시오. 여러분은 또한 메소드 11.38에서 보이는 것 처럼, BallonCanvas를 사용하고 주사위 그리기(die drawing) 메소드를 변환하여 안티얼라이징(antialiasing)을 얻을 수 있습니다.
메소드 11.38: 안티얼라이싱 효과를 준 주사위를 그리기
DieMorph»drawOn: aCanvas
| theCanvas |
theCanvas := aCanvas asBalloonCanvas aaLevel: 3.
super drawOn: aCanvas.
(self perform: ('face' , dieValue asString) asSymbol)
do: [:aPoint | self drawDotOn: theCanvas at: aPoint]
DieMorph»drawDotOn: aCanvas at: aPoint
aCanvas
drawOval: (Rectangle
center: self position + (self extent * aPoint)
extent: self extent / 6)
color: Color black
borderWidth: 0
borderColor: Color transparent