Skip to content

Commit 227e95d

Browse files
publish 0.2.0
1 parent f6c31d7 commit 227e95d

File tree

3 files changed

+32
-30
lines changed

3 files changed

+32
-30
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ From now on, I use the term `droppable` to refer both `KXReorderableBehavior` an
2525
It's recommended to pin the minor version, because if it changed, it means some important breaking changes occurred.
2626

2727
```
28-
poetry add kivy_garden.draggable@~0.1
29-
pip install "kivy_garden.draggable>=0.1,<0.2"
28+
poetry add kivy_garden.draggable@~0.2
29+
pip install "kivy_garden.draggable>=0.2,<0.3"
3030
```
3131

3232
## Main differences from drag_n_drop
@@ -156,7 +156,7 @@ But note that **only the default handler of `on_drag_succeed` and `on_drag_fail`
156156
can be an async function. Those two only.**
157157

158158
You might say "What's the point of implementing a default handler as an async function,
159-
when you can just launch any number of tasks from regular function by using ``asynckivy.start()``?".
159+
when you can just launch any number of tasks from a regular function by using ``asynckivy.start()``?".
160160
Well, if you use ``asynckivy.start()``, that task will run independently from the dragging process,
161161
which means the draggable might fire ``on_drag_end`` and might start another drag while the task is still running.
162162
If a default handler is an async function,

README_jp.md

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
![](http://img.youtube.com/vi/CjiRZjiSqgA/0.jpg)
44
[Youtube][youtube]
55

6-
`kivy_garden.draggable`はdrag&dropの機能を実現するための拡張機能で以下の三つの部品で構成される
6+
`kivy_garden.draggable`はdrag&dropの機能を実現するための拡張機能で以下の三つの部品で構成されます
77

88
- `KXDraggableBehavior` ... dragできるようにしたいwidgetが継承すべきclass
99
- `KXDroppableBehavior``KXReorderableBehavior` ... dragされているwidgetを受け入れられるようにしたいwidgetが継承すべきclass
@@ -15,17 +15,18 @@
1515
このmoduleのminor versionが変わった時は何らかの重要な互換性の無い変更が加えられた可能性が高いので、使う際はminor versionまでを固定してください。
1616

1717
```
18-
poetry add kivy_garden.draggable@~0.1
19-
pip install "kivy_garden.draggable>=0.1,<0.2"
18+
poetry add kivy_garden.draggable@~0.2
19+
pip install "kivy_garden.draggable>=0.2,<0.3"
2020
```
2121

2222
## dragが始まる条件
2323

24-
dragは長押しによって引き起こされる。より具体的には利用者の指がdraggable内に降りてから`draggable.drag_distance`pixel以上動かずに`draggable.drag_timeout`ミリ秒以上指が離れなかった場合のみ引き起こされる。このためscroll操作(指がすぐさま動き出す)やtap動作(指がすぐに離れる)として誤認されにくい。
24+
dragは長押しによって引き起こされます。より具体的には利用者の指がdraggable内に降りてから`draggable.drag_distance`pixel以上動かずに`draggable.drag_timeout`ミリ秒以上指が離れなかった場合のみ引き起こされます。
25+
このためscroll操作(指がすぐさま動き出す)やtap動作(指がすぐに離れる)として誤認されにくいです。
2526

2627
## dragが始まった後の処理の流れ
2728

28-
ユーザーがdraggableの上に指を降ろしてdragが始まった後の流れは以下のようになる
29+
ユーザーがdraggableの上に指を降ろしてdragが始まった後の流れは以下のようになります
2930

3031
```mermaid
3132
stateDiagram-v2
@@ -60,26 +61,26 @@ stateDiagram-v2
6061
## 受け入れるdragの選別
6162

6263
図に書かれているように利用者の指が離れた時にdragが受け入れられるか否かの判断がなされ、
63-
指がdroppableの上じゃない所で離れた場合や`draggable.drag_cls``droppable.drag_classes`に含まれていない場合はまず即drag失敗となる
64+
指がdroppableの上じゃない所で離れた場合や`draggable.drag_cls``droppable.drag_classes`に含まれていない場合はまず即drag失敗となります
6465

65-
その選別をくぐり抜けたdraggableは`droppable.accepts_drag()`へ渡され、そこでdragが受け入れられるか否かの最終判断が下される。例えばmethodが
66+
その選別をくぐり抜けたdraggableは`droppable.accepts_drag()`へ渡され、そこでdragが受け入れられるか否かの最終判断が下されます。例えばmethodが
6667

6768
```python
6869
class MyDroppable(KXDroppableBehavior, Widget):
6970
def accepts_drag(self, touch, draggable) -> bool:
7071
return not self.children
7172
```
7273

73-
という風に実装されていたら、このdroppableは自分が子を持っている間は例え適切な`drag_cls`を持つdraggableであっても受け付けない
74+
という風に実装されていたら、このdroppableは自分が子を持っている間は例え適切な`drag_cls`を持つdraggableであっても受け付けません
7475

7576
## dragの中止
7677

77-
アプリが次のシーンに移りたい時にまだdrag中のwidgetがあると不都合かもれしない。そのような事態に備えて
78+
アプリが次のシーンに移りたい時にまだdrag中のwidgetがあると不都合かもしれません。そのような事態に備えて
7879

7980
- 現在進行中のdragを列挙する`ongoing_drags()`
80-
- dragを中止する`draggable.drag_cancel()`がある
81+
- dragを中止する`draggable.drag_cancel()`があります
8182

82-
これらを用いる事で以下のように進行中のdragを全て中止できる
83+
これらを用いる事で以下のように進行中のdragを全て中止できます
8384

8485
```python
8586
from kivy_garden.draggable import ongoing_drags
@@ -92,17 +93,17 @@ def cancel_all_ongoing_drags():
9293
## dragを引き起こすwidgetとdragされるwidgetを別にする
9394

9495
上で述べたようにdragはdraggableを長押しすることで引き起こされるので、
95-
dragを引き起こすwidgetとdragされるwidgetは基本同じである
96-
でも例えばcard gameを作っているとして画面上に山札があったとする。
97-
そしてdrag操作によって山札から札を引けるようにしたいとする
96+
dragを引き起こすwidgetとdragされるwidgetは基本同じです
97+
でも例えばcard gameを作っているとして画面上に山札があったとして
98+
drag操作によって山札から札を引けるようにしたいとします
9899
具体的には利用者が山札に指を触れた時に札を作り出し、
99-
そのまま指の動きに沿って札を追わせたいとする
100+
そのまま指の動きに沿って札を追わせたいとします
100101
このような
101102

102103
- dragを引き起こすwidget(山札)と
103104
- dragされるwidget(山札から引かれた札)
104105

105-
が別である状況では`draggable.start_dragging_from_others_touch()`が使える
106+
が別である状況では`draggable.start_dragging_from_others_touch()`が使えます
106107

107108
```python
108109
class Card(KXDraggableBehavior, Widget):
@@ -117,23 +118,24 @@ class Deck(Widget):
117118

118119
## 自由に振る舞いを変える
119120

120-
dragが失敗/成功/中止した時に何をするかは完全にあなたに委ねられている。例えばdrag失敗時は既定ではアニメーションしながら元の場所に戻るが、これをアニメーション無しで瞬時に戻したいなら以下のようにdefault handlerを上書きすれば良い。
121+
dragが失敗/成功/中止した時に何をするかは完全にあなたに委ねられています。
122+
例えばdrag失敗時は既定ではアニメーションしながら元の場所に戻りますが、これをアニメーション無しで瞬時に戻したいなら以下のようにdefault handlerを上書きすれば良いです。
121123

122124
```python
123125
class MyDraggable(KXDraggableBehavior, Widget):
124126
def on_drag_fail(self, touch, ctx):
125127
restore_widget_state(self, ctx.original_state)
126128
```
127129

128-
また何もせずにその場に残って欲しいなら以下のようにすれば良い
130+
また何もせずにその場に残って欲しいなら以下のようにすれば良いです
129131

130132
```python
131133
class MyDraggable(KXDraggableBehavior, Widget):
132134
def on_drag_fail(self, touch, ctx):
133135
pass
134136
```
135137

136-
成功時も同様で、既定では受け入れてくれたdroppableの子widgetになるように実装されているが以下のようにすれば子widgetにはならずに現在の位置で徐々に透明になって消える事になる
138+
成功時も同様で、既定では受け入れてくれたdroppableの子widgetになるように実装されていますが以下のようにすると子widgetにはならずに現在の位置で徐々に透明になって消える事になります
137139

138140
```python
139141
import asynckivy as ak
@@ -144,17 +146,17 @@ class MyDraggable(KXDraggableBehavior, Widget):
144146
self.parent.remove_widget(self)
145147
```
146148

147-
このようにdefault handlerを上書きすることで自由に振るまいを変えられる
148-
ただし**async関数になれるのは`on_drag_succeed``on_drag_fail`のdefault handlerだけ**なので注意されたし
149+
このようにdefault handlerを上書きすることで自由に振るまいを変えられます
150+
ただし**async関数になれるのは`on_drag_succeed``on_drag_fail`のdefault handlerだけ**なので注意してください
149151

150152
ここで
151153

152154
- default handlerをasync関数にするのと
153155
- default handlerは普通の関数のままにしておいて内部で`asynckivy.start()`を用いてasync関数を立ち上げるのと
154156

155-
の違いについて説明する
156-
前者ではasync関数のcodeがdrag処理の間に挟み込まれ、codeが`on_drag_end`が起こるより前に完遂される事が保証されるのに対し、
157-
後者ではcodeがdrag処理とは独立して進むので`on_drag_end`が起こるより前に完了する保証はない
157+
の違いについて説明します
158+
前者ではasync関数のcodeがdrag処理の間に挟み込まれcodeが`on_drag_end`が起こるより前に完遂される事が保証されるのに対し、
159+
後者ではcodeがdrag処理とは独立して進むので`on_drag_end`が起こるより前に完了する保証はありません
158160
なのでもし上の`on_drag_succeed`の例を後者のやり方で実装すると
159161

160162
```python
@@ -170,8 +172,8 @@ class MyDraggable(KXDraggableBehavior, Widget):
170172
```
171173

172174
`ak.animate()`の進行中にdragが完了し、そこで利用者が再び指を触れたことで次のdragが始まり、
173-
その最中に`self.parent.remove_widget(self)`が実行されてdraggableが親widgetから切り離されてしまうなんて事が起こりうる
174-
なので **drag完了前に完遂させたい非同期処理があるのなら必ず前者の方法を使うべし**
175+
その最中に`self.parent.remove_widget(self)`が実行されてdraggableが親widgetから切り離されてしまうなんて事が起こりえます
176+
なので **drag完了前に完遂させたい非同期処理があるのなら必ず前者の方法を使ってください**
175177

176178
## その他
177179

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "kivy-garden-draggable"
3-
version = "0.2.0.dev1"
3+
version = "0.2.0"
44
description = "Drag & Drop Extension for Kivy"
55
authors = ["Nattōsai Mitō <[email protected]>"]
66
license = "MIT"

0 commit comments

Comments
 (0)