summaryrefslogtreecommitdiff
path: root/WindowServer/WSWindowManager.cpp
AgeCommit message (Collapse)Author
2019-03-03WindowManager: Allow moving windows around using Logo+LMB.Andreas Kling
2019-03-03Detect the "Logo" (Windows/Apple/whatever) key and use it for window resize.Andreas Kling
This will be comfortable enough while I'm still developing with emulators. QEMU keeps eating my "Alt" key presses and it's making things difficult.
2019-03-01Put miscellaneous debug spam behind #ifdefs.Andreas Kling
2019-03-01Base: Add Csilla Bold 7x10 variant.Andreas Kling
It's nice to have a thin and a bold variant to complement each other.
2019-02-28SharedGraphics: Make Painter clipping work with translated clip origin.Andreas Kling
2019-02-28WindowServer: Add "Open ProcessManager..." to system menu.Andreas Kling
This will no doubt come in handy. :^)
2019-02-26WindowServer: Add 1920x1080 resolution option.Andreas Kling
Because it's fun to go fullscreen on my development machine. :^)
2019-02-26WindowServer: Reduce resize related debug spam.Andreas Kling
2019-02-26WindowServer: Bump height of window titlebars and menus from 16 to 18.Andreas Kling
2019-02-26WindowServer+LibGUI: Fix global mouse tracking with recursive widget trees.Andreas Kling
Also avoid sending multiple copies of mouse events to global trackers.
2019-02-26WindowServer: Add a simple CPU usage graph to the global menu bar.Andreas Kling
This is pretty cute and helps me spot when something's chewing up CPU.
2019-02-26WindowServer: Only invalidate the menubar rect when an app changes menubar.Andreas Kling
2019-02-26WindowServer: Make message receivers be weak pointers.Andreas Kling
2019-02-25Convert more RetainPtr use to Retained.Andreas Kling
2019-02-21WindowServer: Choose resizing direction based on where it's initiated.Andreas Kling
Divide the window into 3x3 hot areas and resize in the direction of the corner where the resize starts. The middle is a no-op area. This needs some polish but the basic mechanism is good.
2019-02-21Add concept of size increments to windowing system.Andreas Kling
Use this to implement incremental resizing for Terminal so that we only ever resize to fit a perfect number of rows and columns. This is very nice. :^)
2019-02-20Rework the rendering model so that clients instantiate backing stores.Andreas Kling
This makes interactive resizing work a lot better, althought it's still not perfect. There are still glitches and unpleasant flashes of zeroed memory.
2019-02-20WindowServer: Don't spam clients with resize events.Andreas Kling
Wait for them to finish a paint, then send them a new resize event. The exception is when releasing the mouse button to end the resize. Then we send a new resize event right away.
2019-02-20WindowServer: Support resizing windows.Andreas Kling
This is pretty limited and not entirely stable, but it does work! :^)
2019-02-20WindowServer: Minor style tweak.Andreas Kling
2019-02-20WindowServer: Remove some unused WSWindowManager members.Andreas Kling
2019-02-20LibGUI: Implement enter/leave events (with WindowServer support.)Andreas Kling
Windows now learn when the mouse cursor leaves or enters them. Use this to implement GWidget::{enter,leave}_event() and use that to implement the CoolBar button effect. :^)
2019-02-19WindowServer: Only invalidate the menubar rect when switching menubars.Andreas Kling
2019-02-19WindowServer: Correct invalidation rects for menu windows.Andreas Kling
2019-02-19WindowServer: Avoid overdraw by shattering dirty rects into unique shards.Andreas Kling
The algorithm I came up with is O(n^2) but given the small numbers of rects we're typically working with, it doesn't really matter. May need to revisit this in the future if we find ourselves with a huge number of rects.
2019-02-19WindowServer: Support windows with alpha channels. And per-WSWindow opacity.Andreas Kling
This patch also adds a Format concept to GraphicsBitmap. For now there are only two formats: RGB32 and RGBA32. Windows with alpha channel have their backing stores created in the RGBA32 format. Use this to make Terminal windows semi-transparent for that comfy rice look. There is one problem here, in that window compositing overdraw incurs multiple passes of blending of the same pixels. This leads to a mismatch in opacity which is obviously not good. I will work on this in a later patch. The alpha blending is currently straight C++. It should be relatively easy to optimize this using SSE instructions. For now I'm just happy with the cute effect. :^)
2019-02-17WindowServer: Assume wallpaper images are 1024x768.Andreas Kling
This is obviously not always the right thing to do, but it removes some confusion while using other resolutions. Eventually we're gonna need some kind of compressed image decoder.
2019-02-17Add ability to switch video modes from the system menu.Andreas Kling
I had to change PhysicalPage around a bit for this. Physical pages can now be instantiated for any arbitrary physical address without worrying that such pages end up in the kernel page allocator when released. Most of the pieces were already in place, I just glued everything together.
2019-02-17WindowServer: Let menu objects reference the WSClientConnection by pointer.Andreas Kling
Since these are owner/ownee relationships, there's no need for indirection.
2019-02-17WindowServer: WSWindow can have a pointer to the client rather than an ID.Andreas Kling
Since WSWindows are owned by WSConnectionClients, it's fine for them to just reference the client directly.
2019-02-17WindowServer: Move video mode setup to WSScreen.Andreas Kling
2019-02-17WindowServer: Make the menubar clock work again in the post-kernel world.Andreas Kling
This is actually so much better. Grabbing directly at the RTC was silly. :^)
2019-02-17Move WindowServer to userspace.Andreas Kling
This is a monster patch that required changing a whole bunch of things. There are performance and stability issues all over the place, but it works. Pretty cool, I have to admit :^)
2019-02-16WindowServer: Prune more kernel-related gunk.Andreas Kling
2019-02-16Kernel: Add ioctls to BochsVGADevice for mode setting and page flipping.Andreas Kling
Use these in WindowServer instead of poking at the BochsVGADevice directly.
2019-02-14WindowServer: Ignore attempts to make menu windows the active window.Andreas Kling
2019-02-14WindowServer: Add debug logging if we try to activate a client-less window.Andreas Kling
2019-02-14WindowServer: Make WSMenu use WSClientConnection::post_message().Andreas Kling
2019-02-14WindowServer: Get rid of the WSWindow lock now that accesses are serial.Andreas Kling
2019-02-14WindowServer: Add WSClientConnection class to manage an individual client.Andreas Kling
This makes both object lifetimes and object ID's a lot easier to understand.
2019-02-14WindowServer: Convert entire API to be message-based.Andreas Kling
One big step towards userspace WindowServer. :^)
2019-02-13WindowServer: Convert the remaining menu APIs into messages.Andreas Kling
2019-02-13WindowServer: Refactor more of the menu APIs to be message-based.Andreas Kling
This is all pretty verbose but I can whittle it down later. :^)
2019-02-13Rename GUI_Event to GUI_ServerMessage.Andreas Kling
Now that communication is becoming bidirectional, "event" is no longer right.
2019-02-13WindowServer: Begin refactoring towards a fully asynchronous protocol.Andreas Kling
In order to move the WindowServer to userspace, I have to eliminate its dependence on system call facilities. The communication channel with each client needs to be message-based in both directions.
2019-02-13WindowServer: Don't spawn new processes with WindowServer as parent.Andreas Kling
I don't want to have to wait() on them from the WindowServer. Let's just set new processes free and someone else will take care of them.
2019-02-13WindowServer: Put a clock in the top right corner of the screen.Andreas Kling
This way we don't even need the Clock app anymore. Very cool :^)
2019-02-13WindowServer: Try out a new IterationDecision thing for lambda iteration.Andreas Kling
2019-02-13WindowServer: Switch menubar based on the currently active window.Andreas Kling
2019-02-12WindowServer: Process window mouse events in the correct z-order.Andreas Kling