Commit Graph

57 Commits

Author SHA1 Message Date
Ali Mohammad Pur
5e1499d104 Everywhere: Rename {Deprecated => Byte}String
This commit un-deprecates DeprecatedString, and repurposes it as a byte
string.
As the null state has already been removed, there are no other
particularly hairy blockers in repurposing this type as a byte string
(what it _really_ is).

This commit is auto-generated:
  $ xs=$(ack -l \bDeprecatedString\b\|deprecated_string AK Userland \
    Meta Ports Ladybird Tests Kernel)
  $ perl -pie 's/\bDeprecatedString\b/ByteString/g;
    s/deprecated_string/byte_string/g' $xs
  $ clang-format --style=file -i \
    $(git diff --name-only | grep \.cpp\|\.h)
  $ gn format $(git ls-files '*.gn' '*.gni')
2023-12-17 18:25:10 +03:30
Kyle Pereira
8191f2b47a LibPDF: Add parameter for background color of render 2023-12-10 16:44:24 +01:00
Stephan Vedder
8c65cc185a Meta: Add a minimal SDL2 based videoplayer for Lagom 2023-11-27 09:04:47 -07:00
Nico Weber
ec190baa55 MacPDF: Replace newlines with spaces in outline titles
Else, outline items that have newlines in them end up with a weird
vertical offset.

(This does affect the outline item's tooltip, which shows the whole
title. But not having a newline there seems alright, arguably
preferable.)
2023-11-21 10:07:41 +01:00
Nico Weber
e13954410a MacPDF: Show tooltip with full title on elided outline titles 2023-11-21 10:07:41 +01:00
Nico Weber
fac0a456e6 MacPDF: Use correct encoding for outline titles
The title of an OutlineItem is already in UTF-8.

This is currently done in LibPDF's Parser::parse_string(). I think
that's not quite the right place (it shouldn't be done for all strings)
and not done quite right (text strings should convert from
PDFDocEncoding to UTF-8 unless prefixed by an UTF-8 BOM), but even if
that changes, I think we'll keep OutlineItem.title in UTF-8.
2023-11-21 10:07:41 +01:00
Nico Weber
ff4b0e678b MacPDF: Make "Open With" and dropping files on dock tile work
I would've expected that there's some way to have this work
automatically in an NSDocument-based application, but I haven't
found it yet. So manually implement the delegate for now.
2023-10-19 16:52:31 -04:00
Andrew Kaster
4d039b05b2 MacPDF: Load fonts via Core::Resource instead of filesystem paths 2023-10-17 11:02:01 -06:00
Nico Weber
6528f6db26 MacPDF: Make up and down flip pages when PDF view has focus
Previously, it only reacted to arrow left andn arrow right,
and to opt-up and opt-down.
2023-10-11 21:38:15 -04:00
Nico Weber
627b152d49 MacPDF: Make opt-up and opt-down always go to previous / next page
When the outline has focus, arrow keys navigate the outline instead
of changing the current page.

Add opt-up and opt-down as a way to move by one page even when the
outline has focus. (This matches Preview.app.)

xib change: Added two menu Previous Page with key equivalent opt-up
and Next Page with key equivalent opt-down to Go menu and bound them to
goToPreviousPage: and goToNextPage: on First Responder.

When the outline has focus, the responder chain is outline ->
window, so also add the actions on the window controller, and
let that forward to the PDF view.
2023-10-11 21:38:15 -04:00
Nico Weber
409eb644c8 MacPDF: Unbreak persisting the current page
I broke this when moving from a xib file to creating the UI in code.

https://developer.apple.com/documentation/appkit/nsuserinterfaceitemidentification/1396829-identifier
says:

"Identifiers are used during window restoration operations to uniquely
identify the windows of the application. [...] If you create an item in
Interface Builder and do not set a value for this string, a unique value
is created for the item when the nib file is loaded. For
programmatically created views, you typically set this value after
creating the item but before adding it to a window."

Without this, encodeRestorableStateWithCoder: / restoreStateWithCoder:
in MacPDFView weren't getting called.
2023-10-10 09:50:28 -04:00
Nico Weber
a75f876ec0 MacPF: Add a small group header in front of the outline
This has to be part of the data source, which makes things a bit
annoying.

For PDFs that have no outline, it says "(No outline)".
2023-10-10 09:50:08 -04:00
Nico Weber
fee50cb387 MacPDF: Switch from a cell-based outline view to a view-based one
The documentation is very loud about cell-based things being
deprecated, but it's fairly hidden what to actually do to switch to
the non-deprecated way (implement a certain delegate method).

Session 120 from WWDC 2011 has some notes on this. Apple's official
site no longer seems to have that, but it's e.g. here:
https://docs.huihoo.com/apple/wwdc/2011/session_120__view_based_nstableview.pdf
2023-10-10 09:50:08 -04:00
Nico Weber
25515322e5 MacPDF: Remove outline view header
Just setting headerView to nil removes the header, but also has
the effect of no longer drawing the outline view with a sidebar
background ¯\_(ツ)_/¯.

But also setting drawsBackground to NO on the scroll view restores
the sidebar look, so do that too.

With this, it is no longer necessar to explicitly set style.
The default NSTableViewStyleAutomatic now seems to resolve to
NSTableViewStyleSourceList, so stop explicitly setting it.
(This part has no behavior change.)
2023-10-10 09:50:08 -04:00
Nico Weber
e7d41480fc MacPDF: Make clicking outline items have an effect
Clicking an item in the outline now opens that page.

This requires giving the outline view a delegate, which for some
reason also has th effect of indenting expandable items ¯\_(ツ)_/¯
The vertical alignment of text still looks off, though.
2023-10-10 09:50:08 -04:00
Nico Weber
185301c027 MacPDF: Add PDF outline to sidebar
The outline has drawing artifacts, but it is somewhat functional:
You can click on disclosure triangles to open outline items, and
if the outline doesn't fit in the sidebar, it's scrollable.

The outline view has the correct sidebar look: gray with a slightly
transparent glass effect.

Clicking items doesn't have an effect yet.
2023-10-10 09:50:08 -04:00
Nico Weber
79bba20efc MacPDF: Add an NSOutlineViewDataSource for the PDF outline
Not used yet.
2023-10-10 09:50:08 -04:00
Nico Weber
f02b84d34d MacPDF: Give sidebar the more modern look
This Just Works with NSToolbarSidebarTrackingSeparatorItemIdentifier,
as long as your window is has NSWindowStyleMaskFullSizeContentView
in its style mask. If it doesn't, things behave pretty weirdly and
at least in the docs I looked at, this requirement wasn't documented
at all :/

Anyways, switch MacPDFView to use safeAreaRect instead of bounds
now that we use NSWindowStyleMaskFullSizeContentView so that we
don't draw parts of the PDF under the title bar.

Also be careful to invalidate the PDF view if safeAreaRect changes,
so that the page is redrawn when toolbar visibility gets toggled.
2023-10-07 09:47:43 +02:00
Nico Weber
b1e9c419a6 MacPDF: Add a split view for a togglable sidebar
It can be toggled with the (only) toolbar button, or via the
menu bar, or the standard shortcut Cmd-Ctrl-S.
2023-10-07 09:47:43 +02:00
Nico Weber
ae1b179474 MacPDF: Add a toolbar with a standard sidebar button 2023-10-07 09:47:43 +02:00
Nico Weber
1f1a596a46 MacPDF: In window controller, use window directly
No need to go through the view now that there's a dedicated
window controller.

No behavior change.
2023-10-07 09:47:43 +02:00
Nico Weber
c0d8131a26 MacPDF: Remove logspam 2023-10-07 09:47:43 +02:00
Nico Weber
6b9afcfb7c MacPDF: Create window UI in code instead of in xib
No intentional behavior change.
2023-10-07 09:47:43 +02:00
Nico Weber
dcf40892b8 MacPDF: Start moving window-related things into MacPDFWindowController
- MacPDFWindowController is now the xib file's owner
- _pdfView moves over
- MacPDFWindowController is now the MacPDFViewDelegate and responsible
  for updating the window's title
- Due to MacPDFWindowController now being the xib file's owner,
  windowControllerDidLoadNib: is no longer called automatically,
  so call a custom windowIsReady method manually instead

No behavior change.
2023-10-07 09:47:43 +02:00
Nico Weber
67f6baead0 MacPDF: Introduce MacPDFWindowController
I'd like to add a sidebar, and NSSplitViewItem apparently isn't
accessibly in .xib files without contortions. So I want to move
to creating the window in code, and this is a step towards that.

No behavior change.
2023-10-07 09:47:43 +02:00
Nico Weber
d6dff83397 MacPDF: Introduce CocoaWrapper.h
No behavior change.
2023-10-07 09:47:43 +02:00
Nico Weber
5e15c29e22 MacPDF: Use "MacPDF" in MainMenu.xib
I forgot to rename it there, whoops.
2023-09-30 19:37:39 -06:00
Nico Weber
76f0a09b5e MacPDF: Rename LagomPDFDocument to MacPDFDocument 2023-09-30 19:37:26 -06:00
Nico Weber
f99771d46f MacPDF: Rename LagomPDFView to MacPDFView 2023-09-30 19:37:26 -06:00
Nico Weber
a0b939cef4 MacPDF: Show correct page number in title bar after restore 2023-09-30 08:08:11 +02:00
Nico Weber
e5283cd648 MacPDF: Define AK_DONT_REPLACE_STD
The bots complain that `forward()` could be either from libc++'s
include/c++/v1/__utility/forward.h or from AK/StdLibExtras.h.

I don't see this locally, but Ladybird also defined AK_DONT_REPLACE_STD,
so let's see if this does the trick.
2023-09-30 08:08:11 +02:00
Nico Weber
e4d2aa82e2 MacPDF: Don't hardcode my serenity directory
https://www.africau.edu/images/default/sample.pdf is a good
document for testing that the built-in fonts load.
2023-09-30 08:08:11 +02:00
Nico Weber
8a7d3cb3f4 MacPDF: Override -[NSDocument isEntireFileLoaded]
We keep the NSData object around and stream for it, so that looks
like a good thing to do.
2023-09-30 08:08:11 +02:00
Nico Weber
e9b0ebe55a MacPDF: Use Serenity license headers, remove Xcode boilerplate 2023-09-30 08:08:11 +02:00
Nico Weber
91e0438fca MacPDF: Make buildable from CMake
Use `Meta/serenity.sh build lagom MacPDF` to build, and either of
`open Build/lagom/bin/MacPDF.app` or
`Build/lagom/bin/MacPDF.app/Contents/MacOS/MacPDF` to run.

Xcode used to insert a bunch of things to Info.plist. Now it can
no longer do that, so manually put them there
2023-09-30 08:08:11 +02:00
Nico Weber
0216f34179 MacPDF: Move some files around
1. main.m is now main.mm
2. MainMenu.xib is now no longer in a Base.lproj subfolder
3. Remove SerenityPDF.entitlements since it won't be used in our CMake
   build
2023-09-30 08:08:11 +02:00
Nico Weber
5af30b8f63 MacPDF: Tweak "#pragma mark" comments 2023-09-30 08:08:11 +02:00
Nico Weber
d2bda064da MacPDF: Pre-populate "Go to Page..." dialog with current page 2023-09-30 08:08:11 +02:00
Nico Weber
e67d8cfb2a MacPDF: Show current page and page count in subtitle 2023-09-30 08:08:11 +02:00
Nico Weber
bd19fcc039 MacPDF: Add a "Go to Page..." menu item
xib changes:
* Add a "Go" toplevel submenu
* Put a "Go to Page..." menu item in it
* Add showGoToPageDialog: to first responder
* Bind action of new menu item to that

The dialog is just a janky NSAlert for now.
2023-09-30 08:08:11 +02:00
Nico Weber
fe4fe5ceff MacPDF: Support opening password-protected PDFs
This is a bit janky for several reasons:
* `initialize` is now no longer called on a bg thread
* sheet UI is janky both visually and from an implementation PoV

But hey, it works for now.
2023-09-30 08:08:11 +02:00
Nico Weber
97dbdbc9b0 MacPDF: Fill bitmap cache on demand in -[LagomPDFView drawRect]
Removes one needless paint on document restore, and makes sure
that window resizing invalidates the cache (since this now checks
the bitmap's size).
2023-09-30 08:08:11 +02:00
Nico Weber
2799dedb1b MacPDF: Save and restore current page
This works great when quitting and reopening the app,
but when closing a window and the reopening from Recent Files,
the current page isn't restored. In Preview.app, it is.
2023-09-30 08:08:11 +02:00
Nico Weber
5401f3aecc MacPDF: Clean up some includes 2023-09-30 08:08:11 +02:00
Nico Weber
f5e81c8a99 MacPDF: Make pdfs without embedded fonts work again
A prior change removed some (very hacky) code needed for this
2023-09-30 08:08:11 +02:00
Nico Weber
87f31cab70 MacPDF: Remove application restore logging again 2023-09-30 08:08:11 +02:00
Nico Weber
d3e8d87672 MacPDF: Add some temporary logging for application restoring
In the end, apparently I had "Close windows when quitting an
application" enabled in Desktop & Dock in System Settings. With that
turned off, it just worked (...but I still need to serialize the current
page in the view).

Even with it turned off, cmd-opt-q would "Quit and Keep Windows",
so I could've also used that for testing.
2023-09-30 08:08:11 +02:00
Nico Weber
751ed5e1ee MacPDF: Larger default window size 2023-09-30 08:08:11 +02:00
Nico Weber
43859f07ec MacPDF: Opt in to both automatic and sudden termination
Automatic termination means that the app no longer shows up as
opened in the doc when the last Window is closed, but it's actually
still running and opens immediately when clicked again.

Sudden termination means that the app can close quickly on logout.
I think it means the runtime just calls _exit() and assumes all
data is saved continuously.
2023-09-30 08:08:11 +02:00
Nico Weber
819a602ee1 MacPDF: Actually show contents of opened PDFs
xib change: connected _pdfView outlet to LagomPDFView instance.
2023-09-30 08:08:11 +02:00