/*
* Copyright 2012-2013 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* version 3 along with this program. If not, see
*
*
* Authored by: Manuel de la Pena
*
*/
#include
#include "Nux/Nux.h"
#include "Nux/VLayout.h"
#include "Nux/WindowThread.h"
#include "NuxGraphics/GraphicsEngine.h"
#include "Nux/NuxTimerTickSource.h"
#include
#include
#include
#include
#include
#include
#include "unity-shared/FontSettings.h"
#include "unity-shared/UnitySettings.h"
#include "unity-shared/PreviewStyle.h"
#include "unity-shared/DashStyle.h"
#include "unity-shared/ThumbnailGenerator.h"
#include "Preview.h"
#include "PreviewContainer.h"
const unity::RawPixel WIDTH(1100);
const unity::RawPixel HEIGHT(600);
using namespace unity;
using namespace unity::dash;
static double scale = 1.0;
namespace
{
nux::logging::Logger logger("unity.dash.StandaloneMusicPreview");
}
class DummyView : public nux::View
{
public:
DummyView(nux::View* view)
: View(NUX_TRACKER_LOCATION)
{
SetAcceptKeyNavFocusOnMouseDown(false);
SetAcceptKeyNavFocusOnMouseEnter(false);
nux::ROPConfig rop;
rop.Blend = true;
rop.SrcBlend = GL_ONE;
rop.DstBlend = GL_ONE_MINUS_SRC_ALPHA;
bg_layer_.reset(new nux::ColorLayer(nux::Color(81, 26, 48), true, rop));
nux::Layout* layout = new nux::VLayout();
layout->SetPadding(10);
layout->AddView(view, 1, nux::MINOR_POSITION_CENTER);
SetLayout(layout);
}
virtual ~DummyView() {}
// Keyboard navigation
bool AcceptKeyNavFocus()
{
return false;
}
protected:
virtual void Draw(nux::GraphicsEngine& gfx_engine, bool force_draw)
{
nux::Geometry const& base = GetGeometry();
gfx_engine.PushClippingRectangle(base);
nux::GetPainter().PaintBackground(gfx_engine, base);
unsigned int alpha, src, dest = 0;
gfx_engine.GetRenderStates().GetBlend(alpha, src, dest);
gfx_engine.GetRenderStates().SetBlend(true, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
bg_layer_->SetGeometry(GetGeometry());
nux::GetPainter().RenderSinglePaintLayer(gfx_engine, GetGeometry(), bg_layer_.get());
gfx_engine.GetRenderStates().SetBlend(alpha, src, dest);
gfx_engine.PopClippingRectangle();
}
virtual void DrawContent(nux::GraphicsEngine& gfx_engine, bool force_draw)
{
nux::Geometry const& base = GetGeometry();
gfx_engine.PushClippingRectangle(base);
if (!IsFullRedraw())
nux::GetPainter().PushLayer(gfx_engine, GetGeometry(), bg_layer_.get());
if (GetCompositionLayout())
GetCompositionLayout()->ProcessDraw(gfx_engine, force_draw);
if (!IsFullRedraw())
nux::GetPainter().PopBackground();
gfx_engine.PopClippingRectangle();
}
typedef std::unique_ptr LayerPtr;
LayerPtr bg_layer_;
};
class TestRunner
{
public:
TestRunner ();
~TestRunner ();
static void InitWindowThread (nux::NThread* thread, void* InitData);
void Init ();
previews::PreviewContainer::Ptr container_;
nux::Layout *layout_;
unsigned int nav_iter;
previews::Navigation nav_direction_;
std::string search_string_;
bool first_;
};
TestRunner::TestRunner ()
{
}
TestRunner::~TestRunner ()
{
}
void TestRunner::Init ()
{
container_ = new previews::PreviewContainer(NUX_TRACKER_LOCATION);
container_->request_close.connect([this]() { exit(0); });
container_->DisableNavButton(previews::Navigation::BOTH);
container_->scale = scale;
DummyView* dummyView = new DummyView(container_.GetPointer());
layout_ = new nux::VLayout(NUX_TRACKER_LOCATION);
layout_->AddView(dummyView, 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_FULL);
nux::GetWindowThread()->SetLayout (layout_);
glib::Object proto_obj(UNITY_PROTOCOL_PREVIEW(
unity_protocol_payment_preview_new()));
unity_protocol_preview_set_title(
proto_obj, "This Modern Glitch");
unity_protocol_preview_set_subtitle(
proto_obj, "The Wombats");
unity_protocol_payment_preview_set_header(
UNITY_PROTOCOL_PAYMENT_PREVIEW(proto_obj.RawPtr()),
"It seems that you haven't set your preferred metod for Ubuntu One. To add a pereferred method visist Ubuntu One.");
unity_protocol_payment_preview_set_purchase_prize(
UNITY_PROTOCOL_PAYMENT_PREVIEW(proto_obj.RawPtr()),
"10 eur");
unity_protocol_payment_preview_set_purchase_type(
UNITY_PROTOCOL_PAYMENT_PREVIEW(proto_obj.RawPtr()),
"Digital CD");
unity_protocol_payment_preview_set_preview_type(UNITY_PROTOCOL_PAYMENT_PREVIEW(proto_obj.RawPtr()),
UNITY_PROTOCOL_PREVIEW_PAYMENT_TYPE_ERROR);
// set the diff actions
unity_protocol_preview_add_action(proto_obj, "open_u1_link", "Go to Ubuntu One", NULL, 0);
unity_protocol_preview_add_action(proto_obj, "cancel", "Cancel", NULL, 0);
glib::Variant v(dee_serializable_serialize(DEE_SERIALIZABLE(proto_obj.RawPtr())),
glib::StealRef());
dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v));
container_->Preview(preview_model, previews::Navigation::LEFT);
}
void TestRunner::InitWindowThread(nux::NThread* thread, void* InitData)
{
TestRunner *self = (TestRunner *) InitData;
self->Init ();
}
int main(int argc, char **argv)
{
nux::WindowThread* wt = NULL;
gtk_init (&argc, &argv);
nux::NuxInitialize(0);
nux::logging::configure_logging(::getenv("UNITY_LOG_SEVERITY"));
// The instances for the pseudo-singletons.
unity::Settings settings;
unity::dash::previews::Style panel_style;
unity::dash::Style dash_style;
unity::ThumbnailGenerator thumbnail_generator;
unity::glib::Error err;
GOptionEntry args_parsed[] =
{
{ "scaling-factor", 's', 0, G_OPTION_ARG_DOUBLE, &scale, "The dash scaling factor", "F" },
{ NULL }
};
std::shared_ptr ctx(g_option_context_new("Unity Preview"), g_option_context_free);
g_option_context_add_main_entries(ctx.get(), args_parsed, NULL);
if (!g_option_context_parse(ctx.get(), &argc, &argv, &err))
std::cerr << "Got error when parsing arguments: " << err << std::endl;
TestRunner *test_runner = new TestRunner ();
wt = nux::CreateGUIThread(TEXT("Unity Preview"),
WIDTH.CP(scale), HEIGHT.CP(scale),
0,
&TestRunner::InitWindowThread,
test_runner);
nux::NuxTimerTickSource tick_source;
nux::animation::AnimationController animation_controller(tick_source);
wt->Run (NULL);
delete wt;
return 0;
}