sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    ⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update

    Flags for onMouseMove

    Scheduled Pinned Locked Moved Developers' Forum
    13 Posts 3 Posters 1.5k Views 3 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • fredo6F Offline
      fredo6
      last edited by

      Actually, I need the value of flags, for the onMouseMove method when the Left button is down.

      Apparently nothing that has a bit value of 1.

      Fredo

      1 Reply Last reply Reply Quote 0
      • D Offline
        driven
        last edited by

        Fredo, the flags were in there, the flag is 258...

        
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 258  #left down starts here
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 258  #left down
        onMouseMove; flags = 256  #left down released here
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        onMouseMove; flags = 256
        Key Tool Deactivated.
        
        
        

        learn from the mistakes of others, you may not live long enough to make them all yourself...

        1 Reply Last reply Reply Quote 0
        • fredo6F Offline
          fredo6
          last edited by

          Thanks very much

          On Windows, the bitmask logic for onMouseMove is:

          • Left button down -> 1 (i.e. flags & 1 == 1)
          • Shift down -> 4
          • Ctrl down -> 8
          • Alt down -> 32
            This logic also applies to onLButtonDown (alwasy contains 1) and onLButtonUp

          On Mac, the bitmask logic seems different. The flags always include 256, and the button and modifiers are adding to that:

          • Left button down -> 2 (i.e. flags & 2 == 2)
          • Shift down -> ?
          • Ctrl down -> ?
          • Alt down -> ?

          John: would be kind to check what are the value of flags for the 3 modifiers. Also, check the flags on the methods onLButtonDown and onLButtonUp to see if they respect the logic too.

          Thanks

          Fred

          1 Reply Last reply Reply Quote 0
          • D Offline
            driven
            last edited by

            hi Fredo it's not so straight forward...
            there are two ways to get RButtonDown on a mac and I think they have different flags...
            but every mouse in the house has one fault or another...
            this one has a broken RButton...

            I'll update when I fix or buy a new mouse...

            Key Tool Activated.
            256 = onMouseMove 
            "LButtonDown"
            258 = onMouseMove with onLButtonDown 
            "LButtonUP"
            onKeyDown; Key code; 262144 ( VK_CONTROL )
            "RButtonDown"
            262409 = onMouseMove with onRButtonDown using control LButton
            onKeyUp  ; Key code; 262144 ( VK_CONTROL )
            264 = onMouseMove with onRButtonDown 
            256 = onMouseMove 
            onKeyDown; Key code; 524288 ( VK_ALT or VK_MENU )
            "LButtonDown"
            524578 = onMouseMove with onLButtonDown with modifier 
            "LButtonUP"
            524576 = onMouseMove with onRButtonDown using control LButton
            onKeyUp  ; Key code; 524288 ( VK_ALT or VK_MENU )
            onKeyDown; Key code; 1048576 ( VK_COMMAND )
            "LButtonDown"
            1048842 = onMouseMove with onLButtonDown with modifier 
            onKeyDown; Key code; 262144 ( VK_CONTROL )
            1310987 = onMouseMove with onLButtonDown with modifier 
            onKeyUp  ; Key code; 262144 ( VK_CONTROL )
            1048842 = onMouseMove with onLButtonDown 
            onKeyUp  ; Key code; 1048576 ( VK_COMMAND )
            258 = onMouseMove with onLButtonDown 
            "LButtonUP"
            Key Tool Deactivated.
            

            learn from the mistakes of others, you may not live long enough to make them all yourself...

            1 Reply Last reply Reply Quote 0
            • S Offline
              slbaumgartner
              last edited by

              Here's my output from a modified version of the event reporter John was using. It covers all the combinations of mouse moves with one or both buttons pressed as well as any of the four modifier keys. I added printout of the hex and decimal values of the flags because I find that easier to understand than trying to subtract the decimal values all the time.

              Key Tool Activated.
              
              "MouseMove"
              Flags;      256 (0X000100 = 0b000000000000000000000100000000)
              
              "LButtonDown"
              "MouseMove"
              Flags;      258 (0X000102 = 0b000000000000000000000100000010)
              "LButtonUP"
              
              "RButtonDown"
              "MouseMove"
              Flags;      264 (0X000108 = 0b000000000000000000000100001000)
              
              "LButtonDown"
              "RButtonDown"
              "MouseMove"
              Flags;      266 (0X00010A = 0b000000000000000000000100001010)
              "LButtonUP"
              
              onKeyDown; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              "MouseMove"
              Flags;   131328 (0X020100 = 0b000000000000100000000100000000)
              onKeyUp  ; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              
              onKeyDown; Key code; 262144 ( VK_CONTROL )
              "MouseMove"
              Flags;   262401 (0X040101 = 0b000000000001000000000100000001)
              onKeyUp  ; Key code; 262144 ( VK_CONTROL )
              
              onKeyDown; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              "MouseMove"
              Flags;   524576 (0X080120 = 0b000000000010000000000100100000)
              onKeyUp  ; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              
              onKeyDown; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              "MouseMove"
              Flags;  1048840 (0X100108 = 0b000000000100000000000100001000)
              onKeyUp  ; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              
              onKeyDown; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              "LButtonDown"
              "MouseMove"
              Flags;   131330 (0X020102 = 0b000000000000100000000100000010)
              "LButtonUP"
              onKeyUp  ; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              
              onKeyDown; Key code; 262144 ( VK_CONTROL )
              "RButtonDown"
              "MouseMove"
              Flags;   262409 (0X040109 = 0b000000000001000000000100001001)
              onKeyUp  ; Key code; 262144 ( VK_CONTROL )
              
              onKeyDown; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              "LButtonDown"
              "MouseMove"
              Flags;   524586 (0X08012A = 0b000000000010000000000100101010)
              "LButtonUP"
              onKeyUp  ; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              
              onKeyDown; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              "LButtonDown"
              "MouseMove"
              Flags;  1048842 (0X10010A = 0b000000000100000000000100001010)
              "LButtonUP"
              onKeyUp  ; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              
              onKeyDown; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              "RButtonDown"
              "MouseMove"
              Flags;   131336 (0X020108 = 0b000000000000100000000100001000)
              onKeyUp  ; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              
              onKeyDown; Key code; 262144 ( VK_CONTROL )
              "RButtonDown"
              "MouseMove"
              Flags;   262409 (0X040109 = 0b000000000001000000000100001001)
              onKeyUp  ; Key code; 262144 ( VK_CONTROL )
              
              onKeyDown; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              "RButtonDown"
              "MouseMove"
              Flags;   524584 (0X080128 = 0b000000000010000000000100101000)
              onKeyUp  ; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              
              onKeyDown; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              "RButtonDown"
              "MouseMove"
              Flags;  1048840 (0X100108 = 0b000000000100000000000100001000)
              onKeyUp  ; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              
              onKeyDown; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              "LButtonDown"
              "RButtonDown"
              "MouseMove"
              Flags;   131338 (0X02010A = 0b000000000000100000000100001010)
              "LButtonUP"
              onKeyUp  ; Key code; 131072 ( VK_SHIFT or CONSTRAIN_MODIFIER_KEY or CONSTRAIN_MODIFIER_MASK )
              
              onKeyDown; Key code; 262144 ( VK_CONTROL )
              "RButtonDown"
              "RButtonDown"
              "MouseMove"
              Flags;   262409 (0X040109 = 0b000000000001000000000100001001)
              onKeyUp  ; Key code; 262144 ( VK_CONTROL )
              
              onKeyDown; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              "LButtonDown"
              "RButtonDown"
              "MouseMove"
              Flags;   524586 (0X08012A = 0b000000000010000000000100101010)
              "LButtonUP"
              onKeyUp  ; Key code; 524288 ( VK_ALT or VK_MENU or COPY_MODIFIER_KEY or COPY_MODIFIER_MASK )
              
              onKeyDown; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              "LButtonDown"
              "RButtonDown"
              "MouseMove"
              Flags;  1048842 (0X10010A = 0b000000000100000000000100001010)
              "LButtonUP"
              onKeyUp  ; Key code; 1048576 ( VK_COMMAND or ALT_MODIFIER_KEY or ALT_MODIFIER_MASK )
              
              Key Tool Deactivated.
              
              
              1 Reply Last reply Reply Quote 0
              • fredo6F Offline
                fredo6
                last edited by

                @slbaumgartner

                Thanks. Very helpful.

                Then it means that a portable flag decoding for onMouseMove could be

                
                #Flags for onMouseMove
                if (RUBY_PLATFORM =~ /darwin/i)	
                   def buttonLDown?(flags) ; flags & 2 == 2 ; end
                   def shiftDown?(flags) ; flags & VK_SHIFT == VK_SHIFT ; end
                   def ctrlDown?(flags) ; flags & VK_CONTROL == VK_CONTROL ; end
                   def altDown?(flags) ; flags & VK_ALT == VK_ALT ; end
                else
                   def buttonLDown?(flags) ; flags & 1 == 1 ; end
                   def shiftDown?(flags) ; flags & 4 == 4 ; end
                   def ctrlDown?(flags) ; flags & 8 == 8 ; end
                   def altDown?(flags) ; flags & 32 == 32 ; end
                end
                
                
                
                1 Reply Last reply Reply Quote 0
                • D Offline
                  driven
                  last edited by

                  fredo,

                  you probably don't want to use VK_CONTROL on a mac...

                  256 = onMouseMove
                  258 = onMouseMove with LButtonDown

                  131072 ( VK_SHIFT )
                  131330 = onMouseMove with LButtonDown and ( VK_SHIFT )

                  524288 ( VK_ALT )
                  524578 = onMouseMove with LButtonDown and ( VK_ALT )

                  1048576 ( VK_COMMAND )
                  1048842 = onMouseMove with onLButtonDown and ( VK_COMMAND )

                  Usage example from Move Tool:
                  Shift = Lock move to the current inference direction ( VK_SHIFT )
                  Option = Toggles copy of selection ( VK_ALT )
                  Command =Toggles autofold of selection ( VK_COMMAND )

                  Control behaves differently depending on the order it is chosen...
                  262144 ( VK_CONTROL )
                  262403 = onMouseMove with LButtonDown THEN ( VK_CONTROL )
                  OR
                  262409 = onMouseMove with ( VK_CONTROL ) THEN LButtonDown

                  ( VK_CONTROL ) THEN LButtonDown will show a context menu...
                  LButtonDown THEN ( VK_CONTROL ) will NOT...

                  john

                  learn from the mistakes of others, you may not live long enough to make them all yourself...

                  1 Reply Last reply Reply Quote 0
                  • fredo6F Offline
                    fredo6
                    last edited by

                    Thanks again.

                    Then, with some luck, the following portable code should make it on PC and Mac

                    
                    def buttonLDown?(flags) ; flags & MK_LBUTTON == MK_LBUTTON ; end
                    def shiftDown?(flags) ; flags & CONSTRAIN_MODIFIER_MASK == CONSTRAIN_MODIFIER_MASK ; end   #shift
                    def ctrlDown?(flags) ; flags & COPY_MODIFIER_MASK == COPY_MODIFIER_MASK ; end              #Ctrl (PC) or Command (Mac)
                    def altDown?(flags) ; flags & ALT_MODIFIER_MASK == ALT_MODIFIER_MASK ; end                 #Alt (PC) or Ctrl(Mac)
                    
                    

                    Fredo

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      driven
                      last edited by

                      write a test with some puts and I'll test it...

                      john

                      learn from the mistakes of others, you may not live long enough to make them all yourself...

                      1 Reply Last reply Reply Quote 0
                      • fredo6F Offline
                        fredo6
                        last edited by

                        @driven said:

                        write a test with some puts and I'll test it...

                        john

                        Thanks in advance. I thought initially that the question was resolved somewhere in the forum, but could not find it (and it is anyway not described in the SU API doc).

                        Fredo

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Buy SketchPlus
                        Buy SUbD
                        Buy WrapR
                        Buy eBook
                        Buy Modelur
                        Buy Vertex Tools
                        Buy SketchCuisine
                        Buy FormFonts

                        Advertisement