@@ -807,7 +807,7 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
807
807
pos [1 ],
808
808
anchor = 'c' ,
809
809
image = obj .background_PhotoImage ,
810
- tags = ('object' , 'background' , id )
810
+ tags = ('object' , 'background' , id ),
811
811
)
812
812
813
813
if len (obj ._foreground ) > 0 :
@@ -828,15 +828,17 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
828
828
logging .debug (f'radius: { radius } ' )
829
829
radius_canvas_size = self .toLevelCanvasCoord (radius )
830
830
if radius_canvas_size > 0 :
831
- self .level_canvas .create_circle (
831
+ r_id = self .level_canvas .create_circle (
832
832
pos [0 ],
833
833
pos [1 ],
834
834
radius_canvas_size ,
835
835
fill = '' ,
836
836
outline = 'red' ,
837
837
width = self .OBJECT_MULTIPLIER ,
838
- tags = ('radius' , property , id )
838
+ tags = ('passthrough' , 'part' , ' radius' , property , id ),
839
839
)
840
+
841
+ logging .debug (f'radius tags: { self .level_canvas .gettags (r_id )} ' )
840
842
841
843
if (obj == self .selectedObject or self .settings .get ('view.path' , True )) and obj .Type is not None :
842
844
path_points = obj .Type .get_properties ('PathPos#' )
@@ -885,7 +887,7 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
885
887
3 ,
886
888
fill = color ,
887
889
outline = '' ,
888
- tags = ('path' , 'pathPoint' , id ),
890
+ tags = ('part' , ' path', property , 'pathPoint' , id ),
889
891
)
890
892
891
893
self .level_canvas .tag_bind (
@@ -895,20 +897,22 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
895
897
)
896
898
897
899
if is_closed :
898
- self .level_canvas .create_polygon (
900
+ line = self .level_canvas .create_polygon (
899
901
path_canvas_points ,
900
902
fill = '' ,
901
903
outline = 'black' ,
902
904
width = 2 ,
903
- tags = ('path' , 'pathLine' , id ),
905
+ tags = ('passthrough' , 'part' , ' path', property , 'pathLine' , id ),
904
906
)
905
907
else :
906
- self .level_canvas .create_line (
908
+ line = self .level_canvas .create_line (
907
909
path_canvas_points ,
908
910
fill = 'black' ,
909
911
width = 2 ,
910
- tags = ('path' , 'pathLine' , id ),
912
+ tags = ('passthrough' , 'part' , ' path', property , 'pathLine' , id ),
911
913
)
914
+
915
+ # self.level_canvas.tag_bind(line, '<Button-1>', self.onLevelClick)
912
916
913
917
# logging.info(f"id: {id}")
914
918
# logging.info(f"pos: {pos}\n")
@@ -917,27 +921,60 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
917
921
918
922
self .bindObject (f'object&&{ id } ' , obj )
919
923
924
+
920
925
self .updateSelectionRectangle ()
921
926
self .updateLevelScroll ()
927
+
922
928
923
929
def onLevelClick (self , event : tk .Event ):
924
930
logging .debug ('level' )
925
931
932
+ if self .level == None :
933
+ return
934
+
926
935
mouse = (self .level_canvas .canvasx (event .x ), self .level_canvas .canvasy (event .y ))
927
936
928
937
objects = self .level_canvas .find_overlapping (* mouse , * mouse )
929
938
logging .debug (f'under mouse: { objects } ' )
930
939
length = len (objects )
931
940
932
- tags = [self .level_canvas .gettags (id ) for id in objects ]
933
- logging .debug (f'tags: { tags } ' )
941
+ for id in reversed (objects ):
942
+ tags = self .level_canvas .gettags (id )
943
+ if tags [0 ] in ['selection' , 'level' ]:
944
+ continue
945
+
946
+ obj_tag = - 1
947
+ if not tags [obj_tag ].startswith ('object-' ):
948
+ logging .debug (f'tag not obj: { tags } ' )
949
+ obj_tag = - 2
950
+
951
+ if tags [obj_tag ].startswith ('object-' ):
952
+ obj = self .level .getObjectById (tags [obj_tag ][7 ::])
953
+ if obj == None :
954
+ continue
955
+ else :
956
+ logging .debug (f'obj name: { obj .name } ' )
957
+ else :
958
+ continue
959
+
960
+ if tags [0 ] == 'passthrough' :
961
+ continue
962
+ elif tags [0 ] == 'object' :
963
+ logging .debug (f'selecting obj: { obj .name } ' )
964
+ self .selectObject (obj )
965
+ return
966
+ elif tags [0 ] == 'part' :
967
+ self .selectPart (
968
+ obj ,
969
+ tags [1 ],
970
+ id ,
971
+ tags [2 ],
972
+ )
973
+ return
934
974
935
- if length <= 1 :
936
- if length == 1 :
937
- if objects [0 ] != self .level_images ['background' ]:
938
- return
975
+ self .selectObject (None )
976
+
939
977
940
- self .selectObject (None )
941
978
942
979
def onLevelMove (self , event : tk .Event ):
943
980
if self .selectedPart :
@@ -1815,6 +1852,8 @@ def updateLevel(self):
1815
1852
self .updateLevelScroll ()
1816
1853
self .level_canvas .xview_moveto (0.23 )
1817
1854
self .level_canvas .yview_moveto (0.2 )
1855
+
1856
+ self .level_canvas .tag_bind ('passthrough' , '<Button-1>' , self .onLevelClick )
1818
1857
1819
1858
def redrawLevel (self ):
1820
1859
self .level_canvas .delete ('object' )
@@ -2242,9 +2281,8 @@ def loadLevel(self, xml : str, image : str):
2242
2281
2243
2282
if isinstance (self .level , wmwpy .classes .Level ):
2244
2283
self .level_canvas .delete ('object' )
2245
- self .level_canvas .delete ('radius ' )
2284
+ self .level_canvas .delete ('part ' )
2246
2285
self .level_canvas .delete ('selection' )
2247
- self .level_canvas .delete ('path' )
2248
2286
2249
2287
self .resetProperties ()
2250
2288
self .resetObjectSelector ()
0 commit comments