143 Commits

Author SHA1 Message Date
David Herrmann
cabde245df 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>
2012-01-18 16:26:57 +01:00
David Herrmann
cb9ef04ec3 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>
2012-01-18 16:26:42 +01:00
David Herrmann
f3c42dd0a3 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>
2012-01-18 15:52:45 +01:00
David Herrmann
6dabf93f9b 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>
2012-01-18 14:01:42 +01:00
David Herrmann
2d71ef276c 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>
2012-01-17 15:19:43 +01:00
David Herrmann
7c7a4e32f9 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>
2012-01-16 17:37:42 +01:00
David Herrmann
a8dcede8c7 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>
2012-01-11 15:28:06 +01:00
David Herrmann
2227350145 output: add header protection
output.h was missing an include-protection.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-11 15:25:20 +01:00
David Herrmann
88f6e93095 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>
2012-01-11 15:22:05 +01:00
Ran Benita
0fc69a4ca5 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>
2012-01-11 13:32:04 +01:00
Ran Benita
01698145a7 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>
2012-01-11 13:31:03 +01:00
Ran Benita
86ec128d91 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>
2012-01-11 13:28:47 +01:00
Ran Benita
e823d283c5 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>
2012-01-11 13:28:12 +01:00
Ran Benita
0d0cac0ad1 Fix compiler sign-mismatch warnings
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-09 20:20:58 +01:00
Ran Benita
01e469b9ec 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>
2012-01-09 20:20:58 +01:00
Ran Benita
993b7386d7 font_pango: fix uninitialized variable
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-09 20:20:58 +01:00
Ran Benita
58b9f1fdb6 a few cosmetic changes
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-09 20:20:58 +01:00
David Herrmann
5dbeb1474b 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>
2012-01-01 23:39:23 +01:00
David Herrmann
80e9b79f3e 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>
2012-01-01 23:27:13 +01:00
David Herrmann
32db4b53ed 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>
2012-01-01 23:26:10 +01:00
David Herrmann
b6550aed8b 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>
2012-01-01 23:19:40 +01:00
David Herrmann
319aae35c9 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>
2012-01-01 23:11:48 +01:00
David Herrmann
41c032d289 Update TODO
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-01 23:04:13 +01:00
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
4eca3ef714 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>
2012-01-01 17:42:57 +01:00
David Herrmann
b3ce42bc63 test_buffer: add kmscon_symbol_t test
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-01 16:52:30 +01:00
David Herrmann
39f90a4536 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>
2012-01-01 16:47:06 +01:00
David Herrmann
117d7ddbcd 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>
2011-12-31 17:38:46 +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
Ran Benita
22a16b0cd5 Update TODO regarding input subsystem
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 16:55:20 +01:00
Ran Benita
8d28790ba4 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>
2011-12-31 16:53:54 +01:00
Ran Benita
7c9fb7bf29 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>
2011-12-31 16:52:22 +01:00
Ran Benita
c3912b23a2 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>
2011-12-31 16:50:52 +01:00
Ran Benita
553dfddc27 Correctly set Xlib copyright headers
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 16:40:06 +01:00
Ran Benita
bb499f7513 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>
2011-12-31 16:29:58 +01:00
Ran Benita
83b95f643f 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>
2011-12-31 16:28:31 +01:00
Ran Benita
2b540610e4 input: fix formatting
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 16:27:45 +01:00
David Herrmann
7af290efbf 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>
2011-12-31 16:27:37 +01:00
Ran Benita
fdf73407b7 xkb: latches were not always released correctly
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 16:27:27 +01:00
Ran Benita
a407143174 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>
2011-12-31 16:27:14 +01:00
Ran Benita
ee92c1c554 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>
2011-12-31 16:26:35 +01:00
Ran Benita
6e301a9af3 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>
2011-12-31 16:18:29 +01:00
David Herrmann
92de8f3f12 Add Ran Benita to authors list
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2011-12-31 12:46:15 +01:00
David Herrmann
546f51e4a3 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>
2011-12-31 12:44:10 +01:00
David Herrmann
1ed4f89164 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>
2011-12-31 12:39:42 +01:00
Ran Benita
7a5f5091f6 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>
2011-12-31 12:33:36 +01:00
David Herrmann
0799fbb4be 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>
2011-12-31 12:04:17 +01:00
Ran Benita
33afda8421 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>
2011-12-30 18:07:23 +01:00