Commit Graph
100 Commits
Author SHA1 Message Date
John Scipione 9bc1ff61eb Tracker: Allow Get info without selection in File menu
If you don't have a selection, Get info on the window instead.

Change-Id: I83db030798788a487ce3123bb8b2c25056d4fbf2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7170
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-12-05 16:51:01 +00:00
John Scipione 0509d19b91 BTextView: Stylish fix, -x is clear we don't need -1 * x
Change-Id: I38a5e6c88e2ba3b2f82c49aa760942e1799a7595
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7171
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-12-05 16:50:27 +00:00
John Scipione 6a0798da0c Tracker: Show "-" for packagefs volume size
... instead of "4096 bytes" (i.e. 1 block).

Set total_blocks to 0 in packagefs_read_fs_info to indicate
that the capacity is 0, this avoids some potential issues
that using 1 or -1 might cause.

In WidgetAttributeText look for volumes with 0 blocks and
set fValueIsDefined to false which displays a "-".

Also replace capacity string with "-" in Get info.

Fixes #10291 the quick and dirty solution to #18567.

Change-Id: I7ff204c9ffd10cf9cc6343fcdd4422c034004004
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7164
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: John Scipione <[email protected]>
2023-12-02 19:29:08 +00:00
John Scipione 6f451a737b Tracker: Minor code simplifications
Call TargetModel() instead of PoseView()->TargetModel(), shorter

Eliminate duplicate method in FSUtils. Call FSIsRootDir() in a
couple of places instead of looking for "/".

Change-Id: I42b7f39e7708eda107ee479a6cd36cb58ac77ad9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7172
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-12-02 03:33:40 +00:00
John Scipione 41fcdb3c1c Tracker: Remove stray separator
... when context-click on a volume in Open/Save dialog.

Regresssion introduced in hrev56978. Separator goes with the
Paste item that is not currently added.

Change-Id: Ic9402cae27ed84f15479ee9b9cc1f48fea806efa
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7169
Reviewed-by: John Scipione <[email protected]>
2023-12-01 22:03:21 +00:00
John Scipione 0d85e8fb10 AboutSystem: Consolidate info, remove inaccessible memory
Change-Id: I0a5c0cb61f8c2b01caf12a907ad1c7938c519cf9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7152
Reviewed-by: nephele nephele <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-11-30 20:27:10 +00:00
John Scipione 5a66a92969 BColorControl: right-align text box values
Change-Id: I2ead9d310d265c04b49ea3029694584e628d782f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7160
Reviewed-by: waddlesplash <[email protected]>
2023-11-28 22:33:03 +00:00
John Scipione ba4ed24acc Tracker: Replace Path with Location in Query
... matching what's in the Attributes menu and everywhere else.
Right align Size column. Replace attribute literals with constants.

Change-Id: I336ef03cd500bf0e079435e21e5b8bf704d29aac
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7157
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-11-27 17:18:38 +00:00
John Scipione e91af56d9f BMenu: Turn on keyboard tracking on up arrow too
Set MENU_STATE_KEY_TO_SUBMENU on up arrow as well as down. This
causes the menu to check if there is a selected item even if you
aren't hovering over the menu. Previously we were doing this for
the down arrow but not the up arrow which caused a subtle bug that
humdinger stumbled upon in Deskbar where if you push the Menu key,
up, then Enter, the menu item is not activated, but if you push
Menu key, down, then Enter the menu item is activated.

Fixes #18686

Change-Id: I8dce6112603e12fb47afebb48a33b3ec6fa60230
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7140
Reviewed-by: waddlesplash <[email protected]>
2023-11-24 23:04:09 +00:00
John Scipione ac83e7f073 Tracker: Fix CanEditName() crash (from hrev57402)
Although I can't reproduce this crash, from the looks of the crash
report something in the CanEditName() method is throwing a
segmentation fault.

If selection count is not 1, don't even try to get the selection,
Edit name is not allowed unless you have a single item selected.
Double check that selected item is not NULL before using it.

I refuse to believe that fSelectionList being NULL is the problem
here, more likely fSelectionList->FirstItem() is NULL and is the
cause of the crash. Bailing out after checking that selection
count is 1 should ensure that FirstItem() is not NULL.

Hopefully fixes #18684

Change-Id: Ib99192178fa6f6d31b389afb47e72c5513e6e1c6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7139
Reviewed-by: waddlesplash <[email protected]>
2023-11-24 18:52:13 +00:00
John Scipione f5029bd569 Tracker: Disallow Restore from Trash if no selection
TargetVolumeIsReadOnly() doesn't make sense here because we
know the trash's volume is not read-only, we need to check
that you have a selection to enable Restore. Currently
(since hrev56978) Restore option is always enabled but it
shouldn't be if you have nothing selected.

It would be nice to also check if the restored location is
not read-only because you put something in the Trash then
remounted the volume read-only, but that's too much work.

Fixes yet another regression from hrev56978.

Also missed a delete convenience method call in hrev57402.

Call CanMoveToTrashOrDuplicate() to check if delete is allowed.
This method does a bit more work, it checks if the selection
includes the Desktop, the root volume, or the trash itself
which you are not allowed to delete.

Otherwise the same, this shouldn't make a big difference.

Change-Id: Ie188f25bd969a5aaeec9ff397fa5750872ccf97f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7138
Reviewed-by: waddlesplash <[email protected]>
2023-11-24 18:52:13 +00:00
John Scipione 32d1cd8e82 Tracker: Fix regression Copy To writable volumes
Regression was introduced in hrev56978 (Tracker read-only patch)
after R1B4.

This check is bad on Copy To/Move To operations because destWindow
is same as source window in these cases. This check only worked on
right-click drag Copy here/Move here since there is a separate
destWindow in this case.

Checking destFolder's volume read-only fixes the regression
because destFolder, unlike destWindow, should always be valid.

Fixes #18657

Change-Id: I4721bae34840d916e47f2a395d553e7254acaec5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7137
Reviewed-by: waddlesplash <[email protected]>
2023-11-24 16:34:37 +00:00
John Scipione cf83394d00 Tracker: Put duplicate checks into convenience methods
... and a few minor feature updates.

Create a CanEditName method on PoseView because we were using
subtly different checks in different places to see if allowed
to edit the name or not.

Tint background color of the Edit name text box on read-only
to indicate that the file name cannot be edited (only copied).

Create ReadOnlyTint() method in Utilities and use it here and
in PoseView to set the background color. Eliminate BackTint()
method from PoseView which served a similar purpose.

Add CanMoveToTrashOrDuplicate() convenience method.
Move To Trash, Delete and Duplicate options use same check.

Context menu of selection in file panel gets Duplicate option,
window context menu never did so don't try to enable it there.

Change-Id: I7a82d00ea10f22a7885c2e898a809e1abe9a6b30
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7122
Reviewed-by: waddlesplash <[email protected]>
2023-11-23 18:15:48 +00:00
John Scipione 501aa0f311 Tracker: Check selection parent is read-only on query
If 0 items are selected, check the window's volume instead.

If 1 item is selected, check if the parent's volume is read-only.

If multiple items are selected, consider the entire selection to
be read-only if any item's parent directory in the selection is
on a read-only volume.

You aren't allowed to for example Cut a selection that has an
item on a read-only volume as the Cut operation would not be able
to succeed. However, if all items in the selection are not on a
read-only volume then you may Cut.

For non-query windows assume all selected item's are on the same
volume and only check the first item when multiple are selected.

Fixes #18661

Change-Id: Ib898e54b62558c66aad65d33afd080480e312565
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7120
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: John Scipione <[email protected]>
2023-11-23 18:15:48 +00:00
John Scipione f9693a1300 Deskbar: Set tooltip on truncated window items
Fixes #18678

Change-Id: I91eeb19a77e400cf798fe23cc6d50565926063d9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7121
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-11-22 16:07:14 +00:00
John Scipione ac121994b1 Deskbar: Set sub-menus to menu font
Top level "menu" still uses be_plain_font, submenus use menu font.
Window submenus use menu font, but in super-expando mode they use
the plain font since they are on top level.

Change-Id: I704e9baa1ec46d1cbf7b9401ba4e49b5e2dff27c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7041
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-10-18 08:25:01 +00:00
John Scipione fb1d071e14 Deskbar: Increase Twitcher team icon size from 32 to 48
Change-Id: Id9029295314f0d52df2f4a71a2ce3142f46a0947
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6414
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-20 15:08:20 +00:00
John Scipione a656120f1f Deskbar: Center Twitcher window 1/16 screen height above center line
Change-Id: Ia829f9077afc0a12cb34d12b1cd8eccea2bba741
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6413
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-20 15:08:20 +00:00
John Scipione fb885767b6 Deskbar: Use hvif window icons & scale with font
Add vector rdefs for shown, hidden, shown switch
and hidden switch icons. Remove unused bitmap
resources. Add window switch vector icons to
artwork.

Create window icon cache in TBarApp and cache the
window icons based on font size.
Fixes memory leak in #18357.

Don't draw off-workspace lines in Switcher, use
switch icon for that instead. Fixes crash reported
in #18359. Position icon and window name better in
Switcher.

Put BarTeamInfo icon parameter last and make it
optional, the icon gets set by caching.

Enable team icon cache and window icon cache.

Fixes #14694

Deskbar: Scale Twitcher icons based on font size

Remove the point ctor parameter and deprecate the
switcherLoc setting by not using or setting it and
leaving it at its default value.

Center window on screen resolution change and
workspace change (as resolution may not match).

Fixes #17924

Change-Id: Ib63cc307f14cda397ffb66ea74091be59e6e5535
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6335
Reviewed-by: John Scipione <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-20 15:08:20 +00:00
John Scipione 2b6ccde030 Tracker: Disable edit menu items on ro volumes
... such as virtual directories or read-only media.
Also applies to open/save panels.

Menu items disabled on read-only volumes:
* New >
* Duplicate
* Move to Trash
* Move To >
* Cut
* Paste

Other reasons a menu item is disabled:
* Duplicate, Move To Trash, Cut, Copy, Move to >,
  Copy to >, Create link > and Identify require a
  selection.
* Paste requires something in your clipboard.
* Edit name requires a single item is selected.

Edit name is permitted on a read-only volume so
that you may copy the name. However the name is
not editable, you may only select and copy.

Pop system folder warning dialog on Edit name
commit instead, this way you won't see the dialog
if you just want to copy the name.

Move "Create link here" option last in the right-
click drag menu. Disable "Move here" if source or
dest is read-only, rest if dest is read-only.

Ignore Paste to virtual directory, (even more)
but permit Edit name.

Allow drag-and-drop to virtual directory but alert
and disable all right-click drag menu items like
other read-only directories.

Tint window backgrounds on all read-only windows
darker, not just on virtual and query folders.
Automatically switch the background color as you
navigate in and out of read-only folders.

Fix highlight color on column resize when background
color is not white. Fix "reverse video" effect so
that the highlight color is the inverse of the
background color. On Desktop however, highlight
color is always black or white.

Do not alter focus in save dialogs after initial
focus on the file name because focus on the pose
view is required for cut/copy/paste to work.

Make Edit Name work in file open/save dialogs and
make Cut/Copy/Paste work while editing file name.

Make Select all work in Edit name.

Duplicate code cleanup:

NameAttributeText::CommitEditedTextFlavor() and
HeaderView::FinishEditingTitle() call common
EditModelName() function in FSUtils.

RealNameAttributeText inherits from
NameAttributeText and calls its inherited
CommitEditedTextFlavor() method.

The alert text is defined in just one place in
FSUtils ShouldEditRefName() instead of three.
Consequently file name changed in the info window
can now be undone.

Change-Id: I3a78960057b8fb42d1f71af2ec3c808754c9b314
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6357
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-05-09 16:09:34 +00:00
John Scipione 396f398d35 Deskbar: Fix horizontal mode window size limits
When your font size and team icon size is large
enough horizontal mode Deskbar gets cut off.

Compare composed to composed, this restores the icon
size scaling behavior as indended before compose
changes in Deskbar: label is positioned to the right
of the team icon until after the third icon size
notch regardless of your font size.

Change-Id: Ia1d1418cc3b04536a55860d3889d2437c40986cc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6415
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-08 16:18:26 +00:00
John Scipione 9da3977cfa Deskbar: Rename IconSize() to TeamIconSize()
Change-Id: Id536bacd60334cd167051a785e7fff819359aacf
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6412
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-08 16:18:26 +00:00
John Scipione 69bbd7ad86 Deskbar: style fixes only
Change-Id: Ia5a94ded518a9b55aac94a69bcd393338bf90ebc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6411
Reviewed-by: John Scipione <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-08 16:18:26 +00:00
John Scipione cfbfb8473c BTextView: Allow nav on selectable but non-editable views
This allows arrow keys, page keys, home, end and the
blinking cursor on selectable views even if they are
non-editable. Input of text characters and backspace
are guarded on editable. Paste remains disabled.

Change-Id: Ifa5ed8673104e9abd51c52d394894aef48243965
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6407
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-05-06 16:39:58 +00:00
John Scipione d34f1c40e0 Tracker: Add BPoseView::CountSelected() method
Replace count variable with either selectCount
or poseCount depending on what is being counted.

Change-Id: I5e5caffd71bb932d93a822b28e73cdcfebff7135
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6399
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Axel Dörfler <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-05-03 07:31:42 +00:00
John Scipione b7dd18b22c Tracker: Style fixes only
... including whitespace, brackets, rename loc to where or
location, add a pragma.

Replace min_c with std::min.
Replace BPoint(0, 0) with B_ORIGIN
Use make_color() function to make static rgb_color objects.

Change-Id: I47a4e5e5f0e7038643baca7539d211350bbb8f20
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6404
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Axel Dörfler <[email protected]>
2023-05-03 07:30:59 +00:00
John Scipione f18d2effbf API Docs: Update BVolume::SetName()
Update \since to BeOS R4. This method definitely predates Haiku,
it has existed since at least R4.5 despite not being documented.

Document B_NAME_TOO_LONG return value.

Change-Id: I0816e4e89ae2710f6123e10ee41145a83fdca66f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6363
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-05-01 14:21:41 +00:00
John Scipione fc12af740f netfs: Restore status_t result, fix build
result is being used on VisitReadQueryRequest().

It was not being used on ProcessQueryEvent() though
so leave that off still.

Change-Id: I8fbfbb3edef6ff962237f696fe315b66900b4376
2023-04-26 19:16:47 -04:00
John Scipione c7cd1bae68 BeControlLook: fix clipping rect, part of #12890
Change-Id: Ib3c29dd1ffba1f0456a5043b62d943123335e966
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6366
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-04-26 16:43:38 +00:00
John Scipione 26704b5974 Tracker: undo Model.h changes from previous commit
This changes more than just style, put enum values back.
In practice this makes no difference but the change was
unintentional so put it back like it was before.

Change-Id: I46c782c441d72e77a2897683f54ba7fcefbd5b63
2023-04-23 23:46:06 -04:00
John Scipione a63a67392b Tracker: Whitespace, alphabetize style fixes
No functional change intended.

Change-Id: Ib47f6b04e372923a5d2a1774ce4e3f56d8b05792
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6370
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-04-24 02:47:43 +00:00
John Scipione 3e37877f10 BButton: Remove button label margins
... to prevent label truncation on BeControlLook,
BDH Calc, and some other places.

Fixes #16570

Change-Id: I68d8b64a631e116d3180c96be1fb5681de86fda6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6310
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-04-12 15:17:34 +00:00
John Scipione 27b3dee8b3 Revert "Deskbar: Use hvif window icons & scale with font"
This reverts commit 2b65e2d808.
2023-04-11 14:19:11 -04:00
John Scipione 55d8d19ea9 BeControlLook: Implement DrawStatusBar
Fix drawing issue with DrawTextControlBorder().
Update text control border and status bar border colors
to match BeOS R5 better.

Fixes #17889

Change-Id: I3eeb9898b538456aec751f9b57d19b9910506325
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6271
Tested-by: Automation <[email protected]>
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-04-11 15:28:39 +00:00
John Scipione 4f97a431b9 Deskbar: Make Vulcan Death Grip work in mini-mode
Refactor so that ExpandoMenuBar and TeamMenu both call the menu item
TeamMenuItem::HandleMouseDown() method to do the actual work and then
send a message to cleanup.

Fixes #17761

Change-Id: I0e13e5fc6c90236936120ff0dda1246123576d37
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6311
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-04-10 15:54:14 +00:00
John Scipione 2b65e2d808 Deskbar: Use hvif window icons & scale with font
Add rdef vector icons for shown, hidden, shown switch and
hidden switch. Reuse resource ids for vector icons. Remove
unused bitmap resources.

Fixes #17918.

Change-Id: I2ba1b126422f679c91f3272991c78d236198a358
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6260
Tested-by: Automation <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-04-09 04:50:56 +00:00
John Scipione 863bf67d8d Deskbar: Scale leaf/team menu with bold font only
Note that this only affects the leaf and team menu item icon size
as we do not actually display any bold text here and this does not
cause any menu text to display as bold anywhere in Deskbar.

The reason to use bold font is because the leaf/team menu is set
to the same height as the window tab and the window tab is bold.

Fixes #17913

Change-Id: I8fd23e30e9a28e6aa24b4726c73863b9d0370010
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6297
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Automation <[email protected]>
2023-04-04 18:39:40 +00:00
John Scipione 6781d35fcc Deskbar: Removed Utilities.h include from BarApp
There is no Utilities.h in Deskbar

Change-Id: If31a8eb0d36a62c9402c9d46e16891874e2d1aa2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6268
Tested-by: Commit checker robot <[email protected]>
Tested-by: Automation <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-04-04 18:38:30 +00:00
John Scipione 7ee7b33be6 Deskbar: Limit app bar width by BarMenuBar width
... in horizontal mode instead of (mis)calculating it.

Fixes #18299

Change-Id: I33bddd5f985677f7730f0025291fdfae90f4cb76
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6214
Tested-by: Commit checker robot <[email protected]>
Tested-by: Automation <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-03-19 06:34:29 +00:00
John Scipione 369c7b11d2 BAlert: Reserve room for stripe and large icon
... even if no icon is present. Draw stripe w/o icon.

"After ... hrev56382 alerts ... with no icons appears without a
gray stripe, causing it to jump left and right."

Fixes #18033 for R1B4 Release Milestone.

Change-Id: I35acc07411cadd4b394d6dfa1957049280b6f4b3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5810
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-11-11 19:34:25 +00:00
John Scipione b4d0fd9177 AboutSystem: Update replicant colors on workspace activated
Change-Id: I23bc998df8c9cc8894accc475cab8eec69db7c21
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5514
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Fredrik Holmqvist <[email protected]>
2022-09-21 15:26:29 +00:00
John Scipione 074aebe307 AboutSystem: Add system information replicant
Fixes #16130 (incidentally)

Change-Id: I764d143a0e6b9ebf8679149edd2aca463cb8ebfb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5511
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
2022-09-21 15:26:29 +00:00
John Scipione e486e3c033 BBox: Move label up by font height / 6
This is for BeOS application compatibility. BeOS apps expect the label
to be drawn a few pixels higher and may not draw correctly otherwise.

Font height / 6 scales with font size so that the label moves up
proportionally at larger font sizes e.g. 21pt. 1/6 is a better offset
for ArtPaint Global settings and DVDRip 1.0.

Change-Id: I6d852111d75a97f34539f6e94c2e2408b6c15808
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3017
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2022-09-08 17:58:14 +00:00
John Scipione 605761f47a Deskbar: Calculate clock margin based on font size
Based off of tray padding instead of hard-coding 12. Calculate tray
padding once in AttachedToWindow() and use that value everywhere.
Create some class float member variables to keep track of these values.

Fixes #17923

Change-Id: I3e767fdc8d2775e5f0dfff3275aeb0b686a8ea76
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5610
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-09-02 16:25:44 +00:00
John Scipione 216bcf7a3d Deskbar: add in-source Deskbar regions diagram
Change-Id: Iec7649f545cf818ecd87e8434774266697524c5d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5521
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Fredrik Holmqvist <[email protected]>
2022-08-10 08:01:47 +00:00
John Scipione 3ef6915cf3 IK: Propagate B_WORKSPACE_ACTIVATED to child views
... and B_WORKSPACES_CHANGED too.

hrev50148 propagated B_SCREEN_CHANGED messages to
children allowing them to respond to screen changes
fixing #8035 back in 2016.

This does the same thing for workspace messages only
I spelled propagate correctly this time.

Add private _PropagateMessageToChildViews() convinience
method to BWindow to do this work.

Call PostMessage() instead of calling MessageReceived()
directly which can work better in certain circumstances.

Change-Id: I5978c3fe674bbe75d9eafb7afb654a49ee3e0c11
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5516
Reviewed-by: Axel Dörfler <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-08-08 15:32:47 +00:00
John Scipione 81e5700a39 AboutSystem: Style updates
No functional change intended.

Change-Id: I0e5f0160f9caacd0e27161ac2c1450ea4d2f16e1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5510
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: nephele <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-08-02 03:41:37 +00:00
John Scipione e2c40127cb test_app_server: fix build
test_app_server: fix build for SVGViewView.cpp

src/tests/kits/interface/picture/SVGViewView.cpp:
In method `struct rgb_color Svg2PictureView::GetColorAttribute(const
XML_Char **, const char *, unsigned char)':
src/tests/kits/interface/picture/SVGViewView.cpp:258:
warning: unsigned int format, long unsigned int arg (arg 3)
src/tests/kits/interface/picture/SVGViewView.cpp:258:
warning: unsigned int format, long unsigned int arg (arg 4)
src/tests/kits/interface/picture/SVGViewView.cpp:258:
warning: unsigned int format, long unsigned int arg (arg 5)
src/tests/kits/interface/picture/SVGViewView.cpp:264:
warning: unsigned int format, long unsigned int arg (arg 3)
src/tests/kits/interface/picture/SVGViewView.cpp:264:
warning: unsigned int format, long unsigned int arg (arg 4)
src/tests/kits/interface/picture/SVGViewView.cpp:264:
warning: unsigned int format, long unsigned int arg (arg 5)
src/tests/kits/interface/picture/SVGViewView.cpp:276:
warning: int format, int32 arg (arg 3)
src/tests/kits/interface/picture/SVGViewView.cpp:276:
warning: int format, int32 arg (arg 4)
src/tests/kits/interface/picture/SVGViewView.cpp:276:
warning: int format, int32 arg (arg 5)

Change-Id: I886cef4df7f47425db8ee22ec1271d122cb454ea

test_app_server: fix build for ScreenManager.cpp

src/servers/app/ScreenManager.cpp:206: parse error before `('

Add expat build feature to picture Jamfile

src/tests/kits/interface/picture/SVGViewView.h:5: expat.h: No such file
or directory

Change-Id: I83edbc3059d6042482820a43eb41ef16928b8f6b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5504
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-07-31 02:09:53 +00:00
John Scipione f3cd363bbd test_app_server: Convert to Unix line endings on SVGViewView.cpp
Change-Id: I563a8ebaca0513d205da9629332f20bc7e49f2f4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5503
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-31 02:09:53 +00:00
John Scipione 8e9bc3dcf7 Tracker: Remove trailing whitespace
Change-Id: Iaf03ef8e89a85f443841f1dd51cf065e155845e0
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5515
Reviewed-by: waddlesplash <[email protected]>
2022-07-31 00:26:21 +00:00
John Scipione 12ae5308f2 App Server: Style fixes related to font updates
Reorder font defines to plain, fallback, bold, fallback, fixed, fallback.

Minor functional changes: No BeOS font fallbacks for Haiku apps.

Use FALLBACK_BOLD_FONT_STYLE instead of DEFAULT.

Change-Id: Id053fd9434e8d34290cf68af89cf58fe7811f786
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5497
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-26 07:13:27 +00:00
John Scipione f515b1c0f3 Appearance: Set a fixed preview text width and wrap
Larger font sizes and translations make the window too wide, grow
window vertically instead by wrapping.

Change-Id: I5850374f0fc917176927010d8e50b44033d366b1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5501
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-25 14:07:43 +00:00
John Scipione 5ef3f38677 Appearance: Make ColorPreview size font sensitive
AddGlue to separate color preview and color control instead
of growing the preview.

Change-Id: I6a21377cebc94a6f67c5528ba02d573f146a9b4c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5500
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-25 14:07:17 +00:00
John Scipione 1a61e82bd4 Backgrounds: Rename CustomRefFilter to ImageFilter
... and simplify Filter() logic. Check that GuessMimeType()
status is B_OK. Rename imageFiltering variable to filtering.

No functional change intended unless GuessMimeType() errors.

Change-Id: Ie29f8408a62ee65bf64db5c0bfcc8a13ef89aa15
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5496
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-24 21:44:29 +00:00
John Scipione 7e677cae2c Tracker: Use NodeRef in update thumb message
... now that Add/FindNodeRef have been added.

Tested by generating thumbnails on read-only BFS file system.

Change-Id: I94d85f4edfb6f26fc88dcb7b85d9d36629062f6b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5485
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-07-19 00:38:26 +00:00
John Scipione 75e66d6135 Tracker: Improve repeated apps in Open with... menu
If you have multiple Haiku installations mounted, it is common to
have the same app on multiple volumes. This makes the Open with...
menu show the full paths truncating them which makes it tough to
see the app name you're looking for.

Show volume and app names for repeated apps in Open with... menu
instead of showing the full path. Keep track of whether each app in
the list is a repeat and only display the volume for those.

If there is only 1 app name, print it.
If >1 app name and volume names are different, print
    [volume name] app name
If >1 app name but volume names are the same, print full path

Because many apps are in packages the volume is listed as [system]

Make kMaxMenuWidth a bit wider.

Compare app names and volume names using locale collator.

Sort by name, determine labels, then sort by relation because
repeats are not always consecutive once sorted by relation.

Change-Id: I2c6c1db99065641cf4f940a69a47693480f151aa
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5448
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-07-18 16:02:33 +00:00
John Scipione 3571cd8a6b StyledEdit: Add comment explaining MakeFocus() loc
... to explain hrev562209 by Jim906 which fixes #17733
StyledEdit: give initial focus to the TextView

No functional change

Change-Id: Id428290d8d3530e5ef9213489625c1968984d323
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5422
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: nephele <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-06-30 15:38:41 +00:00
John Scipione 8b25c6d727 Appearance: Store decorator filename to disk untranslated
Save ShortcutName() (i.e. filename) instead of the potentially
translated decorator Name(). If the decorator has no ref but
fInitStatus is B_OK and fPath == "Default" return Default
decorator in ShortcutName(). The Default decorator unlike other
decorators has no file on disk associated with it.

We don't need to look for ShortcutName() when iterating through
decorators anymore because we look for "Default" then file names
before we try to find by name.

Fixes #16412

Change-Id: I3109681d11931e7f55b7afaf3a65af2fb9ed5e10
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4320
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-02-07 21:38:44 +00:00
John Scipione cd053a381f Tracker: Fix image thumbnails
hrev55756 fixed regressions but also broke thumbnails.

Tell Model to look for an thumbnail icon in the node in
FinishSettingUpType() if eligible.

Create ShouldGenerateThumbnail() convinience method in Utilities.h

Change-Id: I454156374ec539f5bb09a61f24b16ebb6a7a95a1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4887
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-01-26 22:19:55 +00:00
John Scipione f6f9c751d6 Remove trailing whitespace from hid_shared
Introduced in https://review.haiku-os.org/c/haiku/+/4403

366e9a62e9 => hrev55413

This is a whitespace only change, no functional changes.
2021-10-22 11:12:24 -04:00
John Scipione 02ad92185d Network: Sort network menu items w/o deleting
* Delete dropped out networks.
* Add in newly discovered networks.
* Add static (aka class) compare method to WirelessNetworkMenuItem
  that is used to sort items by signal strength descending.

Add == operator to wireless_network struct to determine if
existing items have a known network attached.

Remove the non-network items from the menu, save them, sort
network menu items, then add non-network items back into the
menu.

Update NetworkStatus preflet to use same compare method as Network
preflet. signal_strength_compare function had a bool return value
instead of int which worked to sort items the first time, but does
not work on successive compares.

By not deleting and recreating the menu items each Pulse(),
the Network preflet no longer crashes on update. The menu flashes
on update still but doesn't crash.

Fixes #12024

Change-Id: Ie5b22cea4e66350b9c5df8e3b8de266ede50ad6d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4243
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Axel Dörfler <[email protected]>
2021-10-22 08:12:05 +00:00
John Scipione 0a53cbb3b9 BMenu: Add SortItems(), SwapItems() and MoveItem()
... methods which call the respective methods in BList.

These convinience methods allow you to sort a menu of menu items
via a compare function, swap two menu items, or move a menu item
to a new index. Update items layout if menu is open.

Previously there was no easy way to rearrange menu items in a menu.

Change-Id: Ice3d6e5404e895196d8bd32d696dce7c55bd72d4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4296
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-10-22 08:12:05 +00:00
John Scipione f7e7bce8e1 Tracker: Truncate long file names in middle
... so that you can see the extension.

Change-Id: I0c3cdcede912f6ccc7dfb8360bfd82599c8117c1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4323
Reviewed-by: Jacob Secunda <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-08-27 17:56:54 +00:00
John Scipione 6211ae2575 BBitmap: Remove BeOS tweak to fix Spirograph 1.5
This is a BeOS app compatibility fix.

The comment in SetBits implementation said that B_RGB32 imports only
24 bits of the data, but that doesn't seem to be correct.

Fixes #12931

Change-Id: I826a7e358ea379b8bf1550c899e82b623e5c21b4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4319
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2021-08-27 14:43:55 +00:00
John Scipione 7f8195344a Tracker: Add thumbnail support
Define thumbnail attributes in Attributes.h:
  Media:Thumbnail to store the thumbnail,
  Media:Thumbnail:CreationTime to see if thumbs need to be regenerated.

Store 128x128 thumbnail in attribute, for icon sizes smaller than
128x128 down-scale the 128x128 thumbnail. Use B_FILTER_BITMAP_BILINEAR
to down-scale the image using the bilinear scaling algorithm which
creates nicer looking thumbnails than the default scaling algorithm.

Store thumbnails as WebP images which compress smaller than PNGs and
fit in the inode better at 128x128.

Check the file's modification time in GetFileIconFromAttr() and compare
it to the thumbnail creation time. If the file has not been modified
since the last time we generated thumbnails return the thumbnail from
the attribute, otherwise fetch a new thumbnail with GetThumbnailIcon().

Add "Generate image thumbnails" Tracker setting. Default is turned off
for now. To generate image thumbnails you must first turn this setting
on in Tracker Windows preferences.

Spawn a get_thumbnail() thread to generate thumbnails and retrieve them
later on from the window thread to fill out into the icon. This should
improve responsiveness of generating thumbnails from a folder with a
lot of images. The generator thread will write the thumbnail data to an
attribute if on writable BFS volume.

If not on writable BFS volume, the generator thread will send the data
back to the original thread through a port by calling write_port().

When the thread is finished creating the thumbnail it sends a message
back to the Tracker application thread to update the pose which
instructs the window thread to look for an thumbnail. It either finds a
thumbnail in an attribute, or picks up the thumbnail data that has been
sent through write_port() using read_port().

This works on both read-write and read-only BFS volumes but it still
depends on the presence of a BEOS:TYPE parameter to have been written
to the volume before it became read-only. Thumbnail generation does not
work on other read-only volumes for example an ISO-9660 CD, but it does
work on read-only BFS volumes for example the BeOS R5 CD.

Move BPrivate::CheckNodeIconHintPrivate() from BNodeInfo to Tracker
Model CheckNodeIconHint(). Create Model::CheckAppIconHint() and look
for a vector icon or mini and large icon in that method. Check that
the base type is directory, volume, trash, desktop, or if executable
call CheckAppIconHint().

Add 1 to temp_name to fix the following warning:
src/kits/tracker/FSUtils.cpp:2437:12: note: 'snprintf' output 3 or more
bytes (assuming 267) into a destination of size 266

Rename temp_name to tempName following our style guidelines. Use
strlcpy() and strlcat() instead of strcpy() to safely copy the string.
This fixes thumbnail generation on 64-bit Haiku.

Change-Id: I7f927a5a1f8cf65e4b1aa1e0eb55bbfae87fd969
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3163
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-08-27 11:39:13 +00:00
John Scipione 50107f9f2b Tracker: fix last minute mini icon mode bugs
Pose::CalcRect() assumed top is at icon top in mini-icon mode. This
is not true for larger font sizes where the top of the text is above
the top of the icon. Calculate top and bottom based on font and icon
size matching the calculation in TextWidget::CalcRectCommon(). This
fixes a highlight redraw bug in mini icon mode at larger font sizes.

Push Edit name right 2px to match label position (in mini-icon mode.)

Round to integer to help with 1px off bug. Edit name box is still off
by 1px from the label for some font families and sizes.

Change-Id: Ibba897d6f3c7a879631adedada5cd59d2071191a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4204
Reviewed-by: John Scipione <[email protected]>
Reviewed-by: Alex von Gluck IV <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-07-12 00:33:38 +00:00
John Scipione 7912dad947 BTextView: Fix Tracker edit name
Don't resize text view in FrameResized() if resizable, this is done
in _AutoResize() instead. Set text rect width to width of max line when
word-wrap is off. Text rect width shrinks to the width of the text
matching behavior of BeOS R5 and previous Haiku. This fixes Tracker
Edit name.

Limit max width to column width in list mode or 30em in icon mode.
Filter paste messages limiting to max width in Tracker Edit name.

General BTextView fixes:

As a consequence of the text rect shrinking to fit the text, adjust
highlighting to go at least to edge of the view even if text rect width
is narrower. Extend the invalidation area beyond text rect when
redrawing to include highlighted areas.

Text views behave properly when overflow occurs i.e. when you type
text off the end of the text view. The text is nudged over as you
type/scroll so that the previous text is visible. This sorta worked
before but now works better.

Fix text rect centering by replacing switch with
BLayoutUtils::AlignOnRect().

Coalesce consecutive draw calls when inserting and deleting text to
prevent flashing for example when resizing the window. Redraw text
when the text view scrolls fixing a bug I noticed in StyledEdit.

Workaround negative height Beezer bug.

Fixes #16642, #16476

Change-Id: I2d32d6039944d2dc3218ce4de71f2966cc98c866
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3642
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2021-06-20 14:46:53 +00:00
John Scipione 830db1095f TextView docs: Add class overview
Change-Id: I4123822548f606812915211cd080c099b7413ef8
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4045
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2021-06-06 12:44:28 +00:00
John Scipione aae4fc7974 StyledEdit: SetInsets() instead of insetting initial text rect
Initial rect size doesn't persist to changing text rect sizes and
alignment changes but insets do. Maintains a 3px border around text
on all sides.

Change-Id: I70e855c3b6b17bc576fd5e38cd43fedb6c830aef
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3901
Reviewed-by: Adrien Destugues <[email protected]>
2021-05-09 10:35:24 +00:00
John Scipione 9de7297999 audio/null: Remove extra space introduced in hrev54781
This is whitespace only, no change in functionality intended.
2020-12-16 10:22:11 -05:00
John Scipione 30ecf636e0 Tracker: Scroll text to beginning on edit name
... so that the full file name is shown.

Center the file name in the edit box a bit better, the edit box is still
off compared to the non-editable file name by a pixel sometimes.

Use be_plain_font instead of getting the font from the PoseView since
the PoseView font is set to be_plain_font.

Fixes #16476

Change-Id: Ibda9341593163cdde898a83c98bf5ccea37126be
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3399
Reviewed-by: Adrien Destugues <[email protected]>
2020-12-02 17:58:47 +00:00
John Scipione 1897036191 BTextView: ensure text rect width and height is > 0
Helps wth #16476 #16568

Change-Id: Idc8d399cf69776d26e492f568c9ef83bcd7a6686
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3413
Reviewed-by: Adrien Destugues <[email protected]>
2020-11-26 07:27:19 +00:00
John Scipione 26ca2e3226 BTabView docs: fix typo 2020-10-11 23:50:11 -04:00
John Scipione 7c095f4709 BeControlLook: Fix app integration drawing issues
Update BTab::DrawTab() to pass the current index, the index of the
selected tab, and the index of the first and last tabs into
BControlLook::DrawActiveTab() and BControlLook::DrawInactiveTab().
This allows you to draw tabs differently in your BTab or BControlLook
subclass in many different circumstances.

Modify BControlLook API to add indexes to DrawActiveTab() and
DrawInactiveTab() like so:

void DrawActiveTab(..., int32 index = 0, int32 selected = -1,
	int32 first = 0, int32 last = 0);
void DrawInactiveTab(..., int32 index = 0, int32 selected = -1,
	int32 first = 0, int32 last = 0);

These extra indexes are not used by HaikuControlLook which relies only
on if the tab is active or inactive to draw.

Add IndexOf(BTab* tab) method to BTabView and document it to get the
index of the current tab in BTab::DrawTab(). Also add a warning in the
BTabView::DrawTab() method not to use the position and full parameters
anymore, use BTabView::IndexOf(), BTabView::Selection(), and
BTabView::TabCount() to get the info you need.

Using a dynamic_cast to a BTabView in BeControlLook to determine if the
view is derived from a BTabView didn't work in the case of WebPositive.
Furthermore, WebPositive does custom tab drawing which needed to be
updated for alternative control look. These index parameters passed from
BTab to BeControlLook allow us to draw the tab like BeOS without relying
on a dynamic_cast to BTabView to get the info.

Reproduce the functionality described above for BTab in WebPositive's
custom tabs. Eliminate no longer needed code in favor of using indexes.
Update WebPositive custom tabs to use BControlLook::DrawTabFrame()
instead of BControlLook::DrawInactiveTab() matching the update made in
BTabView.

In BeControlLook::DrawTabFrame() fill rect with base color, WebPositive
doesn't draw any tab background, so it expects this work to be done for
it.

Eliminate hasFrames variable from WebPositive.

Rename TabSelected(index) to UpdateSelection(index) in WebPositive to
better reflect its purpose.

Adjusted HaikuControlLook::DrawInactiveTab() to draw the tab borders more
selectively. Only draw border if left border is set for top and bottom tabs
or top border is set for left and right tabs. Undo no longer needed frame
manipulation border drawing workaround in HaikuControlLook::DrawTabFrame().

Draw scroll bar triangle without using DrawArrowShape().

Unlike in HaikuControlLook, DrawArrowShape() is used to draw arrows in
BOutlineListView and menus distinctly from how it draws arrows in scroll
bars. Draw our distinct arrows in DrawSrollBarButtons() instead.

This fixes overflow of time edit up-down arrows in Clock prefs and the
collapse-expand arrow in Deskbar not being vertically centered.

In DrawBorders() only inset if we actually draw the border.

Fix alignment issues with DrawSliderThumb dots for example in
MediaPlayer volume knobs.

Draw using line arrays calling AddLine instead of StrokeLine in
several places.

DrawMenuBar() extends to draw final pixel which eliminates an extra
lines at the end of menu bars.

Truncate button labels better fixing a few issues for example keymap
keyboard layout button labels. Button insets has been updated a bit
to fix drawing issues with buttons missing a border.

Using a dynamic_cast to a BButton to determine if a view is a button
in BeControlLook didn't work in the case of the keymap label. Look for
B_FLAT, B_HOVER, or B_DEFAULT_BUTTON flag in BeControlLook::DrawLabel()
to draw the label inverted on click. Pass the B_FLAT flag from Keymap
keys when drawing using BControlLook so that the label is inverted.

Change-Id: I07631f4b006bdb9aeca2adc9cbdf2da54dae8e92
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2866
Reviewed-by: Adrien Destugues <[email protected]>
2020-10-11 15:50:18 +00:00
John Scipione b76afa5bc0 BTextView: Draw string even if foundTab
Fixes #16544 (regression from hrev54549.)

Change-Id: Icca0b50f5432351b9c7ffcb82b1c8195a7ed286b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3267
Reviewed-by: humdinger <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
2020-09-26 16:37:02 +00:00
John Scipione fe88ae51ec AppKit: BMessage Add/Find/Get/Has/ReplaceNodeRef
This allows you to pass node_ref's around like you can entry_ref's.

Added node_ref_flatten(), node_ref_unflatten() and node_ref_swap() to
MessageUtils. These are close cousins to entry_ref_flatten(),
entry_ref_unflatten(), and entry_ref_swap() but for node_ref's.

Added B_NODE_REF_TYPE to TypeConstants.h in the Support Kit.

Added B_NODE_REF_TYPE to Debugger and ByteOrder in Support Kit,
B_NODE_REF_TYPE is treated the same as a B_REF_TYPE (entry_ref).

Add documentation for new NodeRef methods and B_NODE_REF_TYPE.

Change-Id: I32c6ed276bf1a7894a835b9fc9de5a882c35883c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3182
Reviewed-by: Adrien Destugues <[email protected]>
2020-09-10 17:18:09 +00:00
John Scipione 19a1dd49cf API docs: update TypeConstants.h documentation
Most of these say Haiku R1 but were introduced in BeOS R3 or R5.

Add documentation for a bunch of missing types.

Some minor updates to BMessage docs.

Change-Id: Ic6ad1439bd280ab8bc641a6e5c99b93ead512cbc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3199
Reviewed-by: Adrien Destugues <[email protected]>
2020-09-10 17:18:09 +00:00
John Scipione d9385a9d38 IK: align BTextView text rect/fix alignment
Recalculate line breaks in FrameResized() if word-wrap is on, otherwise
only move the text rect into position. StyledEdit was recalculating line
breaks before on resize (we have to in this mode) and the frame offset
updates for non-wrapping text views are inexpensive. This makes resizing
text view's work like StyledEdit everywhere.

Scroll to cursor when word-wrap setting changes if text view is editable.
If you are viewing a long document changing word-wrap can move the cursor
quite far, so scroll back to it.

Fix _ActualTabWidth() pen location for right and center-aligned text views
so that tabs widths are calculated correctly.

Reset fTextRect horizontal limits to bounds minus insets in
_RecalculateLineBreaks(), then grow fTextRect based on alignment when
wrap is off.

Fixing insets also fixes right and center-aligned BTextViews.
Left-aligned text view's grow right, right-aligned ones grow left,
and center-aligned ones grow out.

Make extra scrolling space for all aligned text views go the other way
from how it did in hrev24130 (and on left-aligned text view's too) so
that half the text is visible when you edit past the end or before the
beginnning of a text view instead of none of it.

Fixes #1651 #12608 #13796 #15189

Do not _RecalculateLineBreaks() if text view bounds are invalid.
In SetText() detect invalid text view bounds and resize the view to the
width and height of the first line. Then recalculate line breaks.
This fixes BAlert text view size issues.

Fixes #16481 (regression from hrev54496.)

Remove useless and heavy computation. There is no point in computing line
breaks for a 10px wide text view and it takes a long time because it needs
a lot of linebreaks. The view eventually gets laid out properly.

Fixes #5582 (which was not locale-related, after all.)

Only apply default insets if text rect is set to bounds. This ensures
that apps that manipulate the text rect can continue to do so without
the default insets interfering while apps that don't can benefit
from the defaults. If you want to set the text rect to bounds and
not use the default insets you must override the default by calling
SetInsets(). This prevent the default insets from being applied once
apps have changed the text rect fixing a bug in Icon-O-Matic where the
text rect insets were being applied incorrectly.

Fixes #16488 (regression from hrev54496.)

Reduce left and right insets inside text views from full label spacing
to half label spacing. Unify padding between BTextControl and BTextView.

Move fLayoutData->UpdateInsets() to private BTextView::_UpdateInsets()
because we need access to BTextView member variables when deciding
whether or not to add the default padding or not.

_UpdateInsets() changes:
* Don't update insets if BTextView::SetInsets() was called.
* Don't add default insets unless fTextRect is set to view Bounds().
* Do not set the right and bottom insets to left and top if negative,
  set them to 0 like we do to left and top -- DeskCalc bug otherwise.

Fixes #15688

Other BTextView fixes:
* Replace max_c and min_c with std::max and std::min respectively.
* Remove scrolling from one instance of BTextView::SetText() as it
  produced undesired results while editing a scrolled text view.
* Add default insets in _UpdateInsets()
* Fix scrolling when entering and deleting text so that some part of
  the text is always visible. Make visible scroll width depend on font
  size.
* Allow scrolling to a negative offset in x but not y. This allows you
  to scroll the entire contents of right and centered-aligned text views
  whose content does not fit in the box.
* Change _Refresh() to take an offset instead of a bool so that you can
  scroll to any offset.
* Replace TextLength() with fText->Length() in a couple of places.

TextControl changes:
* Set text rect in BTextControl::DoLayout().
* Remove AlignTextRect() from TextInput.

Fix the following problems in apps:

ScreenSaver: Set text rect in PreviewView::AddPreview().
Tracker: Set "Edit name" text view insets to 2. Tweek text rect position
  to be on top of label in icon, mini-icon, and list mode. Add a TODO that
  the text rect is a pixel off from the name on some files.
Mail: Remove _AlignTextRect() and FrameResized() from AddressTextControl.
  Use default insets on the text view, defaults are fine here.
DeskCalc: Set insets based on font size in ExpressionTextView
  SetTextRect() instead of manipulating the text rect.
  Remove _CheckTextRect() and related methods from InputTextView.
Icon-O-Matic: Remove _CheckTextRect() and related methods from InputTextView.
WebPositive: Remove _AlignTextRect() and FrameResized() from URLTextView
  and call SetInsets().
StyledEdit: Word-wrap and FrameResized() changes ported to BTextView.

Fixes #16476 #16480 #16488 (regressions from hrev54496.)

Change-Id: Ifeca6077f8815ccd86d5a3880f99556298aaf0fe
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3152
Reviewed-by: John Scipione <[email protected]>
2020-09-07 22:10:36 +00:00
John Scipione 3d43a90508 bfs: Enable logging on DEBUG build
Fix DEBUG build errors by using B_PRI macros in BlockAllocator.cpp,
CheckVisitor.cpp, Inode.cpp, Journal.cpp, and kernel_interface.cpp

Add optional type parameter from BlockAllocator::IsValidBlockRun()
and actually PRINT it, type parameter is already optional on
BlockAllocator::CheckBlockRun().

Remove a couple of casts as we are printing the expected type, int32.

Cast mode_t to (unsigned int) and use %u because 32-bit Haiku didn't
like B_PRIu32.

Verified to compile on both regular and DEBUG builds on both 32-bit
and 64-bit.

Change-Id: I8bb39afd400768b7f69d36384974f0b91b3ef48c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3184
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: John Scipione <[email protected]>
2020-09-07 22:09:11 +00:00
John Scipione b91bee0657 bfs: Silence errors on non-DEBUG build
Don't print to syslog on regular builds e.g.
    KERN: bfs: bfs_open:1360: Read-only file system

Change-Id: Ib458cd88bf6df63f707e09dca0db6a146b7975d1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3177
Reviewed-by: Adrien Destugues <[email protected]>
2020-09-07 22:09:11 +00:00
John Scipione 6148533ec2 Revert "BTextView: remove useless and heavy computation"
This reverts commit ca6302dded.
2020-08-23 00:09:46 -04:00
John Scipione 22758f1690 Revert "IK: align BTextView text rect/fix alignment"
This reverts commit a9b301871d.

hrev54496

Change-Id: Ife3c834ad98d330f04976d9adf3b1553e7aca034
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3153
Reviewed-by: Axel Dörfler <[email protected]>
2020-08-19 03:38:41 +00:00
John Scipione 90f9b5590f App Server: Save decorator path on load, fixes #16412
Change-Id: Ia536764d4abb79772e4d3f16e2364d87792d60fd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3150
Reviewed-by: Adrien Destugues <[email protected]>
2020-08-19 03:22:09 +00:00
John Scipione f9b3a3b1f3 Deskbar: Restore old mini-mode
... with the replicant tray below the menu bar.

Deskbar now has four modes:
1. vertical mini-mode (old mini-mode)
2. horizontal mini-mode (new mini-mode, was vertical)
3. vertical expando-mode (default)
4. horizonal expando-mode

Horizontal mini-mode gets the corner, then it switches to vertical
mini-mode above or below that, then to vertical expando-mode after
that. Horizontal expando mode is in center-screen top and bottom.

Clock vertical centering simplification.

Change-Id: I216008c20feb28f793693046792bbcfdf1e703e3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3146
Reviewed-by: Adrien Destugues <[email protected]>
2020-08-17 21:11:31 +00:00
John Scipione 702f22b7d2 MacDecorator: Whitespace style changes only
Change-Id: Iae2533e553df66945de8394b4678d487ff9de60e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3141
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: CodeforEvolution <[email protected]>
2020-08-13 09:04:05 +00:00
John Scipione a9b301871d IK: align BTextView text rect/fix alignment
Preserve passed in text rect in fTextRext (unless in layout)
and create an internal version fAlignedTextRect which is used
in place of fTextRect. fAlignedTextRext is aligned to fit the
text rect bounds and grows to fit. fAlignedTextRect always grows
vertically but only grows horizontally if wrap is off.

Left-aligned text view's grow right, right-aligned ones grow left,
and center center aligned ones grow out.

Set fTextRect to bounds in _DoLayout().

Reduce left and right padding inside text views from full label
spacing to half label spacing. Unify padding between BTextControl
and BTextView.

Fixing padding also fixes right and center-aligned BTextViews.

Undo extra scrolling for non-left text views from hrev24130 fixing
a scrolling left and right with mouse bug when it shouldn't.

Replace max_c and min_c with std::max and std::min respectively.

Remove scrolling from one instance of BTextView::SetText as it
produced undesired results while editing a scrolled text view.

Set text rect in BTextControl::DoLayout() and ScreenSaver
PreviewView::AddPreview().

Don't add padding if BTextView::SetInsets() is called. Set insets
to 0 in Tracker "Edit name" setting which prevents default padding
from being added. This is so that when you rename a file in Tracker
the TextView appears on top of the file name text with no padding.

80 char limit fixes.

Fixes #1651 #12608 #13796 #15189 #15688

Change-Id: I8c6106effc612f49aff374f29742471628b5df86
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3054
Reviewed-by: Adrien Destugues <[email protected]>
2020-08-06 11:51:15 +00:00
John Scipione d6a8b3e805 FileTypes: ApplicationTypeWindow text view updates
Remove workaround for BTextView bug from 2006 that no long applies
in FileTypes ApplicationTypeWindow by allowing the text views to
align themselves on FrameResized().

Don't override height on version text views, default height is good.

Change-Id: I41e5a9244c5c79eee3bba133064d016673e008e2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3053
Reviewed-by: Adrien Destugues <[email protected]>
2020-07-22 13:58:58 +00:00
John Scipione 40f2d4634a DeskCalc: right-align ExpressionTextView
Change-Id: I8bfd34f2a0cf426a2286e9cdd5b96f1b8e122f2b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3052
Reviewed-by: Adrien Destugues <[email protected]>
2020-07-22 13:58:58 +00:00
John Scipione 2eb1389dc1 Backgrounds: right-align X and Y position boxes
Change-Id: Ice9e51ca30235a6ec28a8a07cf3fea3da43f1414
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3051
Reviewed-by: Adrien Destugues <[email protected]>
2020-07-22 13:58:58 +00:00
John Scipione bf207efc2b Tracker: ContainerWindow style fixes only
Change-Id: Ica388cf727cb9cffe03c948a64344be7f462e25a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2330
Reviewed-by: Adrien Destugues <[email protected]>
2020-05-15 01:52:12 +00:00
John Scipione aca685fca1 BeControlLook: Control look resembling BeOS R5
Inspiration for this change comes from work done by Marc Flerackers
circa 2003 and has been repackaged into an updated BeControlLook class
which serves as a replacement for HaikuControlLook with the controls
that resemble BeOS R5.

Implemented the following controls:
Check boxes
Radio buttons
Menu bars
Menu fields
Menus
Scroll bars
Scroll view frame
Buttons
Tabs
Sliders
Borders

Backported check box placement fix from HaikuControlLook.
Copied label icon support from HaikuControlLook, BeOS did not have this.
Implemented support for left, right, and bottom tabs.
Implemented dots and lines scroll bar knob styles.
Copied slider bar from HaikuControlLook, BeOS did not have this.
Backported Desktop glowColor fix from HaikuControlLook

Change-Id: I5deac44ba8113ab7d1afd6e75f3dd93bfa222610
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2382
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: Sergei Reznikov <[email protected]>
2020-05-10 08:35:52 +00:00
John Scipione b2c7798765 Appearance prefs: Draw FakeScrollBar with BControlLook
... new scroll bar drawing methods.

Change-Id: I3f88f5a367142cbbd55e651793fff894d7c66508
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2578
Reviewed-by: waddlesplash <[email protected]>
2020-05-05 00:49:13 +00:00
John Scipione 494e256474 BScrollBar: Redraw scroll bar button on click
DrawScrollBarButton passes B_ACTIVATED flag to HaikuControlLook which
draws the button as down.

This regression was introduced in hrev54032.

Fixes #15960

Change-Id: I87dbaa9e8c9169c67dd7cb463d3604d9727ae28f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2577
Reviewed-by: waddlesplash <[email protected]>
2020-05-05 00:49:13 +00:00
John Scipione 1482b250a7 IK: Update scroll bars for alternative control look
Scroll bars should look and work identically to before on
HaikuControlLook.

Add DrawScrollBarButton() and DrawScrollBarThumb() and
DrawScrollBarBorder() methods. These methods are used to draw scroll
bars in a generic way so that they can be drawn differently by alternative
control look's (e.g. BeControlLook). Also it gives us back drawing of
scroll bar knobs.  However the knob setting is not exposed in the
interface in this commit.

These methods are in addition to the 2 existing DrawScrollBarBackground()
methods that draw the scroll bar background. One draws the area above and
below the thumb and the other is called by the first to actually draw the
area.

The rest of the drawing besides the backgrounds was being done in
BScrollBar before. To draw the scroll bar arrows and thumb we were recyling
other ControlLook methods, while this worked well enough on HaikuControlLook
it wasn't flexible enough for alternative control looks.

DrawScrollBarButton() is used to draw the four scroll buttons and is
typically (so far) used in combination with DrawArrowShape().

DrawScrollBarThumb() draws the scroll bar thumb.

DrawScrollBarBorder() draws a 1px border around the entire scroll bar,
potentially B_KEYBOARD_NAVIGATION_COLOR if focused (although this is
feature not currently used.)

Draw unscrollable scroll bars as if they were disabled including the
buttons with their arrow shapes, background, and thumb.

Add FBC backwords compatibility macros in ControlLook.cpp

Change-Id: I9237c5ce45d17d674785111d51de951e5686306b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/351
Reviewed-by: Adrien Destugues <[email protected]>
2020-04-11 16:57:54 +00:00
John Scipione b5c9fb399a Deskbar: Increase MenuBar width by 1px
... so that you can click it on the screen edge in vertical mode on
the right side. The BarMenuBar was 1px too narrow and didn't take up
the last pixel of its parent BarView container and therefore wouldn't
open the menu on click on the last pixel.

MenuBar width is increased by 1px in all modes but you probably won't
be able to notice the difference in other modes.

NULL comparison style fix and floorf call to prevent non-integer width
are included.

Fixes #15813

Change-Id: Ic5ebef5a63846a397a55358a111e33987538c455
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2377
Reviewed-by: Axel Dörfler <[email protected]>
2020-03-20 07:58:15 +00:00
John Scipione 2e99f0e1fe Appearance Prefs: Remember saved Decorator and ControlLook setting
... and make the Defaults and Revert buttons revert back to the
default/saved decorator and control look.

Add private _SetControlLook() method to set the control look which is
the equivalent of _SetDecor() but for control looks.

The person who implemented the ControlLook menu field made it so that
it would truncate the trailing "ControlLook" from the control look name,
do the same for Decorators so that BeDecorator is listed as simply "Be"
in the menu field. This is an alteration to the menu item label only and
does not affect the name of the decorator or control look.

Add private _DecorLabel() and _ControlLookLabel() methods to build
the truncated Decorator and ControlLook menu item labels respectively.

Set the current and saved decorator and control look in the constructor
and get rid of some private setter methods _AdoptToCurrentDecor() and
_AdoptInterfaceToCurrentDecor() that are no longer needed. These actions
are now done exclusively in the constructor and _SetDecor() respectively.

Remove unused knob style message constants (for now...)

Update copyright year to 2020

Change-Id: I0444a6198116d7699a84487cf97e9d826b14d1cb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2315
Reviewed-by: Adrien Destugues <[email protected]>
2020-03-13 12:40:35 +00:00
John Scipione cfdf08e8ba Appearance Prefs: style fixes to LookAndFeelSettings only
msg => message
pointer style
80 char limit fixes
Rename variable newControlLook => controlLook
Add #pragma descriptor comments.
Replace for (; condition;) loop with a while loop
Initialize count outside a different for loop
Change iterator variable i type from int => int32 (not purely style.)
2 lines of whitespace before ending header guard
Alphabetize (my) author name below Ryan Leavengood in header top comment

No functional change intended in this commit except for int => int32.

Change-Id: Ic78e3b0c85207ba07a3a71696d741344e148ac9d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2317
Reviewed-by: Adrien Destugues <[email protected]>
2020-03-13 12:40:35 +00:00
John Scipione ddb8a39005 BWindow: Adjust default zoom for new mini-mode
Treat bottom left, bottom right, and top left mini-mode like
horizontal mode and go full screen in top right mini-mode.

Change-Id: I55c4c0875b5696e6c193a72d96f309c3b058bf9c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2254
Reviewed-by: Adrien Destugues <[email protected]>
2020-03-09 12:11:21 +00:00
John Scipione 0d2645e44f Deskbar: New single line mini-mode
Mini-mode is when Deskbar is in the 4 corners with the application
menu tucked away into the leaf menu bar. This commit changes mini-
mode from putting the clock and replicants below the leaf menu to
attaching them to the side forming a single line.

The main advantage of this is that if Deskbar is in the top right
corner you can maximize a window without losing any access to
Deskbar or any screen real-estate. The other three corners lose screen
real-estate similar to horizontal mode.

Replace team icon with HVIF version kindly donated by meanwhile.
Scale icon size according to font size. Grow the vector rendered icon
size by 1px to match bitmap size. Add Team_Registrar icon to
data/artwork/icons. Tweak Team_Registrar icon to match the area of the
bitmap taken up by the bitmap icon so they will render at the same size.
The bitmap can be now NULL if an invalid icon is passed, handle this
case with an fInitStatus member in BarMenuTitle.

Switch order of leaf and team menus on the left side so that the
team menu is always on the screen edge. The team menu is more in
need of quick corner access than the leaf menu in this mode.

Adjust leaf menu position so that it continues to be cut-off while
allowing the team menu icon to display normally. Center vertically in
horizontal mode but it's still cut-off at 16x16. In vertical mode the
leaf continues to be cut-off at all font sizes. Constrain leaf bitmap
to its menu item frame as it can bleed out into the adjacent team menu
item at larger font sizes.

Grow team menu items to fit the widest label up to the max vertical
expando window width (currently 2x min) before truncating.
LegacyPackageInstaller now fits in the team menu. More on
LegacyPackageInstaller in horizontal mode below.

Update SetSizeLimits for mini-mode - no upper limit on height or width.

Switch to mini-mode using 1/4 screen left and right of screen instead
of using 1/6. Mini mode is now wider and this change makes switching
between mini mode and horizontal mode more reliable.
 * Rename frame to screenFrame here for clarity.

Set menu bar height to window tab height in vertical mode. This is
so that when you maximize a window the tab size will match. The menu
bar height is also a few pixels taller (25px vs 21px) than it was in
vertical expando mode at the default 12px font size. The change was
made to match the tab height. 21px was the height of a window tab
on BeOS R5's default decorator.

Adjust the width of the team menu for larger icon sizes. If app
names are hidden limit to half of min width so the menu doesn't
appear too short. SetMaxContentSize to width, this fixes a bug where
the menu item wasn't quite the right size for the menu.

No longer truncate time in vertical mini mode because the time can now
expand itself horizontally without limit (within reason.)

Center replicants vertically in mini-mode based on tab height and max
replicant height. Simplify mini-mode menu width and position calculation.
Fix a bar menu bar placement bug when Deskbar starts hidden in mini-mode.

Fix numerous layout issues. Put replicant tray where it should be in all
modes and then start adjusting things. The Replicant tray is now where
it should be in all modes, any fiddling with replicant icon locations
now can be relegated solely to LocationForReplicant().

Implements bug #5876 step 1.

*** Other related Deskbar improvements also made in this commit ***

Implemented underflow in horizontal mode ExpandoMenuBar to make items
wider when you close a team to take up more of available space. Max item
width is currently set to 1.25x min width so that LegacyPackageInstaller
fits in horizontal mode as well. In team menu it make sense to calculate
the widest label but in horizontal mode it would not be very nice if
ARogueAppWithAVeryVeryLongAndAnnoyingName were to grow all of your team
menu items. 1.25x is a fair compromise that gets us some extra width but
not too much. ExpandoMenuBar will truncate items to minimum width to buy
some space before it turns on the scroll arrows. Eliminate
kMinMenuItemWidth, create convinience methods to calculate limits.

Add BarView pointer to TimeView. Ditch fVertical and SetOrientation
in TTimeView and get the information from BarView instead. This way
we don't have to keep the state in sync. Also pass BarView pointer to
TTeamMenu constructor and use it instead of getting the pointer in a
roundabout way from be_app.

Eliminate kMiniHeight constant, the mini-mode height is now based
on the height of a window tab which changes with be_bold_font size.
Limit maximum height of replicants by be_bold_font size as well.
Also limit team menu and leaf menu icon heights by be_bold_font size.

Eliminate TExpandoMenuBar::fVertical, use fBarView instead. Switch the
order of layout and barView in ctor so that barView can be optional.
Change the ctor vertical param to layout and use the passed-in menu_layout
to pass to BMenuBar only. Once TExpandoMenuBar has been constructed, use
fBarView from then on. In Deskbar the menu_layout can change via
BMenuPrivate::SetLayout, if we needed to know TExpandoMenuBar's menu_layout
for some reason, we can call Layout().

Maintain 2px border around replicants in vertical expando mode on all
sides. Maintain 2px border around replicants in horizontal mode, except for
at 16x16 reduce the border to 1px because we're really short on height.
Improve clock centering in vertical expando mode. Also improve clock
centering in mini-mode across all font sizes. Reduce clock height by 2px
so that it won't draw over the top and bottom borders in horizontal mode.

Refactor TBarView::PlaceTray(). The code is basically the same but the
method is now better layed out. Calculate resize dragger location based
on width setting. This is valid since it is only ever used in vertical
expando mode. Hide the resize control better by moving it off-screen
when not in use. Hide() alone was not enough.

Fix size and position of the drag region to prevent minor drawing glitches
that were occuring in horizontal and left vertical mode because the drag
region was not in quite the right size and place.

Call DrawDragger() from DrawAfterChildren() instead of Draw() (and set
B_DRAW_ON_CHILDREN flag) so that the dragger will always be drawn even if
there are other items on top. In theory this should not be needed but in
practice this fixes a few drawing glitches. Rename DrawDragRegion() to
private DrawDragger() method - the name was confusing and other classes
shouldn't be allowed to draw the dragger directly.

TDragRegion should be renamed to TStatusView since that's what it really is.
Then we should create a new TDragControl class based on TResizeControl that
is a child of TStatusView like everybody else. TDragControl would be
responsible for drawing itself and knowing where its bounds are. For now
DrawAfterChildren() will have to do.

Rework status tray border drawing. It is identical in vertical exando mode
and in the same spirit in horizontal mode just a little bit nicer looking.
Draw hilight on top, left, and bottom edges in horizontal mode. Draw hilight
on top, and left edges in mini-mode this creates the appearance of a shadow.
Best appreciated using Magnify.

May the following (Open Tracker License) code forever be memorialized in
this commit message:

void
TDragRegion::Draw(BRect updateRect)
{
	rgb_color menuColor = ViewColor();
	rgb_color hilite = tint_color(menuColor, B_DARKEN_1_TINT);
	rgb_color ldark = tint_color(menuColor, 1.02);
	rgb_color dark = tint_color(menuColor, B_DARKEN_2_TINT);
	rgb_color vvdark = tint_color(menuColor, B_DARKEN_4_TINT);
	rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);

	BRect frame(Bounds());
	BeginLineArray(4);

	if (be_control_look != NULL) {
		if (fBarView->Vertical()) {
			AddLine(frame.LeftTop(), frame.RightTop(), dark);
			AddLine(BPoint(frame.left, frame.top + 1),
				BPoint(frame.right, frame.top + 1), ldark);
			AddLine(frame.LeftBottom(), frame.RightBottom(), hilite);
		} else if (fBarView->AcrossTop() || fBarView->AcrossBottom()) {
			AddLine(frame.LeftTop(),
				BPoint(frame.left, frame.bottom), dark);
			AddLine(BPoint(frame.left + 1, frame.top + 1),
				BPoint(frame.right - 1, frame.top + 1), light);
			AddLine(BPoint(frame.right, frame.top + 2),
				BPoint(frame.right, frame.bottom), hilite);
			AddLine(BPoint(frame.left + 1, frame.bottom),
				BPoint(frame.right - 1, frame.bottom), hilite);
		}
	} else {
		if (fBarView->Vertical()) {
			AddLine(frame.LeftTop(), frame.RightTop(), light);
			AddLine(frame.LeftTop(), frame.LeftBottom(), light);
			AddLine(frame.RightBottom(), frame.RightTop(), hilite);
		} else if (fBarView->AcrossTop()) {
			AddLine(BPoint(frame.left, frame.top + 1),
				BPoint(frame.right - 1, frame.top + 1), light);
			AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
			AddLine(BPoint(frame.right - 1, frame.top + 2),
				BPoint(frame.right - 1, frame.bottom - 1), hilite);
			AddLine(frame.LeftBottom(),
				BPoint(frame.right - 1, frame.bottom), hilite);
		} else if (fBarView->AcrossBottom()) {
			AddLine(BPoint(frame.left, frame.top + 1), BPoint(frame.right - 1, frame.top + 1), light);
			AddLine(frame.LeftBottom(), frame.RightBottom(), hilite);
			AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
			AddLine(BPoint(frame.right - 1, frame.top + 1),
				BPoint(frame.right - 1, frame.bottom - 1), hilite);
		}
	}

	EndLineArray();
}

Refactor mode switching.

Change TDragRegion::SwitchModeForRect() to SwitchModeForRegion() and pass
in BRegion's instead of BRect's. Create a new CalculateRegions() method
which is called once at startup and again on ScreenChanged() instead of
calculating the rect's over and over again inside MouseMoved(). Simplify
calculations using BRegion's.

Get the screen_where parameter from the Window()'s CurrentMessage() instead
of converting the passed in where parameter to screen coordinates. This
makes mode switching work 100% better.

Restore full state, fix all issues, and disable it again.

Fix issue with the window not resizing itself correctly when hiding the
scroller arrows in vertical expando mode because Deskbar was using the
bottom value of a scrolled view rather than its height. We only need to
call CheckForScrolling() once before we resize the window. Consolidate all
the window resizing code into ExpandoMenuBar::SizeWindow(), call
CheckForScrolling() there one time, then resize the window and lay
everything out again.

Simplify expando menu bar background drawing. The only part of this
drawing code that was actually being shown was the part where it stroked a
vertical line like this:

rgb_color menuColor = ui_color(B_MENU_BACKGROUND_COLOR);
SetHighColor(tint_color(menuColor, 1.22));
StrokeLine(bounds.LeftTop(), bounds.LeftBottom());

The rest of the code was never seen. May the following code also be forever
memorialized in this commit message:

void
TExpandoMenuBar::DrawBackground(BRect updateRect)
{
	if (Vertical())
		return;

	BRect bounds(Bounds());
	rgb_color menuColor = ui_color(B_MENU_BACKGROUND_COLOR);
	rgb_color hilite = tint_color(menuColor, B_DARKEN_1_TINT);
	rgb_color vlight = tint_color(menuColor, B_LIGHTEN_2_TINT);

	int32 count = CountItems() - 1;
	if (count >= 0)
		bounds.left = ItemAt(count)->Frame().right + 1;
	else
		bounds.left = 0;

	if (be_control_look != NULL) {
		SetHighColor(tint_color(menuColor, 1.22));
		StrokeLine(bounds.LeftTop(), bounds.LeftBottom());
		bounds.left++;
		uint32 borders = BControlLook::B_TOP_BORDER
			| BControlLook::B_BOTTOM_BORDER | BControlLook::B_RIGHT_BORDER;

		be_control_look->DrawButtonBackground(this, bounds, bounds, menuColor,
			0, borders);
	} else {
		SetHighColor(vlight);
		StrokeLine(bounds.LeftTop(), bounds.RightTop());
		StrokeLine(BPoint(bounds.left, bounds.top + 1), bounds.LeftBottom());
		SetHighColor(hilite);
		StrokeLine(BPoint(bounds.left + 1, bounds.bottom),
			bounds.RightBottom());
	}
}

Change-Id: Id9ddd60c997a785184208ba02938bee1416aeae9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2253
Reviewed-by: Adrien Destugues <[email protected]>
2020-03-09 08:48:46 +00:00
John Scipione 98a8bc858e PowerStatus: Draw battery icon even if there isn't enough space
This allows for drawing the battery icon in Deskbar at 8pt font.

Change-Id: Ibd8f151fe5a16da5f812083a3d5457991b3c49a8
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2300
Reviewed-by: Adrien Destugues <[email protected]>
2020-03-07 18:12:59 +00:00