From ac85254542ab60e60c67a6168539982b82bff616 Mon Sep 17 00:00:00 2001 From: kuuube Date: Wed, 24 Mar 2021 11:43:51 -0400 Subject: [PATCH 1/4] Add tooltips --- DevocubFilters/AntiChatter.cs | 206 +++++++++++++++++++++++++++++++-- HawkuFilters/NoiseReduction.cs | 30 ++++- HawkuFilters/Smoothing.cs | 10 +- 3 files changed, 233 insertions(+), 13 deletions(-) diff --git a/DevocubFilters/AntiChatter.cs b/DevocubFilters/AntiChatter.cs index 6172812..caef59d 100644 --- a/DevocubFilters/AntiChatter.cs +++ b/DevocubFilters/AntiChatter.cs @@ -17,38 +17,224 @@ public Antichatter(ITimer scheduler) : base(scheduler) GetMMScale(); } - [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f)] + [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f), ToolTip + ("Cursor position smoothing filter\n" + + "- Smoothing filter adds latency to the input, so don't enable it if you want to have the lowest possible input lag.\n" + + "- On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + + "- You can test out different filter values, but the recommended maximum for osu! is around 50 milliseconds.\n" + + "- Filter latency values lower than 4 milliseconds aren't recommended. Its better to disable the smoothing filter.\n" + + "- You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems.")] public float Latency { set => this.latency = Math.Clamp(value, 0, 1000); get => this.latency; } - [Property("Antichatter Strength"), DefaultPropertyValue(3f)] + [Property("Antichatter Strength"), DefaultPropertyValue(3f), ToolTip + ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + + "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + + "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + + "Formula for smoothing is:\n" + + "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + + "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + + "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + + "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + + "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + + "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + + "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + + "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + + "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + + "Example Settings:\n" + + "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + + "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + + "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + + "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + + "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + + "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] public float AntichatterStrength { set; get; } - [Property("Antichatter Multiplier"), DefaultPropertyValue(1f)] + [Property("Antichatter Multiplier"), DefaultPropertyValue(1f), ToolTip + ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + + "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + + "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + + "Formula for smoothing is:\n" + + "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + + "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + + "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + + "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + + "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + + "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + + "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + + "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + + "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + + "Example Settings:\n" + + "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + + "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + + "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + + "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + + "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + + "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] public float AntichatterMultiplier { set; get; } - [Property("Antichatter Offset X")] + [Property("Antichatter Offset X"), ToolTip + ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + + "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + + "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + + "Formula for smoothing is:\n" + + "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + + "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + + "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + + "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + + "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + + "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + + "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + + "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + + "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + + "Example Settings:\n" + + "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + + "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + + "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + + "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + + "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + + "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] public float AntichatterOffsetX { set; get; } - [Property("Antichatter Offset Y"), DefaultPropertyValue(1f)] + [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip + ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + + "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + + "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + + "Formula for smoothing is:\n" + + "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + + "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + + "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + + "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + + "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + + "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + + "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + + "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + + "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + + "Example Settings:\n" + + "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + + "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + + "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + + "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + + "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + + "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] public float AntichatterOffsetY { set; get; } - [BooleanProperty("Prediction", "")] + [BooleanProperty("Prediction", ""), ToolTip + ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + + "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + + "Formula for prediction is:\n" + + "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + "Where x is pen speed. And y(x) is strength of prediction\n\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + + "Example Settings:\n" + + "Simple+:\n" + + "Straight or Smooth preset for smoothing +\n" + + "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + + "Straight+:\n" + + "Straight preset for smoothing +\n" + + "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + + "Fun:\n" + + "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + + "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] public bool PredictionEnabled { set; get; } - [Property("Prediction Strength"), DefaultPropertyValue(1.1f)] + [Property("Prediction Strength"), DefaultPropertyValue(1.1f), ToolTip + ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + + "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + + "Formula for prediction is:\n" + + "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + "Where x is pen speed. And y(x) is strength of prediction\n\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + + "Example Settings:\n" + + "Simple+:\n" + + "Straight or Smooth preset for smoothing +\n" + + "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + + "Straight+:\n" + + "Straight preset for smoothing +\n" + + "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + + "Fun:\n" + + "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + + "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] public float PredictionStrength { set; get; } - [Property("Prediction Sharpness"), DefaultPropertyValue(1f)] + [Property("Prediction Sharpness"), DefaultPropertyValue(1f), ToolTip + ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + + "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + + "Formula for prediction is:\n" + + "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + "Where x is pen speed. And y(x) is strength of prediction\n\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + + "Example Settings:\n" + + "Simple+:\n" + + "Straight or Smooth preset for smoothing +\n" + + "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + + "Straight+:\n" + + "Straight preset for smoothing +\n" + + "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + + "Fun:\n" + + "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + + "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] public float PredictionSharpness { set; get; } - [Property("Prediction Offset X"), DefaultPropertyValue(3f)] + [Property("Prediction Offset X"), DefaultPropertyValue(3f), ToolTip + ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + + "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + + "Formula for prediction is:\n" + + "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + "Where x is pen speed. And y(x) is strength of prediction\n\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + + "Example Settings:\n" + + "Simple+:\n" + + "Straight or Smooth preset for smoothing +\n" + + "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + + "Straight+:\n" + + "Straight preset for smoothing +\n" + + "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + + "Fun:\n" + + "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + + "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] public float PredictionOffsetX { set; get; } - [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f)] + [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f), ToolTip + ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + + "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + + "Formula for prediction is:\n" + + "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + "Where x is pen speed. And y(x) is strength of prediction\n\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + + "Example Settings:\n" + + "Simple+:\n" + + "Straight or Smooth preset for smoothing +\n" + + "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + + "Straight+:\n" + + "Straight preset for smoothing +\n" + + "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + + "Fun:\n" + + "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + + "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] public float PredictionOffsetY { set; get; } private const float THRESHOLD = 0.9f; diff --git a/HawkuFilters/NoiseReduction.cs b/HawkuFilters/NoiseReduction.cs index 17cecd2..69267cf 100644 --- a/HawkuFilters/NoiseReduction.cs +++ b/HawkuFilters/NoiseReduction.cs @@ -14,7 +14,20 @@ public NoiseReduction() GetMMScale(); } - [Property("Buffer"), DefaultPropertyValue(10)] + [Property("Buffer"), DefaultPropertyValue(10), ToolTip + ("Noise Reduction Filter\n" + + "WARNING! This filter will cause more latency on smaller tablet areas (<20 mm), so consider using a larger area to increase the performance.\n\n" + + "Buffer\n" + + "Buffer value is how many of the last pen positions will be stored in the buffer.\n" + + "Lower buffer value means lower latency, but lower noise reduction.\n" + + "At 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\n" + + "Threshold\n" + + "Threshold value sets the movement distance threshold per pen position report.\n" + + "The amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\n" + + "Noise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\n" + + "At 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\n" + + "Recommendations\n" + + "Recommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm.")] public int Samples { set @@ -25,7 +38,20 @@ public int Samples get => this.samples; } - [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f)] + [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f), ToolTip + ("Noise Reduction Filter\n" + + "WARNING! This filter will cause more latency on smaller tablet areas (<20 mm), so consider using a larger area to increase the performance.\n\n" + + "Buffer\n" + + "Buffer value is how many of the last pen positions will be stored in the buffer.\n" + + "Lower buffer value means lower latency, but lower noise reduction.\n" + + "At 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\n" + + "Threshold\n" + + "Threshold value sets the movement distance threshold per pen position report.\n" + + "The amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\n" + + "Noise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\n" + + "At 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\n" + + "Recommendations\n" + + "Recommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm.")] public float DistanceThreshold { set diff --git a/HawkuFilters/Smoothing.cs b/HawkuFilters/Smoothing.cs index f99f453..a5e0a2d 100644 --- a/HawkuFilters/Smoothing.cs +++ b/HawkuFilters/Smoothing.cs @@ -15,7 +15,15 @@ public Smoothing(ITimer scheduler) : base(scheduler) GetMMScale(); } - [SliderProperty("Latency", 0.0f, 1000.0f, 2.0f), DefaultPropertyValue(2f)] + [SliderProperty("Latency", 0.0f, 1000.0f, 2.0f), DefaultPropertyValue(2f), ToolTip + ("Smoothing Filter\n" + + "Smoothing filter adds latency to the input, so don't enable it if you want the lowest possible input latency.\n\n" + + + "Recommendations\n" + + "On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + + "You can test out different filter values, but recommended maximum for osu! is around 50 milliseconds.\n" + + "Filter latency value lower than 4 milliseconds isn't recommended. Its better to just disable the smoothing filter.\n" + + "You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems.")] public float Latency { set; get; } private const float THRESHOLD = 0.63f; From 65b2e931fc5ac56d660c564f9d50b5c1b95c3005 Mon Sep 17 00:00:00 2001 From: kuuube Date: Wed, 24 Mar 2021 12:17:19 -0400 Subject: [PATCH 2/4] Clean up tooltips --- DevocubFilters/AntiChatter.cs | 212 +++------------------------------ HawkuFilters/NoiseReduction.cs | 31 +---- 2 files changed, 18 insertions(+), 225 deletions(-) diff --git a/DevocubFilters/AntiChatter.cs b/DevocubFilters/AntiChatter.cs index caef59d..7d00d34 100644 --- a/DevocubFilters/AntiChatter.cs +++ b/DevocubFilters/AntiChatter.cs @@ -12,229 +12,47 @@ namespace TabletDriverFilters.Devocub [PluginName("Devocub Antichatter")] public class Antichatter : Interpolator { + private const string Latency_Tooltip = "Cursor position smoothing filter\n - Smoothing filter adds latency to the input, so don't enable it if you want to have the lowest possible input lag.\n - On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n - You can test out different filter values, but the recommended maximum for osu! is around 50 milliseconds.\n - Filter latency values lower than 4 milliseconds aren't recommended. Its better to disable the smoothing filter.\n - You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems."; + private const string Antichatter_Tooltip = "Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\nAntichatter in its primary form is useful for tablets which don't have any hardware smoothing.\nAntichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\nFormula for smoothing is:\ny(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\nWhere x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\nStrength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\nMultiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\nOffset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\nlower values stronger and activate stronger smoothing earlier in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\nOffset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\nIf value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\nOffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\nExample Settings:\nSimple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\nStraight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\nSmooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\nChange OffsetX between 0-2 to switch between stickiness and smooth.\nIncrease Strength to 4-10 to get harper. Decrease Strength to 1-2 to get more smoothing.\n\nLow latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency)."; + private const string Prediction_Tooltip = "Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\nLow values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\nIn sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\nFormula for prediction is:\ny(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\nWhere x is pen speed. And y(x) is strength of prediction\n\nStrength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\nSharpness : changes the width of the Strength.\nOffset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\nOffset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\nExample Settings:\nSimple+:\nStraight or Smooth preset for smoothing\nStrength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\nStraight+:\nStraight preset for smoothing\nStrength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\nFun:\nSmoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1\nPrediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1"; + public Antichatter(ITimer scheduler) : base(scheduler) { GetMMScale(); } - [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f), ToolTip - ("Cursor position smoothing filter\n" + - "- Smoothing filter adds latency to the input, so don't enable it if you want to have the lowest possible input lag.\n" + - "- On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + - "- You can test out different filter values, but the recommended maximum for osu! is around 50 milliseconds.\n" + - "- Filter latency values lower than 4 milliseconds aren't recommended. Its better to disable the smoothing filter.\n" + - "- You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems.")] + [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f), ToolTip(Latency_Tooltip)] public float Latency { set => this.latency = Math.Clamp(value, 0, 1000); get => this.latency; } - [Property("Antichatter Strength"), DefaultPropertyValue(3f), ToolTip - ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + - "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + - "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + - "Formula for smoothing is:\n" + - "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + - "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + - "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + - "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + - "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + - "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + - "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + - "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + - "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + - "Example Settings:\n" + - "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + - "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + - "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + - "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + - "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + - "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] + [Property("Antichatter Strength"), DefaultPropertyValue(3f), ToolTip(Antichatter_Tooltip)] public float AntichatterStrength { set; get; } - [Property("Antichatter Multiplier"), DefaultPropertyValue(1f), ToolTip - ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + - "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + - "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + - "Formula for smoothing is:\n" + - "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + - "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + - "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + - "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + - "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + - "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + - "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + - "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + - "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + - "Example Settings:\n" + - "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + - "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + - "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + - "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + - "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + - "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] + [Property("Antichatter Multiplier"), DefaultPropertyValue(1f), ToolTip(Antichatter_Tooltip)] public float AntichatterMultiplier { set; get; } - [Property("Antichatter Offset X"), ToolTip - ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + - "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + - "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + - "Formula for smoothing is:\n" + - "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + - "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + - "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + - "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + - "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + - "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + - "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + - "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + - "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + - "Example Settings:\n" + - "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + - "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + - "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + - "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + - "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + - "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] + [Property("Antichatter Offset X"), ToolTip(Antichatter_Tooltip)] public float AntichatterOffsetX { set; get; } - [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip - ("Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + - "Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + - "Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\n" + - "Formula for smoothing is:\n" + - "y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + - "Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\n" + - "Strength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + - "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + - "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + - "lower values stronger and activate stronger smoothing earlier (in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + - "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + - "If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\n" + - "OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\n" + - "Example Settings:\n" + - "Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\n" + - "Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\n" + - "Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + - "Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + - "Increase Strength to 4-10 to get sharper. Decrease Strength to 1-2 to get more smoothing.\n\n" + - "Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency).")] + [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip(Antichatter_Tooltip)] public float AntichatterOffsetY { set; get; } - [BooleanProperty("Prediction", ""), ToolTip - ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + - "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + - "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + - "Formula for prediction is:\n" + - "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + - "Where x is pen speed. And y(x) is strength of prediction\n\n" + - "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + - "Sharpness : changes the width of the Strength.\n" + - "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + - "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + - "Example Settings:\n" + - "Simple+:\n" + - "Straight or Smooth preset for smoothing +\n" + - "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + - "Straight+:\n" + - "Straight preset for smoothing +\n" + - "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + - "Fun:\n" + - "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + - "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] - public bool PredictionEnabled { set; get; } + [BooleanProperty("Prediction", ""), ToolTip(Prediction_Tooltip)] - [Property("Prediction Strength"), DefaultPropertyValue(1.1f), ToolTip - ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + - "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + - "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + - "Formula for prediction is:\n" + - "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + - "Where x is pen speed. And y(x) is strength of prediction\n\n" + - "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + - "Sharpness : changes the width of the Strength.\n" + - "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + - "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + - "Example Settings:\n" + - "Simple+:\n" + - "Straight or Smooth preset for smoothing +\n" + - "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + - "Straight+:\n" + - "Straight preset for smoothing +\n" + - "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + - "Fun:\n" + - "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + - "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] + public bool PredictionEnabled { set; get; } + [Property("Prediction Strength"), DefaultPropertyValue(1.1f), ToolTip(Prediction_Tooltip)] public float PredictionStrength { set; get; } - [Property("Prediction Sharpness"), DefaultPropertyValue(1f), ToolTip - ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + - "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + - "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + - "Formula for prediction is:\n" + - "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + - "Where x is pen speed. And y(x) is strength of prediction\n\n" + - "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + - "Sharpness : changes the width of the Strength.\n" + - "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + - "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + - "Example Settings:\n" + - "Simple+:\n" + - "Straight or Smooth preset for smoothing +\n" + - "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + - "Straight+:\n" + - "Straight preset for smoothing +\n" + - "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + - "Fun:\n" + - "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + - "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] + [Property("Prediction Sharpness"), DefaultPropertyValue(1f), ToolTip(Prediction_Tooltip)] public float PredictionSharpness { set; get; } - [Property("Prediction Offset X"), DefaultPropertyValue(3f), ToolTip - ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + - "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + - "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + - "Formula for prediction is:\n" + - "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + - "Where x is pen speed. And y(x) is strength of prediction\n\n" + - "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + - "Sharpness : changes the width of the Strength.\n" + - "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + - "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + - "Example Settings:\n" + - "Simple+:\n" + - "Straight or Smooth preset for smoothing +\n" + - "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + - "Straight+:\n" + - "Straight preset for smoothing +\n" + - "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + - "Fun:\n" + - "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + - "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] + [Property("Prediction Offset X"), DefaultPropertyValue(3f), ToolTip(Prediction_Tooltip)] public float PredictionOffsetX { set; get; } - [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f), ToolTip - ("Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\n" + - "Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + - "In sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\n" + - "Formula for prediction is:\n" + - "y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + - "Where x is pen speed. And y(x) is strength of prediction\n\n" + - "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + - "Sharpness : changes the width of the Strength.\n" + - "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + - "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\n" + - "Example Settings:\n" + - "Simple+:\n" + - "Straight or Smooth preset for smoothing +\n" + - "Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\n" + - "Straight+:\n" + - "Straight preset for smoothing +\n" + - "Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\n" + - "Fun:\n" + - "Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1 +\n" + - "Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1")] + [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f), ToolTip(Prediction_Tooltip)] public float PredictionOffsetY { set; get; } private const float THRESHOLD = 0.9f; diff --git a/HawkuFilters/NoiseReduction.cs b/HawkuFilters/NoiseReduction.cs index 69267cf..a6bf7b7 100644 --- a/HawkuFilters/NoiseReduction.cs +++ b/HawkuFilters/NoiseReduction.cs @@ -9,25 +9,13 @@ namespace OpenTabletDriver.Plugin [PluginName("Hawku Noise Reduction")] public class NoiseReduction : IFilter { + private const string Noiserecduction_tooltip = "Noise Reduction Filter\nWARNING! This filter will cause more latency on smaller tablet areas(<20 mm), so consider using a larger area to increase the performance.\n\nBuffer\nBuffer value is how many of the last pen positions will be stored in the buffer.\nLower buffer value means lower latency, but lower noise reduction.\nAt 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\nThreshold\nThreshold value sets the movement distance threshold per pen position report.\nThe amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\nNoise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\nAt 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\nRecommendations\nRecommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm."; public NoiseReduction() { GetMMScale(); } - [Property("Buffer"), DefaultPropertyValue(10), ToolTip - ("Noise Reduction Filter\n" + - "WARNING! This filter will cause more latency on smaller tablet areas (<20 mm), so consider using a larger area to increase the performance.\n\n" + - "Buffer\n" + - "Buffer value is how many of the last pen positions will be stored in the buffer.\n" + - "Lower buffer value means lower latency, but lower noise reduction.\n" + - "At 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\n" + - "Threshold\n" + - "Threshold value sets the movement distance threshold per pen position report.\n" + - "The amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\n" + - "Noise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\n" + - "At 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\n" + - "Recommendations\n" + - "Recommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm.")] + [Property("Buffer"), DefaultPropertyValue(10), ToolTip(Noiserecduction_tooltip)] public int Samples { set @@ -38,20 +26,7 @@ public int Samples get => this.samples; } - [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f), ToolTip - ("Noise Reduction Filter\n" + - "WARNING! This filter will cause more latency on smaller tablet areas (<20 mm), so consider using a larger area to increase the performance.\n\n" + - "Buffer\n" + - "Buffer value is how many of the last pen positions will be stored in the buffer.\n" + - "Lower buffer value means lower latency, but lower noise reduction.\n" + - "At 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\n" + - "Threshold\n" + - "Threshold value sets the movement distance threshold per pen position report.\n" + - "The amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\n" + - "Noise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\n" + - "At 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\n" + - "Recommendations\n" + - "Recommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm.")] + [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f), ToolTip(Noiserecduction_tooltip)] public float DistanceThreshold { set From 022a827b7b7c6edbd437242e25f3756e9c0bcfd7 Mon Sep 17 00:00:00 2001 From: X9VoiD Date: Thu, 25 Mar 2021 16:09:07 +0800 Subject: [PATCH 3/4] Fix formatting --- DevocubFilters/AntiChatter.cs | 73 ++++++++++++++++++++++++++++++---- HawkuFilters/NoiseReduction.cs | 22 ++++++++-- HawkuFilters/Smoothing.cs | 20 +++++----- 3 files changed, 95 insertions(+), 20 deletions(-) diff --git a/DevocubFilters/AntiChatter.cs b/DevocubFilters/AntiChatter.cs index 7d00d34..69a6d3d 100644 --- a/DevocubFilters/AntiChatter.cs +++ b/DevocubFilters/AntiChatter.cs @@ -12,32 +12,89 @@ namespace TabletDriverFilters.Devocub [PluginName("Devocub Antichatter")] public class Antichatter : Interpolator { - private const string Latency_Tooltip = "Cursor position smoothing filter\n - Smoothing filter adds latency to the input, so don't enable it if you want to have the lowest possible input lag.\n - On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n - You can test out different filter values, but the recommended maximum for osu! is around 50 milliseconds.\n - Filter latency values lower than 4 milliseconds aren't recommended. Its better to disable the smoothing filter.\n - You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems."; - private const string Antichatter_Tooltip = "Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\nAntichatter in its primary form is useful for tablets which don't have any hardware smoothing.\nAntichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n\nFormula for smoothing is:\ny(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\nWhere x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n\nStrength : Is strength, useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\nMultiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\nOffset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\nlower values stronger and activate stronger smoothing earlier in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\nOffset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\nIf value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing x10 (and latency).\nOffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n\nExample Settings:\nSimple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n\nStraight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn’t good for high hovering.\n\nSmooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\nChange OffsetX between 0-2 to switch between stickiness and smooth.\nIncrease Strength to 4-10 to get harper. Decrease Strength to 1-2 to get more smoothing.\n\nLow latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency)."; - private const string Prediction_Tooltip = "Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, help with small movements,\nLow values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\nIn sum cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n\nFormula for prediction is:\ny(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\nWhere x is pen speed. And y(x) is strength of prediction\n\nStrength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\nSharpness : changes the width of the Strength.\nOffset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\nOffset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n\nExample Settings:\nSimple+:\nStraight or Smooth preset for smoothing\nStrength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n\nStraight+:\nStraight preset for smoothing\nStrength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n\nFun:\nSmoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1\nPrediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1"; + private const string LATENCY_TOOLTIP = + "Smoothing latency\n" + + " - Smoothing filter adds latency to the input, so don't enable it if you want to have the lowest possible input lag.\n" + + " - On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + + " - You can test out different filter values, but the recommended maximum for osu! is around 50 milliseconds.\n" + + " - Filter latency values lower than 4 milliseconds aren't recommended. Its better to disable the smoothing filter.\n" + + " - You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems."; + private const string ANTICHATTER_TOOLTIP = + "Antichatter is meant to prevent cursor chattering/rattling/shaking/trembling when the pen doesn't move.\n" + + " - Antichatter in its primary form is useful for tablets which don't have any hardware smoothing.\n" + + " - Antichatter uses smoothing. Latency and Frequency values do have an effect on antichatter settings.\n" + + "\n" + + "Formula for smoothing is:\n" + + " y(x) = (x + OffsetX)^(Strength*-1)*Multiplier+OffsetY\n" + + " - Where x is pen speed. And y(x) is the smoothing value. Slower speed = more smoothing. Faster speed = less smoothing.\n" + + "\n" + + "Strength : Useful values are from 1 up to 10. Higher values make smoothing sharper, lower are smoother.\n" + + "Multiplier : Zooms in and zooms out the plot. Useful values are from 1 up to 1000. Makes smoothing softer. Default value is 1, which causes no change.\n" + + "Offset X : Moves the plot to the right. Negative values move the plot to the left. Higher values make smoothing weaker,\n" + + " lower values stronger and activate stronger smoothing earlier in terms of cursor speed). Useful values are from -1 to 2. Default values is 0.\n" + + "Offset Y : Moves the plot up. Useful values are from roughly -1 up to 10. If the Y value of smoothing is near 0 for any given point then it provides almost raw data with lowest delay.\n" + + " If value is near 1 then it's usual smoothing, also it defines minimal amount of smoothing. OffsetY 10 will make smoothing 10 times stronger.\n" + + " OffsetY 0.5 will make smoothing roughly twice as weak (and latency will be roughly half), 0.3 roughly one third weaker, etc. The default value is 1.\n" + + "\n" + + "Example Settings:\n" + + " - Simple: Latency 5-50 ms, Strength 2-3, Multiplier 1, OffsetX 0, OffsetY 1.\n" + + "\n" + + " - Straight: Latency 20-40ms, Strength 20, Multiplier 1, OffsetX 0.7, OffsetY 0.6. This preset isn't good for high hovering.\n" + + "\n" + + " - Smooth: Latency ~10 ms, Strength 3, Multiplier 100, OffsetX 1.5, OffsetY 1.\n" + + " Change OffsetX between 0-2 to switch between stickiness and smooth.\n" + + " Increase Strength to 4-10 to get harper. Decrease Strength to 1-2 to get more smoothing.\n" + + "\n" + + " - Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency)."; + private const string Prediction_Tooltip = + "Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, helps with small movements,\n" + + " Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + + " In some cases, cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n" + + "\n" + + "Formula for prediction is:\n" + + " y(x) = 1/cosh((x-OffsetX)*Sharpness)*Strength+OffsetY\n" + + " - Where x is pen speed. And y(x) is strength of prediction\n" + + "\n" + + "Strength : is max of peak of prediction. Useful values are from 0 to 2, or up to 3-4 depending on latency.\n" + + "Sharpness : changes the width of the Strength.\n" + + "Offset X : center of the prediction's peak. Useful values are from 0.5 up to 5-7, Increasing this value will shift the cursor speed up on bigger movements.\n" + + "Offset Y : Moves the plot up/down (positive/negative values). Also defines the minimum amount of prediction.\n" + + "\n" + + "Example Settings:\n" + + " Simple+:\n" + + " Straight or Smooth preset for smoothing\n" + + " Strength 1-3 (for 5-50 ms respectively), Sharpness 1, OffsetX 0.8, OffsetY 0\n" + + "\n" + + " Straight+:\n" + + " Straight preset for smoothing\n" + + " Strength 0.3, Sharpness 0.7, OffsetX 2, OffsetY 0.3\n" + + "\n" + + " Fun:\n" + + " Smoothing: Latency 40ms, Strength 3, Multiplier 10, OffsetX 1, OffsetY 1\n" + + " Prediction: Strength 4, Sharpness 0.75, Offset 2.5, OffsetY 1"; public Antichatter(ITimer scheduler) : base(scheduler) { GetMMScale(); } - [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f), ToolTip(Latency_Tooltip)] + [SliderProperty("Latency", 0f, 1000f, 2f), DefaultPropertyValue(2f), ToolTip(LATENCY_TOOLTIP)] public float Latency { set => this.latency = Math.Clamp(value, 0, 1000); get => this.latency; } - [Property("Antichatter Strength"), DefaultPropertyValue(3f), ToolTip(Antichatter_Tooltip)] + [Property("Antichatter Strength"), DefaultPropertyValue(3f), ToolTip(ANTICHATTER_TOOLTIP)] public float AntichatterStrength { set; get; } - [Property("Antichatter Multiplier"), DefaultPropertyValue(1f), ToolTip(Antichatter_Tooltip)] + [Property("Antichatter Multiplier"), DefaultPropertyValue(1f), ToolTip(ANTICHATTER_TOOLTIP)] public float AntichatterMultiplier { set; get; } - [Property("Antichatter Offset X"), ToolTip(Antichatter_Tooltip)] + [Property("Antichatter Offset X"), ToolTip(ANTICHATTER_TOOLTIP)] public float AntichatterOffsetX { set; get; } - [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip(Antichatter_Tooltip)] + [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip(ANTICHATTER_TOOLTIP)] public float AntichatterOffsetY { set; get; } [BooleanProperty("Prediction", ""), ToolTip(Prediction_Tooltip)] diff --git a/HawkuFilters/NoiseReduction.cs b/HawkuFilters/NoiseReduction.cs index a6bf7b7..60d63af 100644 --- a/HawkuFilters/NoiseReduction.cs +++ b/HawkuFilters/NoiseReduction.cs @@ -9,13 +9,29 @@ namespace OpenTabletDriver.Plugin [PluginName("Hawku Noise Reduction")] public class NoiseReduction : IFilter { - private const string Noiserecduction_tooltip = "Noise Reduction Filter\nWARNING! This filter will cause more latency on smaller tablet areas(<20 mm), so consider using a larger area to increase the performance.\n\nBuffer\nBuffer value is how many of the last pen positions will be stored in the buffer.\nLower buffer value means lower latency, but lower noise reduction.\nAt 133 RPS the buffer size of 10 means a maximum latency of 75 milliseconds.\n\nThreshold\nThreshold value sets the movement distance threshold per pen position report.\nThe amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\nNoise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\nAt 133 RPS a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n\nRecommendations\nRecommended values: Samples = 5 - 20, Threshold = 0.2 - 1.0 mm."; + private const string NOISEREDUCTION_TOOLTIP = + "Noise Reduction Filter:\n" + + " WARNING! This filter will cause more latency on smaller tablet areas(<20 mm), so consider using a larger area to increase the performance.\n" + + "\n" + + "Buffer:\n" + + " - Buffer value is how many of the last pen positions will be stored in the buffer.\n" + + " - Lower buffer value means lower latency, but lower noise reduction.\n" + + " - At 133 RPS, the buffer size of 10 means a maximum latency of 75 milliseconds.\n" + + "\n" + + "Threshold:\n" + + " - Threshold value sets the movement distance threshold per pen position report.\n" + + " - The amount of noise reduction will be at it's maximum if the pen movement is shorter than the threshold value.\n" + + " - Noise reduction and latency will be almost zero if the pen position movement is double the distance of the threshold value.\n" + + " - At 133 RPS, a threshold value of 0.5 mm means for speeds of ~66.5 mm/s noise reduction and latency will be applied but for ~133 mm/s the noise reduction and latency will be near zero.\n" + + "\n" + + "Recommendations:\n" + + " Samples = 5 - 20, Threshold = 0.2 - 1.0 mm."; public NoiseReduction() { GetMMScale(); } - [Property("Buffer"), DefaultPropertyValue(10), ToolTip(Noiserecduction_tooltip)] + [Property("Buffer"), DefaultPropertyValue(10), ToolTip(NOISEREDUCTION_TOOLTIP)] public int Samples { set @@ -26,7 +42,7 @@ public int Samples get => this.samples; } - [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f), ToolTip(Noiserecduction_tooltip)] + [Property("Distance Threshold"), Unit("mm"), DefaultPropertyValue(0.5f), ToolTip(NOISEREDUCTION_TOOLTIP)] public float DistanceThreshold { set diff --git a/HawkuFilters/Smoothing.cs b/HawkuFilters/Smoothing.cs index a5e0a2d..1bab658 100644 --- a/HawkuFilters/Smoothing.cs +++ b/HawkuFilters/Smoothing.cs @@ -15,15 +15,17 @@ public Smoothing(ITimer scheduler) : base(scheduler) GetMMScale(); } - [SliderProperty("Latency", 0.0f, 1000.0f, 2.0f), DefaultPropertyValue(2f), ToolTip - ("Smoothing Filter\n" + - "Smoothing filter adds latency to the input, so don't enable it if you want the lowest possible input latency.\n\n" + - - "Recommendations\n" + - "On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + - "You can test out different filter values, but recommended maximum for osu! is around 50 milliseconds.\n" + - "Filter latency value lower than 4 milliseconds isn't recommended. Its better to just disable the smoothing filter.\n" + - "You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems.")] + [SliderProperty("Latency", 0.0f, 1000.0f, 2.0f), DefaultPropertyValue(2f)] + [ToolTip( + "Smoothing Filter\n" + + " - Smoothing filter adds latency to the input, so don't enable it if you want the lowest possible input latency.\n" + + "\n" + + "Recommendations\n" + + " - On Wacom tablets you can use latency value between 15 and 25 to have a similar smoothing as in the Wacom drivers.\n" + + " - You can test out different filter values, but recommended maximum for osu! is around 50 milliseconds.\n" + + " - Filter latency value lower than 4 milliseconds isn't recommended. Its better to just disable the smoothing filter.\n" + + " - You don't have to change the filter frequency, but you can use the highest frequency your computer can run without performance problems." + )] public float Latency { set; get; } private const float THRESHOLD = 0.63f; From 95ded3081f5dd22cbf4bf915a2ccac9e7bb0880d Mon Sep 17 00:00:00 2001 From: X9VoiD Date: Thu, 25 Mar 2021 16:12:39 +0800 Subject: [PATCH 4/4] Capitalize missed const string --- DevocubFilters/AntiChatter.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/DevocubFilters/AntiChatter.cs b/DevocubFilters/AntiChatter.cs index 69a6d3d..2a61e01 100644 --- a/DevocubFilters/AntiChatter.cs +++ b/DevocubFilters/AntiChatter.cs @@ -46,7 +46,7 @@ public class Antichatter : Interpolator + " Increase Strength to 4-10 to get harper. Decrease Strength to 1-2 to get more smoothing.\n" + "\n" + " - Low latency: Set Offset Y to 0 (and potentially set Latency to 1-10 ms. However, with some settings this can break smoothing, usually OffsetY 0 is enough to being able to go to lowest latency)."; - private const string Prediction_Tooltip = + private const string PREDICTION_TOOLTIP = "Prediction - How it works: It adds a predicted point to smoothing algorithm. It helps to preserve sharpness of movement, helps with small movements,\n" + " Low values (~10-15ms) of smoothing latency can cause problems for cursor movement. It's very preferred to use at least 10-15ms of smoothing latency, 20-40 ms is even better and recommended.\n" + " In some cases, cursor can even outdistance real position (similar to Wacom 6.3.95 drivers).\n" @@ -97,19 +97,19 @@ public float Latency [Property("Antichatter Offset Y"), DefaultPropertyValue(1f), ToolTip(ANTICHATTER_TOOLTIP)] public float AntichatterOffsetY { set; get; } - [BooleanProperty("Prediction", ""), ToolTip(Prediction_Tooltip)] + [BooleanProperty("Prediction", ""), ToolTip(PREDICTION_TOOLTIP)] public bool PredictionEnabled { set; get; } - [Property("Prediction Strength"), DefaultPropertyValue(1.1f), ToolTip(Prediction_Tooltip)] + [Property("Prediction Strength"), DefaultPropertyValue(1.1f), ToolTip(PREDICTION_TOOLTIP)] public float PredictionStrength { set; get; } - [Property("Prediction Sharpness"), DefaultPropertyValue(1f), ToolTip(Prediction_Tooltip)] + [Property("Prediction Sharpness"), DefaultPropertyValue(1f), ToolTip(PREDICTION_TOOLTIP)] public float PredictionSharpness { set; get; } - [Property("Prediction Offset X"), DefaultPropertyValue(3f), ToolTip(Prediction_Tooltip)] + [Property("Prediction Offset X"), DefaultPropertyValue(3f), ToolTip(PREDICTION_TOOLTIP)] public float PredictionOffsetX { set; get; } - [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f), ToolTip(Prediction_Tooltip)] + [Property("Prediction Offset Y"), DefaultPropertyValue(0.3f), ToolTip(PREDICTION_TOOLTIP)] public float PredictionOffsetY { set; get; } private const float THRESHOLD = 0.9f;