<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=SqueakByExample%3A11.7</id>
	<title>SqueakByExample:11.7 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=SqueakByExample%3A11.7"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;action=history"/>
	<updated>2026-04-21T08:45:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2221&amp;oldid=prev</id>
		<title>Onionmixer: 번역수정</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2221&amp;oldid=prev"/>
		<updated>2013-09-15T09:06:55Z</updated>

		<summary type="html">&lt;p&gt;번역수정&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==드래그 앤 드롭(Drag-and-drop)==&lt;br /&gt;
&lt;br /&gt;
Morphic 은 이제까지 배운것 외에도 드래그 앤 드롭을 지원합니다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
수신자&amp;lt;sup&amp;gt;receiver&amp;lt;/sup&amp;gt; 역할의 morph 와 내려놓아지는&amp;lt;sup&amp;gt;dropped&amp;lt;/sup&amp;gt; 역할의 morph, 이 2 가지 객체에 대한 간단한 경우를 생각해 보겠습니다.&lt;br /&gt;
수신자는 내려놓은 morph 가 주어진 조건을 만족하는 경우에만 내려놓음&amp;lt;sup&amp;gt;drop&amp;lt;/sup&amp;gt; 을 수락합니다: 이 예제에서 morph 는 파란색으로 하겠습니다. 수락이 거부되는경우, 내려놓아진 morph 가 뭘 할지도 결정하게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|먼저 수신자 morph를 정의하십시오:}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스 11.20:  다른 morph 를 내려놓을 수 있는 morph 를 정의하기&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Morph subclass: #ReceiverMorph&lt;br /&gt;
  instanceVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  classVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  poolDictionaries: &amp;#039;&amp;#039;&lt;br /&gt;
  category: &amp;#039;SBE-Morphic&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|늘 하던것처럼 initialization 메서드를 정의하십시오:}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메서드 11.21: ReceiverMorph 의 초기화&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph»initialize&lt;br /&gt;
  super initialize.&lt;br /&gt;
  color := Color red.&lt;br /&gt;
  bounds := 0 @ 0 extent: 200 @ 200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
만약 받는쪽의 morph 는 drop 에 대한 수락 또는 거부를 어떻게 판단할까요? 대부분의 경우, 받는쪽과 내려놓아지는쪽의 양쪽 morph 모두 drop 작업에 동의해야 합니다. drop 을 받는쪽은 wantsDroppedMorph:event: 메시지에 반응하는것으로 행동을 결정할 수 있으며, 이 경우 메시지의 첫번짜 인자는 내려놓아진 morph, 두번째 인자는 마우스 이벤트이므로 drop 을 받는객체는 이 상황에 대한 판단을 할 수 있습니다. 예를들어, 받는객체는 drop 시점에서 어떤 modifier key 가 눌려져 있는지를 조사할 수 있다는거죠. 내려놓아진 morph, 또는 내려놓아지는 과정에 있는 morph 는 수신객체가 drop 을 받는 시점에서 wantToBeDroppedInto: 메시지를 받았을때에 받는객체가 내가 원하는 객체인지 알아볼 수 있는 기회를 가지게 됩니다. wantToBeDroppedInto: 메서드의 기본값(이 값은 Morph 클래스에 정의되어있습니다)으로 true 를 반환합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메서드 11.22: morph 의 색상을 기준하여, 내려놓아진 morph 를 수락하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph»wantsDroppedMorph: aMorph event: anEvent&lt;br /&gt;
  ↑ aMorph color = Color blue&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
만약 받는 morph 가 떨어진 morph 를 원하지 않는 다면, 내려놓아진 morph 에는 어떤일이 일어날까요? 이 경우에 대한 기본동작은 아무것도 하지 않는 것으로 되어있으며, 이것은 내려놓아진 morph 가 받는 morph 상단에 위치하며 받는 모프와 상호작용은 하지 않는다는것을 의미합니다. 내려놓아진 morph 에 대한 좀 더 직관적인 동작은 해당되는 morph 의 드래그 이전, 원래의 위치로 돌아가는 것입니다. 이렇게 원래위치로 되돌아가는 작업은 수신객체가 내려놓아진 morph 를 원하지 않을 때, 메시지 repelsMorph:event: 에 true 로 답변할때 진행됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메서드 11.23: 내려놓아진 morph 가 거절 될 때 해당되는 morph 의 동작을 변경하기&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph&amp;gt;&amp;gt;repelsMorph: aMorph event: ev&lt;br /&gt;
  ↑ (self wantsDroppedMorph: aMorph event: ev) not&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
여기까지가, 수신객체에 대해 알아야할 모든 내용입니다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|워크스페이스에서 ReveiverMorph 와 EllipseMorph 의 인스턴스를 생성해주세요:}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph new openInWorld.&lt;br /&gt;
EllipseMorph new openInWorld.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
수신객체에 노란색의 &amp;#039;&amp;#039;&amp;#039;EllipseMorph&amp;#039;&amp;#039;&amp;#039; 를 드래그 앤 드롭합니다. 이 작업은 거부될 것이며 떨어뜨려진 객체는 초기 위치로 다시 이동되겠죠.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|이 동작을 변경 하기 위해, Inspector 를 사용하여 타원 morph 의 색상을 변경하십시오. 파랑 모프는 반드시 {{Template:HighlightBold|ReceiverMorph}} 에 대해서는 수락되어야만 합니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DroppedMorph 라는 이름을 가진 Morph 클래스의 특별한 서브클래스를 만들고, 이것을 이용해서 좀 더 많은 실험을 해보도록 하겠습니다:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스 11.24: ReceiverMorph 에 드래그 앤 드롭을 할 수 있도록 morph 를 정의하겠습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Morph subclass: #DroppedMorph&lt;br /&gt;
  instanceVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  classVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  poolDictionaries: &amp;#039;&amp;#039;&lt;br /&gt;
  category: &amp;#039;SBE-Morphic&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메서드 11.25: DroppedMorph 초기화 하기&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
DroppedMorph&amp;gt;&amp;gt;initialize&lt;br /&gt;
  super initialize.&lt;br /&gt;
  color := Color blue.&lt;br /&gt;
  self position: 250@100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
떨어지게된 morph 가 받는객체에서 거절될때, 해야할 작업을 설정할 수 있습니다. 여기서, morph 는 마우스 포인터에 달려있게 될겁니다&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메서드 11.26: 모프를 내려다 놓았지만, 거절되지 않았다면 반응하기&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
DroppedMorph»rejectDropMorphEvent: anEvent&lt;br /&gt;
  |h|&lt;br /&gt;
  h := anEvent hand.&lt;br /&gt;
  WorldState&lt;br /&gt;
    addDeferredUIMessage: [h grabMorph: self].&lt;br /&gt;
  anEvent wasHandled: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이벤트에 hand 메세지를 보내면, HangMorph 의 인스턴스인 hand 를 반환하며, 이 객체는 마우스 포인터를 나타내고있고, 마우스 포인터에 대한건 뭐든지 가지고 있습니다. 여기서 drop 이 거부된 morph 인 self 를 잡고있어야 한다고 world 에게 지시하고 있죠.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|DroppedMorph의 인스턴스들을 만들고, 수신자 위에 해당 인스턴스들을 끌어다 놓으십시오.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph new openInWorld.&lt;br /&gt;
(DroppedMorph new color: Color blue) openInWorld.&lt;br /&gt;
(DroppedMorph new color: Color green) openInWorld.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
녹색의 morph 는 거절되었으므로, 마우스 포인터에 잡혀있게 됩니다..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SqueakByExample]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2219&amp;oldid=prev</id>
		<title>Onionmixer at 05:08, 30 August 2012</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2219&amp;oldid=prev"/>
		<updated>2012-08-30T05:08:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:08, 30 August 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{CommentSqueak|지금 평상시의 방법으로 initialization &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드를 &lt;/del&gt;정의하겠습니다:}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{CommentSqueak|지금 평상시의 방법으로 initialization &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드를 &lt;/ins&gt;정의하겠습니다:}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드 &lt;/del&gt;11.21: ReceiverMorph 초기화 하기&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드 &lt;/ins&gt;11.21: ReceiverMorph 초기화 하기&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»initialize&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»initialize&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;만약자 수신자 모프가 드롭된 모프를 수락 또는 접근 거부할 경우를, 우리는 어떤 결정을 해야합니까? 일반적으로, 두 경우의 모프 모두 상호작용(interaction)에 동의해야합니다. 수신자는 그러한 동의를 wantsDroppedMorph:event:에 응답함으로써 수행하며, 첫 번째 인수는 드롭된 모프이며, 두 번째 인수는 마우스 이벤트 이므로, 수신자는 동의할 수 있습니다. 예를 들어, 만약 modifier key가 드롭을 할 때 눌러져 있는지를 보아야 합니다. 드롭된 모프(dropped morph)는 또한 드롭되고 있는 모프는 또한 수신자가 드롭이 되고 있는 중인 것에 모프가 배치되는 것을 좋아하는지의 여부를 점검하고 볼 수 있는 기회를 부여 받습니다. 메시지 wantsToBeDroppedInto:는 수신자에 발송 되며, 이 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드의 &lt;/del&gt;디폴트 실행은 (클래스 모프에서),  true로 답변을 내놓습니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;만약자 수신자 모프가 드롭된 모프를 수락 또는 접근 거부할 경우를, 우리는 어떤 결정을 해야합니까? 일반적으로, 두 경우의 모프 모두 상호작용(interaction)에 동의해야합니다. 수신자는 그러한 동의를 wantsDroppedMorph:event:에 응답함으로써 수행하며, 첫 번째 인수는 드롭된 모프이며, 두 번째 인수는 마우스 이벤트 이므로, 수신자는 동의할 수 있습니다. 예를 들어, 만약 modifier key가 드롭을 할 때 눌러져 있는지를 보아야 합니다. 드롭된 모프(dropped morph)는 또한 드롭되고 있는 모프는 또한 수신자가 드롭이 되고 있는 중인 것에 모프가 배치되는 것을 좋아하는지의 여부를 점검하고 볼 수 있는 기회를 부여 받습니다. 메시지 wantsToBeDroppedInto:는 수신자에 발송 되며, 이 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드의 &lt;/ins&gt;디폴트 실행은 (클래스 모프에서),  true로 답변을 내놓습니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드 &lt;/del&gt;11.22: 모프의 색상에 기초하여, 드롭된 모프 수락하기&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드 &lt;/ins&gt;11.22: 모프의 색상에 기초하여, 드롭된 모프 수락하기&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»wantsDroppedMorph: aMorph event: anEvent&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»wantsDroppedMorph: aMorph event: anEvent&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l42&quot;&gt;Line 42:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 42:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드 &lt;/del&gt;11.23: 드롭된 모프가 거절 될 때 그 모프의 동작을 변경하기&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드 &lt;/ins&gt;11.23: 드롭된 모프가 거절 될 때 그 모프의 동작을 변경하기&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»repelsMorph: aMorph event: ev&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ReceiverMorph»repelsMorph: aMorph event: ev&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l78&quot;&gt;Line 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 78:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드 &lt;/del&gt;11.25: DroppedMorph 초기화 하기&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드 &lt;/ins&gt;11.25: DroppedMorph 초기화 하기&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DroppedMorph»initialize&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DroppedMorph»initialize&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l90&quot;&gt;Line 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 90:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메소드 &lt;/del&gt;11.26: 모프가 드롭 되었지만 거절되지 않았을 때, 반응하기&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;메서드 &lt;/ins&gt;11.26: 모프가 드롭 되었지만 거절되지 않았을 때, 반응하기&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DroppedMorph»rejectDropMorphEvent: anEvent&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DroppedMorph»rejectDropMorphEvent: anEvent&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2218&amp;oldid=prev</id>
		<title>Onionmixer: SBE 드래그앤드롭 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SqueakByExample:11.7&amp;diff=2218&amp;oldid=prev"/>
		<updated>2012-08-17T13:15:38Z</updated>

		<summary type="html">&lt;p&gt;SBE 드래그앤드롭 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==드레그 엔 드롭(Drag-and-drop)==&lt;br /&gt;
&lt;br /&gt;
Morphic은 또한 드레그 엔 드롭을 지원합니다. 두 개의 모프(morphs), 수신자(receive) 그리고 드롭된 모프(dopped morph)와 함께 단순한 예시를 점검해 봅시다. 수신자(receiver)는 드롭된 모프(dropped morph)가 주어진 조건을 부합되는 경우에만, 모프(morph)를 수락할 것입니다: 우리의 예시에서 모프(morph)는 반드시 파랑색이 되어야만 합니다. 만약 모프 수락이 거절되면, 드롭된 모프는 무엇을 해야할지를 결정합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|먼저 수신자 모프(the receiver morph)를 정의합시다:}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스 11.20: 우리가 다른 모프(morphs)를 드롭 할 수 있는 위치에서 모프를 정의하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Morph subclass: #ReceiverMorph&lt;br /&gt;
  instanceVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  classVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  poolDictionaries: &amp;#039;&amp;#039;&lt;br /&gt;
  category: &amp;#039;SBE--Morphic&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|지금 평상시의 방법으로 initialization 메소드를 정의하겠습니다:}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메소드 11.21: ReceiverMorph 초기화 하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph»initialize&lt;br /&gt;
  super initialize.&lt;br /&gt;
  color := Color red.&lt;br /&gt;
  bounds := 0 @ 0 extent: 200 @ 200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
만약자 수신자 모프가 드롭된 모프를 수락 또는 접근 거부할 경우를, 우리는 어떤 결정을 해야합니까? 일반적으로, 두 경우의 모프 모두 상호작용(interaction)에 동의해야합니다. 수신자는 그러한 동의를 wantsDroppedMorph:event:에 응답함으로써 수행하며, 첫 번째 인수는 드롭된 모프이며, 두 번째 인수는 마우스 이벤트 이므로, 수신자는 동의할 수 있습니다. 예를 들어, 만약 modifier key가 드롭을 할 때 눌러져 있는지를 보아야 합니다. 드롭된 모프(dropped morph)는 또한 드롭되고 있는 모프는 또한 수신자가 드롭이 되고 있는 중인 것에 모프가 배치되는 것을 좋아하는지의 여부를 점검하고 볼 수 있는 기회를 부여 받습니다. 메시지 wantsToBeDroppedInto:는 수신자에 발송 되며, 이 메소드의 디폴트 실행은 (클래스 모프에서),  true로 답변을 내놓습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메소드 11.22: 모프의 색상에 기초하여, 드롭된 모프 수락하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph»wantsDroppedMorph: aMorph event: anEvent&lt;br /&gt;
  ↑ aMorph color = Color blue&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
만약 수신 모프(the receiving morph)가 그것을 원하지 않을 때, 드롭된 모프에 어떤 현상이 생길까요? 이것에 대한 디폴트 동작은 아무것도 하지 않는 것이며, 곧 다시 말해 드롭된 모프는 수신 모프(the receiving)의 상단에 머무르며 그 수신 모프와 상호작용하지 않습니다. 드롭된 모프를 위한 좀더 직관적인 동작은 그 모프의 원래의 위치로 돌아가는 것입니다. 이 작업은 수신자가 드롭된 모프를 원하지 않을 때, 메시지 repelsMorph:event:에 true로 답변함으로써 수행될 수 있습니다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메소드 11.23: 드롭된 모프가 거절 될 때 그 모프의 동작을 변경하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph»repelsMorph: aMorph event: ev&lt;br /&gt;
  ↑ (self wantsDroppedMorph: aMorph event: ev) not&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
여기까지가 수신자에 관한 우리가 알아야 할 필요가 있는 모든 내용입니다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|워크스페이스에서 ReveiverMorph와 EllipseMorph의 인스턴스들을 만듭니다:}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph new openInWorld.&lt;br /&gt;
EllipseMorph new openInWorld.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
수신자(the receiver)에 노랑 &amp;#039;&amp;#039;&amp;#039;EllipseMorph&amp;#039;&amp;#039;&amp;#039;를 드레그 엔 드롭합니다. 이것은 거부될 것이며 초기 위치로 다시 발송될 것입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|이 동작 변경을 하기 위해, 인스펙터(inspector)를 사용하여 타원 모프(ellipse morph)의 색상을 변경합니다. 파랑 모프(Blue morphs)는 반드시 {{Template:HighlightBold|ReceiverMorph}}에 의해 수락되어야만 합니다.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DroppedMorph로 작명한 모프의 특정 클래스를 만들면, 우리가 좀더 실험을 할 수 있습니다:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스 11.24 모프를 정의하면, 우리가 ReceiverMorph에 드레그 엔 드롭할 수 있습니다. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Morph subclass: #DroppedMorph&lt;br /&gt;
  instanceVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  classVariableNames: &amp;#039;&amp;#039;&lt;br /&gt;
  poolDictionaries: &amp;#039;&amp;#039;&lt;br /&gt;
  category: &amp;#039;SBE--Morphic&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메소드 11.25: DroppedMorph 초기화 하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
DroppedMorph»initialize&lt;br /&gt;
  super initialize.&lt;br /&gt;
  color := Color blue.&lt;br /&gt;
  self position: 250@100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
지금 우리는 드롭된 모프가 수신자(the receiver)에 의해 거절 될 때, 드롭된 모프가 무엇인지를 지정할 수 있을 것입니다. 여기서 드롭된 모프는 마우스 포인터에 첨부되어 머무르게 될 것입니다: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
메소드 11.26: 모프가 드롭 되었지만 거절되지 않았을 때, 반응하기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
DroppedMorph»rejectDropMorphEvent: anEvent&lt;br /&gt;
  |h|&lt;br /&gt;
  h := anEvent hand.&lt;br /&gt;
  WorldState&lt;br /&gt;
    addDeferredUIMessage: [h grabMorph: self].&lt;br /&gt;
  anEvent wasHandled: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이벤트(event)에 hand 메시지를 발송하는 작업은, 마우스 포인터를 나타내는 HandMorph의 인스턴스인 hand와 그것이 쥐고 있는 모든 것으로 답변을 수행합니다. 여기서 우리는 World에게 hand가 거절된 모프(morph)인 self를 쥐어야 한다고 말합니다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{CommentSqueak|DroppedMorph의 인스턴스들을 만들고, 수신자 위에 그 인스턴스들을 드레그 엔 드롭합니다.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
ReceiverMorph new openInWorld.&lt;br /&gt;
(DroppedMorph new color: Color blue) openInWorld.&lt;br /&gt;
(DroppedMorph new color: Color green) openInWorld.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
녹색 모프가 거절되므로, 마우스 포인터에 첨부되어 머무르게 됩니다.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SqueakByExample]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>