Options::Options(CL_GUIManager &gui, CL_Rect gui_position) : CL_GUIComponent(&gui, CL_GUITopLevelDescription("Options", gui_position, false)) { // Note, when changing these, remember to change the popup menu defaults num_particles = 64; point_size = 64; int slider_xpos = 450; int slider_ypos = 100; int slider_gap = 24; slider_num_particles = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_ypos += 8; slider_num_particles->set_max(1000); slider_num_particles->set_position(num_particles); slider_num_particles->func_value_changed().set(this, &Options::slider_num_particles_changed); slider_ypos += 8; label_num_particles = create_slider_label(slider_num_particles); slider_point_size = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_ypos += 8; slider_point_size->set_max(256); slider_point_size->set_position(point_size); slider_point_size->func_value_changed().set(this, &Options::slider_point_size_changed); slider_ypos += 8; label_point_size = create_slider_label(slider_point_size); update_all_slider_text(); func_render().set(this, &Options::on_render); }
PushButton::PushButton(GUI *gui) : CL_Window(&gui->get_gui_manager(), CL_GUITopLevelDescription("PushButton", CL_Rect(256 + 16, 256 + 16, CL_Size(256, 180)), false)), gui(gui) { CL_GraphicContext gc = gui->get_window()->get_gc(); test_image = CL_Image(gc, "tux", &gui->get_resources_internal()); set_draggable(true); CL_Rect client_area = get_client_area(); pushbutton1 = new CL_PushButton(this); pushbutton1->set_geometry(CL_Rect(client_area.left + 11, client_area.top + 10, CL_Size(128, 40))); pushbutton1->set_text("Push Button"); pushbutton1->set_flat(false); pushbutton1->func_clicked().set(this, &PushButton::on_clicked, pushbutton1); int label_xpos = client_area.left + 31; int yoffset = client_area.top + 80; CL_Size label_size(50, 15); const int gap = 16; checkbox_flat = new CL_CheckBox(this); checkbox_flat->set_geometry(CL_Rect(client_area.left + 11, yoffset, CL_Size(100, 15))); checkbox_flat->func_checked().set(this, &PushButton::on_checked_flat, checkbox_flat); checkbox_flat->func_unchecked().set(this, &PushButton::on_unchecked_flat, checkbox_flat); checkbox_flat->set_text("Flat"); yoffset+=gap; checkbox_icon = new CL_CheckBox(this); checkbox_icon->set_geometry(CL_Rect(client_area.left + 11, yoffset, CL_Size(100, 15))); checkbox_icon->func_checked().set(this, &PushButton::on_checked_icon, checkbox_icon); checkbox_icon->func_unchecked().set(this, &PushButton::on_unchecked_icon, checkbox_icon); checkbox_icon->set_text("Icon"); yoffset+=gap; checkbox_toggle = new CL_CheckBox(this); checkbox_toggle->set_geometry(CL_Rect(client_area.left + 11, yoffset, CL_Size(100, 15))); checkbox_toggle->func_checked().set(this, &PushButton::on_checked_toggle, checkbox_toggle); checkbox_toggle->func_unchecked().set(this, &PushButton::on_unchecked_toggle, checkbox_toggle); checkbox_toggle->set_text("Enable Toggle"); yoffset+=gap; checkbox_disable = new CL_CheckBox(this); checkbox_disable->set_geometry(CL_Rect(client_area.left + 11, yoffset, CL_Size(100, 15))); checkbox_disable->func_checked().set(this, &PushButton::on_checked_disable, checkbox_disable); checkbox_disable->func_unchecked().set(this, &PushButton::on_unchecked_disable, checkbox_disable); checkbox_disable->set_text("Disable"); int xoffset = client_area.left + 36; yoffset = client_area.top + 60; info_clicked = new Info(gui, this); info_clicked->set(xoffset, yoffset, "Clicked"); }
int main(const std::vector<CL_String> &args) { try { CL_DisplayWindowDescription desc; desc.set_title("Window"); desc.set_size(CL_Size(600, 600), true); CL_DisplayWindow displaywindow(desc); CL_Slot slot_window_close = displaywindow.sig_window_close().connect(this, &App::on_window_close); CL_ResourceManager resources("../../../Resources/GUIThemeAero/resources.xml"); CL_GUIThemeDefault theme; theme.set_resources(resources); CL_GUIWindowManagerTexture windowmanager(displaywindow); // CL_GUIWindowManagerSystem windowmanager; guimanager.set_window_manager(windowmanager); guimanager.set_theme(theme); guimanager.set_css_document("../../../Resources/GUIThemeAero/theme.css"); CL_GUIComponent *toplevelcomponent = new CL_GUIComponent(&guimanager, CL_GUITopLevelDescription(CL_Rect(50, 50, 500, 500), false)); CL_Window *window = new CL_Window(toplevelcomponent, CL_GUITopLevelDescription(CL_Rect(0, 0, 200, 200), false)); guimanager.exec(); } catch (CL_Exception e) { CL_ConsoleWindow console("Console"); CL_Console::write_line(e.message); console.display_close_message(); } return 0; }
Options::Options(CL_GUIManager &gui, CL_Rect gui_position) : CL_GUIComponent(&gui, CL_GUITopLevelDescription("Options", gui_position, false)) { // If you change these, you also need to change the default selected combobox item blendfunc[0] = cl_blend_src_alpha; blendfunc[1] = cl_blend_one_minus_src_alpha; blendfunc[2] = cl_blend_src_alpha; blendfunc[3] = cl_blend_one_minus_src_alpha; blendequation[0] = cl_blend_equation_add; blendequation[1] = cl_blend_equation_add; logic_operation = cl_logic_op_set; logic_operation_enabled = false; primary_color = CL_Colorf::white; blend_color = CL_Colorf::white; num_balls = 4; is_premult_alpha_set = false; is_moveballs_set = true; is_blending_set = true; int slider_xpos = 400; int slider_ypos = 200; int slider_gap = 24; slider_numballs = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_ypos += 8; slider_numballs->set_max(9); slider_numballs->set_position(4); slider_numballs->func_value_changed().set(this, &Options::slider_numballs_changed); slider_primary_red = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_primary_red->func_value_changed().set(this, &Options::slider_primary_red_changed); slider_primary_green = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_primary_green->func_value_changed().set(this, &Options::slider_primary_green_changed); slider_primary_blue = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_primary_blue->func_value_changed().set(this, &Options::slider_primary_blue_changed); slider_primary_alpha = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_primary_alpha->func_value_changed().set(this, &Options::slider_primary_alpha_changed); slider_ypos += 8; slider_blend_red = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_blend_red->func_value_changed().set(this, &Options::slider_blend_red_changed); slider_blend_green = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_blend_green->func_value_changed().set(this, &Options::slider_blend_green_changed); slider_blend_blue = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_blend_blue->func_value_changed().set(this, &Options::slider_blend_blue_changed); slider_blend_alpha = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_blend_alpha->func_value_changed().set(this, &Options::slider_blend_alpha_changed); slider_ypos += 8; label_numballs = create_slider_label(slider_numballs); label_primary_red = create_slider_label(slider_primary_red); label_primary_green = create_slider_label(slider_primary_green); label_primary_blue = create_slider_label(slider_primary_blue); label_primary_alpha = create_slider_label(slider_primary_alpha); label_blend_red = create_slider_label(slider_blend_red); label_blend_green = create_slider_label(slider_blend_green); label_blend_blue = create_slider_label(slider_blend_blue); label_blend_alpha = create_slider_label(slider_blend_alpha); 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().set(this, &Options::checkbox_moveballs_changed); checkbox_blending = create_checkbox(checkbox_xpos + 150, checkbox_ypos, "Enable Blending", is_blending_set); checkbox_blending->func_state_changed().set(this, &Options::checkbox_blending_changed); checkbox_premult_alpha = create_checkbox(checkbox_xpos + 300, checkbox_ypos, "Use Premultipied Alpha", is_premult_alpha_set); checkbox_premult_alpha->func_state_changed().set(this, &Options::checkbox_premult_alpha_changed); checkbox_ypos += checkbox_gap + 8; make_equation_menu(combo_color_equation_menu); make_equation_menu(combo_alpha_equation_menu); combo_color_equation = create_equation_combo_box(400, 40, combo_color_equation_menu, 0); combo_alpha_equation = create_equation_combo_box(550, 40, combo_alpha_equation_menu, 0); label_color = create_combobox_label(combo_color_equation, "COLOR EQUATION"); label_alpha = create_combobox_label(combo_alpha_equation, "ALPHA EQUATION"); make_logic_menu(combo_logic_menu); combo_logic = create_logic_combo_box(700, 40, combo_logic_menu, 0); label_logic = create_combobox_label(combo_logic, "LOGIC OPERATION"); make_blend_menu(combo_src_blend_menu); make_blend_menu(combo_dest_blend_menu); make_blend_menu(combo_src_alpha_blend_menu); make_blend_menu(combo_dest_alpha_blend_menu); combo_src_blend = create_blend_combo_box(410, 100, combo_src_blend_menu, 6); label_src = create_combobox_label(combo_src_blend, "SOURCE FUNCTION"); combo_dest_blend = create_blend_combo_box(610, 100, combo_dest_blend_menu, 7); label_dest = create_combobox_label(combo_dest_blend, "DEST FUNCTION"); combo_src_alpha_blend = create_blend_combo_box(410, 160, combo_src_alpha_blend_menu, 6); label_src_alpha = create_combobox_label(combo_src_alpha_blend, "SOURCE ALPHA FUNCTION"); combo_dest_alpha_blend = create_blend_combo_box(610, 160, combo_dest_alpha_blend_menu, 7); label_dest_alpha = create_combobox_label(combo_dest_alpha_blend, "DEST ALPHA FUNCTION"); update_all_slider_text(); func_render().set(this, &Options::on_render); }
Options::Options(CL_GUIManager &gui, CL_Rect gui_position) : CL_GUIComponent(&gui, CL_GUITopLevelDescription("Options", gui_position, false)) { // Note, when changing these, remember to change the popup menu defaults selected_light = light_spot; max_color_value = 4.0f; max_angle_value = 360.0f; max_exponent_value = 5.0f; max_position_value = 100.0f; spot_light_position.x = max_position_value / 2.0f; spot_light_position.y = max_position_value / 2.0f; spot_light_position.z = max_position_value / 2.0f; spot_light_cutoff = 30.0f; spot_light_exponent = 0.5f; distant_specular_color = CL_Colorf(0.5f, 0.5f, 0.5f, 1.0f); distant_diffuse_color = CL_Colorf(0.5f, 0.5f, 0.5f, 1.0f); spot_specular_color = CL_Colorf(1.0f, 0.0f, 0.0f, 1.0f); spot_diffuse_color = CL_Colorf(1.0f, 0.0f, 0.0f, 1.0f); distant_direction_heading = CL_Angle(45.0f, cl_degrees); distant_direction_pitch = CL_Angle(35.0f, cl_degrees); distant_direction_bank = CL_Angle(0.0f, cl_degrees); spot_direction_heading = CL_Angle(129.6f, cl_degrees); spot_direction_pitch = CL_Angle(123.8f, cl_degrees); spot_direction_bank = CL_Angle(0.0f, cl_degrees); make_light_menu(combo_light_menu); combo_light = create_light_combo_box(8, 16, combo_light_menu, 1); label_light = create_combobox_label(combo_light, "Selected Light"); int slider_xpos = 8; int slider_ypos = 48; int slider_gap = 24; slider_ypos += 8; slider_diffuse_red = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_diffuse_red->func_value_changed().set(this, &Options::slider_diffuse_red_changed); slider_diffuse_green = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_diffuse_green->func_value_changed().set(this, &Options::slider_diffuse_green_changed); slider_diffuse_blue = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_diffuse_blue->func_value_changed().set(this, &Options::slider_diffuse_blue_changed); label_diffuse_red = create_slider_label(slider_diffuse_red); label_diffuse_green = create_slider_label(slider_diffuse_green); label_diffuse_blue = create_slider_label(slider_diffuse_blue); slider_ypos += 8; slider_specular_red = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_specular_red->func_value_changed().set(this, &Options::slider_specular_red_changed); slider_specular_green = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_specular_green->func_value_changed().set(this, &Options::slider_specular_green_changed); slider_specular_blue = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_specular_blue->func_value_changed().set(this, &Options::slider_specular_blue_changed); label_specular_red = create_slider_label(slider_specular_red); label_specular_green = create_slider_label(slider_specular_green); label_specular_blue = create_slider_label(slider_specular_blue); slider_ypos += 8; slider_direction_heading = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_direction_heading->func_value_changed().set(this, &Options::slider_direction_heading_changed); slider_direction_pitch = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_direction_pitch->func_value_changed().set(this, &Options::slider_direction_pitch_changed); slider_direction_bank = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_direction_bank->func_value_changed().set(this, &Options::slider_direction_bank_changed); label_direction_heading = create_slider_label(slider_direction_heading); label_direction_pitch = create_slider_label(slider_direction_pitch); label_direction_bank = create_slider_label(slider_direction_bank); slider_ypos += 8; slider_light_xpos = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_light_xpos->func_value_changed().set(this, &Options::slider_light_xpos_changed); slider_light_ypos = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_light_ypos->func_value_changed().set(this, &Options::slider_light_ypos_changed); slider_light_zpos = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_light_zpos->func_value_changed().set(this, &Options::slider_light_zpos_changed); slider_cutoff = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_cutoff->func_value_changed().set(this, &Options::slider_cutoff_changed); slider_exponent = create_slider(slider_xpos, slider_ypos); slider_ypos += slider_gap; slider_exponent->func_value_changed().set(this, &Options::slider_exponent_changed); label_light_xpos = create_slider_label(slider_light_xpos); label_light_ypos = create_slider_label(slider_light_ypos); label_light_zpos = create_slider_label(slider_light_zpos); label_cutoff = create_slider_label(slider_cutoff); label_exponent = create_slider_label(slider_exponent); set_all_sliders(); func_render().set(this, &Options::on_render); }
MenuBar::MenuBar(CL_GUIManager &manager, CL_ResourceManager &application_resources) : CL_Window(&manager, CL_GUITopLevelDescription("Menu Bar & Status Bar", CL_Rect(512 + 24, 256 + 16, CL_Size(256, 180)), false)) { tux_image = CL_ImageProviderFactory::load("../CommonCode/Resources/tux.png"); CL_GraphicContext gc = get_gc(); tux_head = CL_Image(gc, "tux_head", &application_resources); set_draggable(true); CL_Rect client_area = get_client_area(); menubar1 = new CL_MenuBar(this); menubar1->set_geometry(CL_Rect(client_area.left, client_area.top, client_area.right, client_area.top + 25)); menu_file.insert_item("New").func_clicked().set(this, &MenuBar::on_item_selected); menu_file.insert_item("Open").func_clicked().set(this, &MenuBar::on_item_selected); menu_file.insert_item("Save").func_clicked().set(this, &MenuBar::on_item_selected); CL_PopupMenuItem tux_item = menu_file.insert_item("Tux"); tux_item.func_clicked().set(this, &MenuBar::on_item_selected); tux_item.set_icon(tux_image); menu_file.insert_item("Exit").func_clicked().set(this, &MenuBar::on_item_selected); menubar1->add_menu("File", menu_file); menu_edit.insert_item("Undo").func_clicked().set(this, &MenuBar::on_item_selected); CL_PopupMenuItem redo_item = menu_edit.insert_item("Redo"); redo_item.func_clicked().set(this, &MenuBar::on_item_selected); redo_item.set_enabled(false); menu_edit.insert_separator(); menu_edit.insert_item("Cut").func_clicked().set(this, &MenuBar::on_item_selected); menu_edit.insert_item("Copy").func_clicked().set(this, &MenuBar::on_item_selected); menu_edit.insert_separator(); item_submenu = menu_edit.insert_item("Submenu"); item_submenu.func_clicked().set(this, &MenuBar::on_item_selected); menu_edit.insert_separator(); menu_edit.insert_item("Paste").func_clicked().set(this, &MenuBar::on_item_selected); menu_edit.insert_item("Delete").func_clicked().set(this, &MenuBar::on_item_selected); menu_edit.insert_separator(); menu_edit.insert_item("Select All").func_clicked().set(this, &MenuBar::on_item_selected); menu_submenu.insert_item("foo").func_clicked().set(this, &MenuBar::on_item_selected); menu_submenu.insert_item("bar").func_clicked().set(this, &MenuBar::on_item_selected); menu_submenu.insert_item("foobar").func_clicked().set(this, &MenuBar::on_item_selected); CL_PopupMenuItem check_item1 = menu_submenu.insert_item("Checkable 1"); check_item1.func_clicked().set(this, &MenuBar::on_item_selected); check_item1.set_checkable(true); check_item1.set_checked(true); CL_PopupMenuItem check_item2 = menu_submenu.insert_item("Checkable 2"); check_item2.func_clicked().set(this, &MenuBar::on_item_selected); check_item2.set_checkable(true); check_item2.set_checked(false); CL_PopupMenuItem check_item3 = menu_submenu.insert_item("Disabled Checkable 1"); check_item3.func_clicked().set(this, &MenuBar::on_item_selected); check_item3.set_checkable(true); check_item3.set_checked(true); check_item3.set_enabled(false); CL_PopupMenuItem check_item4 = menu_submenu.insert_item("Disabled Checkable 2"); check_item4.func_clicked().set(this, &MenuBar::on_item_selected); check_item4.set_checkable(true); check_item4.set_checked(false); check_item4.set_enabled(false); item_submenu.set_submenu(menu_submenu); menubar1->add_menu("Edit", menu_edit); int xoffset = client_area.left + 80; int yoffset = client_area.top + 30; const int gap = 16; CL_Size label_size(50, 15); info_item_selected = new Info(this); info_item_selected->set(xoffset, yoffset, "Item Selected"); yoffset += gap; statusbar1 = new CL_StatusBar(this); int statusbar_height = statusbar1->get_preferred_height(); CL_Rect statusbar_rect(0, client_area.get_height() - statusbar_height, CL_Size(client_area.get_width(), statusbar_height)); statusbar_rect.translate(client_area.left, client_area.top); statusbar1->set_geometry(statusbar_rect); statusbar1->set_status_text("Status bar"); statusbar1->show_size_grip(true); pushbutton1 = new CL_PushButton(statusbar1); pushbutton1->set_icon(tux_head); pushbutton1->func_clicked().set(this, &MenuBar::on_clicked, pushbutton1); statusbar1->add_part(0, 48, pushbutton1); statusbar1->func_part_double_clicked(0).set(this, &MenuBar::on_part_double_clicked_0, statusbar1); component1 = new CL_GUIComponent(statusbar1); statusbar1->add_part(1, 48, component1); statusbar1->set_part_text(1, "ClanTest"); statusbar1->func_part_double_clicked(1).set(this, &MenuBar::on_part_double_clicked_1, statusbar1); CL_GUIComponent *component2 = (new CL_GUIComponent(statusbar1)); statusbar1->add_part(2, 48, component2); statusbar1->set_part_text(2, tux_head, ""); statusbar1->func_part_double_clicked(2).set(this, &MenuBar::on_part_double_clicked_2, statusbar1); xoffset = client_area.left + 5; yoffset = client_area.top + 40; label_status = new CL_Label(this); label_status->set_geometry(CL_Rect(xoffset, yoffset, label_size)); label_status->set_text("Status Bar:"); yoffset += gap; checkbox_status_size_grip = new CL_CheckBox(this); checkbox_status_size_grip->set_geometry(CL_Rect(xoffset, yoffset, CL_Size(150, 15))); checkbox_status_size_grip->func_checked().set(this, &MenuBar::on_checked_status_size_grip, checkbox_status_size_grip); checkbox_status_size_grip->func_unchecked().set(this, &MenuBar::on_unchecked_status_size_grip, checkbox_status_size_grip); checkbox_status_size_grip->set_text("Show Size Grip"); checkbox_status_size_grip->set_checked(true); yoffset += gap; checkbox_status_text = new CL_CheckBox(this); checkbox_status_text->set_geometry(CL_Rect(xoffset, yoffset, CL_Size(150, 15))); checkbox_status_text->func_checked().set(this, &MenuBar::on_checked_status_text, checkbox_status_text); checkbox_status_text->func_unchecked().set(this, &MenuBar::on_unchecked_status_text, checkbox_status_text); checkbox_status_text->set_text("Change Status Text"); checkbox_status_text->set_checked(true); yoffset += gap; checkbox_status_show_clantest = new CL_CheckBox(this); checkbox_status_show_clantest->set_geometry(CL_Rect(xoffset, yoffset, CL_Size(150, 15))); checkbox_status_show_clantest->func_checked().set(this, &MenuBar::on_checked_show_clantest, checkbox_status_show_clantest); checkbox_status_show_clantest->func_unchecked().set(this, &MenuBar::on_unchecked_show_clantest, checkbox_status_show_clantest); checkbox_status_show_clantest->set_text("Show ClanTest"); checkbox_status_show_clantest->set_checked(true); yoffset += gap; checkbox_status_remove_clantest = new CL_CheckBox(this); checkbox_status_remove_clantest->set_geometry(CL_Rect(xoffset, yoffset, CL_Size(150, 15))); checkbox_status_remove_clantest->func_checked().set(this, &MenuBar::on_checked_remove_clantest, checkbox_status_remove_clantest); checkbox_status_remove_clantest->func_unchecked().set(this, &MenuBar::on_unchecked_remove_clantest, checkbox_status_remove_clantest); checkbox_status_remove_clantest->set_text("Remove ClanTest"); checkbox_status_remove_clantest->set_checked(false); yoffset += gap; xoffset = client_area.left + 110; yoffset -= (gap*2); info_clicked = new Info(this); info_clicked->set(xoffset, yoffset, "Push Button Clicked"); yoffset += gap; info_part_clicked = new Info(this); info_part_clicked->set(xoffset, yoffset, "Part Dbl Clicked"); }