chore: split monolithic header to proper program files, add vec2 ruby class to proxy element position etc., other cleanup
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#include "bindings/definitions.h"
|
||||
#include "window/window.h"
|
||||
|
||||
namespace {
|
||||
void Font_free(mrb_state *mrb, void *ptr) {
|
||||
UNUSED(mrb);
|
||||
uint64_t id = ((Wrapper *)ptr)->id;
|
||||
font_pool.release(id);
|
||||
delete (Wrapper *)ptr;
|
||||
}
|
||||
|
||||
const struct mrb_data_type Font_type = {"Font", Font_free};
|
||||
|
||||
mrb_value Font_init(mrb_state *mrb, mrb_value self) {
|
||||
Wrapper *old = (Wrapper *)DATA_PTR(self);
|
||||
if (old)
|
||||
mrb_free(mrb, old);
|
||||
mrb_data_init(self, nullptr, &Font_type);
|
||||
Wrapper *s = new Wrapper();
|
||||
|
||||
char *path;
|
||||
mrb_int size;
|
||||
mrb_value kwargs;
|
||||
mrb_get_args(mrb, "zi|H", &path, &size, &kwargs);
|
||||
|
||||
bool pixel_art = false;
|
||||
bool bold = false;
|
||||
bool italic = false;
|
||||
bool underline = false;
|
||||
if (!mrb_nil_p(kwargs)) {
|
||||
HASH_BOOL(kwargs, pixel_art, pixel_art);
|
||||
HASH_BOOL(kwargs, bold, bold);
|
||||
HASH_BOOL(kwargs, italic, italic);
|
||||
HASH_BOOL(kwargs, underline, underline);
|
||||
}
|
||||
|
||||
s->id = window.load_font(path, size, bold, italic, underline, pixel_art);
|
||||
|
||||
mrb_data_init(self, s, &Font_type);
|
||||
return self;
|
||||
}
|
||||
|
||||
mrb_value font_equal(mrb_state *mrb, mrb_value self) {
|
||||
mrb_value other;
|
||||
mrb_get_args(mrb, "o", &other);
|
||||
|
||||
if (!mrb_obj_is_kind_of(mrb, other, definitions::bindings.Font.cls))
|
||||
return mrb_false_value();
|
||||
|
||||
Wrapper *wrapper = (Wrapper *)DATA_PTR(self);
|
||||
uint64_t id_self = wrapper->id;
|
||||
Wrapper *other_wrapper = (Wrapper *)DATA_PTR(other);
|
||||
uint64_t id_other = other_wrapper->id;
|
||||
|
||||
return mrb_bool_value(id_self == id_other);
|
||||
}
|
||||
|
||||
mrb_value font_hash(mrb_state *, mrb_value self) {
|
||||
Wrapper *wrapper = (Wrapper *)DATA_PTR(self);
|
||||
return mrb_fixnum_value(wrapper->id);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace definitions {
|
||||
void register_font() {
|
||||
DEF_CLASS(Font, MRB_ARGS_REQ(2) | MRB_ARGS_OPT(1));
|
||||
ADD_METHOD(Font, "==", font_equal, MRB_ARGS_REQ(1));
|
||||
ADD_METHOD(Font, "eql?", font_equal, MRB_ARGS_REQ(1));
|
||||
ADD_METHOD(Font, "hash", font_hash, MRB_ARGS_NONE());
|
||||
bindings.Font = {Font_class, &Font_type};
|
||||
}
|
||||
} // namespace definitions
|
||||
Reference in New Issue
Block a user