diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2010-12-14 09:24:02 -0800 |
---|---|---|
committer | Vladimir Chtchetkine <vchtchetkine@google.com> | 2010-12-14 09:24:02 -0800 |
commit | 72d83df9865cf8f5393a41fc3f6e283ab6aaa81b (patch) | |
tree | c54836b9d2bfd7eb97b1dd4970ae6c50983b1e7f /android/display-core.c | |
parent | 5c01a94e9233796c7e8c370d348c945390a36068 (diff) | |
download | external_qemu-72d83df9865cf8f5393a41fc3f6e283ab6aaa81b.zip external_qemu-72d83df9865cf8f5393a41fc3f6e283ab6aaa81b.tar.gz external_qemu-72d83df9865cf8f5393a41fc3f6e283ab6aaa81b.tar.bz2 |
Implement core display deriving it from android display
Core display is a framebuffer client that receives framebuffer updates and dispatches
them to the UI attached to the core.
Change-Id: Iff1e0609cbe66240031e3670934a6796a9ae3b15
Diffstat (limited to 'android/display-core.c')
-rw-r--r-- | android/display-core.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/android/display-core.c b/android/display-core.c new file mode 100644 index 0000000..e0574a3 --- /dev/null +++ b/android/display-core.c @@ -0,0 +1,91 @@ +/* Copyright (C) 2010 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +*/ + +/* + * Contains extension to android display (see android/display.h|c) that is used + * by the core to communicate display changes to the attached UI + */ + +#include "android/utils/system.h" +#include "android/display-core.h" + +/* Core display descriptor. */ +struct CoreDisplay { + /* Display state for this core display. */ + DisplayState* ds; + + /* Framebuffer for this core display. */ + QFrameBuffer* fb; +}; + +/* One and only one core display instance. */ +static CoreDisplay core_display; + +/* + * Framebuffer calls this routine when it detects changes. This routine will + * initiate a "push" of the framebuffer changes to the UI. + * See QFrameBufferUpdateFunc in framebuffer.h for more info on this callback. + */ +static void +core_display_fb_update(void* opaque, int x, int y, int w, int h) +{ +} + +/* + * Framebuffer callback. See QFrameBufferRotateFunc in framebuffer.h for more + * info on this callback. + */ +static void +core_display_fb_rotate(void* opaque, int rotation) +{ +} + +/* + * Framebuffer callback. See QFrameBufferPollFunc in framebuffer.h for more + * info on this callback. + */ +static void +core_display_fb_poll(void* opaque) +{ + // This will eventually call core_display_fb_update. + qframebuffer_check_updates(); +} + +/* + * Framebuffer callback. See QFrameBufferDoneFunc in framebuffer.h for more + * info on this callback. + */ +static void +core_display_fb_done(void* opaque) +{ +} + +void +core_display_init(DisplayState* ds) +{ + core_display.ds = ds; + /* Create and initialize framebuffer instance that will be used for core + * display. + */ + ANEW0(core_display.fb); + qframebuffer_init(core_display.fb, ds->surface->width, ds->surface->height, + 0, QFRAME_BUFFER_RGB565 ); + qframebuffer_fifo_add(core_display.fb); + /* Register core display as the client for the framebuffer, so we can start + * receiving framebuffer notifications. Note that until UI connects to the + * core all framebuffer callbacks are essentially no-ops. + */ + qframebuffer_add_client(core_display.fb, &core_display, + core_display_fb_update, core_display_fb_rotate, + core_display_fb_poll, core_display_fb_done); + android_display_init(ds, core_display.fb); +} |