Skip to content

Commit

Permalink
Merge pull request #66 from a1xd/1.4-tweaks
Browse files Browse the repository at this point in the history
add angle snapping, update signed/
  • Loading branch information
JacobPalecki authored Jan 22, 2021
2 parents 5b64790 + c50b200 commit aaac0e4
Show file tree
Hide file tree
Showing 12 changed files with 72 additions and 27 deletions.
1 change: 1 addition & 0 deletions common/rawaccel-settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ namespace rawaccel {

struct settings {
double degrees_rotation = 0;
double degrees_snap = 0;
bool combine_mags = true;
vec2<accel_mode> modes = { accel_mode::noaccel, accel_mode::noaccel };
vec2<accel_args> argsv;
Expand Down
2 changes: 1 addition & 1 deletion common/rawaccel-version.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#define RA_VER_MINOR 4
#define RA_VER_PATCH 0

#define RA_MIN_OS "Win7"
#define RA_OS "Win7+"

#define M_STR_HELPER(x) #x
#define M_STR(x) M_STR_HELPER(x)
Expand Down
58 changes: 41 additions & 17 deletions common/rawaccel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,26 @@ namespace rawaccel {
rotator() = default;
};

struct snapper {
double threshold = 0;

inline vec2d apply(const vec2d& input) const {
if (input.x != 0 && input.y != 0) {
double angle = fabs(atan(input.y / input.x));
auto mag = [&] { return sqrtsd(input.x * input.x + input.y * input.y); };

if (angle > M_PI_2 - threshold) return { 0, _copysign(mag(), input.y) };
if (angle < threshold) return { _copysign(mag(), input.x), 0 };
}

return input;
}

snapper(double degrees) : threshold(minsd(fabs(degrees), 45) * M_PI / 180) {}

snapper() = default;
};

/// <summary> Struct to hold clamp (min and max) details for acceleration application </summary>
struct accel_scale_clamp {
double lo = 0;
Expand Down Expand Up @@ -232,7 +252,7 @@ namespace rawaccel {
double sigma_x = 1.0;
double sigma_y = 1.0;

weighted_distance(domain_args args)
weighted_distance(const domain_args& args)
{
sigma_x = args.domain_weights.x;
sigma_y = args.domain_weights.y;
Expand All @@ -250,19 +270,18 @@ namespace rawaccel {
}
}

double calculate(double x, double y)
inline double calculate(double x, double y)
{
double abs_x = fabs(x);
double abs_y = fabs(y);

if (lp_norm_infinity)
{
return abs_x > abs_y ? abs_x : abs_y;
}
if (lp_norm_infinity) return maxsd(abs_x, abs_y);

double x_scaled = abs_x * sigma_x;
double y_scaled = abs_y * sigma_y;
return pow(pow(x_scaled, p) + pow(y_scaled, p), p_inverse);

if (p == 2) return sqrtsd(x_scaled * x_scaled + y_scaled * y_scaled);
else return pow(pow(x_scaled, p) + pow(y_scaled, p), p_inverse);
}

weighted_distance() = default;
Expand All @@ -273,27 +292,20 @@ namespace rawaccel {
double start = 1.0;
bool should_apply = false;

direction_weight(vec2d thetas)
direction_weight(const vec2d& thetas)
{
diff = thetas.y - thetas.x;
start = thetas.x;

if (diff != 0)
{
should_apply = true;
}
else
{
should_apply = false;
}
should_apply = diff != 0;
}

inline double atan_scale(double x, double y)
{
return M_2_PI * atan2(fabs(y), fabs(x));
}

double apply(double x, double y)
inline double apply(double x, double y)
{
return atan_scale(x, y) * diff + start;
}
Expand All @@ -304,9 +316,11 @@ namespace rawaccel {
/// <summary> Struct to hold variables and methods for modifying mouse input </summary>
struct mouse_modifier {
bool apply_rotate = false;
bool apply_snap = false;
bool apply_accel = false;
bool combine_magnitudes = true;
rotator rotate;
snapper snap;
weighted_distance distance;
direction_weight directional;
vec2<accelerator> accels;
Expand All @@ -321,6 +335,11 @@ namespace rawaccel {
apply_rotate = true;
}

if (args.degrees_snap != 0) {
snap = snapper(args.degrees_snap);
apply_snap = true;
}

if (args.sens.x != 0) sensitivity.x = args.sens.x;
if (args.sens.y != 0) sensitivity.y = args.sens.y;

Expand All @@ -344,6 +363,7 @@ namespace rawaccel {

void modify(vec2d& movement, milliseconds time) {
apply_rotation(movement);
apply_angle_snap(movement);
apply_acceleration(movement, [=] { return time; });
apply_sensitivity(movement);
}
Expand All @@ -352,6 +372,10 @@ namespace rawaccel {
if (apply_rotate) movement = rotate.apply(movement);
}

inline void apply_angle_snap(vec2d& movement) {
if (apply_snap) movement = snap.apply(movement);
}

template <typename TimeSupplier>
inline void apply_acceleration(vec2d& movement, TimeSupplier time_supp) {
if (apply_accel) {
Expand Down
1 change: 1 addition & 0 deletions driver/driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ Routine Description:
};

global.modifier.apply_rotation(input);
global.modifier.apply_angle_snap(input);

if (enable_accel) {
auto time_supplier = [=] {
Expand Down
17 changes: 13 additions & 4 deletions grapher/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ public RawAcceleration()
DirectionalityRangeLabel,
RangeActiveValueX,
RangeActiveValueY);

ResizeAndCenter();
}

#endregion Constructor
Expand Down Expand Up @@ -191,18 +193,25 @@ public void ResetAutoScroll()
chartsPanel.AutoScrollPosition = Constants.Origin;
}

public void DoResize()
public void ResizeAndCenter()
{
ResetAutoScroll();

var workingArea = Screen.PrimaryScreen.WorkingArea;
var workingArea = Screen.FromControl(this).WorkingArea;
var chartsPreferredSize = chartsPanel.GetPreferredSize(Constants.MaxSize);

Size = new Size
{
Width = Math.Min(workingArea.Width - Location.X, optionsPanel.Size.Width + chartsPreferredSize.Width),
Height = Math.Min(workingArea.Height - Location.Y, chartsPreferredSize.Height + 48)
Width = Math.Min(workingArea.Width, optionsPanel.Size.Width + chartsPreferredSize.Width),
Height = Math.Min(workingArea.Height, chartsPreferredSize.Height + 48)
};

Location = new Point
{
X = workingArea.X + (workingArea.Width - Size.Width) / 2,
Y = workingArea.Y + (workingArea.Height - Size.Height) / 2
};

}

#endregion Method
Expand Down
4 changes: 2 additions & 2 deletions grapher/Models/AccelGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ public AccelGUI(
}

SetupButtons();
AccelForm.DoResize();

// TODO: The below removes an overlapping form from the anisotropy panel.
// Figure out why and remove the overlap and below.
Expand Down Expand Up @@ -144,6 +143,7 @@ public void UpdateActiveSettingsFromFields()
var settings = new DriverSettings
{
rotation = ApplyOptions.Rotation.Field.Data,
snap = driverSettings.snap,
sensitivity = new Vec2<double>
{
x = ApplyOptions.Sensitivity.Fields.X,
Expand Down Expand Up @@ -229,7 +229,7 @@ private void SetButtonDefaults()
ToggleButton.Checked = LastToggleChecked;

ToggleButton.Font = DefaultButtonFont;
ToggleButton.Text = ToggleButton.Checked ? "Enabled" : "Disabled";
ToggleButton.Text = ToggleButton.Checked ? "Disable" : "Enable";
ToggleButton.Update();

WriteButton.Font = DefaultButtonFont;
Expand Down
1 change: 1 addition & 0 deletions grapher/Models/Serialized/RawAccelSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public static bool IsDefaultEquivalent(DriverSettings accelSettings)
accelSettings.directionalMultipliers.x <= 0 &&
accelSettings.directionalMultipliers.y <= 0 &&
accelSettings.rotation == 0 &&
accelSettings.snap == 0 &&
accelSettings.modes.x == AccelMode.noaccel &&
wholeOrNoY;
}
Expand Down
2 changes: 1 addition & 1 deletion installer/installer.rc
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "Raw Accel installer (" RA_MIN_OS ")"
VALUE "FileDescription", "Raw Accel installer (" RA_OS ")"
VALUE "FileVersion", RA_VER_STRING
VALUE "OriginalFilename", "installer.exe"
VALUE "ProductName", "Raw Accel"
Expand Down
Binary file modified signed/driver/rawaccel.sys
Binary file not shown.
Binary file modified signed/installer.exe
Binary file not shown.
Binary file modified signed/uninstaller.exe
Binary file not shown.
13 changes: 11 additions & 2 deletions wrapper/wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ public ref struct DriverSettings
[JsonProperty("Degrees of rotation")]
double rotation;

[JsonProperty("Degrees of angle snapping", Required = Required::Default)]
double snap;

[JsonProperty("Use x as whole/combined accel")]
[MarshalAs(UnmanagedType::U1)]
bool combineMagnitudes;
Expand All @@ -86,10 +89,10 @@ public ref struct DriverSettings
[JsonProperty("Negative directional multipliers", Required = Required::Default)]
Vec2<double> directionalMultipliers;

[JsonProperty("Stretches domain for horizontal vs vertical inputs")]
[JsonProperty("Stretches domain for horizontal vs vertical inputs", Required = Required::Default)]
DomainArgs domainArgs;

[JsonProperty("Stretches accel range for horizontal vs vertical inputs")]
[JsonProperty("Stretches accel range for horizontal vs vertical inputs", Required = Required::Default)]
Vec2<double> rangeXY;

[JsonProperty(Required = Required::Default)]
Expand All @@ -103,6 +106,12 @@ public ref struct DriverSettings
{
return minimumTime > 0 && minimumTime != DEFAULT_TIME_MIN;
}

DriverSettings()
{
domainArgs = { { 1, 1 }, 2 };
rangeXY = { 1, 1 };
}
};


Expand Down

0 comments on commit aaac0e4

Please sign in to comment.