#define KMSCON_FONT_H
#include <stdlib.h>
+#include "output.h"
#include "unicode.h"
struct kmscon_font_factory;
struct kmscon_font;
int kmscon_font_factory_new(struct kmscon_font_factory **out,
- struct kmscon_symbol_table *st);
+ struct kmscon_symbol_table *st, struct kmscon_compositor *comp);
void kmscon_font_factory_ref(struct kmscon_font_factory *ff);
void kmscon_font_factory_unref(struct kmscon_font_factory *ff);
#include "font.h"
#include "log.h"
+#include "output.h"
#include "unicode.h"
#include <ft2build.h>
unsigned long ref;
struct kmscon_symbol_table *st;
FT_Library lib;
+ struct kmscon_compositor *comp;
+ struct kmscon_context *ctx;
};
struct kmscon_font {
};
int kmscon_font_factory_new(struct kmscon_font_factory **out,
- struct kmscon_symbol_table *st)
+ struct kmscon_symbol_table *st, struct kmscon_compositor *comp)
{
struct kmscon_font_factory *ff;
FT_Error err;
int ret;
- if (!out)
+ if (!out || !st || !comp)
return -EINVAL;
ff = malloc(sizeof(*ff));
memset(ff, 0, sizeof(*ff));
ff->ref = 1;
ff->st = st;
+ ff->comp = comp;
+ ff->ctx = kmscon_compositor_get_context(comp);
err = FT_Init_FreeType(&ff->lib);
if (err) {
goto err_free;
}
+ kmscon_compositor_ref(ff->comp);
kmscon_symbol_table_ref(ff->st);
*out = ff;
if (err)
log_warning("font: cannot deinitialize FreeType library\n");
+ kmscon_compositor_unref(ff->comp);
kmscon_symbol_table_unref(ff->st);
free(ff);
}
#include <pango/pangocairo.h>
#include "font.h"
#include "log.h"
+#include "output.h"
#include "unicode.h"
enum glyph_type {
struct kmscon_font_factory {
unsigned long ref;
struct kmscon_symbol_table *st;
+ struct kmscon_compositor *comp;
+ struct kmscon_context *ctx;
};
struct kmscon_font {
}
int kmscon_font_factory_new(struct kmscon_font_factory **out,
- struct kmscon_symbol_table *st)
+ struct kmscon_symbol_table *st, struct kmscon_compositor *comp)
{
struct kmscon_font_factory *ff;
- if (!out)
+ if (!out || !st || !comp)
return -EINVAL;
ff = malloc(sizeof(*ff));
memset(ff, 0, sizeof(*ff));
ff->ref = 1;
ff->st = st;
+ ff->comp = comp;
+ ff->ctx = kmscon_compositor_get_context(comp);
+ kmscon_compositor_ref(ff->comp);
kmscon_symbol_table_ref(ff->st);
*out = ff;
if (--ff->ref)
return;
+ kmscon_compositor_unref(ff->comp);
kmscon_symbol_table_unref(ff->st);
free(ff);
}
if (ret)
goto err_loop;
- ret = kmscon_font_factory_new(&con->ff, con->st);
+ ret = kmscon_compositor_new(&con->comp);
if (ret)
goto err_loop;
- ret = kmscon_compositor_new(&con->comp);
+ ret = kmscon_compositor_use(con->comp);
if (ret)
goto err_loop;
- ret = kmscon_compositor_use(con->comp);
+ ret = kmscon_font_factory_new(&con->ff, con->st, con->comp);
if (ret)
goto err_loop;
if (ret)
goto err_loop;
- ret = kmscon_font_factory_new(&app->ff, app->st);
+ ret = kmscon_compositor_new(&app->comp);
if (ret)
goto err_loop;
- ret = kmscon_compositor_new(&app->comp);
+ ret = kmscon_compositor_use(app->comp);
if (ret)
goto err_loop;
- ret = kmscon_compositor_use(app->comp);
+ ret = kmscon_font_factory_new(&app->ff, app->st, app->comp);
if (ret)
goto err_loop;