platform/upstream/kmscon.git
12 years agoconsole: use new drawing pipeline
David Herrmann [Fri, 20 Jan 2012 14:45:58 +0000 (15:45 +0100)]
console: use new drawing pipeline

Instead of drawing with fixed-function GL pipeline we now use our own
shader for texture drawing. This also fixes test_console to no longer
depend on GL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: avoid code duplication in cairo destruction code
David Herrmann [Fri, 20 Jan 2012 14:35:32 +0000 (15:35 +0100)]
console: avoid code duplication in cairo destruction code

We can use our destruction function to avoid code duplication.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agocontext: enable blend by default
David Herrmann [Fri, 20 Jan 2012 14:34:21 +0000 (15:34 +0100)]
context: enable blend by default

Enable blending by default.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: use UniformMatrix4fv instead of ~2fv
David Herrmann [Wed, 18 Jan 2012 18:11:14 +0000 (19:11 +0100)]
output: use UniformMatrix4fv instead of ~2fv

We use a 4x4 matrix so we should use the correct uniform handler.
Otherwise we might get errors on some GL implementations.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: take reference of compositor
David Herrmann [Wed, 18 Jan 2012 17:09:08 +0000 (18:09 +0100)]
console: take reference of compositor

To switch to the new drawing subsystem we need a reference to a valid
compositor object so we can retrieve the GL context.
This also applies to the terminal object.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_output: use new drawing pipeline
David Herrmann [Wed, 18 Jan 2012 14:54:59 +0000 (15:54 +0100)]
test_output: use new drawing pipeline

This converts the output test function to use the new kmscon_context for
drawing operations so we no longer depend directly on GL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add function to draw colored vertices
David Herrmann [Wed, 18 Jan 2012 14:54:26 +0000 (15:54 +0100)]
output: add function to draw colored vertices

The new function kmscon_context_draw_def() can draw colored quads to the
screen.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add default shader
David Herrmann [Wed, 18 Jan 2012 14:52:45 +0000 (15:52 +0100)]
output: add default shader

Besides the texture shader this also adds a second shader (def/default)
which is used to draw arbitrary colored vertices to the screen.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add function to retrieve context
David Herrmann [Wed, 18 Jan 2012 13:01:42 +0000 (14:01 +0100)]
output: add function to retrieve context

Allow other subsystems to retrieve the context of a compositor. The
context has no reference count as it is tied to the compositor.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add shader support
David Herrmann [Tue, 17 Jan 2012 14:19:43 +0000 (15:19 +0100)]
output: add shader support

To avoid the fixed function pipeline we should use shaders instead of
old glBegin/glEnd. This patch adds two basic shaders and functions that
load and initialize them.

To avoid loading the shaders at runtime we generate a source file which
contains them as strings so they are embedded in the binary.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: move EGL/GL calls into separate header
David Herrmann [Mon, 16 Jan 2012 16:37:42 +0000 (17:37 +0100)]
output: move EGL/GL calls into separate header

This splits off all EGL/GL calls into output_context.c. This way we can
replace the backend of the drawing functions very easily.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: remove *_get_fd
David Herrmann [Wed, 11 Jan 2012 14:28:06 +0000 (15:28 +0100)]
output: remove *_get_fd

There is no need to retrieve the fd of the compositor as we now have an
eloop subsystem which takes care of event handling.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add header protection
David Herrmann [Wed, 11 Jan 2012 14:25:20 +0000 (15:25 +0100)]
output: add header protection

output.h was missing an include-protection.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: replace "DRI" with "DRM" in comments
David Herrmann [Wed, 11 Jan 2012 14:22:05 +0000 (15:22 +0100)]
output: replace "DRI" with "DRM" in comments

We work with DRM not DRI so fix the comments.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovt: add a few CLOEXEC's
Ran Benita [Sun, 8 Jan 2012 23:28:36 +0000 (01:28 +0200)]
vt: add a few CLOEXEC's

These are the only open() calls missing the flag.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: make "us" default layout, override by env vars
Ran Benita [Sun, 8 Jan 2012 22:57:15 +0000 (00:57 +0200)]
input: make "us" default layout, override by env vars

The other layouts can be confusing.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agolog: make sure not to override errno
Ran Benita [Sun, 8 Jan 2012 22:48:39 +0000 (00:48 +0200)]
log: make sure not to override errno

This makes things easier in the common case of
<some error> -> <log error> -> <goto error handler> - <do something with
errno>

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: allow reporting error conditions
Ran Benita [Sun, 8 Jan 2012 22:47:25 +0000 (00:47 +0200)]
eloop: allow reporting error conditions

Add KMSCON_ERR, the equivalent of EPOLLERR.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoFix compiler sign-mismatch warnings
Ran Benita [Sat, 31 Dec 2011 10:39:09 +0000 (12:39 +0200)]
Fix compiler sign-mismatch warnings

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_console: fix use-after-free
Ran Benita [Sat, 31 Dec 2011 10:31:53 +0000 (12:31 +0200)]
test_console: fix use-after-free

Here's how it goes:
1. stdin reaches EOF, kmscon_eloop_rm_fd is called on stdin_fd.
2. The fd object is freed, the memory is reused in the meantime.
3. rm_fd is called again in destroy_eloop.
4. con->stdin_fd points to garbage and we get a segmentation fault.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agofont_pango: fix uninitialized variable
Ran Benita [Sun, 8 Jan 2012 23:14:11 +0000 (01:14 +0200)]
font_pango: fix uninitialized variable

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoa few cosmetic changes
Ran Benita [Sun, 8 Jan 2012 23:08:58 +0000 (01:08 +0200)]
a few cosmetic changes

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoUpdate README to include new dependencies
David Herrmann [Sun, 1 Jan 2012 22:39:23 +0000 (23:39 +0100)]
Update README to include new dependencies

Rework dependency list and also add new configure flags.
We also update the subsystem list.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd configure to autogen.sh
David Herrmann [Sun, 1 Jan 2012 22:27:13 +0000 (23:27 +0100)]
Add configure to autogen.sh

Use ./autogen.sh --<options> to run autogen with configure in one call.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAvoid installing doc files with "make install"
David Herrmann [Sun, 1 Jan 2012 22:26:10 +0000 (23:26 +0100)]
Avoid installing doc files with "make install"

Move all documentation into EXTRA_DIST, otherwise it gets installed systemwide.
And probably no one is interested in having the README installed in the system.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconfigure: fix debug option NDEBUG definition
David Herrmann [Sun, 1 Jan 2012 22:19:40 +0000 (23:19 +0100)]
configure: fix debug option NDEBUG definition

We currently define NDEBUG only if --<set>-debug is not specified at all. That
is, --disable-debug currently has almost no effect.
This fixes this bug and also corrects a wrong parenthesis.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agofont: add unfinished freetype backend
David Herrmann [Sun, 1 Jan 2012 22:11:48 +0000 (23:11 +0100)]
font: add unfinished freetype backend

This is a first attempt of a freetype2 backend for the font drawing functions.
This avoids the heavy pango/cairo dependencies, although, we might lose
important font handling that pango does for us like correctly drawing combined
characters.

This is still a stub implementation. The drawing operations are not supported,
yet. Use --enable-pango during configure to enable the still working pango
backend.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoUpdate TODO
David Herrmann [Sun, 1 Jan 2012 22:04:13 +0000 (23:04 +0100)]
Update TODO

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agofont: move font handling into new subsystem
David Herrmann [Sun, 1 Jan 2012 17:27:09 +0000 (18:27 +0100)]
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>
12 years agoRemove kmscon_char implementation
David Herrmann [Sun, 1 Jan 2012 16:45:57 +0000 (17:45 +0100)]
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>
12 years agoAdjust all code to use new kmscon_symbol_t
David Herrmann [Sun, 1 Jan 2012 16:43:57 +0000 (17:43 +0100)]
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>
12 years agounicode: provide utf8 converter
David Herrmann [Sun, 1 Jan 2012 16:42:57 +0000 (17:42 +0100)]
unicode: provide utf8 converter

Allow converting a ucs4 string into a utf8 string. Also export the default
symbol so other subsystems may use it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_buffer: add kmscon_symbol_t test
David Herrmann [Sun, 1 Jan 2012 15:52:30 +0000 (16:52 +0100)]
test_buffer: add kmscon_symbol_t test

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd faster kmscon_char replacement
David Herrmann [Sun, 1 Jan 2012 15:47:06 +0000 (16:47 +0100)]
Add faster kmscon_char replacement

Instead of allocating big buffers with kmscon_char's for every character we now
reduce a single character to an integer. This integer is either the Unicode
codepoint or an ID to an internally allocated string.

The so called kmscon_symbol_t integer can now be used as if it were a classic
"char" value without bothering with combining marks etc.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_terminal: add experimental input support
David Herrmann [Sat, 31 Dec 2011 16:38:46 +0000 (17:38 +0100)]
test_terminal: add experimental input support

Add input subsystem to terminal test app. This currently allows to actually
"write" to the console. There is still much to do to convert the input to proper
data but basic alphanumeric characters work for now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: add UCS4 to UTF8 conversion
David Herrmann [Sat, 31 Dec 2011 16:38:17 +0000 (17:38 +0100)]
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>
12 years agoUpdate TODO regarding input subsystem
Ran Benita [Fri, 30 Dec 2011 21:08:42 +0000 (23:08 +0200)]
Update TODO regarding input subsystem

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: define our own modifiers
Ran Benita [Fri, 30 Dec 2011 20:48:46 +0000 (22:48 +0200)]
input: define our own modifiers

Just a direct mapping to X modifiers for now (= Shift, Control,
Lock, Mod1-5).
This gives us more flexibility to adapt it to our needs in the future.
Also we don't have to include libxkbcommon headers just for the modifier
definitions.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: don't use 0 to signal lack of unicode value
Ran Benita [Fri, 30 Dec 2011 20:00:07 +0000 (22:00 +0200)]
input: don't use 0 to signal lack of unicode value

0 is actually a valid unicode value, so instead we use
KMSCON_INPUT_INVALID which is not legal unicode.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: shuffle headers and includes
Ran Benita [Fri, 30 Dec 2011 16:46:20 +0000 (18:46 +0200)]
input: shuffle headers and includes

Just some renames/moving/prefixing to conform to the style of the
other files.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoCorrectly set Xlib copyright headers
Ran Benita [Fri, 30 Dec 2011 16:06:32 +0000 (18:06 +0200)]
Correctly set Xlib copyright headers

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: fix group wrapping
Ran Benita [Thu, 29 Dec 2011 19:46:56 +0000 (21:46 +0200)]
xkb: fix group wrapping

- Use the number of groups we actually have instead of the maximum
  number of groups, when wrapping according to group_wrap control.

- Be careful with negative relative group actions. The group fields of
  xkb_state are all unsigned (and have a weird FIXME..), so don't use
  them directly.

- Add the grp:ctrl_shift_toggle option to the rmlvo set to also test
  locking the previous group (i.e. a negative relative group action).

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: refactor keysym compat_init into a separate function
Ran Benita [Wed, 28 Dec 2011 20:05:47 +0000 (22:05 +0200)]
xkb: refactor keysym compat_init into a separate function

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: fix formatting
Ran Benita [Wed, 28 Dec 2011 19:43:55 +0000 (21:43 +0200)]
input: fix formatting

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: fix open() call parameters
David Herrmann [Sat, 31 Dec 2011 15:24:14 +0000 (16:24 +0100)]
input: fix open() call parameters

Third argument of open() is for file creation flags and nor for file open flags.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: latches were not always released correctly
Ran Benita [Wed, 28 Dec 2011 09:55:50 +0000 (11:55 +0200)]
xkb: latches were not always released correctly

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: filter unwanted repeats
Ran Benita [Wed, 28 Dec 2011 09:55:11 +0000 (11:55 +0200)]
xkb: filter unwanted repeats

We can disable repeats globally or per-key. Also any modifier
keys should not repeat.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: comment out LevelOneOnly handling
Ran Benita [Tue, 27 Dec 2011 21:07:26 +0000 (23:07 +0200)]
xkb: comment out LevelOneOnly handling

Stuff like grp:ctrl_shift_toggle didn't work because of it.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: use libxkbcommon to convert input events
Ran Benita [Tue, 27 Dec 2011 15:28:16 +0000 (17:28 +0200)]
input: use libxkbcommon to convert input events

This commit introduces a new kmscon_input_event structure which is
delivered to the input consumer. The information provided is
- The evdev scancode (=physical keyboard key).
- The X keysym (a symbol representing what the typist really intended).
- The active modifiers (e.g. Shift, Control..)
- The unicode (UCS-4) value, when it makes sense.

To achieve this we add two dependencies:
- libxkbcommon (this entails xproto and kbproto, but shouldn't bring any of
  big X dependencies)
- A function to translate keysyms to unicode values (taken from xlib,
  copied in-tree).

libxkbcommon is not an all-around solution, and requires various degrees
of supporting code, depending on how much we wish to support. This
commit implements the common, basic uses:
- Choosing layouts, variants and options
- Switching groups
- Switching shift-levels
- Setting modifiers
Though some stuff is missing. Further information in the comments.

test_input.c is updated to use the new input event interface. You can
change the layouts in input.c:init_input() and see what works and what
doesn't.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd Ran Benita to authors list
David Herrmann [Sat, 31 Dec 2011 11:46:15 +0000 (12:46 +0100)]
Add Ran Benita to authors list

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: do not take reference of parent input object
David Herrmann [Sat, 31 Dec 2011 11:44:10 +0000 (12:44 +0100)]
input: do not take reference of parent input object

This is currently broken, anyway as we do not unref the object. However, if we
take a reference, then kmscon_input_unref() would never destroy the object as
there are still references. The caller would have to call kmscon_input_sleep()
first to have the desired effect.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: silently ignore devices without device-node
David Herrmann [Sat, 31 Dec 2011 11:39:42 +0000 (12:39 +0100)]
input: silently ignore devices without device-node

We either need to adjust our filters to only receive inputX/eventY events or we
simply ignore all other events silently to avoid useless warnings.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotests: add test for the input subsystem
Ran Benita [Tue, 13 Dec 2011 12:10:01 +0000 (14:10 +0200)]
tests: add test for the input subsystem

It should:
- Capture your keypresses
- Announce when a device is added or removed (with --enable-debug)
- stop/start capturing on SIGQUIT (Ctrl-\)

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: rearrange code to avoid forward declarations
David Herrmann [Sat, 31 Dec 2011 11:04:17 +0000 (12:04 +0100)]
input: rearrange code to avoid forward declarations

The diff may look a bit wild but this mostly fixes coding style issues:
 - sort includes alphabetically
 - add missing includes
 - rearrange structures/functions to avoid forward declarations
 - adding "data" user-defineable field to input structure (for callbacks)
 - correctly handle errors in device_data_arrived
 - remove device_added/device_removed
 - merge input_init into constructor
 - add some log messages for debugging
 - remove devices when wake-up fails
 - set cb/data fields on eloop connection, not on initialization
 - remove all devices when disconnecting eloop so the eloop is guaranteed to be
   not used by the input subsystem after disconnection.
 - some error handling fixes
 - remove some TODOs which are correctly implemented
 - Add O_NONBLOCK when opening the device node (I don't know how it actually
   worked without it in the data_arrived callback)

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: add infrastructure for an input subsystem
Ran Benita [Tue, 13 Dec 2011 12:00:44 +0000 (14:00 +0200)]
input: add infrastructure for an input subsystem

This does all the boring stuff for an input subsystem:
- Input device discovery using udev
- Input device hotplug (add/remove)
- Reading the evdev data from the devices
- Publishing input events to a callback through the eloop
- Suspending and resuming the input capture

Currently the delivered input events are basically just evdev's
"struct input_event" (type, code, value). More work is required to
have it pass out useful data.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoterminal: add dummy terminal implementation
David Herrmann [Fri, 30 Dec 2011 17:01:00 +0000 (18:01 +0100)]
terminal: add dummy terminal implementation

vte: This adds a dummy VTE subsystem. It will be used to emulate a vt100
terminal based on our console subsystem.

terminal: This ties together several subsystems including the output-, the
console- and the vte-subsystem.

The test_terminal test application can be used to test the terminal. It is
supposed to provide a full vt100 implementation which is displayed on all
available screens.

Most of the functionality here is not implemented yet and only a dummy function.
These will be added in later commits.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add debug and error messages
David Herrmann [Fri, 30 Dec 2011 16:13:15 +0000 (17:13 +0100)]
output: add debug and error messages

Print useful debug and error messages to the global log file.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: fix debug messages for buffer objects
David Herrmann [Fri, 30 Dec 2011 16:08:01 +0000 (17:08 +0100)]
console: fix debug messages for buffer objects

It doesn't make sense to print the size of new buffer objects as the resize
function does the same. We also currently access uninitialized memory here so it
is useless anyway.
Also move the message of the unref function to be consistent with other objects.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_console: fix call to kmscon_comp*_use
David Herrmann [Fri, 30 Dec 2011 15:48:20 +0000 (16:48 +0100)]
test_console: fix call to kmscon_comp*_use

We should activate the GL context on initialization to allow other subsystems to
create GL objects.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_output: handle kmscon_comp*_use failure
David Herrmann [Fri, 30 Dec 2011 15:44:28 +0000 (16:44 +0100)]
test_output: handle kmscon_comp*_use failure

Move the call before the wakeup and also check its return code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: allow kmscon_compositor_use to be called when asleep
David Herrmann [Fri, 30 Dec 2011 15:40:49 +0000 (16:40 +0100)]
output: allow kmscon_compositor_use to be called when asleep

There is no reason to prohibit a compositor from activating its GL context while
being asleep. It is even recommended to activate the GL context when being
asleep as there is no other way to initialize other subsystems without an GL
context.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: fix dropping master priviledges on wakeup
David Herrmann [Fri, 30 Dec 2011 15:36:48 +0000 (16:36 +0100)]
output: fix dropping master priviledges on wakeup

If wakeup fails we should drop master priviledges again, otherwise we might
break other applications.

Also remove the SetMaster call on compositor initialization. It is redundant and
not needed by us.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovt: fix race-condition in signal handling
David Herrmann [Fri, 30 Dec 2011 12:47:36 +0000 (13:47 +0100)]
vt: fix race-condition in signal handling

Currently, we set up our VT with SIGUSR1/2 signals and after that the user may
connect the signal handlers to the eloop. However, if we receive a signal in
between, the signal gets lost.

Therefore, this simply merges the kmscon_vt_connect_eloop function into
kmscon_vt_open as there is no obvious reason to split them.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agooutput: add helper to check whether output is awake
David Herrmann [Mon, 26 Dec 2011 20:30:37 +0000 (21:30 +0100)]
output: add helper to check whether output is awake

If we have only an output but not the related compositor we currently cannot
figure out whether this output is awake. This adds such a helper function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_console: fix console deinitialization bug
David Herrmann [Mon, 26 Dec 2011 13:46:22 +0000 (14:46 +0100)]
test_console: fix console deinitialization bug

We must not destroy the compositor object if there is still a console using the
GL context. Otherwise we get a SEGFAULT when calling any gl* function.

In future we may need propoper dependencies here. We use reference counts so
this should be easy to implement.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_console: copy stdin to console output
David Herrmann [Mon, 26 Dec 2011 13:27:03 +0000 (14:27 +0100)]
test_console: copy stdin to console output

Add new fd to eloop that copies stdin to console output.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: add newline function
David Herrmann [Mon, 26 Dec 2011 13:24:31 +0000 (14:24 +0100)]
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>
12 years agoUpdate TODO
David Herrmann [Mon, 26 Dec 2011 12:59:50 +0000 (13:59 +0100)]
Update TODO

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: remove +1 font width
David Herrmann [Mon, 26 Dec 2011 11:48:36 +0000 (12:48 +0100)]
console: remove +1 font width

This was to avoid rounding errors but seems to be useless now so remove it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: calculate width by font
David Herrmann [Mon, 26 Dec 2011 11:45:54 +0000 (12:45 +0100)]
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>
12 years agoconsole: do not resize buffer if size doesn't change
David Herrmann [Mon, 26 Dec 2011 11:15:48 +0000 (12:15 +0100)]
console: do not resize buffer if size doesn't change

We shouldn't do anything if buffer_resize is called with the same size. This
also suppresses useless "buffer resized to XxY" debug messages.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: measure font width
David Herrmann [Sat, 24 Dec 2011 11:46:56 +0000 (12:46 +0100)]
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>
12 years agoconsole: do not return NULL in kmscon_char_get_u8
David Herrmann [Sat, 24 Dec 2011 11:30:42 +0000 (12:30 +0100)]
console: do not return NULL in kmscon_char_get_u8

A kmscon_char has always a valid buffer so we can always return a valid pointer.
The user shouldn't use it if length is 0 but it's not our job to prohibit that.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: allow resizing the console
David Herrmann [Wed, 21 Dec 2011 15:39:51 +0000 (16:39 +0100)]
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>
12 years agoconsole: support writing to console
David Herrmann [Wed, 21 Dec 2011 15:30:06 +0000 (16:30 +0100)]
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>
12 years agoconsole: correctly resize lines
David Herrmann [Wed, 21 Dec 2011 15:07:40 +0000 (16:07 +0100)]
console: correctly resize lines

When resizing lines we shouldn't drop all information. Instead we only
initialize new cells.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_buffer: add buffer playground
David Herrmann [Wed, 21 Dec 2011 14:44:24 +0000 (15:44 +0100)]
test_buffer: add buffer playground

This test app is used to stress test the buffer implementation and finding bugs
of the scrollback-buffer rotations etc.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: rewrite buffer implementation
David Herrmann [Wed, 21 Dec 2011 13:19:52 +0000 (14:19 +0100)]
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>
12 years agoconsole: remove cairo from header
David Herrmann [Tue, 20 Dec 2011 20:40:35 +0000 (21:40 +0100)]
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>
12 years agoconsole: correctly set current position in buffer
David Herrmann [Sun, 18 Dec 2011 12:49:03 +0000 (13:49 +0100)]
console: correctly set current position in buffer

Our scrollback buffer needs to adjust the current position when being resized or
when a new line is pushed.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: use new buffer implementation
David Herrmann [Sun, 18 Dec 2011 11:58:47 +0000 (12:58 +0100)]
console: use new buffer implementation

Use the new kmscon_buffer in the console subsystem.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: remove buffer cache
David Herrmann [Sun, 18 Dec 2011 11:23:14 +0000 (12:23 +0100)]
console: remove buffer cache

Unless we benchmark the buffer implementation we shouldn't implement
speedup-hacks. Therefore, remove the buffer-cache and look how it works out.
This simplifies buffer handling alot.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: allow resetting of kmscon_char's
David Herrmann [Sun, 18 Dec 2011 10:46:08 +0000 (11:46 +0100)]
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>
12 years agoAdd config.h.in~ to gitignore
David Herrmann [Wed, 14 Dec 2011 17:09:03 +0000 (18:09 +0100)]
Add config.h.in~ to gitignore

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agobuild: set in NDEBUG instead of DEBUG in configure
Ran Benita [Mon, 12 Dec 2011 20:37:07 +0000 (22:37 +0200)]
build: set in NDEBUG instead of DEBUG in configure

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovt: add support for automatic VT switching
Ran Benita [Sat, 10 Dec 2011 23:56:48 +0000 (01:56 +0200)]
vt: add support for automatic VT switching

Add two functions to enter/leave our VT object. This allows to
implement to expected behavior of automatically switching to the kmscon
when it is running on a new tty, and switching back to the tty we came
from when the program finishes. Presumably this behavior will be
controlled by a config variable or command line argument later on (like
Xorg's -novtswitch).

There's a bit of a subtlety in this because of VT_PROCESS. We need
permission from ourselves to switch in/out of out VT; this is done when
processing SIGUSR[12] in the eloop. We therefore must dispatch the loop
at least once after switching out. The usual case is demonstrated in
test_vt.c.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd K_OFF to vt-TODO
David Herrmann [Wed, 14 Dec 2011 14:38:26 +0000 (15:38 +0100)]
Add K_OFF to vt-TODO

See https://github.com/dvdhrm/kmscon/pull/3 for a discussion of K_OFF in the VT
subsystem. We cannot apply it now but we have to reconsider it when the input
subsystem has been written.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agobuild: a few fixes to configure script
Ran Benita [Fri, 2 Dec 2011 12:01:12 +0000 (14:01 +0200)]
build: a few fixes to configure script

- Use C99 and gnu extensions.
- Explicitly link against libdrm (more strict linkers like gold would
  complain).
- Consistently use *_CPPFLAGS where due.
- Clear the default CFLAGS.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoConsole: Add buffer object
David Herrmann [Sun, 4 Dec 2011 16:56:43 +0000 (17:56 +0100)]
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>
12 years agoConsole: Simplify character handling
David Herrmann [Sat, 3 Dec 2011 17:09:41 +0000 (18:09 +0100)]
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>
12 years agotest_console: Use new eloop and VT subsystem
David Herrmann [Sat, 3 Dec 2011 15:49:44 +0000 (16:49 +0100)]
test_console: Use new eloop and VT subsystem

The test_console application now supports VT-switching and monitor-hotplug. New
monitors are detected when switching VTs. Full hotplug-support will be added
later.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoOutput: Correctly acquire/release DRM master
David Herrmann [Sat, 3 Dec 2011 15:39:06 +0000 (16:39 +0100)]
Output: Correctly acquire/release DRM master

If we switch VT, we must release DRM master to allow other applications to
access the DRM. When waking up the compositor we try to acquire the master again
to access the DRM.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoEloop: Fix function name typo
David Herrmann [Sat, 3 Dec 2011 15:38:14 +0000 (16:38 +0100)]
Eloop: Fix function name typo

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoFix gitignore
David Herrmann [Sat, 3 Dec 2011 14:14:38 +0000 (15:14 +0100)]
Fix gitignore

We currently ignore all test sources. Restrict the filter to the root directory
so only the binaries are affected.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd VT test
David Herrmann [Sat, 3 Dec 2011 14:14:18 +0000 (15:14 +0100)]
Add VT test

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoEloop: Add debug statements
David Herrmann [Sat, 3 Dec 2011 14:09:10 +0000 (15:09 +0100)]
Eloop: Add debug statements

Add some more debug statements to allow easier eloop monitoring.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd VT handling
David Herrmann [Sat, 3 Dec 2011 14:08:18 +0000 (15:08 +0100)]
Add VT handling

As long as we are run in a VT we need to correctly handle VT-switches to avoid
blocking the crtc/input.

This is copied from wayland-compositor demos and modified to fit to our needs.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoEloop: Pass mask argument to fd callbacks
David Herrmann [Sat, 3 Dec 2011 11:22:36 +0000 (12:22 +0100)]
Eloop: Pass mask argument to fd callbacks

fd-callbacks are pretty useless if we do not pass a mask argument with the
current flags.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoEloop: Add idle-event support
David Herrmann [Sat, 3 Dec 2011 11:04:29 +0000 (12:04 +0100)]
Eloop: Add idle-event support

Idle events are dispatched everytime kmscon_eloop_dispatch() is called. To allow
the callbacks to add/remove/modify all current idle events (including themself),
we need to keep a pointer to the currently dispatched event.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoAdd event loop
David Herrmann [Sat, 3 Dec 2011 10:42:41 +0000 (11:42 +0100)]
Add event loop

Add event loop implementation with support for fd's and signal's through
signalfd.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>