This is an experimental renderer based on pixman. It is only available for
testing-purposes and should not be used in production, yet. The bbulk
renderer is still the faster alternative and should be used instead.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The cairo text renderer uses the cairo blitting functions to blit all
glyphs into the cairo-surface. This is only for testing-purposes. Cairo is
not really suited for blending/blitting of large surfaces. Hence, this
backend is horribly slow compared to bblit/bbulk.
This backend is disabled by default.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Similar to the font backends we now require one backend to be always
available as safe fallback. The bblit backend is the most basic backend so
make it mandatory and link it unconditionally.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
When text-ops are registered via modules, we need an owner field so
they're correctly tracked. Hence, add this field to all text-ops and
correctly keep module references.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
All font definitions have been moved to font.h so remove the old
definitions and include font.h instead.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The owner fields specifies the module that provides the code for the given
backend. The font-core is responsible of ref/unref'ing the module so its
code is always available as long as the module exists.
We cannot push this into the modules as modules _must_ never call
kmscon_module_unref(KMSCON_THIS_MODULE)! Because this might drop the last
reference and hence the function might disallocate the module. However,
this means that it cannot return because the caller is _part_ of the
module and so no longer valid.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Each font-backend now also gets a .finalize callback that is called when
the last font-user drops its font. This will allow modules to destroy
themself when the last reference is dropped.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
With modules we no longer need to conditionally load backends. Instead
each module will register the backend with the main application on load.
This will temporarily break pango, freetype2 and unifont backends as they
are not registered until we introduce full module support.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We want to modularize the text-font library, so we need each backend as a
different library. This step links each of them into a different static
library so we can now link them either into the binary or into modules.
This step also makes 8x16 always compiled into the text-font backend so we
always have a working implementation even though no modules might be
loaded.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of implementing our own thread-safe backend-storage, we now use
the generic shl-registry object.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of implementing a thread-safe backend-system we can now use the
new shl-registry storage module.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Multi-cell glyphs are glyphs that span across multiple horizontal cells.
The font renderers already support this. This patch fixes the console
renderers to take advantage of this.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of clipping every character to a one-cell boundary, we now render
multi-cell characters correctly into multiple cells.
This does not adjust the console-renderers but only the font renderers to
provide the correct glyphs.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of using the uterm-screen indirection, we now directly access
uterm-display objects. We do not really intend to use virtual screens with
kmscon so there is no need to make this more complex.
I don't think consoles should every provide this feature. Instead, you
should use real compositors for such tasks like Wayland+wlterm. kmscon,
however, is rather an emergency tool or a safe backup than a fancy
daily-use-console.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We now allow the user to specify the font that is used for bold
characters. If NULL is given, the normal font is used.
The bold font is not used by any renderer backend, yet, but will be hooked
up later.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We build several tools inside of this repository and we need to make sure
all dependencies are met. Furthermore, we must make sure that default
values are recognized even on dependencies.
Hence, this reworks the whole configure.ac handling and does some renaming
of the constants that are used all over the source.
We need to test this some more weeks, but it should finally be a proper
autotools handling that we can release with kmscon-6.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of doing all this in main() we now use the two helpers. This makes
the code much more readable and avoids too many stuff in main().
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Sorry for the big commit, but I was working on the wlterm application and
then thought I can rework the whole configure-logic again. This mainly
renames all build-defines to BUILD_DEFINE_* and BUILD_HAVE_* and allows
specifying which applications to build via --enable-kmscon/--enable-wlterm
and similar.
wlterm is a new application which is a native wayland client with no
external dependencies. It serves several purposes:
* It uses TSM (not yet implemented, but will come soon) to create a
console independent from kmscon. This shows how TSM can easily be used
to create independent terminal emulators.
* It is a native wayland application (probably the first independent
wayland app so far?) and is used to test how well the wayland API
works. As wayland is still under heavy development, we need more
application-writers who report back whether the wayland-API makes
sense to them and whether it works correctly.
* A proper terminal-emulator for wayland! There is currently no proper
emulator so we really need something that we can work with.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
All TSM files use the "tsm_*" prefix and the object is now named "screen"
so rename the files to resemble this.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This is part of the TSM library creation. We also rename "console" to
"screen" as this layer actually manages the screen.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of converting symbols into UCS4 string in each backend, we now
pass the whole data from the console layer into the renderers.
This makes all renderers indepedent of any recently introduced
symbol-tables and they can be implemented inside of TSM without exporting
them. However, we still need to pass the IDs to the text layer. The text
layer must not use them for anything but identification. Moreover, it must
never assume that they are valid tsm_symbol_t values.
We do this so the backends can still have fast hashtable lookups rather
than allocating big keys containing the UCS4 string+length and using these
for lookups.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We finally want to get rid of any dependencies in the vte/console layer so
we can split it out into a separate library.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This removes this legacy name and also moves the attribute structure into
the console subsystem where it belongs. This currently creates circular
dependencies between text and console layers but we can ignore that for
now and fix it later.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The bbulk renderer is very similar to the bblit renderer but it assembles
a request-buffer of all characters and then pushes these requests via a
vector-call to the video hardware.
This turns out to increase performance slightly as we do not call into the
video subsystem for every characters but only once.
This renderer can reduce performance when used with partial-redraws (which
are not implemented, yet), so we keep the bblit renderer around.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds a new Unifont font-backend based on the recently added Unifont
data. The backend is disabled by default for 2 reasons:
- It takes about 5min to compile and needs >1GB of memory on an Intel
Atom N450
- License situation is unclear as it is GPL
Written-by: Ted Kotz <ted@kotz.us>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds an OpenGL text renderer. It uses textures to store glyph
information and renders the characters by assembling a vertex-list first.
To improve performance, we use texture-atlases.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This reworks the text renderer system to make it easier to write backends.
We also allow returning errors during rendering now.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This allows configuring the bblit backend during kmscon-build. If other
rendering backends are preferred, you can now compile kmscon without the
bblit backend.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The freetype2 renderer uses ft2 and fontconfig to provide a very
simplistic renderer. We also simplify the logic of the whole subsystem a
lot and guarantee that each glyph will have the same size now.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The bblit text-renderer is the most basic renderer which simply blits or
blends the glyphs into the framebuffer memory. It cannot be used with
displays that do not provide framebuffer access but only 3D access.
However, 3D rendering is currently broken, anyway, so we can ignore it.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The text-renderer subsystem provides a way to register arbitrary
text-rendering backends. These backends use the font-objects to draw the
console into a framebuffer.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The pango font backend is similar to the currently used older backend but
provides the new API. It is modular so we can disable it if not needed.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
When rendering underlines we need the baseline attribute. Therefore,
replace the unused x/y offsets with a baseline attribute.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The 8x16 font is a static in-memory font that can be used as safe
fallback. It does not allow scaling or other font decorations so it's
really just for very basic text-layouts.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
A single glyph might be bigger/smaller than the other glyphs so allow them
to be positioned. As we are not interested in details like baselines, we
simply use an x/y offset.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
When running as emergency console, we must correctly deal with missing
libraries. Therefore, our font renderers must be modular so if freetype2
is not found we must be able to load another font. Therefore, this
introduces a new font-subsystem which can add/remove font-renderers
on-the-fly.
The real font-renderer backends will follow. This only provides the
modular infrastructure.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>