On Wednesday, 1 July 2015 at 19:16:28 UTC, Vladde Nordholm wrote:
So today I released version 1.1.0 of my console rendering library clayers!


What this new update offers is support for colors, where you can set the text- and background-color! This is thanks to the library 'colorize' (d-colorize on GH).

In case you don't know what clayers is (which you most likely don't), it's a console rendering library aimed at console games. It currently supports layer handling and colors.

clayers on GitHub: https://github.com/vladdeSV/clayers
clayers on dub: http://code.dlang.org/packages/clayers

I saw this when you first announced it and have been meaning to write you about it. In some ways, it reminds me of a greenfield implementation of what I was getting into with the ncurses backend of my engine.

When I come back to that (Some day! Soon! Maybe!), I was thinking of pulling in Adam's terminal.d; this might make a good companion to that? I certainly wouldn't lose any sleep at night to replace ncurses entirely and I look forward to seeing what you come up with.

Thoughts/ideas/suggestions:
* I think everyone working on this problem ends up making coordinate types. ~_~;; I definitely recommend defining XCoord and YCoord as separate types so a common inversion bug is prevented-- that's saved me a number of times. In my experience, a straight alias was vexingly insufficient so I use a struct (though it's still not where I want it).

* Make a no-args init that detects terminal dimensions. It's just nicer that way.

* I like the two-corner constructor for ConsoleLayer. I can't remember why I didn't go that route myself. It may have been that I was just trying to "make it work" instead of "make it nice", but there could be something more. I forget.

* Relative (percentage-based) dimensions seem like they could be really handy, but I've never figured out how to make them feel good. Maybe you can do better.

* Simplify bordered windows. I feel pretty strongly that that should be abstracted into the ConsoleLayer, honestly. If not as part of the constructor, then as a property you can set. Default to nothing and allow setting it to a character ("#") or to a manifest constant that tells it to use unicode box drawing characters. (Or maybe the property is an enum BORDER {NONE, UNICODE, CHAR}, and the character is separate? I don't know.)

* A method to get the current layer order is probably worth considering. And a way to get the priority index for a layer. And even relative reordering; e.g. layerA.moveAbove(layerB);

* There's no way to move or resize a layer? Is the the idea to just destroy and recreate the layer with the new origin/size?

* Make writing to the window automatically go inside the border. This is actually why my BoxWin class wraps two ncurses panels: one is a border pane and the other is a text pane so I get trivial line wrapping (I have a small familiy of functions for print modeled after the write() family in stdio).

-Wyatt

Reply via email to