예제 #1
0
	ScrollView::ScrollView() : impl(new ScrollViewImpl())
	{
		impl->view = this;
		
		impl->scroll_x->set_hidden();
		impl->scroll_y->set_hidden();
		impl->scroll_x->set_horizontal();
		impl->scroll_y->set_vertical();

		impl->content_container->style()->set("flex: 1 1 main-size");

		impl->content_container->set_content_clipped(true);
		impl->content_container->add_subview(impl->content);

		add_subview(impl->content_container);
		add_subview(impl->scroll_x);
		add_subview(impl->scroll_y);

		slots.connect(impl->scroll_x->sig_scroll(), [this]() {
			Pointf pos = content_offset();
			pos.x = (float)impl->scroll_x->position();
			set_content_offset(pos);
		});

		slots.connect(impl->scroll_y->sig_scroll(), [this]() {
			Pointf pos = content_offset();
			pos.y = (float)impl->scroll_y->position();
			set_content_offset(pos);
		});
	}
예제 #2
0
	SliderView::SliderView() : impl(std::make_shared<SliderViewImpl>())
	{
		impl->slider = this;

		impl->track = std::make_shared<View>();
		impl->thumb = std::make_shared<View>();

		add_subview(impl->track);
		add_subview(impl->thumb);
	
		slots.connect(sig_pointer_press(), impl.get(), &SliderViewImpl::on_pointer_track_press);
		slots.connect(sig_pointer_release(), impl.get(), &SliderViewImpl::on_pointer_track_release);

		slots.connect(impl->thumb->sig_pointer_press(), impl.get(), &SliderViewImpl::on_pointer_thumb_press);
		slots.connect(impl->thumb->sig_pointer_release(), impl.get(), &SliderViewImpl::on_pointer_thumb_release);

		slots.connect(impl->thumb->sig_pointer_enter(), [&](PointerEvent &e) {impl->_state_hot = true;  impl->update_state(); });
		slots.connect(impl->thumb->sig_pointer_leave(), [&](PointerEvent &e) {impl->_state_hot = false;  impl->update_state(); });

		slots.connect(impl->thumb->sig_pointer_move(), impl.get(), &SliderViewImpl::on_pointer_move);

		slots.connect(sig_focus_gained(), impl.get(), &SliderViewImpl::on_focus_gained);
		slots.connect(sig_focus_lost(), impl.get(), &SliderViewImpl::on_focus_lost);
		slots.connect(sig_activated(), impl.get(), &SliderViewImpl::on_activated);
		slots.connect(sig_activated(), impl.get(), &SliderViewImpl::on_deactivated);

		impl->scroll_timer.func_expired() = clan::bind_member(impl.get(), &SliderViewImpl::scroll_timer_expired);

		set_vertical();
	}
예제 #3
0
	SpinView::SpinView() : impl(std::make_shared<SpinView_Impl>())
	{
		impl->spin = this;

		impl->button_decrement = std::make_shared<View>();
		impl->button_increment = std::make_shared<View>();

		add_subview(impl->button_decrement);
		add_subview(impl->button_increment);

		slots.connect(impl->button_decrement->sig_pointer_press(), impl.get(), &SpinView_Impl::on_pointer_decrement_press);
		slots.connect(impl->button_decrement->sig_pointer_release(), impl.get(), &SpinView_Impl::on_pointer_decrement_release);
		slots.connect(impl->button_increment->sig_pointer_press(), impl.get(), &SpinView_Impl::on_pointer_increment_press);
		slots.connect(impl->button_increment->sig_pointer_release(), impl.get(), &SpinView_Impl::on_pointer_increment_release);

		slots.connect(sig_focus_gained(), impl.get(), &SpinView_Impl::on_focus_gained);
		slots.connect(sig_focus_lost(), impl.get(), &SpinView_Impl::on_focus_lost);
		slots.connect(sig_activated(), impl.get(), &SpinView_Impl::on_activated);
		slots.connect(sig_activated(), impl.get(), &SpinView_Impl::on_deactivated);

		slots.connect(impl->button_decrement->sig_pointer_enter(), [&](PointerEvent &e) {impl->_state_decrement_hot = true;  impl->update_decrement_state(); });
		slots.connect(impl->button_decrement->sig_pointer_leave(), [&](PointerEvent &e) {impl->_state_decrement_hot = false;  impl->update_decrement_state(); });
		slots.connect(impl->button_increment->sig_pointer_enter(), [&](PointerEvent &e) {impl->_state_increment_hot = true;  impl->update_increment_state(); });
		slots.connect(impl->button_increment->sig_pointer_leave(), [&](PointerEvent &e) {impl->_state_increment_hot = false;  impl->update_increment_state(); });

		impl->timer.func_expired() = clan::bind_member(impl.get(), &SpinView_Impl::timer_expired);
	}
예제 #4
0
std::shared_ptr<clan::CheckBoxView> Options::create_checkbox(int xpos, int ypos, const std::string &name, bool state)
{
	std::shared_ptr<clan::CheckBoxView> checkbox = Theme::create_checkbox();
	add_subview(checkbox);
	checkbox->style()->set("position: absolute; left:%1px; top:%2px", xpos, ypos);
	checkbox->set_check(state);

	auto label = Theme::create_label(true);
	label->set_text(name);
	label->style()->set("position: absolute; left:%1px; top:%2px", xpos + 16, ypos - 3);
	add_subview(label);

	return checkbox;
}
예제 #5
0
Options::Options(clan::Canvas &canvas) : clan::TextureWindow(canvas)
{
	// Note, when changing these, remember to change the popup menu defaults
	current_mapmode = clan::map_2d_upper_left;
	num_balls = 3;
	grid_angle = 0;
	is_moveballs_set = true;

	int slider_xpos = 450;
	int slider_label_xpos = slider_xpos + 200;
	int slider_ypos = 100;
	int slider_gap = 24;
	slider_numballs = create_slider(slider_xpos, slider_ypos);
	slider_numballs->set_max_position(9);
	slider_numballs->set_position(num_balls);
	slider_numballs->func_value_changed() = bind_member(this, &Options::slider_numballs_changed);
	label_numballs = create_slider_label(slider_label_xpos, slider_ypos);
	slider_ypos += slider_gap;

	slider_grid_angle = create_slider(slider_xpos, slider_ypos);
	slider_grid_angle->set_min_position(-45);
	slider_grid_angle->set_max_position(90);
	slider_grid_angle->set_position(grid_angle);
	slider_grid_angle->func_value_changed() = bind_member(this, &Options::slider_grid_angle_changed);
	label_grid_angle = create_slider_label(slider_label_xpos, slider_ypos);
	slider_ypos += slider_gap;

	int checkbox_xpos = slider_xpos;
	int checkbox_ypos = slider_ypos;
	int checkbox_gap = 24;
	checkbox_moveballs = create_checkbox(checkbox_xpos, checkbox_ypos, "Moving Balls", is_moveballs_set);
	checkbox_moveballs->func_state_changed() = bind_member(this, &Options::checkbox_moveballs_changed);

	listbox_mapmode = Theme::create_listbox();
	listbox_mapmode->style()->set("position: absolute; left:%1px; top:%2px; width:%3px; height:auto;", checkbox_xpos, 10, 180);

	listbox_mapmode->set_items<std::string>( { "2d Upper Left", "2d Lower Left", "User Projection" }, Theme::create_listbox_label);

	listbox_mapmode->func_selection_changed() = bind_member(this, &Options::on_mapmode_selected);
	listbox_mapmode->set_selected_item(0);
	add_subview(listbox_mapmode);

	label_mapmode = Theme::create_label(true);
	add_subview(label_mapmode);
	label_mapmode->style()->set("position: absolute; left:%1px; top:%2px", slider_label_xpos, 10);
	label_mapmode->set_text("Map Mode");

	update_all_slider_text();
}
예제 #6
0
파일: gfx_test.c 프로젝트: Haifisch/axle
void test_xserv(Screen* vesa_screen) {
	Window* window = create_window(rect_make(point_make(50, 50), size_make(400, 500)));
	window->title = "Color test";
	add_subwindow(vesa_screen->window, window);
	
	Window* label_win = create_window(rect_make(point_make(350, 100), size_make(500, 200)));
	label_win->title = "Text test";
	Label* test_label = create_label(rect_make(point_make(0, 0), label_win->content_view->frame.size), "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque pulvinar dui bibendum nunc convallis, bibendum venenatis mauris ornare. Donec et libero lacus. Nulla tristique auctor pulvinar. Aenean enim elit, malesuada nec dignissim eget, varius ac nunc. Vestibulum varius lectus nisi, in dignissim orci volutpat in. Aliquam eget eros lorem. Quisque tempor est a rhoncus consequat. Quisque vestibulum finibus sapien. Etiam enim sem, vehicula ac lorem vitae, mattis mollis mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus eleifend dui vel nulla suscipit pretium. Suspendisse vel nunc efficitur, lobortis dui convallis, tristique tellus. Ut ut viverra est. Etiam tempor justo risus. Cras laoreet eu sapien et lacinia. Nunc imperdiet blandit purus a semper.");
	add_sublabel(label_win->content_view, test_label);
	add_subwindow(vesa_screen->window, label_win);

	//create evenly spaced subsections
	for (int i = 0; i < 34; i++) {
		double height = window->content_view->frame.size.height / 32;
		View* view = create_view(rect_make(point_make(0, height * i), size_make(window->content_view->frame.size.width, height)));
		add_subview(window->content_view, view);
	}
	for (int i = 0; i < 1000; i++) {
		for (int j = 0; j < window->content_view->subviews->size; j++) {
			View* subview = array_m_lookup(window->content_view->subviews, j);
			set_background_color(subview, color_make(rand() % 256, rand() % 256, rand() % 256));
		}
		sleep(50);
	}
}	
예제 #7
0
std::shared_ptr<clan::LabelView> Options::create_slider_label(int xpos, int ypos)
{
	std::shared_ptr<clan::LabelView> component = Theme::create_label(true);
	add_subview(component);
	component->style()->set("position: absolute; left:%1px; top:%2px", xpos, ypos);
	component->set_text("##################");
	return component;
}
예제 #8
0
std::shared_ptr<clan::SliderView> Options::create_slider(int xpos, int ypos)
{
	std::shared_ptr<clan::SliderView> component = Theme::create_slider();
	add_subview(component);

	component->style()->set("position: absolute; left:%1px; top:%2px; width:%3px; height:auto;", xpos, ypos, 192);
	component->set_horizontal();
	component->set_min_position(0);
	component->set_max_position(1000);
	component->set_tick_count(100);
	component->set_page_step(100);
	component->set_lock_to_ticks(false);
	component->set_position(component->max_position());

	return component;

}
예제 #9
0
파일: calculator.c 프로젝트: codyd51/axle
void calculator_xserv(Point origin) {
	Size button_size = size_make(60, 60);
	int result_view_height = 50;
	int button_spacing = 0;

	//width is button_size * 4 because 3 rows of # buttons + 1 row of operators
	Window* calc_win = create_window(rect_make(origin, size_make(button_size.width * 4, WINDOW_TITLE_VIEW_HEIGHT + result_view_height + button_spacing + (button_size.height * 4))));
	calc_win->title = "Calculator";

	//number display
	View* label_view = create_view(rect_make(point_zero(), size_make(calc_win->frame.size.width, result_view_height)));
	result_label = create_label(rect_make(point_make(10, 10), label_view->frame.size), "0");
	label_view->background_color = color_white();
	add_sublabel(label_view, result_label);
	add_subview(calc_win->content_view, label_view);

	View* button_view = create_view(rect_make(point_make(0, rect_max_y(label_view->frame)), size_make(calc_win->frame.size.width, calc_win->frame.size.height - label_view->frame.size.height)));
	button_view->background_color = color_make(200, 200, 255);
	add_subview(calc_win->content_view, button_view);

	//number buttons 1-9
	for (int col = 0; col < 3; col++) {
		for (int row = 2; row >= 0; row--) {
			int val = ((3 - col) * 3) + row - 2;
			char title[32];
			itoa(val, (char*)&title);

			Button* b = create_button(rect_make(point_make((row * button_size.width) + button_spacing, (col * button_size.height) + button_spacing), button_size), title);
			b->mousedown_handler = (event_handler)&calc_num_click;
			add_button(button_view, b);
		}
	}
	//3 * button spacing to account for above buttons
	Button* zero = create_button(rect_make(point_make(button_spacing, 3 * button_size.height + button_spacing), size_make(button_size.width * 2, button_size.height)), "0");
	zero->mousedown_handler = (event_handler)&calc_num_click;
	add_button(button_view, zero);

	Button* equals = create_button(rect_make(point_make(rect_max_x(zero->frame), 3 * button_size.height + button_spacing), size_make(button_size.width, button_size.height)), "=");
	equals->mousedown_handler = (event_handler)&calc_op_click;
	add_button(button_view, equals);
	
	//operator buttons
	for (int i = 0; i < 4; i++){
		char* title;
		switch (i) {
			case 0:
				title = "/";
				break;
			case 1:
				title = "X";
				break;
			case 2:
				title = "-";
				break;
			case 3:
			default:
				title = "+";
				break;
		}
		Button* b = create_button(rect_make(point_make((3 * button_size.width) + button_spacing, button_size.height * i + button_spacing), button_size), title);
		b->mousedown_handler = (event_handler)&calc_op_click;
		add_button(button_view, b);
	}

	present_window(calc_win);
}
예제 #10
0
Options::Options(Canvas &canvas) : TextureWindow(canvas)
{
	root_view()->style()->set("background: rgb(153, 153, 204)");

	auto spacer1 = std::make_shared<View>();
	auto spacer2 = std::make_shared<View>();
	auto spacer3 = std::make_shared<View>();
	spacer1->style()->set("flex: 1 1");
	spacer2->style()->set("flex: 1 1");
	spacer3->style()->set("flex: 1 1");

	add_subview(column1);
	add_subview(column2);
	add_subview(column3);

	column1->add_subview(rotation_y_view);
	column1->add_subview(rotation_x_view);
	column1->add_subview(rotation_z_view);
	column1->add_subview(spacer1);
	column1->add_subview(button_lerp);

	column2->add_subview(quaternion_w_view);
	column2->add_subview(quaternion_i_view);
	column2->add_subview(quaternion_j_view);
	column2->add_subview(quaternion_k_view);
	column2->add_subview(spacer2);
	column2->add_subview(button_slerp);

	column3->add_subview(target_y_view);
	column3->add_subview(target_x_view);
	column3->add_subview(target_z_view);
	column3->add_subview(spacer3);
	column3->add_subview(button_rotate);

	button_lerp_clicked = false;
	button_slerp_clicked = false;
	button_rotate_clicked = false;

	max_angle_value = 360.0f;

	rotation_x = Angle(0.0f, angle_degrees);
	rotation_y = Angle(0.0f, angle_degrees);
	rotation_z = Angle(0.0f, angle_degrees);

	target_x = Angle(0.0f, angle_degrees);
	target_y = Angle(0.0f, angle_degrees);
	target_z = Angle(0.0f, angle_degrees);

	rotation_y_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_y_changed);
	rotation_x_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_x_changed);
	rotation_z_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_z_changed);

	quaternion_w_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_w_changed);
	quaternion_i_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_i_changed);
	quaternion_j_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_j_changed);
	quaternion_k_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_k_changed);

	target_y_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_y_changed);
	target_x_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_x_changed);
	target_z_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_z_changed);

	button_lerp->label()->set_text("Linear Quaternion Interpolation (lerp)");
	button_slerp->label()->set_text("Spherical Linear Interpolation (slerp)");
	button_rotate->label()->set_text("Rotate : q.multiply(target)");

	button_lerp->slots.connect(button_lerp->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_lerp));
	button_slerp->slots.connect(button_slerp->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_slerp));
	button_rotate->slots.connect(button_rotate->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_rotate));

	set_all_sliders();
}