forum

Key presses per second program

posted
Total Posts
186
show more
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! ;)
Topic Starter
Roan

Nxshio wrote:

I was searching for this aswell. Luckily you made one. Thanks! ;)
I'm glad you like it :)

Update

Version 6.6
- 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.
Applome
can i see it while playing osu ???
Topic Starter
Roan

Applome wrote:

can i see it while playing osu ???
You can, but only if you don't run osu! with the fullscreen option checked (fullscreen resolution is fine).



Roan wrote:

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 .
Topic Starter
Roan

Update

- Implement a feature where you can save the statistics to a file
- Fix key capacity checks being incorrect
- Implement 6 additional rendering modes

- Improve overall performance
- Fix changing the update rate messing up the average
- Fix a multithreading issues (as kindly pointed out by freakode)
- Lots of internal refactoring & optimizations
- Improve startup times
- Fix a bug with the rendering mode loading
Vahr
THanks for making this, appreciate the help!
Topic Starter
Roan

Vahr wrote:

THanks for making this, appreciate the help!
You're welcome :) Glad you like it ^^
dressurf
Hi, Firstly , thank you for making this program,
but i'm afraid that it (or maybe only me) have the problem of using commands,
it seems like Ctrl + P (and other commands) is not working.
Do you have any recommandations that i have to do?
Topic Starter
Roan

anti- wrote:

Hi, Firstly , thank you for making this program,
but i'm afraid that it (or maybe only me) have the problem of using commands,
it seems like Ctrl + P (and other commands) is not working.
Do you have any recommandations that i have to do?
Hi, thank you for reporting this. I just tested it and it seems that I broke it somehow.
I'll try to find the bug and fix this a.s.a.p. meanwhile I discovered that if you change the command keys to something without a modifer (e.g. just P) then it will still work.
It'll hopefully be fixed soon and thank you for using KeysPerSecond :)

Edit: I found the bug, it should be fixed within about an hour from now.

Edit 2: All fixed :)

Update v7.1

-Fix command keys with modifiers not working
-Repaint the frame when resetting statistics or totals for an immediate display update
nobully
Hi, could you make an auto-load feature for config files? Thanks!
show more
Please sign in to reply.

New reply