26 Commits

Author SHA1 Message Date
David Herrmann
c203b3a83d font: move font handling into new subsystem
We use a new font factory which is used to create a new font. It will later also
be used to cache fonts and select proper system fonts.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-01 18:27:09 +01:00
David Herrmann
4c236e110b Remove kmscon_char implementation
It was superceded by kmscon_symbol_t and is no longer used.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-01 17:45:57 +01:00
David Herrmann
a7128cc683 Adjust all code to use new kmscon_symbol_t
This is a big performance boost and reduces the code size quite a bit.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-01 17:43:57 +01:00
David Herrmann
af9ab4197c console: add UCS4 to UTF8 conversion
Allow to create new kmscon_char objects with UCS4 input.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 17:38:17 +01:00
David Herrmann
676b03cb5c console: add newline function
kmscon_console_newline() can be used to produce a newline. Writing \n doesn't
work as this would write \n as character into the cell and not produce a
newline.
The console does not perform any parsing so we provide a separate function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-26 14:24:31 +01:00
David Herrmann
4ca6eeae82 console: calculate width by font
Remove the *_set_res() function entirely. Instead, the *_resize() function now
accepts a height argument which is used as quality hint. Internally, we compute
the texture width by the selected font plus the given height. This simplifies
the API and the internal handling and improves output on non-standard
resolutions or with non-standard fonts.
Until now it was only optimized for my 16x9 output but 5x4 output was quite
garbled.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-26 12:45:54 +01:00
David Herrmann
cf21453430 console: measure font width
When creating a new font we automatically measure the average width of a
character. This allows us to draw fonts even on weird resolutions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-24 12:46:56 +01:00
David Herrmann
a20e5c3a18 console: allow resizing the console
Forward resizing requests to the buffer but correctly update our size cache and
the cursor position.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-21 16:39:51 +01:00
David Herrmann
d75404742b console: support writing to console
Add kmscon_console_write() to write a character to the current position of the
cursor. The cursor is automatically moved to the next cell.

Also extend the test_console example to use this new function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-21 16:30:06 +01:00
David Herrmann
994aef69fc console: rewrite buffer implementation
We now use a proper cache for the current screen and a linked list for the
scrollback buffer. This allows fast rotations and fast access.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-21 15:42:08 +01:00
David Herrmann
f7eca00957 console: remove cairo from header
There is no reason to make all tests/* apps need cairo dependencies. We pass
this parameter internally so we can safely use void*.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-20 21:40:35 +01:00
David Herrmann
fbd9446135 console: use new buffer implementation
Use the new kmscon_buffer in the console subsystem.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-18 12:58:47 +01:00
David Herrmann
0533c94677 console: allow resetting of kmscon_char's
Resetting a char should never fail so we provide a separate function that sets a
char to its default value.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-18 11:46:08 +01:00
David Herrmann
03a67f977a Console: Add buffer object
The buffer object manages the cells and scrollback buffer. It is optimized for
speed: fast rotations, fast resize, etc.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-04 17:56:43 +01:00
David Herrmann
8f06542909 Console: Simplify character handling
We add a new helper to initialize a new character directly to avoid two
allocations. This also refactors the character code and simplifies it alot.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-03 18:09:41 +01:00
David Herrmann
0d1acc526f Change license to MIT license
Further commits will need a Signed-off-by line, otherwise I cannot accept them.
MIT license is compatible with GPL so we still can switch to GPL in the future
if we want.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-02 13:23:22 +01:00
David Herrmann
77963ec305 Add kmscon_console_write() function
This function can be used to change the content of the current cell. It
automatically moves the cursor to the next cell.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-27 19:31:26 +01:00
David Herrmann
798276dea9 Add kmscon_char_set() helper
This helper allows to copy one char into another.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-27 16:10:11 +01:00
David Herrmann
0cf9a7a03c Add cursor movement helpers
Add functions to move the cursor of a console.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-27 15:50:59 +01:00
David Herrmann
c4d6c554fd Calculate font size properly
We set the font size to the absolute size we have per cell instead of using a
fixed font-size.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-26 17:12:17 +01:00
David Herrmann
27807e913e Add kmscon_font type
A kmscon_font object is used to store the current font information. It allows to
draw any kind of UTF-8 string to the screen. Internally, it uses kmscon_glyph to
store glyph information for every character that has been drawn so redrawing it
is much faster.

Currently, we only support GLYPH_LAYOUT as caching method which is quite slow.
However, it supports any kind of input and always works. Better and faster
caching algorithms like cairo_scaled_font_t will be added later.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-26 16:33:06 +01:00
David Herrmann
a12cf0aa7f Add kmscon_char_dup()
Add helper function to duplicate a kmscon_char object.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-26 15:27:10 +01:00
David Herrmann
9a853a796f Add cells to console objects
A console has a fixed line and column count. Each entry is represented by a
kmscon_cell object. The console can be resized on the fly.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-20 18:21:41 +01:00
David Herrmann
173d38c0f5 Add console drawing-logic
A console may be displayed on multiple outputs. We allow different screen
resolutions on these outputs so we need a way to map the console image onto
different outputs.

We simply render the console image into a cairo surface with a user-given
resolution. This should be set to the highest resultion of the used outputs. The
application can now map this image onto the different framebuffers. This will
scale the image if the target framebuffer is smaller than the cairo surface.

We also do not clear the framebuffer. This should be done by the user. This
allows us to draw with alpha values and blend the console on top of the current
framebuffer. We do not have to care for background images and the application
has full control of where the console is shown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-20 17:49:21 +01:00
David Herrmann
731091a70a Add kmscon_char type
Every cell of the console contains one single printable character. We want to be
Unicode compatible so we must support combined characters. Hence, each cell
consists of a UTF-8 string that can be drawn by pango as a single glyph.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-20 14:44:39 +01:00
David Herrmann
f85eb100f9 Add console subsystem dummy
Add dummy files for the console subsystem. This subsystem will be used to draw a
console to a framebuffer. It uses pango and cairo for text-rendering and will
provide all required modification functions that the terminal emulation will
require.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-11-20 00:41:15 +01:00