From 077f1007ebae7bbe28ec64fcb65de7fabf8c910a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 10 Jan 2019 05:11:07 +0100 Subject: [PATCH] More window manager hacking. Get rid of TerminalWidget for now. --- Widgets/EventLoopSDL.cpp | 19 ------------------- Widgets/GraphicsBitmap.cpp | 1 + Widgets/Makefile | 1 - Widgets/Painter.cpp | 3 +++ Widgets/Painter.h | 2 +- Widgets/WindowManager.cpp | 17 +++++++++++++---- Widgets/test.cpp | 9 --------- 7 files changed, 18 insertions(+), 34 deletions(-) diff --git a/Widgets/EventLoopSDL.cpp b/Widgets/EventLoopSDL.cpp index 5049d79e68..13a96c7562 100644 --- a/Widgets/EventLoopSDL.cpp +++ b/Widgets/EventLoopSDL.cpp @@ -2,13 +2,9 @@ #include "Event.h" #include #include "Widget.h" -#include "TerminalWidget.h" #include "WindowManager.h" #include -int g_fd; -extern TerminalWidget* g_tw; - EventLoopSDL::EventLoopSDL() { } @@ -119,20 +115,5 @@ void EventLoopSDL::waitForEvent() return; } } - - fd_set rfds; - FD_ZERO(&rfds); - FD_SET(g_fd, &rfds); - - struct timeval tv = { 0, 5000 }; - int rc = select(g_fd + 1, &rfds, NULL, NULL, &tv); - - //printf("select{%d} = %d\n", g_fd, rc); - - if (rc > 0) { - byte buf[1024]; - int nread = read(g_fd, buf, sizeof(buf)); - g_tw->onReceive(ByteBuffer::wrap(buf, nread)); - } } diff --git a/Widgets/GraphicsBitmap.cpp b/Widgets/GraphicsBitmap.cpp index a8dca6d127..83fd7543e9 100644 --- a/Widgets/GraphicsBitmap.cpp +++ b/Widgets/GraphicsBitmap.cpp @@ -15,6 +15,7 @@ GraphicsBitmap::GraphicsBitmap(const Size& size) : m_size(size) { m_data = (byte*)kmalloc(size.width() * size.height() * 4); + memset(m_data, 0, size.width() * size.height() * 4); m_owned = true; } diff --git a/Widgets/Makefile b/Widgets/Makefile index 25052d25b4..85d8863098 100644 --- a/Widgets/Makefile +++ b/Widgets/Makefile @@ -19,7 +19,6 @@ VFS_OBJS = \ Painter.o \ Label.o \ Button.o \ - TerminalWidget.o \ WindowManager.o \ Font.o \ Window.o \ diff --git a/Widgets/Painter.cpp b/Widgets/Painter.cpp index 350e39587e..5a1a071d52 100644 --- a/Widgets/Painter.cpp +++ b/Widgets/Painter.cpp @@ -102,6 +102,9 @@ void Painter::drawText(const Rect& rect, const String& text, TextAlignment align if (alignment == TextAlignment::TopLeft) { point = rect.location(); + } else if (alignment == TextAlignment::CenterLeft) { + int textWidth = text.length() * font().glyphWidth(); + point = { rect.x(), rect.center().y() - (font().glyphHeight() / 2) }; } else if (alignment == TextAlignment::Center) { int textWidth = text.length() * font().glyphWidth(); point = rect.center(); diff --git a/Widgets/Painter.h b/Widgets/Painter.h index b4fc0b1254..a4816abe22 100644 --- a/Widgets/Painter.h +++ b/Widgets/Painter.h @@ -14,7 +14,7 @@ class Window; class Painter { public: - enum class TextAlignment { TopLeft, Center }; + enum class TextAlignment { TopLeft, CenterLeft, Center }; explicit Painter(Widget&); ~Painter(); void fillRect(const Rect&, Color); diff --git a/Widgets/WindowManager.cpp b/Widgets/WindowManager.cpp index b08300b844..df1bc47b82 100644 --- a/Widgets/WindowManager.cpp +++ b/Widgets/WindowManager.cpp @@ -3,12 +3,9 @@ #include "Widget.h" #include "Window.h" #include "AbstractScreen.h" -#include "TerminalWidget.h" #include "EventLoop.h" #include "FrameBufferSDL.h" -extern TerminalWidget* g_tw; - static const int windowFrameWidth = 2; static const int windowTitleBarHeight = 16; @@ -22,6 +19,17 @@ static inline Rect titleBarRectForWindow(const Window& window) }; } +static inline Rect titleBarTitleRectForWindow(const Window& window) +{ + auto titleBarRect = titleBarRectForWindow(window); + return { + titleBarRect.x() + windowFrameWidth, + titleBarRect.y(), + titleBarRect.width() - windowFrameWidth * 2, + titleBarRect.height() + }; +} + static inline Rect borderRectForWindow(const Window& window) { auto titleBarRect = titleBarRectForWindow(window); @@ -65,6 +73,7 @@ void WindowManager::paintWindowFrame(Window& window) //printf("[WM] paintWindowFrame {%p}, rect: %d,%d %dx%d\n", &window, window.rect().x(), window.rect().y(), window.rect().width(), window.rect().height()); auto titleBarRect = titleBarRectForWindow(window); + auto titleBarTitleRect = titleBarTitleRectForWindow(window); auto outerRect = outerRectForWindow(window); auto borderRect = borderRectForWindow(window); @@ -111,7 +120,7 @@ void WindowManager::paintWindowFrame(Window& window) p.fillRect(leftRect, borderColor); p.fillRect(rightRect, borderColor); - p.drawText(titleBarRect, window.title(), Painter::TextAlignment::Center, titleColor); + p.drawText(titleBarTitleRect, window.title(), Painter::TextAlignment::CenterLeft, titleColor); } void WindowManager::addWindow(Window& window) diff --git a/Widgets/test.cpp b/Widgets/test.cpp index 06deb0981f..04374b0f1a 100644 --- a/Widgets/test.cpp +++ b/Widgets/test.cpp @@ -3,7 +3,6 @@ #include "RootWidget.h" #include "Label.h" #include "Button.h" -#include "TerminalWidget.h" #include "WindowManager.h" #include "Window.h" #include "ClockWidget.h" @@ -92,14 +91,6 @@ int main(int argc, char** argv) WindowManager::the().setActiveWindow(widgetTestWindow); } - auto* win = new Window; - win->setTitle("Console"); - win->setRect({ 100, 300, 644, 254 }); - - auto* t = new TerminalWidget(nullptr); - win->setMainWidget(t); - t->setFocus(true); - #if 0 auto* clockWin = new Window; clockWin->setTitle("Clock");