mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 20:51:12 -06:00 
			
		
		
		
	GalleryDialog improvements:
* Added "Replace PNG" function * Added locks instead of border for system shapes
This commit is contained in:
		
							parent
							
								
									d6fdf2d5c2
								
							
						
					
					
						commit
						0cdc54b710
					
				
					 2 changed files with 82 additions and 3 deletions
				
			
		
							
								
								
									
										10
									
								
								resources/icons/lock.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								resources/icons/lock.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||||
|  | <svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||||
|  | 	 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> | ||||||
|  | <g id="lock_x5F_closed"> | ||||||
|  | 	<path fill="none" stroke="#ED6B21" stroke-width="2" stroke-miterlimit="10" d="M4,8V4c0,0,0-2,2-2c1,0,3,0,4,0c2,0,2,2,2,2v4"/> | ||||||
|  | 	<path fill="#ED6B21" d="M13,8H3C2.45,8,2,8.45,2,9v5c0,0.55,0.45,1,1,1h10c0.55,0,1-0.45,1-1V9C14,8.45,13.55,8,13,8z M10,12H8.91 | ||||||
|  | 		c-0.21,0.58-0.76,1-1.41,1C6.67,13,6,12.33,6,11.5S6.67,10,7.5,10c0.65,0,1.2,0.42,1.41,1H10V12z"/> | ||||||
|  | </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 729 B | 
|  | @ -77,6 +77,8 @@ GalleryDialog::GalleryDialog(wxWindow* parent) : | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); |     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); | ||||||
|  |     wxButton* ok_btn = static_cast<wxButton*>(FindWindowById(wxID_OK, this)); | ||||||
|  |     ok_btn->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(!m_selected_items.empty()); }); | ||||||
| 
 | 
 | ||||||
|     auto add_btn = [this, buttons]( size_t pos, int& ID, wxString title, wxString tooltip, |     auto add_btn = [this, buttons]( size_t pos, int& ID, wxString title, wxString tooltip, | ||||||
|                                     void (GalleryDialog::* method)(wxEvent&),  |                                     void (GalleryDialog::* method)(wxEvent&),  | ||||||
|  | @ -147,7 +149,7 @@ static void add_border(wxImage& image) | ||||||
| 
 | 
 | ||||||
|     int width = image.GetWidth(); |     int width = image.GetWidth(); | ||||||
|     int height = image.GetHeight(); |     int height = image.GetHeight(); | ||||||
|     int border_width = 2; |     int border_width = 1; | ||||||
| 
 | 
 | ||||||
|     for (size_t x = 0; x < width; ++x) { |     for (size_t x = 0; x < width; ++x) { | ||||||
|         for (size_t y = 0; y < height; ++y) { |         for (size_t y = 0; y < height; ++y) { | ||||||
|  | @ -165,6 +167,48 @@ static void add_border(wxImage& image) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void add_lock(wxImage& image)  | ||||||
|  | { | ||||||
|  |     wxBitmap bmp = create_scaled_bitmap("lock", nullptr, 22); | ||||||
|  | 
 | ||||||
|  |     wxImage lock_image = bmp.ConvertToImage(); | ||||||
|  |     if (!lock_image.IsOk() || lock_image.GetWidth() == 0 || lock_image.GetHeight() == 0) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     int icon_sz = 16; | ||||||
|  |     auto lock_px_data = (uint8_t*)lock_image.GetData(); | ||||||
|  |     auto lock_a_data = (uint8_t*)lock_image.GetAlpha(); | ||||||
|  |     int lock_width  = lock_image.GetWidth(); | ||||||
|  |     int lock_height = lock_image.GetHeight(); | ||||||
|  |      | ||||||
|  |     auto px_data = (uint8_t*)image.GetData(); | ||||||
|  |     auto a_data = (uint8_t*)image.GetAlpha(); | ||||||
|  | 
 | ||||||
|  |     int width = image.GetWidth(); | ||||||
|  |     int height = image.GetHeight(); | ||||||
|  | 
 | ||||||
|  |     size_t beg_x = width - lock_width; | ||||||
|  |     size_t beg_y = height - lock_height; | ||||||
|  |     for (size_t x = 0; x < lock_width; ++x) { | ||||||
|  |         for (size_t y = 0; y < lock_height; ++y) { | ||||||
|  |             const size_t lock_idx = (x + y * lock_width); | ||||||
|  |             if (lock_a_data && lock_a_data[lock_idx] == 0) | ||||||
|  |                 continue; | ||||||
|  | 
 | ||||||
|  |             const size_t idx = (beg_x + x + (beg_y + y) * width); | ||||||
|  |             if (a_data) | ||||||
|  |                 a_data[idx] = lock_a_data[lock_idx]; | ||||||
|  | 
 | ||||||
|  |             const size_t idx_rgb = (beg_x + x + (beg_y + y) * width) * 3; | ||||||
|  |             const size_t lock_idx_rgb = (x + y * lock_width) * 3; | ||||||
|  |             px_data[idx_rgb] = lock_px_data[lock_idx_rgb]; | ||||||
|  |             px_data[idx_rgb + 1] = lock_px_data[lock_idx_rgb + 1]; | ||||||
|  |             px_data[idx_rgb + 2] = lock_px_data[lock_idx_rgb + 2]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | //    add_border(image);
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void add_def_img(wxImageList* img_list, bool is_system, std::string stl_path) | static void add_def_img(wxImageList* img_list, bool is_system, std::string stl_path) | ||||||
| { | { | ||||||
|     wxBitmap bmp = create_scaled_bitmap("cog", nullptr, IMG_PX_CNT, true);     |     wxBitmap bmp = create_scaled_bitmap("cog", nullptr, IMG_PX_CNT, true);     | ||||||
|  | @ -172,7 +216,7 @@ static void add_def_img(wxImageList* img_list, bool is_system, std::string stl_p | ||||||
|     if (is_system) { |     if (is_system) { | ||||||
|         wxImage image = bmp.ConvertToImage(); |         wxImage image = bmp.ConvertToImage(); | ||||||
|         if (image.IsOk() && image.GetWidth() != 0 && image.GetHeight() != 0) { |         if (image.IsOk() && image.GetWidth() != 0 && image.GetHeight() != 0) { | ||||||
|             add_border(image); |             add_lock(image); | ||||||
|             bmp = wxBitmap(std::move(image)); |             bmp = wxBitmap(std::move(image)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -252,7 +296,7 @@ void GalleryDialog::load_label_icon_list() | ||||||
|         image.Rescale(px_cnt, px_cnt, wxIMAGE_QUALITY_BILINEAR); |         image.Rescale(px_cnt, px_cnt, wxIMAGE_QUALITY_BILINEAR); | ||||||
| 
 | 
 | ||||||
|         if (item.is_system) |         if (item.is_system) | ||||||
|             add_border(image); |             add_lock(image); | ||||||
|         wxBitmap bmp = wxBitmap(std::move(image)); |         wxBitmap bmp = wxBitmap(std::move(image)); | ||||||
|         m_image_list->Add(bmp); |         m_image_list->Add(bmp); | ||||||
|     } |     } | ||||||
|  | @ -312,6 +356,31 @@ void GalleryDialog::del_custom_shapes(wxEvent& event) | ||||||
| 
 | 
 | ||||||
| void GalleryDialog::replace_custom_png(wxEvent& event) | void GalleryDialog::replace_custom_png(wxEvent& event) | ||||||
| { | { | ||||||
|  |     if (m_selected_items.size() != 1 || m_selected_items[0].is_system) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     wxFileDialog dialog(this, _L("Choose one PNG file:"), | ||||||
|  |                         from_u8(wxGetApp().app_config->get_last_dir()), "", | ||||||
|  |                         "PNG files (*.png)|*.png;*.PNG", wxFD_OPEN | wxFD_FILE_MUST_EXIST); | ||||||
|  |     if (dialog.ShowModal() != wxID_OK) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     wxArrayString input_files; | ||||||
|  |     dialog.GetPaths(input_files); | ||||||
|  | 
 | ||||||
|  |     if (input_files.IsEmpty()) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     try { | ||||||
|  |         fs::path current = fs::path(into_u8(input_files.Item(0))); | ||||||
|  |         fs::copy_file(current, get_dir(false) / (m_selected_items[0].name + ".png")); | ||||||
|  |     } | ||||||
|  |     catch (fs::filesystem_error const& e) { | ||||||
|  |         std::cerr << e.what() << '\n'; | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     update(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GalleryDialog::select(wxListEvent& event) | void GalleryDialog::select(wxListEvent& event) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 YuSanka
						YuSanka