Ver código fonte

Introduce LibCore and move GElapsedTimer => CElapsedTimer.

I need a layer somewhere between AK (usable both by userspace and kernel)
and LibGUI (usable by userspace except WindowServer.) So here's LibCore.
Andreas Kling 6 anos atrás
pai
commit
5e0577a042

+ 2 - 2
Applications/About/Makefile

@@ -14,12 +14,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/Downloader/Makefile

@@ -15,12 +15,12 @@ CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STA
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
 AR = i686-pc-serenity-ar
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/FileManager/Makefile

@@ -16,12 +16,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/FontEditor/Makefile

@@ -18,12 +18,12 @@ CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STA
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
 AR = i686-pc-serenity-ar
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/IRCClient/Makefile

@@ -24,12 +24,12 @@ CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STA
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
 AR = i686-pc-serenity-ar
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/Launcher/Makefile

@@ -14,12 +14,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/ProcessManager/Makefile

@@ -17,12 +17,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/Taskbar/Makefile

@@ -16,12 +16,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/Terminal/Makefile

@@ -15,12 +15,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 2
Applications/TextEditor/Makefile

@@ -14,12 +14,12 @@ DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
-LDFLAGS = -L../../LibC -L../../LibGUI
+LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
 
 all: $(APP)
 
 $(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lc
+	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 2 - 0
Kernel/makeall.sh

@@ -10,6 +10,8 @@ $make_cmd -C ../LibC && \
 $make_cmd -C ../LibM clean && \
 $make_cmd -C ../LibM && \
 (cd ../LibM && ./install.sh) && \
+$make_cmd -C ../LibCore clean && \
+$make_cmd -C ../LibCore && \
 $make_cmd -C ../Servers/LookupServer clean && \
 $make_cmd -C ../Servers/LookupServer && \
 $make_cmd -C ../Servers/WindowServer clean && \

+ 3 - 0
LibCore/.gitignore

@@ -0,0 +1,3 @@
+*.o
+*.d
+libcore.a

+ 3 - 3
LibGUI/GElapsedTimer.cpp → LibCore/CElapsedTimer.cpp

@@ -1,8 +1,8 @@
-#include <LibGUI/GElapsedTimer.h>
+#include <LibCore/CElapsedTimer.h>
 #include <AK/Assertions.h>
 #include <sys/time.h>
 
-void GElapsedTimer::start()
+void CElapsedTimer::start()
 {
     m_valid = true;
     gettimeofday(&m_start_time, nullptr);
@@ -18,7 +18,7 @@ inline void timersub(const struct timeval* a, const struct timeval* b, struct ti
     }
 }
 
-int GElapsedTimer::elapsed() const
+int CElapsedTimer::elapsed() const
 {
     ASSERT(is_valid());
     struct timeval now;

+ 2 - 2
LibGUI/GElapsedTimer.h → LibCore/CElapsedTimer.h

@@ -2,9 +2,9 @@
 
 #include <time.h>
 
-class GElapsedTimer {
+class CElapsedTimer {
 public:
-    GElapsedTimer() { }
+    CElapsedTimer() { }
 
     bool is_valid() const { return m_valid; }
     void start();

+ 32 - 0
LibCore/Makefile

@@ -0,0 +1,32 @@
+OBJS = \
+    CElapsedTimer.o
+
+LIBS =
+
+LIBRARY = libcore.a
+STANDARD_FLAGS = -std=c++17 -Wno-sized-deallocation
+WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough
+FLAVOR_FLAGS = -fno-exceptions -fno-rtti
+OPTIMIZATION_FLAGS = -Os
+INCLUDE_FLAGS = -I../LibC -I../Servers -I.. -I.
+
+DEFINES = -DSERENITY -DUSERLAND -DSANITIZE_PTRS -DLIBGUI
+
+CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
+CXX = i686-pc-serenity-g++
+LD = i686-pc-serenity-ld
+AR = i686-pc-serenity-ar
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJS)
+	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+
+.cpp.o:
+	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
+
+-include $(OBJS:%.o=%.d)
+
+clean:
+	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+

+ 2 - 2
LibGUI/GWidget.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include <LibGUI/GElapsedTimer.h>
+#include <LibCore/CElapsedTimer.h>
 #include <LibGUI/GEvent.h>
 #include <LibGUI/GObject.h>
 #include <SharedGraphics/Rect.h>
@@ -174,5 +174,5 @@ private:
     bool m_fill_with_background_color { false };
     bool m_visible { true };
 
-    GElapsedTimer m_click_clock;
+    CElapsedTimer m_click_clock;
 };

+ 1 - 4
LibGUI/Makefile

@@ -52,7 +52,6 @@ LIBGUI_OBJS = \
     GAbstractView.o \
     GItemView.o \
     GIcon.o \
-    GElapsedTimer.o \
     GFrame.o \
     GTreeView.o \
     GFileSystemModel.o \
@@ -69,8 +68,6 @@ LIBGUI_OBJS = \
 
 OBJS = $(SHAREDGRAPHICS_OBJS) $(LIBGUI_OBJS)
 
-LIBS = -lc
-
 LIBRARY = libgui.a
 STANDARD_FLAGS = -std=c++17 -Wno-sized-deallocation
 WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough
@@ -88,7 +85,7 @@ AR = i686-pc-serenity-ar
 all: $(LIBRARY)
 
 $(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+	@echo "LIB $@"; $(AR) rcs $@ $(OBJS)
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<

+ 0 - 1
Servers/WindowServer/WSWindowManager.cpp

@@ -813,7 +813,6 @@ void WSWindowManager::compose()
             dst.move_by(dirty_rect_in_window_coordinates.location());
 
             m_back_painter->fill_rect(window.rect(), window.background_color());
-
             m_back_painter->blit(dst, *backing_store, dirty_rect_in_window_coordinates, window.opacity());
 
             if (backing_store->width() < window.width()) {

+ 27 - 0
SharedGraphics/Painter.cpp

@@ -238,6 +238,33 @@ void Painter::blit_with_opacity(const Point& position, const GraphicsBitmap& sou
     }
 }
 
+void Painter::blit_dimmed(const Point& position, const GraphicsBitmap& source, const Rect& src_rect)
+{
+    Rect safe_src_rect = Rect::intersection(src_rect, source.rect());
+    Rect dst_rect(position, safe_src_rect.size());
+    dst_rect.move_by(state().translation);
+    auto clipped_rect = Rect::intersection(dst_rect, clip_rect());
+    if (clipped_rect.is_empty())
+        return;
+    const int first_row = clipped_rect.top() - dst_rect.top();
+    const int last_row = clipped_rect.bottom() - dst_rect.top();
+    const int first_column = clipped_rect.left() - dst_rect.left();
+    const int last_column = clipped_rect.right() - dst_rect.left();
+    RGBA32* dst = m_target->scanline(clipped_rect.y()) + clipped_rect.x();
+    const RGBA32* src = source.scanline(src_rect.top() + first_row) + src_rect.left() + first_column;
+    const size_t dst_skip = m_target->width();
+    const unsigned src_skip = source.width();
+
+    for (int row = first_row; row <= last_row; ++row) {
+        for (int x = 0; x <= (last_column - first_column); ++x) {
+            dst[x] = Color::from_rgba(src[x]).to_grayscale().darkened().value();
+        }
+        dst += dst_skip;
+        src += src_skip;
+    }
+}
+
+
 void Painter::blit_with_alpha(const Point& position, const GraphicsBitmap& source, const Rect& src_rect)
 {
     ASSERT(source.has_alpha_channel());

+ 1 - 0
SharedGraphics/Painter.h

@@ -27,6 +27,7 @@ public:
     void draw_focus_rect(const Rect&);
     void draw_scaled_bitmap(const Rect& dst_rect, const GraphicsBitmap&, const Rect& src_rect);
     void blit(const Point&, const GraphicsBitmap&, const Rect& src_rect, float opacity = 1.0f);
+    void blit_dimmed(const Point&, const GraphicsBitmap&, const Rect& src_rect);
 
     void draw_text(const Rect&, const char* text, int length, const Font&, TextAlignment = TextAlignment::TopLeft, Color = Color::Black, TextElision = TextElision::None);
     void draw_text(const Rect&, const char* text, int length, TextAlignment = TextAlignment::TopLeft, Color = Color::Black, TextElision = TextElision::None);

+ 5 - 5
Userland/Makefile

@@ -98,7 +98,7 @@ CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(ARC
 CXX = i686-pc-serenity-g++
 LD = i686-pc-serenity-g++
 AR = i686-pc-serenity-r
-LDFLAGS = -L ../LibC
+LDFLAGS = -L../LibC -L../LibCore -L../LibGUI
 
 all: $(OBJS) $(APPS)
 
@@ -169,13 +169,13 @@ more: more.o
 	$(LD) -o $@ $(LDFLAGS) $< -lc
 
 guitest2: guitest2.o
-	$(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc
+	$(LD) -o $@ $(LDFLAGS) $< -lgui -lcore -lc
 
 sysctl: sysctl.o
 	$(LD) -o $@ $(LDFLAGS) $< -lc
 
 pape: pape.o
-	$(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc
+	$(LD) -o $@ $(LDFLAGS) $< -lgui -lcore -lc
 
 cp: cp.o
 	$(LD) -o $@ $(LDFLAGS) $< -lc
@@ -223,10 +223,10 @@ host: host.o
 	$(LD) -o $@ $(LDFLAGS) $< -lc
 
 qs: qs.o
-	$(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc
+	$(LD) -o $@ $(LDFLAGS) $< -lgui -lcore -lc
 
 mv: mv.o
-	$(LD) -o $@ $(LDFLAGS) -L../LibGUI $< -lgui -lc
+	$(LD) -o $@ $(LDFLAGS) $< -lc
 
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<