The boot splash plugin now takes in a keyboard, text
displays, pixel displays, and the console.
I passes those along to the plugins, and listens for
key strokes to handle CTRL-L refresh and other keybindings.
So now it's assuming some of the role of ply-window.
Much of this code comes directly from ply-frame-buffer in libply,
but shoehorned to fit into the renderer plugin interface.
One improvement over the old code is it tracks VT changes, and
stops drawing when the wrong VT is active.
This is the graphical output portion of the window class. This
commit and the previous few commits lay the foundation needed
for dropping the window class and getting multi-head rendering support.
This is the text output portion of the window class. With this commit
and a subsequent commit to split out the graphical output portion,
we should be able to drop the window class.
As mentioned earlier, this will give us the flexibility we
need for multi-head rendering.
In order to support multiple rendering backends, and multi-head
monitor layouts, I'm moving the actually rendering to render
plugins.
Examples of plugins could be frame-buffer, drm fb, and x11
(for debugging).
The renderer class is responsible for loading the appropriate rendering
backend, and providing an interface for the rendering backend to
advertise multiple displays.
Right now we only check for a frame-buffer plugin, although, it isn't
implemented yet.
This is the terminal settings portion of the window class. With this
commit and subsequent commits to split out the higher level text output,
and graphical output portions, we should be able to drop window
in favor of the new display classes.
This serves a few purposes:
1) To watch for VT changes
2) To make VT changes
3) To put the console in KD_GRAPHICS mode
The latter is handled by the window class right now, but I want to
drop the window class.
This is the input portion of the window class. With this commit
and subsequent commits to split out the output portions, we should
be able to drop the window class.
This will give us the flexibility we need for multi-head rendering.
Right now a lot of pixel manipulation functions are in the frame buffer
code. This means it's hard to do these types of things without the
results showing up on the display.
Furthermore, we want to get away from one frame buffer anyway for
multihead support. I can imagine each display in a multihead
configuration with its own pixel buffer, so splash plugins can draw to
the independently.
This commit adds the start of a pixel buffer class, which just copies
and pastes most of pixel-twiddling frame buffer code. There are some
changes to deal with pixel buffers not always having a final alpha of
1.0, and some changes to provide a more flexible interface for masking
fill operations.
At some point it will probably gain copy-and-pastes of the resize an
rotate code from the image class as well, and provide a mechansim for
have subpixbufs where rowstride != width.
Sometimes it's necessary to deal with a disjoint
set of rectangles together.
One big example is when keeping track of which parts of
the screen have changed.
Another example would be for non-rectangular clip masks.
This commit adds a new region class to simplify the handling
of these types of cases.
Previously we were using ply_frame_buffer_area_t even
when not dealing with a frame buffer area.
This commit adds a new general purpose rectangle type
to replace ply_frame_buffer_area_t. It has some
convenience functions for operating on rectangles as well.
The event loop is used all through out the code
for many different things. In order to use it
in all those various bits of code, it's getting
passed around a lot. This adds a lot of complexity
to the code.
The event loop should probably be a standard
resource that all parts of the code have free access
to in the same vein as the logging apis.
This commit adds a new function
ply_event_loop_get_default () and makes main use it
and pass it along.
Subsequent commits may clean up all the places that
take an event loop to just use this instead.
It was a really lame small wrapper around creating pseudoterminals.
The wrapper didn't buy anything and the name ply-terminal would be
better used for managing tty settings, etc.
Before we were counting space that could only fit a partial bullet as room
for a whole bullet. Now we look and see if there is enough extra space for
at least half a bullet (since the code will draw half a bullet in the case
of more bullets than can fit)
The name "console" is sort of ambiguous. It could mean:
1) the keyboard and mouse together (also known as "seat")
2) the VT console
3) /dev/console
4) where /dev/console messages should go
In this case we mean 4, so we rename it to kernel_console_tty
for clarity.
In cases where, before the file system is mounted, there is a very long pause,
the progress would continue all the way to 100% assuming a 60 second boot time.
It now stops at 25% to signal that something is wrong and moves to crawl mode
(nudging forward very very slowly).
The inheritance works primarily on objects and functions.
Object example:
A.v1 = 1;
A.v2 = 2;
B.v2 = 7;
B.v3 = 3;
C = A | B;
C is now equal to A with B as a base (C.v1 = 1, C.v2 = 2, C.v3 = 3).
A and B remain unchanged.
Function example:
fib = fun (a) if (a < 2) 1; else fail;
| fun (a) if (fibcache[a]) fibcache[a] ; else fail;
| fun (a) fib (a - 1) + fib (a - 2); ;
Fail means a function is aborted and a more base function is attempted.
This is now also looked up when evaluating vars. Vars are looked for in the
local context, then within this (current object) and finally within the
global context;
We've been using the inst function provided by mkinitrd
to install plymouth and its dependencies into the initrd
root, but mkinitrd may not be installed in a dracut world,
and dracut has its own inst function.
This commit tries getting access to either of them, before
bailing. At some point we may want to bundle our own inst
function or get a new flag added to /usr/bin/install to do
what inst does.
As_bool now returns false for 0.0 and NAN. It uses the fpclassify which should
be a clean way of testing for zero. The as_number function simplifies a switch
to an if.
The progress percentage is now settable. By "settable" this doesn't mean the
value will change to the new value, the set value is only a hint as to where
the progress should be at this point in time. So it it overshot or under-run,
the hint is used to determine how much time is left, and how fast to move the
bar.
When functins are called as an element of an object (e.g. obj.func(par) ), the
object is passed into the function execution as "this" in the local context.
Rather than directly accessing hash tables when accessing variables, use the
abstraction functions. Adds a peek function which does not create a new object
is one has not been defined already.
This removes some of the duplication due to the two methods of creating
functions. Now function definitions like:
fun name (foo) {bar}
are treated as
name = fun (foo) {bar};
No script code needs to change as both are still valid.