cursor/convert_font.c | 531 ------------------------------------------------ debian/changelog | 3 debian/rules | 2 debian/source/format | 1 dev/null |binary tests/connection-test.c | 2 6 files changed, 4 insertions(+), 535 deletions(-)
New commits: commit fbeac51c15d489017790316831327945b91d22d1 Author: Sven Joachim <[email protected]> Date: Mon Dec 3 18:41:29 2012 +0100 Drop useless rm call from debian/rules The upstream installation process only installs manpages as documentation and does not put any files under /usr/share/doc. diff --git a/debian/rules b/debian/rules index 5331696..abb5674 100755 --- a/debian/rules +++ b/debian/rules @@ -6,8 +6,6 @@ PACKAGE=libwayland0 # Kill *.la files, and forget no-one: override_dh_install: find debian/tmp -name '*.la' -delete - # temporary, decide where to put these - rm -rf debian/tmp/usr/share/doc/wayland dh_install --fail-missing override_dh_makeshlibs: commit 3a377bf63c6fc48d2ca67d40d6a585036bb898d0 Author: Sven Joachim <[email protected]> Date: Mon Dec 3 18:30:03 2012 +0100 Remove two files not in the 1.0.2 tarball diff --git a/cursor/convert_font.c b/cursor/convert_font.c deleted file mode 100644 index de1b8ad..0000000 --- a/cursor/convert_font.c +++ /dev/null @@ -1,531 +0,0 @@ -/* - * Copyright © 2012 Philipp Brüschweiler - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -/* - * This is a small, hacky tool to extract cursors from a .pcf file. - * The information about the file format has been gathered from - * http://fontforge.org/pcf-format.html - */ - -#include <assert.h> -#include <fcntl.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> -#include <sys/types.h> -#include <sys/stat.h> - -#define min(a, b) ((a) < (b) ? (a) : (b)) -#define max(a, b) ((a) > (b) ? (a) : (b)) - -struct glyph { - char *name; - int16_t left_bearing, right_bearing, ascent, descent; - - int16_t width, height; - int16_t hotx, hoty; - - int32_t data_format; - char *data; -}; - -static struct { - int count; - struct glyph *glyphs; -} extracted_font = {0, NULL}; - -#define PCF_PROPERTIES (1<<0) -#define PCF_ACCELERATORS (1<<1) -#define PCF_METRICS (1<<2) -#define PCF_BITMAPS (1<<3) -#define PCF_INK_METRICS (1<<4) -#define PCF_BDF_ENCODINGS (1<<5) -#define PCF_SWIDTHS (1<<6) -#define PCF_GLYPH_NAMES (1<<7) -#define PCF_BDF_ACCELERATORS (1<<8) - -#define PCF_DEFAULT_FORMAT 0x00000000 -#define PCF_INKBOUNDS 0x00000200 -#define PCF_ACCEL_W_INKBOUNDS 0x00000100 -#define PCF_COMPRESSED_METRICS 0x00000100 - -#define PCF_FORMAT_MASK 0xffffff00 - -struct pcf_header { - char header[4]; - int32_t table_count; - struct toc_entry { - int32_t type; - int32_t format; - int32_t size; - int32_t offset; - } tables[0]; -}; - -struct compressed_metrics { - uint8_t left_sided_bearing; - uint8_t right_side_bearing; - uint8_t character_width; - uint8_t character_ascent; - uint8_t character_descent; -}; - -struct uncompressed_metrics { - int16_t left_sided_bearing; - int16_t right_side_bearing; - int16_t character_width; - int16_t character_ascent; - int16_t character_descent; - uint16_t character_attributes; -}; - -struct metrics { - int32_t format; - union { - struct { - int16_t count; - struct compressed_metrics compressed_metrics[0]; - } compressed; - struct { - int32_t count; - struct uncompressed_metrics uncompressed_metrics[0]; - } uncompressed; - }; -}; - -struct glyph_names { - int32_t format; - int32_t glyph_count; - int32_t offsets[0]; -}; - -struct bitmaps { - int32_t format; - int32_t glyph_count; - int32_t offsets[0]; -}; - -static void -handle_compressed_metrics(int32_t count, struct compressed_metrics *m) -{ - printf("metrics count: %d\n", count); - extracted_font.count = count; - extracted_font.glyphs = calloc(count, sizeof(struct glyph)); - - int i; - for (i = 0; i < count; ++i) { - struct glyph *glyph = &extracted_font.glyphs[i]; - glyph->left_bearing = - ((int16_t) m[i].left_sided_bearing) - 0x80; - glyph->right_bearing = - ((int16_t) m[i].right_side_bearing) - 0x80; - glyph->width = ((int16_t) m[i].character_width) - 0x80; - glyph->ascent = ((int16_t) m[i].character_ascent) - 0x80; - glyph->descent = ((int16_t) m[i].character_descent) - 0x80; - - /* computed stuff */ - glyph->height = glyph->ascent + glyph->descent; - - glyph->hotx = -glyph->left_bearing; - glyph->hoty = glyph->ascent; - } -} - -static void -handle_metrics(void *metricbuf) -{ - struct metrics *metrics = metricbuf; - printf("metric format: %x\n", metrics->format); - - if ((metrics->format & PCF_FORMAT_MASK) == PCF_DEFAULT_FORMAT) { - printf("todo...\n"); - } else if ((metrics->format & PCF_FORMAT_MASK) == - PCF_COMPRESSED_METRICS) { - handle_compressed_metrics( - metrics->compressed.count, - &metrics->compressed.compressed_metrics[0]); - } else { - printf("incompatible format\n"); - abort(); - } -} - -static void -handle_glyph_names(struct glyph_names *names) -{ - printf("glyph count %d\n", names->glyph_count); - - if (names->glyph_count != extracted_font.count) { - abort(); - } - - printf("glyph names format %x\n", names->format); - - void *names_start = ((void*) names) + sizeof(struct glyph_names) - + (names->glyph_count + 1) * sizeof(int32_t); - - int i; - for (i = 0; i < names->glyph_count; ++i) { - int32_t start = names->offsets[i]; - int32_t end = names->offsets[i+1]; - char *name = names_start + start; - extracted_font.glyphs[i].name = calloc(1, end - start + 1); - memcpy(extracted_font.glyphs[i].name, name, end - start); - } -} - -static void -handle_bitmaps(struct bitmaps *bitmaps) -{ - printf("bitmaps count %d\n", bitmaps->glyph_count); - - if (bitmaps->glyph_count != extracted_font.count) { - abort(); - } - - printf("format %x\n", bitmaps->format); - - if (bitmaps->format != 2) { - printf("format not yet supported\n"); - abort(); - } - - void *bitmaps_start = ((void*) bitmaps) + sizeof(struct bitmaps) - + (bitmaps->glyph_count + 4) * sizeof(int32_t); - - int i; - for (i = 0; i < bitmaps->glyph_count; ++i) { - int32_t offset = bitmaps->offsets[i]; - struct glyph *glyph = &extracted_font.glyphs[i]; - glyph->data_format = bitmaps->format; - - glyph->data = bitmaps_start + offset; - } -} - -static void -handle_pcf(void *fontbuf) -{ - struct pcf_header *header = fontbuf; - printf("tablecount %d\n", header->table_count); - - int i; - for (i = 0; i < header->table_count; ++i) { - struct toc_entry *entry = &header->tables[i]; - printf("type: %d\n", entry->type); - if (entry->type == PCF_METRICS) { - handle_metrics(fontbuf + entry->offset); - } else if (entry->type == PCF_GLYPH_NAMES) { - handle_glyph_names(fontbuf + entry->offset); - } else if (entry->type == PCF_BITMAPS) { - handle_bitmaps(fontbuf + entry->offset); - } - } -} - -static char -get_glyph_pixel(struct glyph *glyph, int x, int y) -{ - int absx = glyph->hotx + x; - int absy = glyph->hoty + y; - - if (absx < 0 || absx >= glyph->width || - absy < 0 || absy >= glyph->height) - return 0; - - int stride = (glyph->width + 31) / 32 * 4; - unsigned char block = glyph->data[absy * stride + (absx/8)]; - int idx = absx % 8; - return (block >> idx) & 1; -} - -static struct { - uint32_t *data; - size_t capacity, size; -} data_buffer; - -static void -init_data_buffer() -{ - data_buffer.data = malloc(sizeof(uint32_t) * 10); - data_buffer.capacity = 10; - data_buffer.size = 0; -} - -static void -add_pixel(uint32_t pixel) -{ - if (data_buffer.size == data_buffer.capacity) { - data_buffer.capacity *= 2; - data_buffer.data = - realloc(data_buffer.data, - sizeof(uint32_t) * data_buffer.capacity); - } - data_buffer.data[data_buffer.size++] = pixel; -} - -struct reconstructed_glyph { - int32_t width, height; - int32_t hotspot_x, hotspot_y; - size_t offset; - char *name; -}; - -static void -reconstruct_glyph(struct glyph *cursor, struct glyph *mask, char *name, - struct reconstructed_glyph *glyph) -{ - int minx = min(-cursor->hotx, -mask->hotx); - int maxx = max(cursor->right_bearing, mask->right_bearing); - - int miny = min(-cursor->hoty, -mask->hoty); - int maxy = max(cursor->height - cursor->hoty, - mask->height - mask->hoty); - - int width = maxx - minx; - int height = maxy - miny; - - glyph->name = strdup(name); - glyph->width = width; - glyph->height = height; - glyph->hotspot_x = -minx; - glyph->hotspot_y = -miny; - glyph->offset = data_buffer.size; - - int x, y; - for (y = miny; y < maxy; ++y) { - for (x = minx; x < maxx; ++x) { - char alpha = get_glyph_pixel(mask, x, y); - if (alpha) { - char color = get_glyph_pixel(cursor, x, y); - if (color) - add_pixel(0xff000000); - else - add_pixel(0xffffffff); - } else { - add_pixel(0); - } - } - } -} - -/* From http://cgit.freedesktop.org/xorg/lib/libXfont/tree/src/builtins/fonts.c */ -static const char cursor_licence[] = - "/*\n" - "* Copyright 1999 SuSE, Inc.\n" - "*\n" - "* Permission to use, copy, modify, distribute, and sell this software and its\n" - "* documentation for any purpose is hereby granted without fee, provided that\n" - "* the above copyright notice appear in all copies and that both that\n" - "* copyright notice and this permission notice appear in supporting\n" - "* documentation, and that the name of SuSE not be used in advertising or\n" - "* publicity pertaining to distribution of the software without specific,\n" - "* written prior permission. SuSE makes no representations about the\n" - "* suitability of this software for any purpose. It is provided \"as is\"\n" - "* without express or implied warranty.\n" - "*\n" - "* SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL\n" - "* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE\n" - "* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n" - "* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\n" - "* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\n" - "* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n" - "*\n" - "* Author: Keith Packard, SuSE, Inc.\n" - "*/\n"; - -static void -write_output_file(struct reconstructed_glyph *glyphs, int n) -{ - int i, j, counter, size; - FILE *file = fopen("cursor-data.h", "w"); - uint32_t *data; - - fprintf(file, "%s\n", cursor_licence); - - fprintf(file, "static uint32_t cursor_data[] = {\n\t"); - - counter = 0; - for (i = 0; i < n; ++i) { - data = data_buffer.data + glyphs[i].offset; - size = glyphs[i].width * glyphs[i].height; - - for (j = 0; j < size; ++j) { - fprintf(file, "0x%08x, ", data[j]); - if (++counter % 6 == 0) - fprintf(file, "\n\t"); - } - } - fprintf(file, "\n};\n\n"); - - fprintf(file, - "static struct {\n" - "\tchar *name;\n" - "\tint width, height;\n" - "\tint hotspot_x, hotspot_y;\n" - "\tsize_t offset;\n" - "} cursor_metadata[] = {\n"); - - for (i = 0; i < n; ++i) - fprintf(file, "\t{ \"%s\", %d, %d, %d, %d, %zu },\n", - glyphs[i].name, - glyphs[i].width, glyphs[i].height, - glyphs[i].hotspot_x, glyphs[i].hotspot_y, - glyphs[i].offset); - - fprintf(file, "};"); - - fclose(file); -} - -struct glyph * -find_mask_glyph(char *name) -{ - const char mask[] = "_mask"; - const int masklen = strlen(mask); - - int len = strlen(name); - int i; - for (i = 0; i < extracted_font.count; ++i) { - struct glyph *g = &extracted_font.glyphs[i]; - int l2 = strlen(g->name); - if ((l2 == len + masklen) && - (memcmp(g->name, name, len) == 0) && - (memcmp(g->name + len, mask, masklen) == 0)) { - return g; - } - } - return NULL; -} - -static void -output_all_cursors() -{ - int i, j; - struct reconstructed_glyph *glyphs = - malloc(sizeof(struct reconstructed_glyph) * - extracted_font.count/2); - j = 0; - - for (i = 0; i < extracted_font.count; ++i) { - struct glyph *g = &extracted_font.glyphs[i]; - if (strstr(g->name, "_mask")) - continue; - - struct glyph *mask = find_mask_glyph(g->name); - - reconstruct_glyph(g, mask, g->name, &glyphs[j]); - j++; - } - - write_output_file(glyphs, extracted_font.count/2); -} - -static void -find_cursor_and_mask(const char *name, - struct glyph **cursor, - struct glyph **mask) -{ - int i; - char mask_name[100]; - sprintf(mask_name, "%s_mask", name); - - *cursor = *mask = NULL; - - for (i = 0; i < extracted_font.count && (!*mask || !*cursor); ++i) { - struct glyph *g = &extracted_font.glyphs[i]; - if (!strcmp(name, g->name)) - *cursor = g; - else if (!strcmp(mask_name, g->name)) - *mask = g; - } -} - -static struct { - char *target_name, *source_name; -} interesting_cursors[] = { - { "bottom_left_corner", "bottom_left_corner" }, - { "bottom_right_corner", "bottom_right_corner" }, - { "bottom_side", "bottom_side" }, - { "grabbing", "fleur" }, - { "left_ptr", "left_ptr" }, - { "left_side", "left_side" }, - { "right_side", "right_side" }, - { "top_left_corner", "top_left_corner" }, - { "top_right_corner", "top_right_corner" }, - { "top_side", "top_side" }, - { "xterm", "xterm" }, - { "hand1", "hand1" }, - { "watch", "watch" } -}; - -static void -output_interesting_cursors() -{ - int i; - int n = sizeof(interesting_cursors) / sizeof(interesting_cursors[0]); - struct reconstructed_glyph *glyphs = - malloc(n * sizeof(*glyphs)); - - for (i = 0; i < n; ++i) { - struct glyph *cursor, *mask; - find_cursor_and_mask(interesting_cursors[i].source_name, - &cursor, &mask); - if (!cursor) { - printf("no cursor for %s\n", - interesting_cursors[i].source_name); - abort(); - } - if (!mask) { - printf("no mask for %s\n", - interesting_cursors[i].source_name); - abort(); - } - reconstruct_glyph(cursor, mask, - interesting_cursors[i].target_name, - &glyphs[i]); - } - - write_output_file(glyphs, n); -} - -int main() -{ - const char filename[] = "cursor.pcf"; - - int fd = open(filename, O_RDONLY); - struct stat filestat; - - fstat(fd, &filestat); - - void *fontbuf = mmap(NULL, filestat.st_size, PROT_READ, - MAP_PRIVATE, fd, 0); - - handle_pcf(fontbuf); - - init_data_buffer(); - - //output_all_cursors(); - output_interesting_cursors(); -} diff --git a/cursor/cursor.pcf b/cursor/cursor.pcf deleted file mode 100644 index 812fcc5..0000000 Binary files a/cursor/cursor.pcf and /dev/null differ commit f368a65dac42222197622c778776b12aac87e6f2 Author: Sven Joachim <[email protected]> Date: Mon Dec 3 18:25:32 2012 +0100 Document the cherry-pick diff --git a/debian/changelog b/debian/changelog index 092c327..cbb3513 100644 --- a/debian/changelog +++ b/debian/changelog @@ -25,6 +25,8 @@ wayland (1.0.2-1) UNRELEASED; urgency=low [ Sven Joachim ] * Update symbols file, bumping minver of all symbols to 1.0.2. + * Cherry-pick commit 7415e8eb (tests: Don't leave temporary files behind) + from upstream master to avoid putting 2001 files in /tmp at build time. * Add Homepage field to debian/control. * Update debian/copyright. commit ce89adc43833a850a3e5794cd630d2a7091074f9 Author: Sven Joachim <[email protected]> Date: Sun Dec 2 22:42:11 2012 +0100 tests: Don't leave temporary files behind Signed-off-by: Sven Joachim <[email protected]> (cherry picked from commit 7415e8eb053d7f2e7254466ab0acbdab0faf4742) diff --git a/tests/connection-test.c b/tests/connection-test.c index d0113f1..45744a0 100644 --- a/tests/connection-test.c +++ b/tests/connection-test.c @@ -447,6 +447,7 @@ TEST(connection_marshal_demarshal) data.value.h = mkstemp(f); assert(data.value.h >= 0); + unlink(f); marshal_demarshal(&data, (void *) validate_demarshal_h, 8, "h", data.value.h); @@ -480,6 +481,7 @@ TEST(connection_marshal_alot) strcpy(f, "/tmp/weston-tests-XXXXXX"); data.value.h = mkstemp(f); assert(data.value.h >= 0); + unlink(f); marshal_demarshal(&data, (void *) validate_demarshal_h, 8, "h", data.value.h); } commit 5af4f5df247902c482a753bebf527a98aa19ca72 Author: Sven Joachim <[email protected]> Date: Mon Dec 3 18:05:39 2012 +0100 Revert "Switch to source format 3.0 (quilt) due to the xz tarball." This reverts commit 81958b8cc9aa6ba96bc9d44af039fd895f03b9ba. The X Strike Force does not like format 3.0 (quilt) since it prevents easy cherry-picks from upstream branches. Upstream tarballs will have to be repacked, though. diff --git a/debian/changelog b/debian/changelog index 7e7b6a3..092c327 100644 --- a/debian/changelog +++ b/debian/changelog @@ -22,7 +22,6 @@ wayland (1.0.2-1) UNRELEASED; urgency=low * rules: Temporarily disable installing the protocol docs, decide where to put them first. * Add README.source - * Switch to source format 3.0 (quilt) due to the xz tarball. [ Sven Joachim ] * Update symbols file, bumping minver of all symbols to 1.0.2. diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 163aaf8..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

