forum

Key presses per second program

posted
Total Posts
186
show more
Topic Starter
Roan
Updates :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Glad you like it! For the next version I'm also going to add the option to move the overlay using the arrow keys, so you can position it pixel perfect xD. (Only active when the overlay has focus) :)
Okay, I find myself simply never using such tings, since I'm usually more comfortable with using my mouse for it. But it can be nice to have! And it's not half as frustrating as using the mouse sometimes c:
Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).

SALZKARTOFFEEEL wrote:

Roan wrote:

I actually knew about this one xD But I though I could just release it and quickly patch it some other time without you noticing, looks like I failed xD
Sneaky, sneaky, sneaky... xD
This is now not so sneakily fixed :)

SALZKARTOFFEEEL wrote:

o:?
o: fixed :D

SALZKARTOFFEEEL wrote:

Roan wrote:

From your video it seems that the instances were not all started at the exact same millisecond time (the graph isnt shifting at the same time in all of them). And all the stats refer to the last second so if they are not started at the exact same time that could be the cause of the drift.
Yeah, they weren't. I thought about that while trying to sleep and I wanted to try it out today. Looks like you were faster here c:
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm actually more worried about that fact that not all your instances are reporting the same hit count for the keys O.O does that happen all the time? Since I can't replicate that no matter what I try.
uhm... (that's where the madness starts)... Me neither ._.
I have no idea what I did the first time, but I can't reproduce either, so it was.. uhm... something really weird... ¯\_(ツ)_/¯ Let's just ignore this unless it occurs again o:
(I'm trying my best not to blame that on Java for once :P)
xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯

SALZKARTOFFEEEL wrote:

Roan wrote:

The differences in max, avg & cur I can replicate when starting the instances at different times. It's also probably impossible for me to actually fix that since the only way to reliably fix that is shorten the time interval to 1 millisecond (which would be imprecise anyway due to the way windows timers work) also that places a massive load on the CPU :(
Yeah, well. It's not the biggest issue I guess, because what crazy person totally not me.. would want multiple counters at once? xD
Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3

SALZKARTOFFEEEL wrote:

Roan wrote:

Plenty of work for me to do :3
Well, I heard, you liked fixing complaints? So guess what? I've got even some more work for you (✿◠‿◠)
\o/ yay! xD

SALZKARTOFFEEEL wrote:

I hope, this is a simple one and just a little bug in the code:
(Just for the record, I can actually reproduce this one – I'm using this config file!)
Whenever Custom Colors are on, the background color opacity is set to 100% and the text color opacity is NOT set to 100%, this happens:

The top part just goes gray-ish for some reason. Again, this happens every time and I believe it's just some simple error – like switching up "<" and "<=" or something like that.
o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm not good with non-ASCII-smiley's >.< but here we go ʘ‿ʘ
haha, well.. I've written myself a little AutoHotkey script that let's me just write those out! ^~^
It also lets me use stuff like ≠, ≈, ≥, ≤, ©, etc. very easily. I don't know if I should improve on it a bit and make it public o:
I have no idea if there would be an audience for that, but you won't know if you don't try :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Also added you as a friend :3
yay! ヽ(。・ω・。)ノ
^^

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :) (unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
Micha ohne el

Roan wrote:

Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).
yay c:

Roan wrote:

This is now not so sneakily fixed :)
Yup ^w^

Roan wrote:

o: fixed :D
o: great :3

Roan wrote:

xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯
They are.. ಠ_ಠ :D

Roan wrote:

Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
huh, well.. osu! runs at a refresh rate of about 0.7 ms while in game for me, so I don't think my computer would even have that big of an issue o:

Roan wrote:

I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3
Why not, right? :P

Roan wrote:

o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).
Uhm. With "Going to eliminate this bug for good" you meant that it's not fixed yet, right? Because it isn't xD

Roan wrote:

I have no idea if there would be an audience for that, but you won't know if you don't try :)
True, true o: I guess, if I'll make it customizable I could get a bigger audience. I'll see :D


Roan wrote:

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
man, you're stealing my job! D:

Roan wrote:

Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
If it works now, (and it does!) I guess it is a fix then c:

Roan wrote:

I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :)
:D

Roan wrote:

(unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
This sentence made me laugh soo hard! :D
But in this case you could (if you just really wanted to keep your username) change the temp directory's path :D

It's still a very weird bug, right? I've actually investigated a bit further on this and I've come up with this:
The program doesn't launch, when one of the folders/files* that make up the path of the executable end with an exclamation mark!
*files: There can only be one file in the path, the executable.
That means: If your username would be xXosu!pro2k17Xx, you wouldn't even have a problem, since the "!" is in the middle! Or if the executable is named osu!KeysPerSecond.exe and is in a folder called osu!stuff, it even still works with all the older versions.

I thing that's extremely interesting, because either each of the folders in a path is somewhat treated individually, or the combination of an exclamation mark and a slash ("!\") does something strange o:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented the option to position to overlay using the arrow keys and improved moving the window using the mouse (it now actually stays at your cursor ;) ).
yay c:

Roan wrote:

This is now not so sneakily fixed :)
Yup ^w^

Roan wrote:

o: fixed :D
o: great :3
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

xD good job not blaming Java :) since key press handling is done in C :D
And well programs are weird sometimes ¯\_(ツ)_/¯
They are.. ಠ_ಠ :D
\(•_•)/

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I could always add an 1 ms update rate to the drop down box, your computer probably won't like it though :3
huh, well.. osu! runs at a refresh rate of about 0.7 ms while in game for me, so I don't think my computer would even have that big of an issue o:
Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10ms is also quite fast :P

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm also totally not a crazy person, because I actually tried a GUI size of x100 and x0.1 :3
Why not, right? :P
Exactly! :)

SALZKARTOFFEEEL wrote:

Roan wrote:

o: I'm impressed you actually found that one! Consider yourself lucky it's a rare bug :D I've already partially fixed it 4 times! The only case that I knew of that still caused this was adding only a single panel. So I guess you've found another way to do it xD. Going to try eliminate this bug for good this time 🐛 (it's cute though >.<).
Uhm. With "Going to eliminate this bug for good" you meant that it's not fixed yet, right? Because it isn't xD
Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P

SALZKARTOFFEEEL wrote:

Roan wrote:

I have no idea if there would be an audience for that, but you won't know if you don't try :)
True, true o: I guess, if I'll make it customizable I could get a bigger audience. I'll see :D
^^

SALZKARTOFFEEEL wrote:

Roan wrote:

And finally, I also fixed the bug where the program doesn't work when it's placed in a folder that contains a !.
man, you're stealing my job! D:
Better find some more bugs then ;)

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I say I've fixed it, I actually just copy the program to the Windows temp folder :3
If it works now, (and it does!) I guess it is a fix then c:
I guess so xD

SALZKARTOFFEEEL wrote:

Roan wrote:

I also made a silly mistake making this that caused unlimited instances of the program to launch, Windows even said it was going to forcefully close programs because not enough RAM was available :)
:D

Roan wrote:

(unlimited instances not included in the new release :P, unless your windows username contains an ! in that case you have problem)
This sentence made me laugh soo hard! :D
But in this case you could (if you just really wanted to keep your username) change the temp directory's path :D
:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

SALZKARTOFFEEEL wrote:

It's still a very weird bug, right? I've actually investigated a bit further on this and I've come up with this:
The program doesn't launch, when one of the folders/files* that make up the path of the executable end with an exclamation mark!
*files: There can only be one file in the path, the executable.
That means: If your username would be xXosu!pro2k17Xx, you wouldn't even have a problem, since the "!" is in the middle! Or if the executable is named osu!KeysPerSecond.exe and is in a folder called osu!stuff, it even still works with all the older versions.

I thing that's extremely interesting, because either each of the folders in a path is somewhat treated individually, or the combination of an exclamation mark and a slash ("!\") does something strange o:
I think I'm officially labeling this as the weirdest bug I've ever encountered xD. Even worse, this probably affects other programs I wrote too hmm...

Edit
Okay, I had some more time for bug hunting :3
So here we go:
- I implemented a 1ms and 5ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Micha ohne el

Roan wrote:

Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10 ms is also quite fast :P

- I implemented a 1 ms and 5 ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
Well, my computer isn't immensely happy with 1 ms delay :3 For me the program takes about 30% CPU Load (17-20% on 10 ms), which would be okay, if osu! wouldn't be running :^)
But anyway, it's still nice to have fun to play with ^~^

Roan wrote:

Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P
Okay c:

Roan wrote:

Better find some more bugs then ;)
:D

Roan wrote:

:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
Yaay ヽ(。・ω・。)ノ
Do you just throw an error message immediately, or did you actually fix it? o:

Roan wrote:

I think I'm officially labeling this as the weirdest bug I've ever encountered xD.
nah, definitely not the weirdest bug I've ever seen :D
This is my weirdest (and deadliest) bug yet
I've seen an antivirus labeling itself as malware, moving important DLLs of itself into quarantine, then completely malfunctioning and finally also moving parts of the windows operating system into quarantine. This bug was pretty bad, since it occurred on every machine that got the update! It was very tricky to fix and if you restarted your computer, you'd just get a blue screen of death on startup immediately, forever :D

Roan wrote:

Even worse, this probably affects other programs I wrote too hmm...
haha, better fix them :P

Roan wrote:

- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
It does! ^^

Roan wrote:

- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.
Great! c:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ


So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Guess I'll at least add the option then since that takes no effort anyway :3. There's one thing to note though the osu! graphics are actually graphics, the overlay is just a normal program window so it isn't quite as optimized for quick rendering updates. I'm also not so sure how well the windows timers would handle it since they are imprecise. Also 10 ms is also quite fast :P

- I implemented a 1 ms and 5 ms update rate for you to play with :3 it does kill your CPU though, my CPU usage has increased by 400%-500% times. Also this in combination with big graph backlog can really kill your CPU :P. Also you need a very fast computer to properly run this since all the update calculation have to be done in 1 millisecond otherwise the calculations aren't 100% accurate anymore. Well have fun I guess :)
Well, my computer isn't immensely happy with 1 ms delay :3 For me the program takes about 30% CPU Load (17-20% on 10 ms), which would be okay, if osu! wouldn't be running :^)
But anyway, it's still nice to have fun to play with ^~^
xD yeah having the option is nice and it looks so nice and fast :3.

SALZKARTOFFEEEL wrote:

Roan wrote:

Quite right this isn't fixed yet. I read your post after I had already finished the new release. Also because this is quite a difficult bug to track down I have no idea when I will have fixed it completely :P
Okay c:

Roan wrote:

Better find some more bugs then ;)
:D
I see that worked out :3 I've got a new list to extend my todo list with xD.

SALZKARTOFFEEEL wrote:

Roan wrote:

:P true however I don't think I'd ever run a program again if it instantly filled up my RAM xD. Is the ! sign even allowed in a windows username? (just checked it is :o maybe I should atleast throw an error at the user then in order to prevent RAM overload xD)

- I also implemented a fix for the infinite instances problem just in case someone's username ends with a ! :D
Yaay ヽ(。・ω・。)ノ
Do you just throw an error message immediately, or did you actually fix it? o:
For now I'm just thowing an error since I still have no idea what the actual cause is :/

SALZKARTOFFEEEL wrote:

Roan wrote:

I think I'm officially labeling this as the weirdest bug I've ever encountered xD.
nah, definitely not the weirdest bug I've ever seen :D
This is my weirdest (and deadliest) bug yet
I've seen an antivirus labeling itself as malware, moving important DLLs of itself into quarantine, then completely malfunctioning and finally also moving parts of the windows operating system into quarantine. This bug was pretty bad, since it occurred on every machine that got the update! It was very tricky to fix and if you restarted your computer, you'd just get a blue screen of death on startup immediately, forever :D
xD well it's obvious that they didn't test their new release :3

SALZKARTOFFEEEL wrote:

Roan wrote:

Even worse, this probably affects other programs I wrote too hmm...
haha, better fix them :P
nononono xD way too much work. Besides I don't think I've released any other program with this bug yet.

SALZKARTOFFEEEL wrote:

Roan wrote:

- Filter the config selection dialog to only show config files. This makes finding the files a lot easier xD.
It does! ^^

Roan wrote:

- And I also fixed the rendering problem you were having, well it's really persistent so I'm not 100% sure but atleast your config file works now.
Great! c:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ
It's going to require a partial rewrite though :3.

SALZKARTOFFEEEL wrote:

So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P
o: they move by two. Lol I overlooked something really simple for this, I wrote:
Main.frame.setLocation(location.x - 1, location.y);
But I was actually calling this code both when the key was pressed and when it was released :3

SALZKARTOFFEEEL wrote:

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:
Yay :D it's efficient xD. For me when idle at 100ms & with the graph it takes 0%-0.2% CPU I wonder why there's such a difference .-. 700 kps is a lot though xD. I think the program could even run into synchronization issues if you give it even more :P.

SALZKARTOFFEEEL wrote:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D
xD there's a size feature you know :P. I'm quite surprised that the graph was still aligned though :D . Also the larger the GUI the slower to program gets at a width of ~ 4000 pixels it nearly takes a second for the program to highlight a key :3. Yeah I like to torture programs too :)

SALZKARTOFFEEEL wrote:

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
I was actually thinking of adding this but it requires some major changes to the structure of the program. However your text based config files also need these changes so it's going to happen after I have finished that :)
Ramiress
DATABASE IN AI charectors PANIC-HOLIC Processing brain and feedback to humanis. whatever shoul'dent auth search answer.
Topic Starter
Roan

Ramiress wrote:

DATABASE IN AI charectors PANIC-HOLIC Processing brain and feedback to humanis. whatever shoul'dent auth search answer.
o.o I'm a little confused , it sounds very intriguing though :)

Edit

SALZKARTOFFEEEL wrote:

Roan wrote:

And that's it for now :) going to work on editable config files next :3 (no eta though :P)
Those would be great, yeah (ノ・ω・)ノ

So, here are a few more feature requests and bugs and other stuff:
1) Bug: Pressing any arrow keys won't move the window by one pixel, it will move it by two instead :P

2) Notice: I just stress tested your program, I have to say, it is better than I thought it would be! When idle it takes about 2% CPU Load, while under maximum stress I could simulate (around 700 keystrokes per second) it takes around 35-40% CPU Load! So when idle, it really doesn't do anything besides refreshing it's display, but when it has to, it goes very high on the CPU and still doesn't struggle c:

2.5) Another extra notice: I played around with it some more ;) Okay, soo: (this is just for fun) When I resized the window to double it's normal size, I found out that it actually still worked! Even the graph was properly aligned! It was veeery slow when I put it in full-screen, but even then it still worked! :D

3) Feature request: Add an option to the context menu that allows the user to change the options again! So simply the option "Configure" that closes the overlay and reopens the config window! This could be combined with 3.5) very nicely.

3.5) Make the overlay live-configurable. So when clicking on the Configure button, the overlay doesn't close, but the config window still opens!
This config window would have to be slightly different, there qould have to be an Apply button, that doesn't close the window, but I don't think it would be that hard to do! Correct me if I'm wrong, of course c:
Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)

Edit 2
Here's an example of the new config format:
Config
# General
showMax: true
showAvg: true
showCur: true
showKeys: true
overlay: true
trackAllKeys: false
updateRate: 100
precision: 1
size: 1.0

# Graph
graphEnabled: true
graphBacklog: 60
graphAverage: true

# Colors
customColors: false
foregroundColor: [r=0,g=255,b=255]
backgroundColor: [r=0,g=0,b=0]
foregroundOpacity: 1.0
backgroundOpacity: 1.0

# Keys
keys:
- [keycode=44,index=0,visible=true,name="Z"]
- [keycode=45,index=1,visible=true,name="X"]
Micha ohne el

Roan wrote:

Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD
Uhm. Holy... Fuck. I just don't even know how the heck you are doing all of this :D

Roan wrote:

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)
;D But actually the config file-format causes way more c:


Bug with the new live-time configuration:

fancy headlines o.O
1) Unchecking the "custom colours" option resets custom colors, so enabling it again does nothing.

General bugs / stuff:

1) The key selection window doesn't have a cancel button, just an exit button. This could be bad if you mess up the keys like me and want to restore them o:

2) Could it be that you completely broke the command line functionality? When trying to run the program with "D:\system\osu!\KeysPerSecond-v5.0.exe D:\Documents\KeysPerSecond – Default.kpsconf2" the argument is just ignored and the config window opens as usual. The special character "–" shouldn't be a problem since version 4.5 had no trouble at all o:

3) Maybe change the color handling of the little check marks in the config menu. They could just have the same foreground and background colors as the text, that would make them a lot more readable with certain colors, especially when the background color is very dark. :>

4) Everything was fine. But I pressed Ctrl + Y and this weird stuff happened.
Every time I press Ctrl + Y again, the script switches from two, to one window o.O Also, the first time I pressed it, the windows went grey again :D
I should probably mention, that I unchecked every visible element in the config menu just before this happened! This alone caused the area for right clicking to disappear completely.

Bugs with the text based config file-format:

1) You should DEFINITELY put caps on all of the values! There is no cap on size, precision, update rate, etc. Putting a value greater than the maximum value in the config window crashes the whole config menu when pressing the button that would load the out-of-bounds value from the config file.

2) Same goes for the graph backlog, this time it completely breaks the graph's functionality.

3) At first I thought, you had put a cap on this one... but you didn't c: The update rate (and this is pretty funny) cannot be zero, however it can be negative! :^) This breaks pretty much all of the calculations, not the key counter though :D

4) Opacity setting is not happy with negatives again, this time some more stuff happens: If the foreground color opacity is negative, the overlay is simply invisible and doesn't close right away; if the background opacity is negative, the overlay doesn't spawn at all.
In addition: The overlay doesn't spawn either, when the background opacity is greater than 1.0, and is (yet again) invisible when the foreground opacity is greater than 1.0.

Positive stuff: yay ヽ(。・ω・。)ノ

1) When two keys have the same index value, the script handles it! It seems to be just after the reading order, so the lines' order in the file.

2) I'm pretty sure Java doesn't do this by default, so I'm just gonna give props to you for this: Different variable types in the config files are handled! So, putting "1" at size (instead of "1.0") works just fine, also putting anything but "true" or "false" in a Boolean-expected field still works just as usual! c:
One more bad thing about this though: Putting strings into any number-expected field crashes the whole script when loading the config file.

All in all:

I repeat, SET MAXIMUM VALUES inside of the config files!
It would be better, if the script would actually no throw an error, but rather choose an acceptable value on its own! So if the user would do a size of 8.0, the script would change that to 2.0, since that's the highest value allowed in the config window.
Also fix the command line argument stuff o:
The rest is relatively unimportant ^~^

I probably forgot something ¯\_(ツ)_/¯

Anyway.
Thanks again for letting me nitpick so much! <3
Contributing to this project is really fun, although I'm sort of busy doing stuff for school lately >.<
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented all of these :3.
There now is a new config format (.kpsconf2, old format is still supported) which is text based and can be edited by hand. Point 1 is fixed :) (1 pixel is now the default moving speed, 2 with Ctrl and 3 with Shift ;) ). And I added the option to change everything at run time via the right click menu. It is also possible to load & save configuration files from there now :D. This was a lot of work but it was worth it xD
Uhm. Holy... Fuck. I just don't even know how the heck you are doing all of this :D
^^ I just went for a 6 hours coding session :3

SALZKARTOFFEEEL wrote:

Roan wrote:

And now I tremble in fear for a huge bug report since being able to change things at run time is sure to cause a lot of them :)
;D But actually the config file-format causes way more c:
Damn >.< I knew this would happen if I allowed users to input any value xD.

SALZKARTOFFEEEL wrote:

Bug with the new live-time configuration:

fancy headlines o.Oo: fancy

SALZKARTOFFEEEL wrote:

1) Unchecking the "custom colours" option resets custom colors, so enabling it again does nothing.
Uhm... let's call this a minor oversight :3

SALZKARTOFFEEEL wrote:

General bugs / stuff:

1) The key selection window doesn't have a cancel button, just an exit button. This could be bad if you mess up the keys like me and want to restore them o:
Going to add that :D

SALZKARTOFFEEEL wrote:

2) Could it be that you completely broke the command line functionality? When trying to run the program with "D:\system\osu!\KeysPerSecond-v5.0.exe D:\Documents\KeysPerSecond – Default.kpsconf2" the argument is just ignored and the config window opens as usual. The special character "–" shouldn't be a problem since version 4.5 had no trouble at all o:
O.O I broke it... that's weird. Traced it down to the - character but I have no idea why it stopped working. For me the - registers as non-ASCII which can't be interpreted by the C runtime stdlib. So this is a weird one, going to try figure out why it used to work ;)

SALZKARTOFFEEEL wrote:

3) Maybe change the color handling of the little check marks in the config menu. They could just have the same foreground and background colors as the text, that would make them a lot more readable with certain colors, especially when the background color is very dark. :>
I know and I'm actually quite frustrated by it. However the component doesn't have a build in function for changing the color. Therefore I'm probably going to reprogram the entire component so I put it on hold :3. Going to try fix this though :)

SALZKARTOFFEEEL wrote:

4) Everything was fine. But I pressed Ctrl + Y and this weird stuff happened.
Every time I press Ctrl + Y again, the script switches from two, to one window o.O Also, the first time I pressed it, the windows went grey again :D
I should probably mention, that I unchecked every visible element in the config menu just before this happened! This alone caused the area for right clicking to disappear completely.
Euh yeah, if you remove all the components from the program the window is not created :3 since there's nothing to display anyway. However Ctrl + Y forces it to be visible which causes some interesting behaviour xD. Not really sure how to fix this though. Maybe I should add a reset command key? Please give me a good idea xD.

SALZKARTOFFEEEL wrote:

Bugs with the text based config file-format:

1) You should DEFINITELY put caps on all of the values! There is no cap on size, precision, update rate, etc. Putting a value greater than the maximum value in the config window crashes the whole config menu when pressing the button that would load the out-of-bounds value from the config file.

2) Same goes for the graph backlog, this time it completely breaks the graph's functionality.

3) At first I thought, you had put a cap on this one... but you didn't c: The update rate (and this is pretty funny) cannot be zero, however it can be negative! :^) This breaks pretty much all of the calculations, not the key counter though :D

4) Opacity setting is not happy with negatives again, this time some more stuff happens: If the foreground color opacity is negative, the overlay is simply invisible and doesn't close right away; if the background opacity is negative, the overlay doesn't spawn at all.
In addition: The overlay doesn't spawn either, when the background opacity is greater than 1.0, and is (yet again) invisible when the foreground opacity is greater than 1.0.
Rip rip xD. Non text based configuration files are so much more peaceful :3. I'm going to implement all this though, So it'll be fixed. Even so it also removes the functionality to do crazy things, which is a shame xD. Moreover some of the caps are just random values I set, so I think I might keep some of them unbounded and only filter illegal arguments. (So for example size won't have a cap).
Also the reason some values for the updateRate won't work is because they actually have to conform to a certain equation: 1000 mod updateRate = 0

SALZKARTOFFEEEL wrote:

Positive stuff: yay ヽ(。・ω・。)ノ

1) When two keys have the same index value, the script handles it! It seems to be just after the reading order, so the lines' order in the file.
Yup ^^ you actually could already give two keys the same position since you can edit the value in the add key dialog :P

SALZKARTOFFEEEL wrote:

2) I'm pretty sure Java doesn't do this by default, so I'm just gonna give props to you for this: Different variable types in the config files are handled! So, putting "1" at size (instead of "1.0") works just fine, also putting anything but "true" or "false" in a Boolean-expected field still works just as usual! c:
One more bad thing about this though: Putting strings into any number-expected field crashes the whole script when loading the config file.
^^ I guess I'll just use default values for illegal arguments then.

SALZKARTOFFEEEL wrote:

All in all:

I repeat, SET MAXIMUM VALUES inside of the config files!
It would be better, if the script would actually no throw an error, but rather choose an acceptable value on its own! So if the user would do a size of 8.0, the script would change that to 2.0, since that's the highest value allowed in the config window.
Also fix the command line argument stuff o:
The rest is relatively unimportant ^~^
Well I know what to do :3.

SALZKARTOFFEEEL wrote:

I probably forgot something ¯\_(ツ)_/¯
Yes you did :3, try reloading a configuration file with a custom size set a couple of times, the programs size will go off to infinity if you do it often enough :3, I acidentically implemented the size as an exponential funtion xD

SALZKARTOFFEEEL wrote:

Anyway.
Thanks again for letting me nitpick so much! <3
Contributing to this project is really fun, although I'm sort of busy doing stuff for school lately >.<
You' re welcome ^^ I'm right before exams so I have a little more time then usual :3 but in a couple of weeks I probably won't have any time to work on this :(

Edit
Also made my introduction post fancy :3

Edit 2
Check list:
[x]: Acidentally reset colors instead of disabling them :3
[x]: Default config values
[x]: Caps for config values
[x]: Infinitely increasing size bug
[x]: Cancel option in the add key dialog
[moved to a later version]: Weird commandline behavior
[x]: Colored checkmarks in the menu
[moved to a later version]: Visual glitch with Ctrl + Y and nothing to display.

Edit 3
The - in your filename doesn't work for me in older versions either, so I'm surprised it even works for you o.o? Also what is this: – character even? It's not the normal - . For now I'll just release a new version with the changes I've already implemented :P
Micha ohne el

Roan wrote:

^^ I just went for a 6 hours coding session :3
I couldn't do that at all, I would get soo bored :D I can't even play osu! for one hour straight o:
Finding bugs for five hours doesn't bore me at all though c:

Roan wrote:

Damn >.< I knew this would happen if I allowed users to input any value xD.
:P

Roan wrote:

o: fancy
o:

Roan wrote:

Uhm... let's call this a minor oversight :3
Like bug number 2 down below? :P

Roan wrote:

Going to add that :D
Yup, works great c:

Roan wrote:

O.O I broke it... that's weird. Traced it down to the - character but I have no idea why it stopped working. For me the - registers as non-ASCII which can't be interpreted by the C runtime stdlib. So this is a weird one, going to try figure out why it used to work ;)
Uhm. I'm actually an idiot :D That's a funny story now:
o:
I used a Windows shortcut to run the script with the parameter. That didn't open the config file right away, but (just tried it) it doesn't open it either when the "–" is removed! So... Next I thought that it was all fine and I was just an idiot for using a shortcut instead of just running it normally, BUT... Even when running it normally, none of the config files are opened!
When using version 5.1 on the other hand, the one with "–" doesn't work (as I expected), the one without does work now, though?!
And then, when using the new version AND not having a "–" in the file name, I can even use the shortcut?!?!?
At this point I just give up, to be honest xD I really don't get any of that :D

Roan wrote:

I know and I'm actually quite frustrated by it. However the component doesn't have a build in function for changing the color. Therefore I'm probably going to reprogram the entire component so I put it on hold :3. Going to try fix this though :)

[x]: Colored checkmarks in the menu
Yay, they look great!

Roan wrote:

Euh yeah, if you remove all the components from the program the window is not created :3 since there's nothing to display anyway. However Ctrl + Y forces it to be visible which causes some interesting behaviour xD. Not really sure how to fix this though. Maybe I should add a reset command key? Please give me a good idea xD.
Huh. Okay, a reset/reload key would definitely be nice, but you could also check for any component before showing the window. If there would be a chain of If/ElseIf statements that check for all of the components, you could be sure that the overlay only appears when any component would be shown.
If the chain of statements would get too long, you could use a system, where each component that's shown adds 1 to a variable, so when no component is shown, the variable contains 0 and the overlay isn't rendered o: Would that be something? >.<

Roan wrote:

Rip rip xD. Non text based configuration files are so much more peaceful :3. I'm going to implement all this though, So it'll be fixed. Even so it also removes the functionality to do crazy things, which is a shame xD. Moreover some of the caps are just random values I set, so I think I might keep some of them unbounded and only filter illegal arguments. (So for example size won't have a cap).
Okay :D

Roan wrote:

Also the reason some values for the updateRate won't work is because they actually have to conform to a certain equation: 1000 mod updateRate = 0
But that also means that 1000 ms is the maximum for the refresh delay, right? Because, for example, 1000 mod(2000) = 1000 ≠ 0. o:
If you wanted to, you could raise the maximum by just changing the 1000 to something greater than that, 10000, for example.

Roan wrote:

Well I know what to do :3.
And I got more for you :3

Roan wrote:

Yes you did :3, try reloading a configuration file with a custom size set a couple of times, the programs size will go off to infinity if you do it often enough :3, I acidentically implemented the size as an exponential funtion xD
huh, totally didn't think of just repeating stuff until something breaks :P

Roan wrote:

You' re welcome ^^ I'm right before exams so I have a little more time then usual :3 but in a couple of weeks I probably won't have any time to work on this :(
Well, let's hope we get all the bugs found and fixed until then :D

Roan wrote:

Also made my introduction post fancy :3
fancy headlines? o.O
xD

Roan wrote:

The - in your filename doesn't work for me in older versions either, so I'm surprised it even works for you o.o?
Uhm. Okayyy.... It works for me, so I'm pretty surprised too o: Could different Java versions be a factor here? :S

Roan wrote:

Also what is this: – character even? It's not the normal - . For now I'll just release a new version with the changes I've already implemented :P
According to this Wikipedia article it is called the "en dash", I use it quite a lot, not just when breaking a sentence apart or writing numerical ranges o:
Most people write "--" (two Hyphen-minuses, 'normal' minuses on your keyboard) instead of "–", because, well, it's on your keyboard by default.
The more you know c:

Okay. Now to the real fun bit :^)

BUGS: 🐛

eugh, bugs D:
1) Hotkeys (such as Ctrl + P) trigger when pressing the corresponding button (in this case P) twice! Pressing I twice resets the statistics, pressing Y twice hides the overlay, etc. This all, of course, without holding Ctrl down o:

2) (Enabling and) disabling "Track all keys" in the context menu actually disables the tracking of all keys, also the ones that are separate and should be tracked anyways :P

3) Enabling "Track all keys" in the context menu (not just having it enabled, enabling it) disables the individual key counters. The whole averaging and the graph still works, but just the counters and the color inversion fail.

4) Since version 5 the "Overlay osu!" option doesn't work. Maybe I just missed the part where you were explaining why you purposefully disabled it, but it doesn't work right now ¯\_(ツ)_/¯

Feature Request:

1) This is sort of a small bug as well, the "Pause/Resume" option doesn't have a tick-mark. You could just write "Pause" and display a tick, whether it is paused or not :D
Nygglatho
I know this won't be helpful.. But this nifty tool doesn't work at all on Win10. All I'm getting is a white empty window after I hit CTRL+Y. :?
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

^^ I just went for a 6 hours coding session :3
I couldn't do that at all, I would get soo bored :D I can't even play osu! for one hour straight o:
Finding bugs for five hours doesn't bore me at all though c:
xD I probably wouldn't be able to search for bug for 5 hours straigt though xD.

SALZKARTOFFEEEL wrote:

Roan wrote:

Damn >.< I knew this would happen if I allowed users to input any value xD.
:P

Roan wrote:

o: fancy
o:

Roan wrote:

Uhm... let's call this a minor oversight :3
Like bug number 2 down below? :P
I'd like to say so, but I honestly thougth I'd implemented that properly xD guess not :D

SALZKARTOFFEEEL wrote:

Roan wrote:

Going to add that :D
Yup, works great c:
Yay :D

SALZKARTOFFEEEL wrote:

Roan wrote:

O.O I broke it... that's weird. Traced it down to the - character but I have no idea why it stopped working. For me the - registers as non-ASCII which can't be interpreted by the C runtime stdlib. So this is a weird one, going to try figure out why it used to work ;)
Uhm. I'm actually an idiot :D That's a funny story now:
o:
I used a Windows shortcut to run the script with the parameter. That didn't open the config file right away, but (just tried it) it doesn't open it either when the "–" is removed! So... Next I thought that it was all fine and I was just an idiot for using a shortcut instead of just running it normally, BUT... Even when running it normally, none of the config files are opened!
When using version 5.1 on the other hand, the one with "–" doesn't work (as I expected), the one without does work now, though?!
And then, when using the new version AND not having a "–" in the file name, I can even use the shortcut?!?!?
At this point I just give up, to be honest xD I really don't get any of that :D
I guess I forgot to mention that I actually improved on the config via command line functionality in v5.1. For the next version I'm going to improve on it even more by treating unrecognized non-ASCII characters as wild cards. This way all config files should be loaded, I hope xD

SALZKARTOFFEEEL wrote:

Roan wrote:

I know and I'm actually quite frustrated by it. However the component doesn't have a build in function for changing the color. Therefore I'm probably going to reprogram the entire component so I put it on hold :3. Going to try fix this though :)

[x]: Colored checkmarks in the menu
Yay, they look great!
^^ I bascially had to hack a part of the Java source code to implement them though :3. Variable assignment has never been so difficult:
How to assign a stubborn variable
private void setIcon(){
BasicMenuItemUI ui = (BasicMenuItemUI)this.getUI();
try {
Class<?> superClass = ui.getClass();
while(!superClass.getName().equals(BasicMenuItemUI.class.getName())){
superClass = superClass.getSuperclass();
}
Field field = superClass.getDeclaredField("checkIcon");
field.setAccessible(true);
field.set(ui, checkmark);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

SALZKARTOFFEEEL wrote:

Roan wrote:

Euh yeah, if you remove all the components from the program the window is not created :3 since there's nothing to display anyway. However Ctrl + Y forces it to be visible which causes some interesting behaviour xD. Not really sure how to fix this though. Maybe I should add a reset command key? Please give me a good idea xD.
Huh. Okay, a reset/reload key would definitely be nice, but you could also check for any component before showing the window. If there would be a chain of If/ElseIf statements that check for all of the components, you could be sure that the overlay only appears when any component would be shown.
If the chain of statements would get too long, you could use a system, where each component that's shown adds 1 to a variable, so when no component is shown, the variable contains 0 and the overlay isn't rendered o: Would that be something? >.<
Implemented/fixed all this for the next version. The reload command key is: Ctrl + R.

SALZKARTOFFEEEL wrote:

Roan wrote:

Rip rip xD. Non text based configuration files are so much more peaceful :3. I'm going to implement all this though, So it'll be fixed. Even so it also removes the functionality to do crazy things, which is a shame xD. Moreover some of the caps are just random values I set, so I think I might keep some of them unbounded and only filter illegal arguments. (So for example size won't have a cap).
Okay :D

Roan wrote:

Also the reason some values for the updateRate won't work is because they actually have to conform to a certain equation: 1000 mod updateRate = 0
But that also means that 1000 ms is the maximum for the refresh delay, right? Because, for example, 1000 mod(2000) = 1000 ≠ 0. o:
If you wanted to, you could raise the maximum by just changing the 1000 to something greater than that, 10000, for example.
Yup, that's right the 1000ms refresh rate is the maximum. I guess I could change the 1000, but who'd want such a high update rate :3. 1000ms is already quite slow. I'll just raise it if you think it would be useful though :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I know what to do :3.
And I got more for you :3
Yay :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Yes you did :3, try reloading a configuration file with a custom size set a couple of times, the programs size will go off to infinity if you do it often enough :3, I acidentically implemented the size as an exponential funtion xD
huh, totally didn't think of just repeating stuff until something breaks :P
I like breaking programs too :3

SALZKARTOFFEEEL wrote:

Roan wrote:

You' re welcome ^^ I'm right before exams so I have a little more time then usual :3 but in a couple of weeks I probably won't have any time to work on this :(
Well, let's hope we get all the bugs found and fixed until then :D
xD You' re saying there'll actually be a point where you can no longer find any new bug o: that'd surprise me :D

SALZKARTOFFEEEL wrote:

Roan wrote:

Also made my introduction post fancy :3
fancy headlines? o.O
xD

Roan wrote:

The - in your filename doesn't work for me in older versions either, so I'm surprised it even works for you o.o?
Uhm. Okayyy.... It works for me, so I'm pretty surprised too o: Could different Java versions be a factor here? :S
I'm preatty sure different Java versions shouldn't be an issue. Well it'll be fixed with the new command line parsing I'm about the implement though ;)

SALZKARTOFFEEEL wrote:

Roan wrote:

Also what is this: – character even? It's not the normal - . For now I'll just release a new version with the changes I've already implemented :P
According to this Wikipedia article it is called the "en dash", I use it quite a lot, not just when breaking a sentence apart or writing numerical ranges o:
Most people write "--" (two Hyphen-minuses, 'normal' minuses on your keyboard) instead of "–", because, well, it's on your keyboard by default.
The more you know c:
Ah so that's what it is o:

SALZKARTOFFEEEL wrote:

Okay. Now to the real fun bit :^)

BUGS: 🐛

eugh, bugs D:
xD

SALZKARTOFFEEEL wrote:

1) Hotkeys (such as Ctrl + P) trigger when pressing the corresponding button (in this case P) twice! Pressing I twice resets the statistics, pressing Y twice hides the overlay, etc. This all, of course, without holding Ctrl down o:
o: this is quite serious (and weird) I wonder what causes this :roll:

SALZKARTOFFEEEL wrote:

2) (Enabling and) disabling "Track all keys" in the context menu actually disables the tracking of all keys, also the ones that are separate and should be tracked anyways :P
Oops looks like a made a mistake somewhere xD

SALZKARTOFFEEEL wrote:

3) Enabling "Track all keys" in the context menu (not just having it enabled, enabling it) disables the individual key counters. The whole averaging and the graph still works, but just the counters and the color inversion fail.
Nicely spotted :D I don't think I'd ever have found that one o:

SALZKARTOFFEEEL wrote:

4) Since version 5 the "Overlay osu!" option doesn't work. Maybe I just missed the part where you were explaining why you purposefully disabled it, but it doesn't work right now ¯\_(ツ)_/¯
That was causes by a little oversight from moving all the config related stuff. Looks like I forgot to move a single line xD. It's fixed now :D. It actually still worked if you enabled it from the right click menu. I don't plan on ever removing this feature by the way since I use it all the time :3.

SALZKARTOFFEEEL wrote:

Feature Request:

1) This is sort of a small bug as well, the "Pause/Resume" option doesn't have a tick-mark. You could just write "Pause" and display a tick, whether it is paused or not :D
Implemented :D

Rumi wrote:

I know this won't be helpful.. But this nifty tool doesn't work at all on Win10. All I'm getting is a white empty window after I hit CTRL+Y. :?
That's weird since as far as I know everything should be Windows 10 compatible. Unfortunatally I can't test that though since I only have access to Windows 7 & 8 at the moment. If you have more information please let me know. There might also be more information available when running the program via the command line (cmd), maybe an error is thrown. But otherwise without a concrete cause I'm afraid that I can't fix it :( . Thank you for reporting it though ;)

Edit
Checklist:
[x]: Weird commandline behavior
[x]: Visual glitch with Ctrl + Y and nothing to display.
[x]: Disabling track all disables all keys
[x]: Enabling track all disables all counters
[x]: Add reset command key
[x]: Overlay option not working
[x]: Add a checkmark to the pause option
[x]: Double tapping a key causes it to register as a command key
That was a weird one ._. I ended up using the following piece of code just to detect if Ctrl is also pressed o.o
Weirdnesss
boolean ctrl = (!frame.isFocusOwner()) ? ((event.getModifiers() & (NativeKeyEvent.CTRL_MASK | NativeKeyEvent.CTRL_L_MASK | NativeKeyEvent.CTRL_R_MASK)) != 0) : (((event.getModifiers() & (NativeKeyEvent.CTRL_MASK | NativeKeyEvent.CTRL_L_MASK | NativeKeyEvent.CTRL_R_MASK)) != 0) && (lastevent == null ? false : ((lastevent.getModifiers() & (NativeKeyEvent.CTRL_MASK | NativeKeyEvent.CTRL_L_MASK | NativeKeyEvent.CTRL_R_MASK)) != 0)));

Edit 2
Implemented/fixed everything so I'm releasing version 5.2 now.
Micha ohne el

Rumi wrote:

I know this won't be helpful.. But this nifty tool doesn't work at all on Win10. All I'm getting is a white empty window after I hit CTRL+Y. :?
This is odd o.O I'm using Windows 10 as well and (as you can tell by all my previous posts) it works pretty well for me o:
Do you have Java 8 installed, since that is a requirement, according to the introduction post?
Nygglatho

Roan wrote:

That's weird since as far as I know everything should be Windows 10 compatible. Unfortunatally I can't test that though since I only have access to Windows 7 & 8 at the moment. If you have more information please let me know. There might also be more information available when running the program via the command line (cmd), maybe an error is thrown. But otherwise without a concrete cause I'm afraid that I can't fix it :( . Thank you for reporting it though ;)
SPOILER
Exception in thread "main" java.lang.NullPointerException
at com.sun.java.swing.plaf.windows.XPStyle.getTypeEnumName(Unknown Source)
at com.sun.java.swing.plaf.windows.XPStyle.getBorder(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPBorderValue.getXPValue(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPValue.createValue(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getBorder(Unknown Source)
at javax.swing.UIManager.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorderInsets(Unknown Source)
at javax.swing.border.AbstractBorder.getBorderInsets(Unknown Source)
at javax.swing.JComponent.getInsets(Unknown Source)
at java.awt.GridLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at javax.swing.BoxLayout.checkRequests(Unknown Source)
at javax.swing.BoxLayout.preferredLayoutSize(Unknown Source)
at javax.swing.plaf.basic.BasicOptionPaneUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at java.awt.Window.pack(Unknown Source)
at javax.swing.JOptionPane.initDialog(Unknown Source)
at javax.swing.JOptionPane.createDialog(Unknown Source)
at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
at me.roan.kps.Main.configure(Main.java:552)
at me.roan.kps.Main.main(Main.java:200)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sun.java.swing.plaf.windows.XPStyle.getTypeEnumName(Unknown Source)
at com.sun.java.swing.plaf.windows.XPStyle.getBorder(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPBorderValue.getXPValue(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPValue.createValue(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getBorder(Unknown Source)
at javax.swing.UIManager.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorderInsets(Unknown Source)
at javax.swing.border.AbstractBorder.getBorderInsets(Unknown Source)
at javax.swing.JComponent.getInsets(Unknown Source)
at java.awt.GridLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at javax.swing.BoxLayout.checkRequests(Unknown Source)
at javax.swing.BoxLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Why didn't I think of that myself :o
Hope this helps. :D

//And yes, I'm using the latest Java 8 version.

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Topic Starter
Roan

Rumi wrote:

Roan wrote:

That's weird since as far as I know everything should be Windows 10 compatible. Unfortunatally I can't test that though since I only have access to Windows 7 & 8 at the moment. If you have more information please let me know. There might also be more information available when running the program via the command line (cmd), maybe an error is thrown. But otherwise without a concrete cause I'm afraid that I can't fix it :( . Thank you for reporting it though ;)
SPOILER
Exception in thread "main" java.lang.NullPointerException
at com.sun.java.swing.plaf.windows.XPStyle.getTypeEnumName(Unknown Source)
at com.sun.java.swing.plaf.windows.XPStyle.getBorder(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPBorderValue.getXPValue(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPValue.createValue(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getBorder(Unknown Source)
at javax.swing.UIManager.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorderInsets(Unknown Source)
at javax.swing.border.AbstractBorder.getBorderInsets(Unknown Source)
at javax.swing.JComponent.getInsets(Unknown Source)
at java.awt.GridLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at javax.swing.BoxLayout.checkRequests(Unknown Source)
at javax.swing.BoxLayout.preferredLayoutSize(Unknown Source)
at javax.swing.plaf.basic.BasicOptionPaneUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.BorderLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at java.awt.Window.pack(Unknown Source)
at javax.swing.JOptionPane.initDialog(Unknown Source)
at javax.swing.JOptionPane.createDialog(Unknown Source)
at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
at me.roan.kps.Main.configure(Main.java:552)
at me.roan.kps.Main.main(Main.java:200)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sun.java.swing.plaf.windows.XPStyle.getTypeEnumName(Unknown Source)
at com.sun.java.swing.plaf.windows.XPStyle.getBorder(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPBorderValue.getXPValue(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$XPValue.createValue(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getBorder(Unknown Source)
at javax.swing.UIManager.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorder(Unknown Source)
at javax.swing.border.TitledBorder.getBorderInsets(Unknown Source)
at javax.swing.border.AbstractBorder.getBorderInsets(Unknown Source)
at javax.swing.JComponent.getInsets(Unknown Source)
at java.awt.GridLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.BorderLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at javax.swing.BoxLayout.checkRequests(Unknown Source)
at javax.swing.BoxLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Why didn't I think of that myself :o
Hope this helps. :D

//And yes, I'm using the latest Java 8 version.

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Hmm, I've taken a look at the line numbers mentioned in the stacktrace, however as far as I can tell those lines are incapable of directly trowing the error you get :o . Therefore it's probably caused by some internal error. In the next version (v5.2) I'm catching this error so that when starting the program the configuration dialog is skipped. After that the dialog is skipped you should be able to ' live' configure the program via the right click menu. It's not ideal but I have no clue as to what is causing your error :/

Edit
Released version 5.2 I hope it sort of works now c:
Micha ohne el

Roan wrote:

xD I probably wouldn't be able to search for bug for 5 hours straigt though xD.
It's so much fun :P

Roan wrote:

I'd like to say so, but I honestly thougth I'd implemented that properly xD guess not :D
:D

Roan wrote:

I guess I forgot to mention that I actually improved on the config via command line functionality in v5.1. For the next version I'm going to improve on it even more by treating unrecognized non-ASCII characters as wild cards. This way all config files should be loaded, I hope xD
Uhm. Yes, you did forget to mention it :P
I don't think, treating them as wildcards is the best solution, though. If I had a file called "–.kpsconf2" or, things like that, it wouldn't recognize this one file anymore, since it has been interpreted to "*.kpsconf2", which would be all files with the .kpsconf2 extension. This could be dangerous o:
Think of Japanese computers for example. A file called "こんふぃぐ.kpsconf2"* would probably not work properly, since it would be interpreted to "*****.kpsconf2" o:
* that would be "config" / "konfigu" in Japanese (Hiragana, because I can't remember Katakana that well just yet) :P

Roan wrote:

^^ I bascially had to hack a part of the Java source code to implement them though :3. Variable assignment has never been so difficult:
How to assign a stubborn variable
private void setIcon(){
BasicMenuItemUI ui = (BasicMenuItemUI)this.getUI();
try {
Class<?> superClass = ui.getClass();
while(!superClass.getName().equals(BasicMenuItemUI.class.getName())){
superClass = superClass.getSuperclass();
}
Field field = superClass.getDeclaredField("checkIcon");
field.setAccessible(true);
field.set(ui, checkmark);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
haha, and that all just for changing a few colors of some tick-marks c: They do look a lot better now, though :D

Roan wrote:

Implemented/fixed all this for the next version. The reload command key is: Ctrl + R.
( ノ ゚ー゚)ノ

Roan wrote:

Yup, that's right the 1000ms refresh rate is the maximum. I guess I could change the 1000, but who'd want such a high update rate :3. 1000ms is already quite slow. I'll just raise it if you think it would be useful though :)
Yeah, one second is more than enough c:


Roan wrote:

I like breaking programs too :3
^^

Roan wrote:

xD You' re saying there'll actually be a point where you can no longer find any new bug o: that'd surprise me :D
Who knows? o:
There are things that just don't have many bugs, and there are things that have new bugs discovered even after many years :D
would surprise me too, though :D

Roan wrote:

I'm preatty sure different Java versions shouldn't be an issue. Well it'll be fixed with the new command line parsing I'm about the implement though ;)
yay \:D/

Roan wrote:

Ah so that's what it is o:
yup ^~^

Roan wrote:

o: this is quite serious (and weird) I wonder what causes this :roll:
That :roll: is the creepiest smiley ever xD

Roan wrote:

Oops looks like a made a mistake somewhere xD

[x]: Disabling track all disables all keys
No more mistakes here c:

Roan wrote:

Nicely spotted :D I don't think I'd ever have found that one o:

I'm sorry, it just reminded me of this :3

Roan wrote:

That was causes by a little oversight from moving all the config related stuff. Looks like I forgot to move a single line xD. It's fixed now :D. It actually still worked if you enabled it from the right click menu. I don't plan on ever removing this feature by the way since I use it all the time :3.
c:

Roan wrote:

Implemented :D
ヽ(。・ω・。)ノ

yay c:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Roan wrote:

xD I probably wouldn't be able to search for bug for 5 hours straigt though xD.
It's so much fun :P
xD

SALZKARTOFFEEEL wrote:

Roan wrote:

I'd like to say so, but I honestly thougth I'd implemented that properly xD guess not :D
:D

Roan wrote:

I guess I forgot to mention that I actually improved on the config via command line functionality in v5.1. For the next version I'm going to improve on it even more by treating unrecognized non-ASCII characters as wild cards. This way all config files should be loaded, I hope xD
Uhm. Yes, you did forget to mention it :P
I don't think, treating them as wildcards is the best solution, though. If I had a file called "–.kpsconf2" or, things like that, it wouldn't recognize this one file anymore, since it has been interpreted to "*.kpsconf2", which would be all files with the .kpsconf2 extension. This could be dangerous o:
Think of Japanese computers for example. A file called "こんふぃぐ.kpsconf2"* would probably not work properly, since it would be interpreted to "*****.kpsconf2" o:
* that would be "config" / "konfigu" in Japanese (Hiragana, because I can't remember Katakana that well just yet) :P
Well I don't have any other solution. Also one non-ASCII character only counts for one character. So for example: something-こ.kpsconf2 would be interpreted as something-*.kpsconf2. Now any character is allowed at the place of the *. So *.kpsconf2 would only match .kpsconf2 files that have a name that is a single character long. So it'll still load -.kpsconf2 unless ofcourse there's another file with a one character name like こ.kpsconf2 that would match too. But not ab.kpsconf2.

SALZKARTOFFEEEL wrote:

Roan wrote:

^^ I bascially had to hack a part of the Java source code to implement them though :3. Variable assignment has never been so difficult:
How to assign a stubborn variable
private void setIcon(){
BasicMenuItemUI ui = (BasicMenuItemUI)this.getUI();
try {
Class<?> superClass = ui.getClass();
while(!superClass.getName().equals(BasicMenuItemUI.class.getName())){
superClass = superClass.getSuperclass();
}
Field field = superClass.getDeclaredField("checkIcon");
field.setAccessible(true);
field.set(ui, checkmark);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
haha, and that all just for changing a few colors of some tick-marks c: They do look a lot better now, though :D
Yup :D

SALZKARTOFFEEEL wrote:

Roan wrote:

Implemented/fixed all this for the next version. The reload command key is: Ctrl + R.
( ノ ゚ー゚)ノ

Roan wrote:

Yup, that's right the 1000ms refresh rate is the maximum. I guess I could change the 1000, but who'd want such a high update rate :3. 1000ms is already quite slow. I'll just raise it if you think it would be useful though :)
Yeah, one second is more than enough c:


Roan wrote:

I like breaking programs too :3
^^

Roan wrote:

xD You' re saying there'll actually be a point where you can no longer find any new bug o: that'd surprise me :D
Who knows? o:
There are things that just don't have many bugs, and there are things that have new bugs discovered even after many years :D
would surprise me too, though :D
Yeah bugs really like to hide :3.

SALZKARTOFFEEEL wrote:

Roan wrote:

I'm preatty sure different Java versions shouldn't be an issue. Well it'll be fixed with the new command line parsing I'm about the implement though ;)
yay \:D/

Roan wrote:

Ah so that's what it is o:
yup ^~^

Roan wrote:

o: this is quite serious (and weird) I wonder what causes this :roll:
That :roll: is the creepiest smiley ever xD
Yeah it's kinda creepy xD.

SALZKARTOFFEEEL wrote:

Roan wrote:

Oops looks like a made a mistake somewhere xD

[x]: Disabling track all disables all keys
No more mistakes here c:
Yay :D

SALZKARTOFFEEEL wrote:

Roan wrote:

Nicely spotted :D I don't think I'd ever have found that one o:

I'm sorry, it just reminded me of this :3
:3 so cute

SALZKARTOFFEEEL wrote:

Roan wrote:

That was causes by a little oversight from moving all the config related stuff. Looks like I forgot to move a single line xD. It's fixed now :D. It actually still worked if you enabled it from the right click menu. I don't plan on ever removing this feature by the way since I use it all the time :3.
c:

Roan wrote:

Implemented :D
ヽ(。・ω・。)ノ

yay c:
There are no new bug reports in this post o: that really surprised me xD.
Nygglatho
Hey, sorry for the late reply :o

Just wanted to let you know that 5.2s workaround fixed my issue. :) Many thanks!
Topic Starter
Roan

Rumi wrote:

Hey, sorry for the late reply :o

Just wanted to let you know that 5.2s workaround fixed my issue. :) Many thanks!
Yay :) glad it works for you now ;)

Edit
Update notes (v5.3):
- Added the option to track mouse buttons
- Added the option to save the on screen position of the program to the config.

Edit 2
Update notes (v5.4):
- Fix the backgroud opacity being used as the graph foreground opacity.
- Fix the key color not being inverted when the background opacity is 0%.
- Fixed some rendering issues when only displaying a single panel.
- Fix changing the colors resetting the key counters.
- Fix the pause check mark in the right click menu not being toggled by Ctrl + T.
- Change overlay osu! to overlay mode since it doesn't always overlay osu! properly.
Micha ohne el
Woah, it's been a while :/ I completely skipped version 5.3 and you fixed so many bugs on your own! :D
Sorry for that :c

Roan wrote:

Well I don't have any other solution. Also one non-ASCII character only counts for one character. So for example: something-こ.kpsconf2 would be interpreted as something-*.kpsconf2. Now any character is allowed at the place of the *. So *.kpsconf2 would only match .kpsconf2 files that have a name that is a single character long. So it'll still load -.kpsconf2 unless ofcourse there's another file with a one character name like こ.kpsconf2 that would match too. But not ab.kpsconf2.
Huh, from my understanding of asterisks/wild cards they represent any number of any character!
"*.*" is used in many different languages and situations to say "every file", not just every file with a file name and extension that's only one character long! o:
I mean, if it is actually true that every non-ASCII character represents one other character in your program, then that's great, but I thought actual wild cards worked differently :D

Roan wrote:

:3 so cute
Yeah, she really is :3

[quote"Roan"]
There are no new bug reports in this post o: that really surprised me xD.
[/quote]Yeah, I didn't have that much time and I couldn't find any that quick c:
which doesn't mean that I don't have any now c:

Roan wrote:

Edit
Update notes (v5.3):
- Added the option to track mouse buttons
- Added the option to save the on screen position of the program to the config.

Edit 2
Update notes (v5.4):
- Fix the backgroud opacity being used as the graph foreground opacity.
- Fix the key color not being inverted when the background opacity is 0%.
- Fixed some rendering issues when only displaying a single panel.
- Fix changing the colors resetting the key counters.
- Fix the pause check mark in the right click menu not being toggled by Ctrl + T.
- Change overlay osu! to overlay mode since it doesn't always overlay osu! properly.
o.O that's much o:


Bugs:

1) The context menu controls have the same keys as the window-moving, the arrow keys. They interfere with each other. I don't think this is that big of a deal, but I wanted to point it out c:

2) Removing any keys (mouse buttons as well) doesn't work o: The keys aren't displayed anymore, but they still affect the average, maximum, etc.

3) This probably has to do with bug #2, but anyway: Loading a new config file also doesn't disable the previous keys, I can still use them.

4) I'm not sure whether this is a feature or a bug. Loading a new config file doesn't reset any of the stats or totals.

5) Having the background color opacity lower than 100% does.. stuf.... I've prepared a video o:
At first I thought, this would only affect the color negation of the key counters, that's why I made this GIF file:
But no, it affects pretty much everything :D For example, the general slowness of the program and it showing weird white strips in the config menu is weird to me too. When I reset the opacity to 100% everything is fine again, but not when it's below that o:

It probably has something to do with this fix that you previously wrote:

- Fix the key color not being inverted when the background opacity is 0%.

Request:

1) I think we both didn't even think of this. The key counter has it's cancel-button now, but everything else doesn't :D
I believe that it's not very important, there isn't all that much to lose at the other menus (except the color picker) o:





Uhm, that's it again. I probably missed something, though :D



By the way, and this has nothing to do with KeysPerSecond, I figured out some new ways to use the auto-replace feature of AutoHotkey, which I use in my program to create the "–", "©", "≠", and so on. It can now quickly tell time and date, and restart/exit itself just by typing the 'commands' anywhere.
And then I actually made it so that it would autocomplete the osu! BBCode tags, just for writing these posts a bit easier c:
Though, I'm pretty sure that I won't really release it publicly o:
Topic Starter
Roan

SALZKARTOFFEEEL wrote:

Woah, it's been a while :/ I completely skipped version 5.3 and you fixed so many bugs on your own! :D
Sorry for that :c
^^ actually I was starting too fee lonely ;-;

SALZKARTOFFEEEL wrote:

Roan wrote:

Well I don't have any other solution. Also one non-ASCII character only counts for one character. So for example: something-こ.kpsconf2 would be interpreted as something-*.kpsconf2. Now any character is allowed at the place of the *. So *.kpsconf2 would only match .kpsconf2 files that have a name that is a single character long. So it'll still load -.kpsconf2 unless ofcourse there's another file with a one character name like こ.kpsconf2 that would match too. But not ab.kpsconf2.
Huh, from my understanding of asterisks/wild cards they represent any number of any character!
"*.*" is used in many different languages and situations to say "every file", not just every file with a file name and extension that's only one character long! o:
I mean, if it is actually true that every non-ASCII character represents one other character in your program, then that's great, but I thought actual wild cards worked differently :D
Yeah, normal behavior would be to match any number of characters. But since I implemented the wildcarding system for KeysPerSecond myself I restricted it to only a single character per non-ASCII character :D

SALZKARTOFFEEEL wrote:

Roan wrote:

:3 so cute
Yeah, she really is :3

Roan wrote:

There are no new bug reports in this post o: that really surprised me xD.
Yeah, I didn't have that much time and I couldn't find any that quick c:
which doesn't mean that I don't have any now c:
Yay :)

SALZKARTOFFEEEL wrote:

Roan wrote:

Edit
Update notes (v5.3):
- Added the option to track mouse buttons
- Added the option to save the on screen position of the program to the config.

Edit 2
Update notes (v5.4):
- Fix the backgroud opacity being used as the graph foreground opacity.
- Fix the key color not being inverted when the background opacity is 0%.
- Fixed some rendering issues when only displaying a single panel.
- Fix changing the colors resetting the key counters.
- Fix the pause check mark in the right click menu not being toggled by Ctrl + T.
- Change overlay osu! to overlay mode since it doesn't always overlay osu! properly.
o.O that's much o:
Well I had some spare time :3

SALZKARTOFFEEEL wrote:

Bugs:

1) The context menu controls have the same keys as the window-moving, the arrow keys. They interfere with each other. I don't think this is that big of a deal, but I wanted to point it out c:
:o you can actually use the arrow keys to move in the context menu xD. Didn't know that :3. In that case I'll just prevent the window from moving when the context menu is open.

SALZKARTOFFEEEL wrote:

2) Removing any keys (mouse buttons as well) doesn't work o: The keys aren't displayed anymore, but they still affect the average, maximum, etc.
Ehm, yeah, xD, this is a side effect of a certain bug fix :3, which apparently introduced new bugs xD.

Roan wrote:

- Fix changing the colors resetting the key counters.

SALZKARTOFFEEEL wrote:

3) This probably has to do with bug #2, but anyway: Loading a new config file also doesn't disable the previous keys, I can still use them.
Yup, this has exactly the same cause as #2 ^^

SALZKARTOFFEEEL wrote:

4) I'm not sure whether this is a feature or a bug. Loading a new config file doesn't reset any of the stats or totals.
Well I think it should just reset them, so I'll call it a bug :3

SALZKARTOFFEEEL wrote:

5) Having the background color opacity lower than 100% does.. stuf.... I've prepared a video o:
At first I thought, this would only affect the color negation of the key counters, that's why I made this GIF file:
But no, it affects pretty much everything :D For example, the general slowness of the program and it showing weird white strips in the config menu is weird to me too. When I reset the opacity to 100% everything is fine again, but not when it's below that o:

It probably has something to do with this fix that you previously wrote:

- Fix the key color not being inverted when the background opacity is 0%.
Well this is interesting, since this actually doesn't happen on Window 7 or Windows 8 o: I wonder what they changed xD. It looks as though the
text is interpreted as white, which is interesting. So now I just need to steal someone's Windows 10 laptop for testing purposes :3

SALZKARTOFFEEEL wrote:

Request:

1) I think we both didn't even think of this. The key counter has it's cancel-button now, but everything else doesn't :D
I believe that it's not very important, there isn't all that much to lose at the other menus (except the color picker) o:
The color picker already has cancel functionality :3. The color menu & add key menu also have it. I guess I'll add it for the update rate, graph, precision & size too since it shouldn't be too difficult to add anyway.


SALZKARTOFFEEEL wrote:

Uhm, that's it again. I probably missed something, though :D
Probably, bugs always show up when you least expect them, ninja bugs :3

SALZKARTOFFEEEL wrote:


By the way, and this has nothing to do with KeysPerSecond, I figured out some new ways to use the auto-replace feature of AutoHotkey, which I use in my program to create the "–", "©", "≠", and so on. It can now quickly tell time and date, and restart/exit itself just by typing the 'commands' anywhere.
And then I actually made it so that it would autocomplete the osu! BBCode tags, just for writing these posts a bit easier c:
Though, I'm pretty sure that I won't really release it publicly o:
:) that's very useful actually xD. I think there would be interest in a program that automatically completes BBCode tags ^^

Edit
Todo list:
[x]: Cancel option for graph, size, precision & update rate
[x]: Fix opacity weirdness #5
[x]: Fix config file not resetting stats
[x]: Fix keys not actually being removed
[x]: Fix keys not being removed when a new config is loaded
[x]: Fix arrow keys moving both the context menu & program.

Edit 2
Released version 5.5.

Edit 3
Released version 6.0 with the folowing fixes & features:
- Minor internal optimizations.
- Context menu GUI improvements / changes & custom colours compatibility.
- Fix context menu arrow not being colored.
- Fix a bug where the general menu section wasn't saved properly.
- Add a panel that shows the total amount of hits accros all keys.
- Fix the context menu highlighting disappearing when changing the background opacity to 100%.
- Fix not all context menu items being colored correctly when using custom colors & having them disabled.
- Fix context menu selection not being reset properly.
- Implement the option to change the command keys and save them to the configuration file.

Edit 4
Released version 6.1 to fix a bug:
- Fix the background opacity controlling the global opacity (for example a background opacity of 0% will make the window invisible even if the foreground opacity isn't 0%).
WF Night
if my osu! is in full screen mode, can this be showed?
Topic Starter
Roan

WF Night wrote:

if my osu! is in full screen mode, can this be showed?
osu! can be in fullscreen resolution, but it can't actually have the fullscreen property set. Otherwise both programs will fight for the top window property (fullscreen implies topmost window) and that causes neither of them to work correctly :/

I've experimented with a lot of things, but currently I haven't found an alternative or fix for this issue yet :o .
Kizuna
Good kps programs for osu (or other games), thanks you :D

Btw, I don't know if this is a bug, but, when I add key on the kps, some show a totally different thing, like the key ": or /" on a azerty keyboard is show as "barre oblique" (french word for choosing "/") or the key "! or §" is show as "¥" or even the shift key on the right show an error "unknown keycode: 0xe36" ;w;

So I was wondering if you can do something for this because it's really weird

Here a screen of the programs when launched : http://i.imgur.com/160g6zJ.png
Here one on the key panel : http://i.imgur.com/w0I0MUu.png
IxWolfie

Roan wrote:

Otherwise both programs will fight for the top window property (fullscreen implies topmost window) and that causes neither of them to work correctly :/
You'd have to un-prioritize osu by being on top (which I believe is impossible when it's in fullscreen without breaking it).

On another note, is there a way you can add commands to be added. For example, ctrl+1? I'm kind of multi-purposing this for something else, and I can't find a KPS program that will do that.
Topic Starter
Roan

Kizunuko-P wrote:

Good kps programs for osu (or other games), thanks you :D

Btw, I don't know if this is a bug, but, when I add key on the kps, some show a totally different thing, like the key ": or /" on a azerty keyboard is show as "barre oblique" (french word for choosing "/") or the key "! or §" is show as "¥" or even the shift key on the right show an error "unknown keycode: 0xe36" ;w;

So I was wondering if you can do something for this because it's really weird

Here a screen of the programs when launched : http://i.imgur.com/160g6zJ.png
Here one on the key panel : http://i.imgur.com/w0I0MUu.png
>.< I'm sorry for the late reply, for some reason I got unsubscribed from the thread and I've been kinda busy with exams. That being said, this looks like quite a weird bug. It might have something to do with keyboard layouts and as of now I'm not yet sure whether or not it's an issue with the native library I'm using or my program. I'll look into it after exams ^^.

Glad you like the program :) .

IxWolfie wrote:

Roan wrote:

Otherwise both programs will fight for the top window property (fullscreen implies topmost window) and that causes neither of them to work correctly :/
You'd have to un-prioritize osu by being on top (which I believe is impossible when it's in fullscreen without breaking it).
I tried taking the fullscreen property from osu! by force, but that came with some undesirabe side effects xD. Most notably the fact that all of the benefits of running fullscreen where gone :(

IxWolfie wrote:

On another note, is there a way you can add commands to be added. For example, ctrl+1? I'm kind of multi-purposing this for something else, and I can't find a KPS program that will do that.
Do you mean extra custom command bindings? If that's the case that shouldn't be too hard to do since most of the command related logic is quite modular already. I'll give it a go after exams ^^.

P.S. My exams end wednesday.

Edit
Kizunuko-P I just thought of a cheaty way to solve your problem temporarily. Once you have added all the keys you can save them to a config file. After that you can edit the config file using a text editor and change the name of the keys. After loading that config file with KeysPerSecond the edited key names should be displayed ^^

Edit 2
Found the cause of the bug, working on a fix.
IxWolfie

Roan wrote:

Do you mean extra custom command bindings? If that's the case that shouldn't be too hard to do since most of the command related logic is quite modular already. I'll give it a go after exams ^^.

P.S. My exams end wednesday.
Just to be sure we think the same thing, when it asks for a keybind, and I put Alt+4, it'll only go up when I press alt and 4 at the same time. Having 4, and alt+4 as separate commands.
Topic Starter
Roan

IxWolfie wrote:

Roan wrote:

Do you mean extra custom command bindings? If that's the case that shouldn't be too hard to do since most of the command related logic is quite modular already. I'll give it a go after exams ^^.

P.S. My exams end wednesday.
Just to be sure we think the same thing, when it asks for a keybind, and I put Alt+4, it'll only go up when I press alt and 4 at the same time. Having 4, and alt+4 as separate commands.
Hmm, I not quite sure if I understand it correctly or not. As I read it now you want 'Alt+4' and '4' to act as seperate commands right? And pressing 'Alt+4' should not trigger the '4' command.

If that's the case then it should already work that way. If it doesn't then you've probably found a bug ;).

Otherwise I don't yet understand the problem/request :o
IxWolfie

Roan wrote:

Hmm, I not quite sure if I understand it correctly or not. As I read it now you want 'Alt+4' and '4' to act as seperate commands right? And pressing 'Alt+4' should not trigger the '4' command.

If that's the case then it should already work that way. If it doesn't then you've probably found a bug .
I tried it earlier, and it wouldn't actually recognize Alt+4 as a command. It'd see that I pressed 4, and assume that I only wanted 4 down.

Example:
Assign a key.
Hold Alt, then press 4.
Only 4 will appear (when I tested it).
Topic Starter
Roan

IxWolfie wrote:

Roan wrote:

Hmm, I not quite sure if I understand it correctly or not. As I read it now you want 'Alt+4' and '4' to act as seperate commands right? And pressing 'Alt+4' should not trigger the '4' command.

If that's the case then it should already work that way. If it doesn't then you've probably found a bug .
I tried it earlier, and it wouldn't actually recognize Alt+4 as a command. It'd see that I pressed 4, and assume that I only wanted 4 down.

Example:
Assign a key.
Hold Alt, then press 4.
Only 4 will appear (when I tested it).
o: you're talking about tracked keys. Since I've improved the modifier system I suppose that could be implemented. I'll give it a go tomorrow if I have time. Not sure how I'm going to visually display that the key has Ctrl and/or Alt added though.

So just to check I now understand it. You want the option to track key presses for a key-modifier combination such as Alt+4.
IxWolfie

Roan wrote:

o: you're talking about tracked keys. Since I've improved the modifier system I suppose that could be implemented. I'll give it a go tomorrow if I have time. Not sure how I'm going to visually display that the key has Ctrl and/or Alt added though.

So just to check I now understand it. You want the option to track key presses for a key-modifier combination such as Alt+4.
Yes, that's it! Sorry for being difficult, lmao. I'm using for something COMPLETELY unrelated to osu. I'm actually using it for an MMO, where some of my skill hotkeys are alt+1-5 for example. On top of that, some of my hotkeys are 1-5. So, I want it to track the key combinations alt+1, through alt+5, as well as 1-5 as separate keys. This is the only program that actually has a decent GUI to it to show on a video, or on stream perhaps.

For tracking it, you could just do A+1, or C+1? It'd keep it small, so it doesn't stick super far out of the physical key icon that's there, perhaps?
Topic Starter
Roan

IxWolfie wrote:

Roan wrote:

o: you're talking about tracked keys. Since I've improved the modifier system I suppose that could be implemented. I'll give it a go tomorrow if I have time. Not sure how I'm going to visually display that the key has Ctrl and/or Alt added though.

So just to check I now understand it. You want the option to track key presses for a key-modifier combination such as Alt+4.
Yes, that's it! Sorry for being difficult, lmao. I'm using for something COMPLETELY unrelated to osu. I'm actually using it for an MMO, where some of my skill hotkeys are alt+1-5 for example. On top of that, some of my hotkeys are 1-5. So, I want it to track the key combinations alt+1, through alt+5, as well as 1-5 as separate keys. This is the only program that actually has a decent GUI to it to show on a video, or on stream perhaps.

For tracking it, you could just do A+1, or C+1? It'd keep it small, so it doesn't stick super far out of the physical key icon that's there, perhaps?
:) okay, now I can start adding it ;) . I don't really have a strict ETA but I think I'll be able to get it done before the end of this week.
I never even though about using it for an MMO though xD. But it's a very valid use, so I'll be adding support for keys with one or more of the three modifier keys (shift, alt, ctrl) I added shift since that is the modifier key I use in MMO's :D .
IxWolfie

Roan wrote:

:) okay, now I can start adding it ;) . I don't really have a strict ETA but I think I'll be able to get it done before the end of this week.
I never even though about using it for an MMO though xD. But it's a very valid use, so I'll be adding support for keys with one or more of the three modifier keys (shift, alt, ctrl) I added shift since that is the modifier key I use in MMO's :D .
Take your time! No rush at all!
Topic Starter
Roan

Kizunuko-P wrote:

Good kps programs for osu (or other games), thanks you :D
Btw, I don't know if this is a bug, but, when I add key on the kps, some show a totally different thing, like the key ": or /" on a azerty keyboard is show as "barre oblique" (french word for choosing "/") or the key "! or §" is show as "¥" or even the shift key on the right show an error "unknown keycode: 0xe36" ;w;
So I was wondering if you can do something for this because it's really weird
Here a screen of the programs when launched : http://i.imgur.com/160g6zJ.png
Here one on the key panel : http://i.imgur.com/w0I0MUu.png


This should now mostly be fixed in version 6.2 :D. The only thing I'm not sure about is the "¥" and shift case.

IxWolfie wrote:

Roan wrote:

:) okay, now I can start adding it ;) . I don't really have a strict ETA but I think I'll be able to get it done before the end of this week.
I never even though about using it for an MMO though xD. But it's a very valid use, so I'll be adding support for keys with one or more of the three modifier keys (shift, alt, ctrl) I added shift since that is the modifier key I use in MMO's :D .

Take your time! No rush at all!


Implemented :D, I haven't tested it very thoroughly though so there might still be some bugs.

P.S. One minor detail is that pressing the key and after that a modifier doesn't trigger the tracker. But finding a way around that would impact performance. Besides you usually already have the modifier key down when pressing the 'real' key. I might change this later though if I come up with an efficient algorithm.
IxWolfie

Roan wrote:

Implemented :D, I haven't tested it very thoroughly though so there might still be some bugs.
P.S. One minor detail is that pressing the key and after that a modifier doesn't trigger the tracker. But finding a way around that would impact performance. Besides you usually already have the modifier key down when pressing the 'real' key. I might change this later though if I come up with an efficient algorithm.


Alright! I'll test it in a little bit and tell you if I find anything. Big shoutout! <3 Also, these new forums are a little weird.. I'm not used to it yet. :p
Topic Starter
Roan

IxWolfie wrote:

Roan wrote:

Implemented :D, I haven't tested it very thoroughly though so there might still be some bugs.
P.S. One minor detail is that pressing the key and after that a modifier doesn't trigger the tracker. But finding a way around that would impact performance. Besides you usually already have the modifier key down when pressing the 'real' key. I might change this later though if I come up with an efficient algorithm.

Alright! I'll test it in a little bit and tell you if I find anything. Big shoutout! <3 Also, these new forums are a little weird.. I'm not used to it yet. :p

^^ Yeah I'm not completely used to the new forums either, but since I don't get to update this program that often anymore. I thought I'd change the link before the old one goes down :3
RockRoller
(I didnt read all 5 pages, hoping nobody allready made these suggestions)

I really like your program. The functionality is perfect, but it doesnt look god for me. I would be happy if we could have a little bit more freedom with the design.
I would replace the default keycounter with yours, but yours is horizontal.
What I would wish is that we cann re-arange the positionating of the keys, so we could for example form it like the inputoverlay. Then we could do for example K1,K2,Avg and Max instead of K1,k2,M1,M2 from osus keycounter.


I hope you can understand my bad english, if u have any questions about my suggestions please answer to this reply or write me ingame.
Topic Starter
Roan

RockRoller wrote:

(I didnt read all 5 pages, hoping nobody allready made these suggestions)

I really like your program. The functionality is perfect, but it doesnt look god for me. I would be happy if we could have a little bit more freedom with the design.
I would replace the default keycounter with yours, but yours is horizontal.
What I would wish is that we cann re-arange the positionating of the keys, so we could for example form it like the inputoverlay. Then we could do for example K1,K2,Avg and Max instead of K1,k2,M1,M2 from osus keycounter.


I hope you can understand my bad english, if u have any questions about my suggestions please answer to this reply or write me ingame.
I think I get the general idea (being able to arrange the keys in any layout horizontal & vertical). It'll probably take a while to implement though ;) .

Edit:
Finally done implementing this :)
There might be some new bugs aswell though :D so if you find any, please report them ^^
Topic Starter
Roan

New updates

Version 6.3

Add a lot of layout related options:
- All text can now be rendered either horizontal or vertical (default)
- Panels can now be organized in a grid instead of just a single row. The number of rows and columns is custom.
- Positions can now also be assigned to the max, avg, cur & tot panels. Meaning they can now also be placed at a custom place instead of at the end of the row.
- 4 new modes of the graph are implemented. Under the other components (default), on top of them, on the right of them, on the left of them and detached. When the graph is detached it gets it's own window that can be given a custom size.
- The graph dimensions are no longer fixed and can be changed (as long as the side isn't shared).
- Support to save & load all of the above to a configuration file.

Version 6.4
Fix the position/index feature not working. (version 6.4)

Version 6.5
- Added warning dialog to prevent more keys being added then there are rows & columns.
- Added an extra render mode for rendering horizontal keys in the value-text format.
- Add specific reset commands to the reset menu.
gaming epic
I was searching for this aswell. Luckily you made one. Thanks! ;)
show more
Please sign in to reply.

New reply