Author |
Topic |
|
mitwhu
6 Posts |
Posted - 02/16/2013 : 16:38:37
|
I have a HP laptop. The touchpad for it is from Synaptics. With Synaptics driver, it could realize simple gesture functions, like scrolling... I tried S+, it is amazing and powerful, better and more stable then strokeit. However, each time when I use it, I have to use external mouse for right button stroking. Is there any way for touchpad to realize mouse gestures using S+? Like two fingers clicking = mouse right button clicking thanks |
|
Rob
USA
2615 Posts |
Posted - 02/16/2013 : 16:43:57
|
Unfortunately not at this time. You can use a key like Control or Alt as your stroke button as I'm sure you know, but S+ doesn't support any type of multi-touch functionality.
It's something I've started looking into, but it would be a while before anything like that is added; likely when S+ is rewritten since multi-touch would change everything about how S+ works. I'd like to create a separate touch version to start with as touch interfaces certainly are only going to become more prevalent, but I haven't really had the time to start digging into it yet. |
|
|
mitwhu
6 Posts |
Posted - 02/16/2013 : 16:55:03
|
Looking forward to the touchpad version release.I believe it would be a Great application. Thanks. |
|
|
Rob
USA
2615 Posts |
Posted - 02/24/2013 : 16:29:53
|
I stand corrected. Synaptics does have an SDK for accessing the TouchPad via COM. Their SDK samples don't include examples for multiple fingers, but in looking around on the net, I have found a couple of examples which demonstrate capturing multiple finger touches through the Synaptics driver.
I'm not making any promises, but I'm certainly going to see if it's something I can manage to get working |
|
|
Rob
USA
2615 Posts |
Posted - 02/24/2013 : 18:35:38
|
Indulge me. If S+ were to interface with a Synaptics TouchPad, how would you see using it? 2, 3 or 4 fingers (optional) would tell S+ to start capturing a gesture?
On my system, the default setup of the Synaptics software has 2 and 3 finger gestures already assigned (2 = scroll up/down, 3 = prev/next); if S+ were to use a 2 finger gesture to capture a S+ gesture, the 2-finger Synaptics gesture would either also happen or (if calls to the Synaptic acquire function work as I think they do) would only work in S+, leaving the 2-finger Synaptic gesture not able to work. Although, I could see leveraging the Cancel Delay in S+, so if you held 2 fingers down, S+ would capture, but if you let the Cancel Delay pass, control would be returned to the OS/Synaptic software and the scroll gesture should work fine.
I'm asking these questions because this would be entirely new functionality to S+ and mouse gesture programs (that I'm aware of) in general, so before I embark on trying anything like this, I want to get people's opinions and objections as to how this would function, especially in regards to keeping pretty much everything about the current functionality of S+ unchanged. I don't want to start coding anything, only to find out down the road that I should have considered something and now the whole thing is causing problems, etc.
In regards to how I would see this happening in S+ is that you would be able to select a stroke button (as it is now), and if a Synaptics TouchPad is present, be able to select 2, 3, or 4 fingers as the S+ TouchPad capture sequence ("stroke button").
So you could have a mouse plugged in and use the right button, and without changing any settings in S+, also be able to use a TouchPad 2,3, or 4 finger gesture to draw an S+ gesture. Everything about how S+ works would remain identical, the TouchPad event monitor would be a separate function in the code and would simply turn on the same flags that the mouse (or keyboard) hook does when the stroke button is pressed.
When either the stroke button is released, or the fingers are lifted from the TouchPad, the action would fire if a gesture is matched. Modifiers would behave the same, although mouse button modifiers would be a little cumbersome if you already have 3 fingers on the touch pad. I may be able to use extra fingers as modifiers, but I'm trying to keep it simple; however, I welcome all ideas as the last thing I want to do is design the code in a way which limits future enhancements.
For example, some people would like to have more than 1 gesture in S+ fire the same action. I'd never done nor thought of this when I was building S+, so now it's pretty much impossible to simply add that functionality (even though it would seem so easy) because it would require changing virtually everything.
So, if I'm going to look into TouchPad functionality, I want to make sure I hear what everyone thinks and would like to see. Granted, I may not incorporate everyone's requests, but I can at least be aware of all considerations so I don't code myself into a corner regarding TouchPad functionality in general. Note that I see in the code that the Synaptic driver can recognize a stylus as well; I don't have that hardware, so I wouldn't be able to add that at the time; if all went well with the TouchPad addition to S+, I would look into acquiring the hardware necessary to also work with a stylus.
I already see how this can be added to S+, and without too much complication (other than getting all the Synaptic code/references/etc. actually functioning in the S+ code). I've found sample code that provides the necessary proof of concept and understand how to detect the number of fingers present. Note that the TouchPad only reports extra finger count/state, not their X/Y/Z, so the first finger that touches is what drives the recognition; so there wouldn't be any kind of multiple-finger-gestures-per-finger type of functionality; the current S+ code wouldn't be able to support that anyway.
I'd like to hear what anyone has to say about this. Since I just got a laptop, this is of particular interest to me now |
|
|
Rob
USA
2615 Posts |
Posted - 02/25/2013 : 00:59:42
|
Good news! I've successfully integrated the Synaptics code into S+!
Of course, there is still much to do as it's very raw/crude/lacking of error handling...but I am able to successfully draw gestures be using 2 fingers down on the TouchPad. Although, since it goes through COM (the only way to interface the Synaptics driver), it's not as responsive as the mouse.
I should clarify, there's a slight lag when you first start a drawing. Honestly, I would imagine this is due to the Synaptics driver having a built in delay to prevent accidental multi-finger touches. The delay isn't very long (on my machine, anyway), but it is noticable. Once the initial delay is over, drawing is very smooth, just like with the mouse. But if you try to draw a complex gesture very quickly, you can lose the first part of the gesture. Basically, until the initial delay has passed, S+ isn't made aware of the TouchPad movements, so you have to touch fingers down and pause for a split second, then continue drawing. For simple gestures (straight lines) it doesn't really matter much at all since losing the first X pixels doesn't affect the recognition, but complex gestures will be affected.
Edit: Actually, you don't have to pause, just draw slowly to start, then the speed picks up as normal.
Another thing I've noticed is that while S+ can "acquire" the TouchPad (meaning, lock it so only S+ receives the input), S+ cannot do this until the fingers have been pressed and the call can be made (otherwise S+ would have to handle ALL TouchPad input and forward the events, etc.). However, due to the nature of the Synaptics driver, another program can still receive the initial finger-down event since the TouchPad event packets are broadcast simultaneously. So, on my machine, the Synaptics software uses 2-finger up/down as a scroll, but I've set S+ to capture 2-finger gestures. So 50% of the time, S+ gets the message first and captures future TouchPad events (so while drawing a gesture, the window below won't be scrolled by the Synaptics software), but the other 50%, S+ is drawing the gesture and Synaptics is scrolling the window at the same time. It's difficult to say if there will be a way around that.
Of course, I'm still in the initial phases of this and may find ways to improve or workaround these nuances.
|
|
|
mitwhu
6 Posts |
Posted - 02/25/2013 : 12:53:51
|
Exciting. Actually on my laptop, I disabled Synaptics 2-finger up/down scroll and only enabled the 'one finger linear scrolling from the right edge'. It wont conflict with 2-finger as stroke button in S+. If S+ could take over all the Synaptics work, I believe people would consider disabling conflictive functions in Synaptics or even without it. Anyway, I would like to try the beta version=) |
|
|
Rob
USA
2615 Posts |
Posted - 02/25/2013 : 13:10:36
|
You're in luck! I was just putting together some downloads to test out. I'm certain there will be bugs, but mostly relating to differing Synaptics hardware/software versions, etc.
I've tried to make it pretty resilient, but I know there will be compatibility issues, especially with older TouchPads which don't support multiple fingers, etc. I've only included 2 or 3 finger gestures as options since it seems that many TouchPads from several years back seem will support that while only newer support more fingers.
Again, use this at your own risk, but it's working fine for me so far (with my limited testing).
(Edit: removed links since there's a Beta download below) |
|
|
Rob
USA
2615 Posts |
Posted - 02/25/2013 : 13:18:31
|
Note that the canceling (letting it time out) of a TouchPad gesture doesn't behave like canceling a mouse button gesture. Since a TouchPad multiple finger gesture isn't considered anything by default by Windows (like a right mouse button equivalent), it doesn't make sense that letting the gesture time out should do anything other than stop capturing. |
|
|
Rob
USA
2615 Posts |
Posted - 02/25/2013 : 13:59:52
|
I've added the option to disable the Synaptics monitoring for people who have a TouchPad, but don't want S+ hooking into the events (to save resources, or to prevent interferece with other Synaptics-aware apps)
Also added a Movement Sensitivity field (percentage) in Preferences. This controls how slow or fast the mouse cursor moves while S+ is capturing a TouchPad gesture.
Those aren't in the downloads above, just mentioning for those watching the thread. |
|
|
Rob
USA
2615 Posts |
Posted - 02/25/2013 : 14:09:58
|
I've noticed that if you start moving with 1 finger down, then touch the second finger, it doesn't have the drawing lag. I'm guessing this is because the driver sees there's motion, so it doesn't pause to see if you're going to do a 2-finger tap. Just a guess, but still it's much quicker starting with a single finger and touching the second after you've started moving a little.
Note that for ignored windows, the mouse won't move if you try to draw a gesture (as it does with the mouse). This is because a 2-finger gesture by default isn't recognized as a mouse movement. When S+ captures the TouchPad, it forces mouse movements; but if the window is ignored, S+ will not capture and thus the cursor will not move (unless there's some other software which is allowing that to happen) |
|
|
Rob
USA
2615 Posts |
Posted - 03/01/2013 : 16:01:00
|
Has anyone used this functionality at all?
Anything to report, good or bad? |
|
|
Rob
USA
2615 Posts |
Posted - 03/01/2013 : 21:17:29
|
By the way, I have fixed the issue with S+ not being ready for capture on TouchPad gesture timeout, had to right-click once to reset S+. Not updated in downloads, but I have it fixed in my local code. |
|
|
mitwhu
6 Posts |
Posted - 03/01/2013 : 23:53:29
|
Sorry for my late report, I just tried v3. Generally, just as you mentioned, it has drawing lag, not as fluently as right button, sometimes even cannot draw gestures (I tried 1 finger down first, then touch the second finger way, but problem is still there). Maybe it is due to the old Synaptics driver. my laptop OS: windows xp sp3 Synaptics driver: 15.0.9.18 (what is your version?)
Anyway, thank you so much.
|
|
|
Rob
USA
2615 Posts |
Posted - 03/02/2013 : 10:13:26
|
I'm running v16.2.15 13Sep12.
I have found and fixed a couple other little issues which may have affected TouchPad stuff. I'll upload them later today.
If you notice it's not drawing at all, try disabling and re-enabling S+ and see if that corrects it. One of the issues I fixed was when a TouchPad gesture timed out, S+ wasn't left in a proper state, until you right-clicked the mouse (or disabled/re-enabled) which reset certain internal variables.
I've also fixed an issue with holding the ignore key and using the TouchPad, wasn't working as it should.
Both of those changes will be updated later. |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 00:18:22
|
Unfortunately, on my laptop (HP dv6-6051er) does not work ... either with two fingers or with three. I tried to disable scrolling in the driver and restarted StrokesPlus - same thing. More precisely, in general it is impossible to draw a gesture. I'm running Synaptics 16.2.21 25Oct12 |
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 00:55:16
|
Hmm, I have a HP dv7. I'll have to make a debug version for you to run, to see if we can figure out what's going for you. Are you running 64-bit or 32-bit? Signed or unsigned? |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 02:02:40
|
I'm running S+ signed 64-bit |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 02:28:34
|
By the way, sometimes the gesture works, but casually and subtly ... Probably requires a specific version of the drivers? .. In my version two-finger tap triggers the context menu, that is working as right mouse clicks |
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 02:47:07
|
The drivers shouldn't make a difference. S+ is interfacing the Synaptics software via COM, so the interfaces and functionality shouldn't be affected. I have a 3-year old laptop with a TouchPad and very old drivers that S+ can interface (though, that TouchPad doesn't support multi-fingers, so S+ can't work there).
For the sake of testing, try disabling all Synaptics gestures and see how S+ behaves. I've linked to a debug version of S+ which will output a lot of stuff to the debugger. You can use DebugView to see the messages. There will likely be a lot of messages, but you can save and email to me: rob{}strokesplus.com. Just clear the log, attempt to do one simple gesture on the TouchPad (fingers down, draw a line, fingers up), then save the file and send to me.
DebugView: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
Beta 4 Debug (signed, 64-bit): http://www.strokesplus.com/files/StrokesPlus_2.6.4_x64_Signed_Beta4_Debug.zip
|
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 02:59:34
|
Also, is there a difference when you draw slowly?
Note: the debug version should not be used for normal use as it will be much slower. |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 03:28:55
|
Yes. When I drawing slowly, some gesture appears, but not more than |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 03:48:28
|
I sent you debug log |
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 15:00:37
|
Thanks! Still looking through the logs, but I have found one bug for sure. If you touch the pad with the right number of fingers (2 or 3) but then add or remove a finger, S+ was still treating some of the TouchPad events as though you were trying to draw a gesture. Not sure sure if it was harming anything, but it shouldn't behave that way.
Also, I see in the beginning of your logs that you started drawing a gesture, but the Cancel Timer fired; this also happens towards the end of your log. What is your Cancel Delay (in Preferences) set to? You may want to try increasing that value to 2000 for testing purposes and see if it has any effect; as it seems both of your valid gesture attempts timed out.
I have several changes to the core TouchPad logic, will post an updated Beta 5 soon. |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/03/2013 : 22:59:55
|
Unfortunately, not much change. Cancel Delay (in Preferences) is set to 350 ms. If I do the 2000-3500 ms, the situation is a little better, but it is impossible to enjoy. One more thing, when I draw gesture, the line length is not more than 1 cm, further fails to draw the no more complex gestures. In addition, it is necessary to draw a gesture very slow, otherwise it will not appear. |
|
|
mitwhu
6 Posts |
Posted - 03/03/2013 : 23:09:23
|
The same situation as Loamaro. |
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 23:37:00
|
Very odd. I will keep trying things! |
|
|
Rob
USA
2615 Posts |
Posted - 03/03/2013 : 23:51:32
|
I'll work on putting together a debug version that writes directly to a log file so I can see what's happening for you two.
It's very frustrating that it works fine for me. The other issue is that the SDK from Synaptics, including the help and sample code is from 2004; that's the latest they published.
It seems like it's not very streamlined, more like legacy support. For example, my TouchPad supports multiple-finger gestures, but the COM interface from 2004 doesn't report on more than one finger's movement. Meaning, the primary (first) finger's position is reported, but I can only tell if other fingers are present, but not their coordinates. Not that it's important for S+, but that fact means there's a difference in their driver and what is exposed to COM. Ideally, I'd like to interface the driver directly, not through COM, which is very inefficient and possibly the cause of the problem. My laptop is brand new, Intel i7 8 core, 16GB DDR3 RAM, etc., perhaps the speed of my system overcomes the inefficiency of interfacing COM.
Just random guesses, although I did notice something odd when I was testing earlier regarding FingerState reported from Synaptics; it may be what's causing your issues. I intended to look into it, but it would mean rewriting the Synaptics function so I wanted to try making other adjustments first. But if you are both experiencing a similar problem, I'll just recode the function from scratch, taking a completely different approach. |
|
|
Rob
USA
2615 Posts |
Posted - 03/04/2013 : 00:58:55
|
Wow, I just realized the threshold logic was working in reverse! Meaning, it was requiring that your fingers had moved LESS than the threshold before firing a movement, when it was supposed to fire a movement if the threshold was reached or greater than. I'm pretty sure this is what has caused the problem. I'm sure different TouchPad hardware have different resolutions, which may be why mine was working but not you guys. I dropped the threshold to 5 (I originally defaulted to 20 in the code) and my system was acting the same. Then I looked at the logic and realized the mistake; I've set the threshold to 1, meaning pretty much any TouchPad movement will be counted and it seems to not only work consistently, but is smoother and doesn't have the starting lag (for me, that is).
I've added a setting in StrokesPlus.xml (you'll have to click OK in Settings or exit S+ for it to show up in StrokesPlus.xml) to control the threshold, just search for "TouchPadThresholdDelta":<TouchPadThresholdDelta>1</TouchPadThresholdDelta> I added the threshold check to hopefully reduce processing during TouchPad movements, but I don't know if it's worth it, so setting to 1 should be fine. You can increase it if you'd like to see how it behaves, but at this point I recommend leaving it set to 1 and seeing how it runs now.
Beta 6: http://www.strokesplus.com/forum/topic/637/beta-v6-264-32-bit-and-64-bit |
|
|
Rob
USA
2615 Posts |
Posted - 03/04/2013 : 01:03:42
|
You may need to reduce the Movement Sensitivity % since mouse movement is being fired on each TouchPad movement.
Let me know what Movement Sensitivity feels right for you two, so I can compare with mine and maybe adjust the code to make the sensitivity less...sensitive given the more frequent movement processing. |
|
|
Rob
USA
2615 Posts |
Posted - 03/04/2013 : 01:21:28
|
I made a quick update to the Beta 6 downloads at the time of this post (Eastern U.S. Time) to fix the threshold checks again, it should now work well in all directions. |
|
|
Loamaro
Russia
14 Posts |
Posted - 03/04/2013 : 01:43:21
|
Hurrah, it works!
Um ... maybe too hard and fast, but probably need to adjust the settings touchpad.
P.S. In connection with this, a new question, it might be premature and not for this thread: why not add in S + ability to work with individual settings profiles? .. For example, I would set up a profile for Touchpad: all gestures while pressing the "alt" (ctrl, shift) - and easily switch between profiles "normal" and "touchpad". |
|
|
Rob
USA
2615 Posts |
|
Loamaro
Russia
14 Posts |
Posted - 03/04/2013 : 02:58:49
|
Yes! If you reduce the sensitivity, that works better (sharper). However, you can get used to high speed: I think it is a matter of habit :) |
|
|
Korbi
3 Posts |
Posted - 12/22/2017 : 13:25:52
|
Hi! I would love to make Strokes Plus work on my synapsis touchpad, but I somehow cant figure out how to do this. In the control panel my touchpad is listed as a precision touchpad, which means it is able to perform gestures with 3 fingers. I disabled all default gestures and set strokesplus up to use 3 fingers. I played around with the sensitvity and all, but nothing worked. I guess the problem is my mouse pointer is not even moving when i am using 3 fingers... Could you point me in the right direction on how to make this work?
Cheers, Korbi
My system configuration: Windows 10, Strokesplus v2.8.6.4, Synapsis Clickpad Driver v19.3.8.22 |
|
|
Rob
USA
2615 Posts |
Posted - 12/22/2017 : 13:59:02
|
To be honest, I've given up on supporting touchpads. There are many different manufacturers and they don't give out nice API/SDKs for developers to work with. The only one that even exists for Synaptics is from 2001 or something. It's quite possible they've stopped even installing that COM component with their drivers anymore. |
|
|
Korbi
3 Posts |
Posted - 12/23/2017 : 01:47:56
|
Oh this is a pitty. Strokesplus on a touchpad would be a game changer. I always have to connect a mouse because I miss gestures in about 2 seconds :) Seriously hope you change your mind on this :D |
|
|
Rob
USA
2615 Posts |
Posted - 12/23/2017 : 03:34:45
|
It's not a matter of giving up, but literally without an SDK or published APIs, I simply cannot interface the hardware. It's really unfortunate, but I think they just don't want to have people using their stuff without getting paid or something. |
|
|
Korbi
3 Posts |
Posted - 12/23/2017 : 11:39:16
|
Ok, yeah I get it. I did a little bit of research and it seems like they even took down the old SDK now. The last answer in this thread https://stackoverflow.com/questions/16442480/synaptics-touchpad-signature points out that they changed some of the values in windows 10, which might be the problem I am facing ... Anyhow I completly get why you dont continue this and really apreciate the work you put into this great tool! |
|
|
Rob
USA
2615 Posts |
Posted - 12/23/2017 : 15:32:31
|
Yeah, I have that original SDK still, but it's very basic. In the end, you're only able to receive data that Synaptics chooses to send, unlike mouse and keyboard input. So if they decide to no longer send the hardware level raw input data with which to work, the only alternative would be for me to build my own device driver to access the touch pad directly and uninstall their driver, which I certainly don't have the experience nor interest in doing! |
|
|
Rob
USA
2615 Posts |
Posted - 12/23/2017 : 15:37:20
|
But the other part is that there are multiple touch pad manufacturers as well. I've received requests from people to support their touch pad, but they don't publish any information on how to access anything. So in the end, it's one of those things that "Here's the Synaptics thing, if it works, great, if not, oh well". Or just leave it out altogether as it ends up making my software look bad when it's out of my control. Dunno, still on the fence about keeping it in the new version of S+, but we'll see.
I did actually build it into the new version when I started it like a year ago or so, and it was working okay. However, I have an Asus laptop now which has a non-Synaptics touch pad, so I can't really do anything anyway. But that furthers my point about the fragmentation across touch pads and is it worth introducing something which only works for a subset of people...and even those are subject to stop working at any time if Synaptics decides to change their code, since they don't provide an official API for which they guarantee compatibility.
I'd probably be better off exposing an API from S+ and if someone wants to build/maintain a touch pad plug-in that can send the commands to S+, then great. But I'm not sure exactly how challenging that would be; I'll keep it in mind, though. |
|
|
|
Topic |
|
|
|