Example #1
0
static bool
ply_renderer_load_plugin (ply_renderer_t *renderer,
                          const char     *module_path)
{
  assert (renderer != NULL);

  get_backend_interface_function_t get_renderer_backend_interface;

  renderer->module_handle = ply_open_module (module_path);

  if (renderer->module_handle == NULL)
    return false;

  get_renderer_backend_interface = (get_backend_interface_function_t)
      ply_module_look_up_function (renderer->module_handle,
                                   "ply_renderer_backend_get_interface");

  if (get_renderer_backend_interface == NULL)
    {
      ply_save_errno ();
      ply_trace ("module '%s' is not a renderer plugin",
                 module_path);
      ply_close_module (renderer->module_handle);
      renderer->module_handle = NULL;
      ply_restore_errno ();
      return false;
    }

  renderer->plugin_interface = get_renderer_backend_interface ();

  if (renderer->plugin_interface == NULL)
    {
      ply_trace ("module '%s' is not a valid renderer plugin",
                 module_path);
      ply_save_errno ();
      ply_close_module (renderer->module_handle);
      renderer->module_handle = NULL;
      ply_restore_errno ();
      return false;
    }

  renderer->backend = renderer->plugin_interface->create_backend (renderer->device_name,
                                                                  renderer->terminal);

  if (renderer->backend == NULL)
    {
      ply_save_errno ();
      ply_trace ("module '%s' renderer backend could not be created",
                 module_path);
      ply_close_module (renderer->module_handle);
      renderer->module_handle = NULL;
      ply_restore_errno ();
      return false;
    }

  return true;
}
Example #2
0
static bool
ply_label_load_plugin (ply_label_t *label)
{
  assert (label != NULL);

  get_plugin_interface_function_t get_label_plugin_interface;

  label->module_handle = ply_open_module (PLYMOUTH_PLUGIN_PATH "label.so");

  if (label->module_handle == NULL)
    return false;

  get_label_plugin_interface = (get_plugin_interface_function_t)
      ply_module_look_up_function (label->module_handle,
                                   "ply_label_plugin_get_interface");

  if (get_label_plugin_interface == NULL)
    {
      ply_save_errno ();
      ply_close_module (label->module_handle);
      label->module_handle = NULL;
      ply_restore_errno ();
      return false;
    }

  label->plugin_interface = get_label_plugin_interface ();

  if (label->plugin_interface == NULL)
    {
      ply_save_errno ();
      ply_close_module (label->module_handle);
      label->module_handle = NULL;
      ply_restore_errno ();
      return false;
    }

  label->control = label->plugin_interface->create_control ();

  if (label->text != NULL)
    label->plugin_interface->set_text_for_control (label->control,
                                                   label->text);
  label->plugin_interface->set_alignment_for_control (label->control,
                                                      label->alignment);
  label->plugin_interface->set_width_for_control (label->control,
                                                  label->width);
  if (label->fontdesc != NULL)
    label->plugin_interface->set_font_for_control (label->control,
                                                   label->fontdesc);

  label->plugin_interface->set_color_for_control (label->control,
                                                  label->red,
                                                  label->green,
                                                  label->blue,
                                                  label->alpha);
  return true;
}