diff options
Diffstat (limited to 'wrapper/wrapper.cpp')
| -rw-r--r-- | wrapper/wrapper.cpp | 128 |
1 files changed, 55 insertions, 73 deletions
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 6dabd7e..757d3f1 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -1,80 +1,62 @@ #pragma once -#include "wrapper.hpp" +#include <rawaccel.hpp> -void replace(mouse_modifier* mod_ptr, const modifier_args& args) { - *mod_ptr = mouse_modifier(args); -} +#include "wrapper_io.hpp" -Tuple<double, double>^ ManagedAccel::Accelerate(int x, int y, double time) -{ - vec2d input_vec2d = { - (double)x, - (double)y - }; - vec2d output = modifier_instance->modify_with_accel(input_vec2d, time); - - return gcnew Tuple<double, double>(output.x, output.y); -} +using namespace System; -void ManagedAccel::UpdateAccel( - int mode, - double rotation, - double sensitivityX, - double sensitivityY, - double weightX, - double weightY, - double capX, - double capY, - double offset, - double accel, - double lim_exp, - double midpoint, - double gain_cap) +public ref struct DriverInterop { - modifier_args args{}; - args.acc_fn_args.accel_mode = mode; - args.degrees = rotation; - args.sens.x = sensitivityX; - args.sens.y = sensitivityY; - args.acc_fn_args.acc_args.weight.x = weightX; - args.acc_fn_args.acc_args.weight.y = weightY; - args.acc_fn_args.cap.x = capX; - args.acc_fn_args.cap.y = capY; - args.acc_fn_args.acc_args.offset = offset; - args.acc_fn_args.acc_args.accel = accel; - args.acc_fn_args.acc_args.limit = lim_exp; - args.acc_fn_args.acc_args.exponent = lim_exp; - args.acc_fn_args.acc_args.midpoint = midpoint; - args.acc_fn_args.acc_args.gain_cap = gain_cap; - - replace(modifier_instance, args); - WriteToDriver(); -} - -double ManagedAccel::SensitivityX::get() { return modifier_instance->sensitivity.x; } -double ManagedAccel::SensitivityY::get() { return modifier_instance->sensitivity.y; } -double ManagedAccel::Rotation::get() { return atan(modifier_instance->rotate.rot_vec.y / modifier_instance->rotate.rot_vec.x) * 180 / M_PI; } -int ManagedAccel::Type::get() { return modifier_instance->accel_fn.accel.tag; } -double ManagedAccel::Acceleration::get() { return modifier_instance->accel_fn.impl_args.accel; } -double ManagedAccel::CapX::get() { return modifier_instance->accel_fn.clamp.x.hi; } -double ManagedAccel::CapY::get() { return modifier_instance->accel_fn.clamp.y.hi; } -double ManagedAccel::GainCap::get() { return modifier_instance->accel_fn.gain_cap.threshold; } -bool ManagedAccel::GainCapEnabled::get() { return modifier_instance->accel_fn.gain_cap.cap_gain_enabled; } -double ManagedAccel::WeightX::get() { return modifier_instance->accel_fn.impl_args.weight.x; } -double ManagedAccel::WeightY::get() { return modifier_instance->accel_fn.impl_args.weight.y; } -double ManagedAccel::Offset::get() { return modifier_instance->accel_fn.speed_offset; } -double ManagedAccel::LimitExp::get() { return modifier_instance->accel_fn.impl_args.limit; } -double ManagedAccel::Midpoint::get() { return modifier_instance->accel_fn.impl_args.midpoint; } -double ManagedAccel::MinimumTime::get() { return modifier_instance->accel_fn.time_min; } -double ManagedAccel::PowerScale::get() { return modifier_instance->accel_fn.impl_args.power_scale; } - -void ManagedAccel::WriteToDriver() -{ - wrapper_io::writeToDriver(*modifier_instance); -} - -void ManagedAccel::ReadFromDriver() + static void GetActiveSettings(IntPtr argsOut) + { + wrapper_io::readFromDriver(*reinterpret_cast<settings*>(argsOut.ToPointer())); + } + + static void SetActiveSettings(IntPtr argsIn) + { + wrapper_io::writeToDriver(*reinterpret_cast<settings*>(argsIn.ToPointer())); + } +}; + +public ref class ManagedAccel { - wrapper_io::readFromDriver(*modifier_instance); -} + mouse_modifier* const modifier_instance = new mouse_modifier(); + +public: + virtual ~ManagedAccel() + { + delete modifier_instance; + } + + !ManagedAccel() + { + delete modifier_instance; + } + + Tuple<double, double>^ Accelerate(int x, int y, double time) + { + vec2d in_out_vec = { + (double)x, + (double)y + }; + modifier_instance->modify(in_out_vec, time); + + return gcnew Tuple<double, double>(in_out_vec.x, in_out_vec.y); + } + + void UpdateFromSettings(IntPtr argsIn) + { + *modifier_instance = { *reinterpret_cast<settings*>(argsIn.ToPointer()) }; + } + + static ManagedAccel^ GetActiveAccel() + { + settings args; + wrapper_io::readFromDriver(args); + + auto active = gcnew ManagedAccel(); + *active->modifier_instance = { args }; + return active; + } +}; |