Modify it to adjust Tizen IVI enviroment
[platform/upstream/kmscon.git] / src / font.h
index a8d8bbf..f7e4b01 100644 (file)
@@ -1,8 +1,7 @@
 /*
- * kmscon - Font Management
+ * kmscon - Font Renderer
  *
- * Copyright (c) 2011 David Herrmann <dh.herrmann@googlemail.com>
- * Copyright (c) 2011 University of Tuebingen
+ * Copyright (c) 2012-2013 David Herrmann <dh.herrmann@googlemail.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
  */
 
 /*
- * Font Management
- * A font factory helps loading and initializing fonts. The font object is used
- * to draw glyphs onto the screen.
- * Efficient caching is used to allow fast drawing operations.
+ * Font Renderer
  */
 
 #ifndef KMSCON_FONT_H
 #define KMSCON_FONT_H
 
+#include <errno.h>
 #include <stdlib.h>
-#include "gl.h"
-#include "unicode.h"
+#include "kmscon_module.h"
+#include "uterm_video.h"
 
-struct kmscon_font_factory;
+/* fonts */
+
+struct kmscon_font_attr;
+struct kmscon_glyph;
 struct kmscon_font;
+struct kmscon_font_ops;
+
+#define KMSCON_FONT_MAX_NAME 128
+#define KMSCON_FONT_DEFAULT_NAME "monospace"
+#define KMSCON_FONT_DEFAULT_PPI 72
+
+struct kmscon_font_attr {
+       char name[KMSCON_FONT_MAX_NAME];
+       unsigned int ppi;
+       unsigned int points;
+       bool bold;
+       bool italic;
+       unsigned int height;
+       unsigned int width;
+};
+
+void kmscon_font_attr_normalize(struct kmscon_font_attr *attr);
+bool kmscon_font_attr_match(const struct kmscon_font_attr *a1,
+                           const struct kmscon_font_attr *a2);
 
-int kmscon_font_factory_new(struct kmscon_font_factory **out);
-void kmscon_font_factory_ref(struct kmscon_font_factory *ff);
-void kmscon_font_factory_unref(struct kmscon_font_factory *ff);
+struct kmscon_glyph {
+       struct uterm_video_buffer buf;
+       unsigned int width;
+       void *data;
+};
 
-int kmscon_font_factory_load(struct kmscon_font_factory *ff,
-       struct kmscon_font **out, unsigned int width, unsigned int height);
+struct kmscon_font {
+       unsigned long ref;
+       struct shl_register_record *record;
+       const struct kmscon_font_ops *ops;
+       struct kmscon_font_attr attr;
+       unsigned int baseline;
+       void *data;
+};
 
+struct kmscon_font_ops {
+       const char *name;
+       struct kmscon_module *owner;
+       int (*init) (struct kmscon_font *out,
+                    const struct kmscon_font_attr *attr);
+       void (*destroy) (struct kmscon_font *font);
+       int (*render) (struct kmscon_font *font,
+                      uint32_t id, const uint32_t *ch, size_t len,
+                      const struct kmscon_glyph **out);
+       int (*render_empty) (struct kmscon_font *font,
+                            const struct kmscon_glyph **out);
+       int (*render_inval) (struct kmscon_font *font,
+                            const struct kmscon_glyph **out);
+};
+
+int kmscon_font_register(const struct kmscon_font_ops *ops);
+void kmscon_font_unregister(const char *name);
+
+int kmscon_font_find(struct kmscon_font **out,
+                    const struct kmscon_font_attr *attr,
+                    const char *backend);
 void kmscon_font_ref(struct kmscon_font *font);
 void kmscon_font_unref(struct kmscon_font *font);
 
-unsigned int kmscon_font_get_height(struct kmscon_font *font);
-unsigned int kmscon_font_get_width(struct kmscon_font *font);
-int kmscon_font_draw(struct kmscon_font *font, kmscon_symbol_t ch, float *m,
-                       struct gl_shader *shader);
+int kmscon_font_render(struct kmscon_font *font,
+                      uint32_t id, const uint32_t *ch, size_t len,
+                      const struct kmscon_glyph **out);
+int kmscon_font_render_empty(struct kmscon_font *font,
+                            const struct kmscon_glyph **out);
+int kmscon_font_render_inval(struct kmscon_font *font,
+                            const struct kmscon_glyph **out);
+
+/* modularized backends */
+
+extern struct kmscon_font_ops kmscon_font_8x16_ops;
+extern struct kmscon_font_ops kmscon_font_unifont_ops;
+extern struct kmscon_font_ops kmscon_font_pango_ops;
 
 #endif /* KMSCON_FONT_H */