Esempio n. 1
0
 expr apply(expr const & a) {
     check_system("max_sharing");
     auto r = m_expr_cache.find(a);
     if (r != m_expr_cache.end())
         return *r;
     expr res;
     switch (a.kind()) {
     case expr_kind::Var:
         res = a;
         break;
     case expr_kind::Constant:
         res = update_constant(a, map(const_levels(a), [&](level const & l) { return apply(l); }));
         break;
     case expr_kind::Sort:
         res = update_sort(a, apply(sort_level(a)));
         break;
     case expr_kind::App:
         res = update_app(a, apply(app_fn(a)), apply(app_arg(a)));
         break;
     case expr_kind::Lambda: case expr_kind::Pi:
         res = update_binding(a, apply(binding_domain(a)), apply(binding_body(a)));
         break;
     case expr_kind::Meta:  case expr_kind::Local:
         res = update_mlocal(a, apply(mlocal_type(a)));
         break;
     case expr_kind::Macro: {
         buffer<expr> new_args;
         for (unsigned i = 0; i < macro_num_args(a); i++)
             new_args.push_back(macro_arg(a, i));
         res = update_macro(a, new_args.size(), new_args.data());
         break;
     }}
     m_expr_cache.insert(res);
     return res;
 }
Esempio n. 2
0
 expr collect(expr const & e) {
     return replace(e, [&](expr const & e, unsigned) {
             if (is_metavar(e)) {
                 name const & id = mlocal_name(e);
                 if (auto r = m_meta_to_param.find(id)) {
                     return some_expr(*r);
                 } else {
                     expr type  = m_ctx.infer(e);
                     expr x     = m_ctx.push_local("_x", type);
                     m_meta_to_param.insert(id, x);
                     m_meta_to_param_inv.insert(mlocal_name(x), e);
                     m_params.push_back(x);
                     return some_expr(x);
                 }
             } else if (is_local(e)) {
                 name const & id = mlocal_name(e);
                 if (!m_found_local.contains(id)) {
                     m_found_local.insert(id);
                     m_params.push_back(e);
                 }
             } else if (is_sort(e)) {
                 return some_expr(update_sort(e, collect(sort_level(e))));
             } else if (is_constant(e)) {
                 return some_expr(update_constant(e, collect(const_levels(e))));
             }
             return none_expr();
         });
 }
Esempio n. 3
0
void Image_controls::on_image_source_combo_box__currentIndexChanged(int index)
{
	if (0 == index)
	{
		update_constant();
	}
	else
	{
		update_image();
	}
}
Esempio n. 4
0
void Image_controls::on_scalar_constant_spin_box__valueChanged(double arg1)
{
	set_constant(static_cast<float>(arg1));

	if (0 == ui->image_source_combo_box_->currentIndex())
	{
		update_constant();
	}
	else
	{
		ui->image_source_combo_box_->setCurrentIndex(0);
	}
}
Esempio n. 5
0
void Image_controls::init(uint32_t num_channels, const rendering::Color3& constant, bool treat_missing_source_as_constant,
						  Thumbnail_provider* thumbnail_provider)
{
	treat_missing_source_as_constant_ = treat_missing_source_as_constant;

	thumbnail_provider_ = thumbnail_provider;

	bool single_channel = 1 == num_channels;

	if (treat_missing_source_as_constant)
	{
		ui->constant_stacked_widget_->setCurrentIndex(single_channel ? 1 : 0);
	}
	else
	{
		ui->constant_stacked_widget_->setCurrentIndex(2);
	}


	ui->manipulator_stacked_widget_->setCurrentIndex(single_channel ? 1 : 0);

	constant_ = constant;
	ui->scalar_constant_spin_box_->setValue(double(constant.x));

	if (single_channel)
	{
		QStringList channels;
		channels.append("Red");
		channels.append("Green");
		channels.append("Blue");
		channels.append("Alpha");

		ui->channels_combo_box_->addItems(channels);
	}

	treat_missing_source_as_constant_ = treat_missing_source_as_constant;

	ui->image_source_combo_box_->addItem(treat_missing_source_as_constant ? "Use constant" : "");

	thumbnail_.resize(thumbnail_provider->thumbnail_dimensions());

	update_constant();
}
Esempio n. 6
0
void Image_controls::on_color_constant_button__clicked()
{
	rendering::Color3 rgb = rendering::linear_to_sRGB(constant_);

	QColor qcolor = QColorDialog::getColor(QColor::fromRgbF(rgb.r, rgb.g, rgb.b), this, "Color constant");

	if (qcolor.isValid())
	{
		rgb = rendering::Color3(qcolor.redF(), qcolor.greenF(), qcolor.blueF());

		set_constant(rendering::sRGB_to_linear(rgb));

		if (0 == ui->image_source_combo_box_->currentIndex())
		{
			update_constant();
		}
		else
		{
			ui->image_source_combo_box_->setCurrentIndex(0);
		}
	}
}
Esempio n. 7
0
 virtual expr visit_constant(expr const & c) {
     return update_constant(c, visit_levels(const_levels(c)));
 }