Posts Tagged ‘Pretty pictures’

Knights in shining armor

Since there was some negative commentary about the looks of Knights in my previous post, I took the popular advice and used Plasma’s clock in Knights. And you were correct: it looks much more pleasing to the eye now. The Plasma guys know what they’re doing.

And here is a shot with the KDE default widget style and colors. The theme is a variation of the previous one, again from the XBoard program. It doesn’t really fit in either, I know.

This unfortunately introduces a new dependency: You need at least one Plasma theme, and those reside in kdebase-runtime-data. This should not be needed for a chess game, so I plan to add a check for a theme and fall back to the previous solution if none is found. As noted by Aaron in the comments, hard-depending on kdebase-runtime is fine. Thanks for clearing that up, and sorry for spreading FUD.

The second thing was the horrible white background. The easy solution is to use a dark theme, all programs looks better that way. Really, be sure to try it if you haven’t already. Unfortunately, this is not so good on laptops (at least not on mine) because it does not mix well with lower screen brightness. Anyway, the proper way to do it is to allow the theme to specify its own background. I’m no artist, so no themes have it yet, but adding a simple mono-color rectangle that matches the board colors can make a big difference. I did check it though, with an even more horrible blue rectangle, so I’m sure it works. You just don’t want to see my tests, believe me.

The third thing is a kde-styled theme. There are six themes available now, but most are copies from other program and none of them looks kde-ish. I have wrote to kde-artists, but got little response (only about using the Plasma clock, big thanks for that). So if anyone is interested in making a nice kde-theme set of chess pieces, you’re very welcome 🙂

Octave-backend improvements

I’m having a bit of a pause between the exams, so I’m doing some hacking on the new Octave backend for Cantor. Thing are going very well, probably better (especially faster) that I expected.

The basic input-output sending between Cantor and the command-line process was working some time ago, and I recently added support for embedding graphics into the worksheet.

This week I was working on cosmetics: Autocompletion, syntax highlighting and pop-up help.

Completion for functions and variables

Completion for functions and variables

Completion was easy, octave provides a completion_matches() function which takes a string argument and return all functions and variables starting with that string.

Syntax highlighting and help

Highlighter - there can be only one.

Syntax help was also quite straightforward, through the use of Octave’s built-in help() command. Highlighting was where I spent most of the time, because as a command-line program Octave has no native support for it.

There’s a handy command called ‘who’ that lists all currently visible variables, so I retrieved the variable name list with it and used it in the highlighter. I then hardcoded a list of all recognised operators and keywords.

The toughest nut was getting a list of all functions from Octave. There’s no (at least known to me) equivalent to ‘who’ for functions, so I had to improvise. I didn’t want to hardcode all the functions, as is done for the Maxima backend, because, as we all know, hardcoding is bad, and there’s always the possibility of future changes to Octave language. The closest I could get is using completion_matches() with an empty string, but that returns all the internal constants, environment variables, and files in the current directory. I filtered them out the best I could, and the end result work well, despite there being more that 1600 functions.

Embedded plots in Cantor

Embedded plots in Cantor

Another think I worked on this week is getting as much plotting code as possible from C++ to an octave script. This not only unclutters the worksheet (there used to be a long line of commands instead of cantor_plot#d()), but makes simple changes to plotting faster by not requiring a recompile. Tweaking the size of the plot to prevent it from filling the whole page didn’t even need a new session, just an update to the script.