mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 04:42:44 +00:00 
			
		
		
		
	Add a little About app and hook it up to the system menu's "About..." entry.
Added icons and customizable text alignment to GLabel.
This commit is contained in:
		
							parent
							
								
									d6326d6c2e
								
							
						
					
					
						commit
						d74b131c27
					
				
					 11 changed files with 118 additions and 2 deletions
				
			
		
							
								
								
									
										3
									
								
								Applications/About/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Applications/About/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| *.o | ||||
| *.d | ||||
| About | ||||
							
								
								
									
										34
									
								
								Applications/About/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Applications/About/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| OBJS = \
 | ||||
|     main.o | ||||
| 
 | ||||
| APP = About | ||||
| 
 | ||||
| ARCH_FLAGS = | ||||
| STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc | ||||
| USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident | ||||
| WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings | ||||
| FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic | ||||
| OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables | ||||
| INCLUDE_FLAGS = -I../.. -I. -I../../LibC | ||||
| 
 | ||||
| DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND | ||||
| 
 | ||||
| CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(USERLAND_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES) | ||||
| CXX = clang | ||||
| LD = ld | ||||
| AR = ar | ||||
| LDFLAGS = -static --strip-debug -melf_i386 -e _start --gc-sections | ||||
| 
 | ||||
| all: $(APP) | ||||
| 
 | ||||
| $(APP): $(OBJS) | ||||
| 	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) ../../LibGUI/LibGUI.a ../../LibC/LibC.a | ||||
| 
 | ||||
| .cpp.o: | ||||
| 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< | ||||
| 
 | ||||
| -include $(OBJS:%.o=%.d) | ||||
| 
 | ||||
| clean: | ||||
| 	@echo "CLEAN"; rm -f $(APPS) $(OBJS) *.d | ||||
| 
 | ||||
							
								
								
									
										47
									
								
								Applications/About/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Applications/About/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| #include <LibGUI/GApplication.h> | ||||
| #include <LibGUI/GWindow.h> | ||||
| #include <LibGUI/GLabel.h> | ||||
| #include <LibGUI/GButton.h> | ||||
| #include <sys/utsname.h> | ||||
| 
 | ||||
| int main(int argc, char** argv) | ||||
| { | ||||
|     GApplication app(argc, argv); | ||||
| 
 | ||||
|     auto* window = new GWindow; | ||||
|     window->set_title("About Serenity"); | ||||
|     window->set_rect(362, 284, 240, 130); | ||||
|     window->set_should_exit_app_on_close(true); | ||||
| 
 | ||||
|     auto* widget = new GWidget; | ||||
|     window->set_main_widget(widget); | ||||
| 
 | ||||
|     auto* icon_label = new GLabel(widget); | ||||
|     icon_label->set_icon(GraphicsBitmap::load_from_file("/res/icons/Serenity.rgb", { 32, 32 })); | ||||
|     icon_label->set_relative_rect( | ||||
|         widget->rect().center().x() - 16, | ||||
|         10, | ||||
|         32, 32); | ||||
| 
 | ||||
|     auto* label = new GLabel(widget); | ||||
|     label->set_text("Serenity Operating System"); | ||||
|     label->set_relative_rect(0, 50, widget->width(), 20); | ||||
| 
 | ||||
|     utsname uts; | ||||
|     int rc = uname(&uts); | ||||
|     ASSERT(rc == 0); | ||||
| 
 | ||||
|     auto* version_label = new GLabel(widget); | ||||
|     version_label->set_text(String::format("Version %s", uts.release)); | ||||
|     version_label->set_relative_rect(0, 70, widget->width(), 20); | ||||
| 
 | ||||
|     auto* quit_button = new GButton(widget); | ||||
|     quit_button->set_caption("Okay"); | ||||
|     quit_button->set_relative_rect(80, 100, widget->width() - 160, 20); | ||||
|     quit_button->on_click = [] (GButton&) { | ||||
|         GApplication::the().exit(0); | ||||
|     }; | ||||
| 
 | ||||
|     window->show(); | ||||
|     return app.exec(); | ||||
| } | ||||
|  | @ -42,6 +42,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_ | |||
|     }; | ||||
| 
 | ||||
|     auto* info_label = new GLabel(this); | ||||
|     info_label->set_text_alignment(TextAlignment::CenterLeft); | ||||
|     info_label->set_relative_rect({ 5, 110, 100, 20 }); | ||||
| 
 | ||||
|     auto* demo_label_1 = new GLabel(this); | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								Base/res/icons/Serenity.rgb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Base/res/icons/Serenity.rgb
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -18,6 +18,8 @@ make -C ../Applications/Launcher clean && \ | |||
| make -C ../Applications/Launcher && \ | ||||
| make -C ../Applications/FileManager clean && \ | ||||
| make -C ../Applications/FileManager && \ | ||||
| make -C ../Applications/About clean && \ | ||||
| make -C ../Applications/About && \ | ||||
| make clean &&\ | ||||
| make && \ | ||||
| sudo ./sync.sh | ||||
|  |  | |||
|  | @ -69,6 +69,7 @@ cp -v ../Applications/FontEditor/FontEditor mnt/bin/FontEditor | |||
| cp -v ../Applications/Launcher/Launcher mnt/bin/Launcher | ||||
| cp -v ../Applications/Clock/Clock mnt/bin/Clock | ||||
| cp -v ../Applications/FileManager/FileManager mnt/bin/FileManager | ||||
| cp -v ../Applications/About/About mnt/bin/About | ||||
| cp -v kernel.map mnt/ | ||||
| sh sync-local.sh | ||||
| umount mnt | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| #include "GLabel.h" | ||||
| #include <SharedGraphics/Painter.h> | ||||
| #include <SharedGraphics/GraphicsBitmap.h> | ||||
| 
 | ||||
| GLabel::GLabel(GWidget* parent) | ||||
|     : GWidget(parent) | ||||
|  | @ -10,6 +11,11 @@ GLabel::~GLabel() | |||
| { | ||||
| } | ||||
| 
 | ||||
| void GLabel::set_icon(RetainPtr<GraphicsBitmap>&& icon) | ||||
| { | ||||
|     m_icon = move(icon); | ||||
| } | ||||
| 
 | ||||
| void GLabel::set_text(String&& text) | ||||
| { | ||||
|     if (text == m_text) | ||||
|  | @ -18,11 +24,15 @@ void GLabel::set_text(String&& text) | |||
|     update(); | ||||
| } | ||||
| 
 | ||||
| void GLabel::paint_event(GPaintEvent& event) | ||||
| void GLabel::paint_event(GPaintEvent&) | ||||
| { | ||||
|     Painter painter(*this); | ||||
|     if (fill_with_background_color()) | ||||
|         painter.fill_rect({ 0, 0, width(), height() }, background_color()); | ||||
|     if (m_icon) { | ||||
|         auto icon_location = rect().center().translated(-(m_icon->width() / 2), -(m_icon->height() / 2)); | ||||
|         painter.blit_with_alpha(icon_location, *m_icon, m_icon->rect()); | ||||
|     } | ||||
|     if (!text().is_empty()) | ||||
|         painter.draw_text({ 4, 4, width(), height() }, text(), TextAlignment::TopLeft, foreground_color()); | ||||
|         painter.draw_text({ 0, 0, width(), height() }, text(), m_text_alignment, foreground_color()); | ||||
| } | ||||
|  |  | |||
|  | @ -2,6 +2,9 @@ | |||
| 
 | ||||
| #include "GWidget.h" | ||||
| #include <AK/AKString.h> | ||||
| #include <SharedGraphics/Painter.h> | ||||
| 
 | ||||
| class GraphicsBitmap; | ||||
| 
 | ||||
| class GLabel final : public GWidget { | ||||
| public: | ||||
|  | @ -11,11 +14,20 @@ public: | |||
|     String text() const { return m_text; } | ||||
|     void set_text(String&&); | ||||
| 
 | ||||
|     void set_icon(RetainPtr<GraphicsBitmap>&&); | ||||
|     const GraphicsBitmap* icon() const { return m_icon.ptr(); } | ||||
|     GraphicsBitmap* icon() { return m_icon.ptr(); } | ||||
| 
 | ||||
|     TextAlignment text_alignment() const { return m_text_alignment; } | ||||
|     void set_text_alignment(TextAlignment text_alignment) { m_text_alignment = text_alignment; } | ||||
| 
 | ||||
| private: | ||||
|     virtual void paint_event(GPaintEvent&) override; | ||||
| 
 | ||||
|     virtual const char* class_name() const override { return "GLabel"; } | ||||
| 
 | ||||
|     String m_text; | ||||
|     RetainPtr<GraphicsBitmap> m_icon; | ||||
|     TextAlignment m_text_alignment { TextAlignment::Center }; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ GStatusBar::GStatusBar(GWidget* parent) | |||
|     set_preferred_size({ 0, 16 }); | ||||
|     set_layout(make<GBoxLayout>(Orientation::Horizontal)); | ||||
|     m_label = new GLabel(this); | ||||
|     m_label->set_text_alignment(TextAlignment::CenterLeft); | ||||
|     m_label->set_fill_with_background_color(false); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -198,6 +198,11 @@ WSWindowManager::WSWindowManager() | |||
|                 Process::create_user_process("/bin/Terminal", 100, 100, current->pid(), error); | ||||
|                 return; | ||||
|             } | ||||
|             if (item.identifier() == 4) { | ||||
|                 int error; | ||||
|                 Process::create_user_process("/bin/About", 100, 100, current->pid(), error); | ||||
|                 return; | ||||
|             } | ||||
|             kprintf("WSMenu 1 item activated: '%s'\n", item.text().characters()); | ||||
|         }; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling