blob: 0a91d24fbbc5235336f22bf4fcc5c950185a0057 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/linux/testing/mock_texture_registrar.h"
struct _FlMockTextureRegistrar {
GObject parent_instance;
FlTexture* texture;
gboolean frame_available;
};
static void fl_mock_texture_registrar_iface_init(
FlTextureRegistrarInterface* iface);
G_DEFINE_TYPE_WITH_CODE(
FlMockTextureRegistrar,
fl_mock_texture_registrar,
G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE(fl_texture_registrar_get_type(),
fl_mock_texture_registrar_iface_init))
static gboolean register_texture(FlTextureRegistrar* registrar,
FlTexture* texture) {
FlMockTextureRegistrar* self = FL_MOCK_TEXTURE_REGISTRAR(registrar);
if (self->texture != nullptr) {
return FALSE;
}
self->texture = FL_TEXTURE(g_object_ref(texture));
return TRUE;
}
static FlTexture* lookup_texture(FlTextureRegistrar* registrar,
int64_t texture_id) {
FlMockTextureRegistrar* self = FL_MOCK_TEXTURE_REGISTRAR(registrar);
if (self->texture != nullptr &&
fl_texture_get_id(self->texture) == texture_id) {
return self->texture;
}
return nullptr;
}
static gboolean mark_texture_frame_available(FlTextureRegistrar* registrar,
FlTexture* texture) {
FlMockTextureRegistrar* self = FL_MOCK_TEXTURE_REGISTRAR(registrar);
if (lookup_texture(registrar, fl_texture_get_id(texture)) == nullptr) {
return FALSE;
}
self->frame_available = TRUE;
return TRUE;
}
static gboolean unregister_texture(FlTextureRegistrar* registrar,
FlTexture* texture) {
FlMockTextureRegistrar* self = FL_MOCK_TEXTURE_REGISTRAR(registrar);
if (self->texture != texture) {
return FALSE;
}
g_clear_object(&self->texture);
return TRUE;
}
static void fl_mock_texture_registrar_iface_init(
FlTextureRegistrarInterface* iface) {
iface->register_texture = register_texture;
iface->lookup_texture = lookup_texture;
iface->mark_texture_frame_available = mark_texture_frame_available;
iface->unregister_texture = unregister_texture;
}
static void fl_mock_texture_registrar_dispose(GObject* object) {
FlMockTextureRegistrar* self = FL_MOCK_TEXTURE_REGISTRAR(object);
g_clear_object(&self->texture);
G_OBJECT_CLASS(fl_mock_texture_registrar_parent_class)->dispose(object);
}
static void fl_mock_texture_registrar_class_init(
FlMockTextureRegistrarClass* klass) {
G_OBJECT_CLASS(klass)->dispose = fl_mock_texture_registrar_dispose;
}
static void fl_mock_texture_registrar_init(FlMockTextureRegistrar* self) {}
FlMockTextureRegistrar* fl_mock_texture_registrar_new() {
return FL_MOCK_TEXTURE_REGISTRAR(
g_object_new(fl_mock_texture_registrar_get_type(), nullptr));
}
FlTexture* fl_mock_texture_registrar_get_texture(FlMockTextureRegistrar* self) {
return self->texture;
}
gboolean fl_mock_texture_registrar_get_frame_available(
FlMockTextureRegistrar* self) {
return self->frame_available;
}