Example #1
0
std::unique_ptr<Pointer>
CoreDriver::create_pointer(const ReaderObject& reader_object, Control* parent)
{
  if (reader_object.get_name() == "core:axis-pointer")
  {
    ReaderMapping reader = reader_object.get_mapping();

    auto axis = util::make_unique<AxisPointer>(parent);

    ReaderObject x_reader;
    if (!reader.read_object("x-axis", x_reader))
    {
      log_error("CoreDriver: Couldn't find x-axis");
      return {};
    }

    ReaderObject y_reader;
    if (!reader.read_object("y-axis", y_reader))
    {
      log_error("CoreDriver: Couldn't find y-axis");
      return {};
    }

    std::unique_ptr<Axis> x_axis = manager->create_axis(x_reader, axis.get());
    std::unique_ptr<Axis> y_axis = manager->create_axis(y_reader, axis.get());

    std::unique_ptr<Button> button;
    ReaderObject button_reader;
    if (reader.read_object("button", button_reader))
    {
      button = manager->create_button(button_reader, axis.get());
    }

    if (x_axis && y_axis)
    {
      axis->setup(std::move(x_axis), std::move(y_axis), std::move(button));
      return std::move(axis);
    }
    else
    {
      return {};
    }
  }
  else
  {
    return {};
  }
}
Example #2
0
std::unique_ptr<Scroller>
CoreDriver::create_scroller(const ReaderObject& reader_object, Control* parent)
{
  if (reader_object.get_name() == "core:axis-scroller")
  {
    ReaderMapping reader = reader_object.get_mapping();

    auto axis = util::make_unique<AxisScroller>(parent);

    ReaderObject x_reader;
    if (!reader.read_object("x-axis", x_reader))
    {
      log_error("CoreDriver: Couldn't find x-axis");
      return {};
    }

    ReaderObject y_reader;
    if (!reader.read_object("y-axis", y_reader))
    {
      log_error("CoreDriver: Couldn't find y-axis");
      return {};
    }

    std::unique_ptr<Axis> x_axis = manager->create_axis(x_reader, axis.get());
    std::unique_ptr<Axis> y_axis = manager->create_axis(y_reader, axis.get());

    std::unique_ptr<Button> button;
    ReaderObject button_reader;
    if (reader.read_object("button", button_reader))
    {
      button = manager->create_button(button_reader, axis.get());
    }

    if (x_axis && y_axis)
    {
      axis->setup(std::move(x_axis), std::move(y_axis), std::move(button));
      return std::move(axis);
    }
    else
    {
      return {};
    }
  }
  else if (reader_object.get_name() == "core:button-scroller")
  {
    ReaderMapping reader = reader_object.get_mapping();

    auto scroller = util::make_unique<ButtonScroller>(parent);

    ReaderObject left_reader;
    if (!reader.read_object("left", left_reader))
    {
      log_error("CoreDriver: core:button-scroller: Couldn't find 'left'");
      return {};
    }

    ReaderObject right_reader;
    if (!reader.read_object("right", right_reader))
    {
      log_error("CoreDriver: core:button-scroller: Couldn't find 'right'");
      return {};
    }

    ReaderObject up_reader;
    if (!reader.read_object("up", up_reader))
    {
      log_error("CoreDriver: core:button-scroller: Couldn't find 'up'");
      return {};
    }

    ReaderObject down_reader;
    if (!reader.read_object("down", down_reader))
    {
      log_error("CoreDriver: core:button-scroller: Couldn't find 'down'");
      return {};
    }

    // FIXME: Add more error checking
    auto up_button = manager->create_button(up_reader, scroller.get());
    auto down_button = manager->create_button(down_reader, scroller.get());
    auto left_button = manager->create_button(left_reader, scroller.get());
    auto right_button = manager->create_button(right_reader, scroller.get());

    scroller->setup(std::move(up_button),
                    std::move(down_button),
                    std::move(left_button),
                    std::move(right_button));
    return std::move(scroller);
  }
  else
  {
    return {};
  }
}