Commit Graph

55 Commits

Author SHA1 Message Date
Campbell Barton
33b80415aa Cleanup: use const, correct arg names, spelling, use ELEMN(..) 2024-09-27 11:01:37 +10:00
Harley Acheson
7b0c18afb4 UI: Automatically Add Some Tooltip Description Periods
While we continue to improve our tooltips, this PR appends a period to
descriptions if it does not already end in punctuation (.!?), or does
not contain a bullet character. This only does so under the same
circumstances as in earlier code, removed in #125460.

Pull Request: https://projects.blender.org/blender/blender/pulls/128097
2024-09-26 17:53:28 +02:00
Campbell Barton
381898b6dc Refactor: move BLI_path_util header to C++, rename to BLI_path_utils
Move to a C++ header to allow C++ features to be used there,
use the "utils" suffix as it's preferred for new files.

Ref !128147
2024-09-26 21:13:39 +10:00
Jonas Holzman
5cfe733f84 UI: Color Picker layout rework
Refactoring of the color picker popup. This simplifies code, removes
cruft, and adds new features. The Hex input is removed from its own
tab and placed at the bottom of the layout. The picker circle is made
just a bit smaller. "#" added to the hex values.

Pull Request: https://projects.blender.org/blender/blender/pulls/125675
2024-09-25 18:56:32 +02:00
Bastien Montagne
22477956e2 Refactor: Move BPY main/public extern headers to proper C++ ones.
Pull Request: https://projects.blender.org/blender/blender/pulls/128081
2024-09-25 18:04:33 +02:00
Campbell Barton
94183b9e2e Refactor: add a function to access the window size in pixels
Replace uses of WM_window_native_pixel_x,y with
WM_window_native_pixel_size() which returns an int2 for convenience
and avoids an unnecessary call to GHOST_GetNativePixelSize(..).
2024-09-16 11:38:57 +10:00
Harley Acheson
019d987072 UI: Increase Width of ID Search Lists
As discussed in our UI Module meeting, this PR increases the width of
ID Search lists by 40%.

Pull Request: https://projects.blender.org/blender/blender/pulls/127599
2024-09-14 03:20:09 +02:00
Guillermo Venegas
b721374e9b Fix #127504: Layout panel missaligned in UI_DIR_UP popups
Layout panels are relative to `block->rect.ymax`. This PR applies the
overflow created above `block->rect.ymax` as initial offset.

Pull Request: https://projects.blender.org/blender/blender/pulls/127507
2024-09-13 18:49:48 +02:00
Harley Acheson
0c1d8ad8a5 UI: Status Bar During Non-Operator UI Interaction
This PR clears the status bar when popovers, confirmations, and dialogs
open. Also while editing text, entering numbers, or dragging on sliders

Pull Request: https://projects.blender.org/blender/blender/pulls/127005
2024-09-11 21:02:39 +02:00
Guillermo Venegas
7bb8ab8194 Fix #127012: UI popover can not be scrolled upward
Popop overflow can be on top when popup direction is `UI_DIR_UP`, so
this can require a negative scroll.

Pull Request: https://projects.blender.org/blender/blender/pulls/127021
2024-09-02 23:37:55 +02:00
Jesse Yurkovich
d6ea01bd38 Fix #126551: Write Hex values using 2 digits in the color tooltips
We need to use 2 hex digits to ensure that the value displayed in the
tooltips is correct.

Pull Request: https://projects.blender.org/blender/blender/pulls/126580
2024-08-21 04:55:55 +02:00
Aras Pranckevicius
6d93bf6b44 IMB: Speedups, fixes and cleanups to various image scaling functions
API: merged IMB_scalefastImBuf, IMB_scaleImBuf, IMB_scaleImBuf_threaded
into one function IMB_scale with enum IMBScaleFilter {Nearest, Bilinear, Box}
and bool "threaded" param.

Performance:
- Box filtering (nee IMB_scaleImBuf) can be multi-threaded now.
- Nearest filtering (nee IMB_scalefastImBuf) can be multi-threaded now.
  Also fix performance regression on float images caused by fix in #126234
- Bilinear filtering (nee IMB_scaleImBuf_threaded) is several times faster now.

Correctness:
- Nearest and Box filtering: no longer loses half of edge pixels when scaling
  up.
- Box: fixed garbage results (and possible out of bounds reads) for non-4
  channel float images.
- Bilinear: no longer shifts image when scaling up.
- Bilinear: properly filters when scaling down by 2x2.

Test coverage:
- Add gtest coverage for various IMB_scale modes.
- Add a IMB_performance_test performance test, ran manually.

More details, images and performance numbers in PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/126390
2024-08-19 16:50:05 +02:00
Jonas Holzman
6bb2e5a691 WM API: Improve naming of WM_window_pixels_* functions
The WM API has WM_window_pixels_{x,y,coords}` functions that returns the
window size/point coordinate in the host native pixel size.

As "pixels" in itself doesn't really mean anything the intent of
these functions wasn't really clear. To clarify this, this commit
renames their prefix from `WM_window_pixels_` to
`WM_window_native_pixel_`.

Pull Request: https://projects.blender.org/blender/blender/pulls/125994
2024-08-07 22:30:31 +02:00
Julian Eisel
00a8690637 Fix: UI: Python info shown in quick label tooltip for operator buttons
When a button had an operator attached and was using quick label
tooltips, the quick tooltip would include the Python path after the
label. In other cases like toolshelf buttons or buttons representing RNA
properties only the label would be shown, as expected.

Was visible in the tooltips of asset shelf items.

Rather than relying on subtle and rather implicit logic, use explicit
early exiting after the label fields are handled.
2024-07-30 15:40:38 +02:00
Harley Acheson
9bdd511a27 UI: Always Use Mono Font for Python in Tooltips
When including Python on the tooltips they are meant to be shown using
a monospaced font. This is the case in two of the four places that
python is shown, but not in the other two which include Tool tooltips.
This PR makes them all consistent.

Pull Request: https://projects.blender.org/blender/blender/pulls/125521
2024-07-27 01:51:41 +02:00
Harley Acheson
f2f408bebf UI: Tooltip Final Period and Other Typography
This removes the terminal periods automatically added to the end of
tooltip items. The current desire is to only end in period if there
are multiple sentences - so if there is one in the middle of the
description. This also converts our uses of lists to use space and
bullet, rather than just bullet or asterisks.

Pull Request: https://projects.blender.org/blender/blender/pulls/125460
2024-07-26 18:29:50 +02:00
Julian Eisel
2100623a96 Refactor: UI: Use unique_ptr for tooltip data management
Mostly to allow leak-free early exiting from functions generating the
tooltip data, otherwise cleanups have to be duplicated. But using smart
pointers is good practice in general. Also use references instead of
pointers, to indicate that null is not an expected value.
2024-07-26 12:31:01 +02:00
Harley Acheson
5bf44c6eb4 UI: Text Style for Tooltips
This gives users the ability to control the size of tooltip text
separately from other text styles. This is an accessibility issue
in that users with low vision can choose to make these larger than
the working text.

Pull Request: https://projects.blender.org/blender/blender/pulls/125147
2024-07-25 19:12:41 +02:00
Campbell Barton
62afbbef9b Cleanup: use const variables & args, pass args by reference 2024-07-25 10:17:40 +10:00
Philipp Oeser
b25e67189c Fix #125228: Image Editor Memory leaks showing image tooltip thumbnail
Looks like a simple oversight in 8937c0bcab

To resolve, just free the `ImBuf` (same as done in other places that use
`uiTooltipImage`)

Pull Request: https://projects.blender.org/blender/blender/pulls/125231
2024-07-22 17:37:43 +02:00
Sebastian Parborg
b61d308d76 Fix: The position of the redo panel was inconsistent
If the redo panel wasn't initalized from scratch, it would not get the
scrollbar offset. Now always apply this runtime offset.

Pull Request: https://projects.blender.org/blender/blender/pulls/125092
2024-07-22 16:09:44 +02:00
Harley Acheson
108b71047a UI: Remove "Widget Label" Text Style
This PR removes the "Widget Label" text style, found in Preferences /
Themes / Text Style. This results in both labels and the text found in
input boxes sharing settings. This results in a slight loss of
customization but it isn't that useful to have these things separate
and results in code complication and errors.

Pull Request: https://projects.blender.org/blender/blender/pulls/122898
2024-07-19 21:57:49 +02:00
Bastien Montagne
c607ead4b7 Refactor: Makesrna: move generated code further in C++.
This commit moves generated `RNA_blender.h`, `RNA_prototype.h` and
`RNA_blender_cpp.h` headers to become C++ header files.

It also removes the now useless `RNA_EXTERN_C` defines, and just
directly use the `extern` keyword. We do not need anymore `extern "C"`
declarations here.

Pull Request: https://projects.blender.org/blender/blender/pulls/124469
2024-07-15 16:39:45 +02:00
Julian Eisel
7b0ea0f1b4 Sculpt/Paint: New asset based brush management workflow
This is the main merge commit of the brush assets project. The previous
commits did some preparing changes, more tweaks are in the following commits.
Also, a lot of the more general work was already merged into the main branch
over the last two years.

With the new design, quite some things can be removed/replaced:
- There's a unified "Brush" tool now, brush based tools and all special
  handling is removed.
- Old tool and brush icons are unsed now, and their initialization code
  removed here. That means they draw as blank now, and the icon files can be
  removed in a follow up.
- Creation of default brushes is unnecessary since brushes are now bundled in
  the Essentials asset library. Icons/previews are handled as standard asset
  previews.
- Grease pencil eraser options are replaced by a general default eraser brush
  that can be set by the user.

More changes are planned still, see task list issue below.

Main Authors: Bastien Montagne, Brecht Van Lommel, Hans Goudey, Julian Eisel
Additionally involved on the design: Dalai Felinto, Julien Kaspar

Blog Post: https://code.blender.org/2024/07/brush-assets-is-out/

Tasks:
https://projects.blender.org/blender/blender/issues/116337

Reviewed incrementally as part of the brush assets project, see:
https://projects.blender.org/blender/blender/pulls/106303
2024-07-08 17:50:25 +02:00
Julian Eisel
721dbfccfd UI: Turn asset shelf popup into a popover, add operator to call from shortcut
Turns the asset shelf into a popover which reduces some of the special
handling. An operator `WM_OT_call_asset_shelf_popover()` (similar to
`WM_OT_call_panel()`) is added to be able to call the popover from shortcuts.
Exactly this was an important aspect for the brush assets project, to allow
quick searching for brushes from the popup.

A custom shortcut can be added to asset shelf popovers using "Assign Shortcut"
in the context menu of buttons invoking it.

The popover is spawned with the mouse hovering the first asset and the search
button active using "semi modal" handling. That means while the popover is
open, any text input is captured by the search button, while the rest of the
popover stays interactive. So for example navigating through asset catalogs is
possible, a single click activates an asset and closes the popover.

Reviewed as part of the asset shelf project, see:
- https://projects.blender.org/blender/blender/issues/116337
- https://projects.blender.org/blender/blender/pulls/106303
2024-07-08 17:50:24 +02:00
Campbell Barton
04b7e8fe1d Merge branch 'blender-v4.2-release' 2024-07-06 15:00:40 +10:00
Campbell Barton
850e715682 UI: add UILayout.template_popup_confirm(..) function
This makes it possible for popups to have their confirm & cancel buttons
defined in the operator's draw callback.

When used with popups created by: `WindowManager::invoke_props_dialog()`
to override the default confirm/cancel buttons.

In the case of `WindowManager::popover(..)` & `bpy.ops.wm.call_panel()`
this can be used to add confirm/cancel buttons.

Details:

- When the confirm or cancel text argument is a blank string the button
  isn't shown, making it possible to only show a single button.
- The template is similar to UILayout::operator in that it returns the
  operator properties for the confirm action.
- MS-Windows alternate ordering of Confirm/Cancel is followed.

Needed to resolve #124098.

Ref !124139
2024-07-06 14:49:39 +10:00
Harley Acheson
c6411e61ae Fix: Handle Missing Font in ID List Previews
Handle missing font in the hover tooltip preview in the Data-block ID
selector. Add error handing both in IMB_font_preview itself and in the
current caller (to show message).

Pull Request: https://projects.blender.org/blender/blender/pulls/124111
2024-07-03 18:24:28 +02:00
Campbell Barton
ebe5860027 Merge branch 'blender-v4.2-release' 2024-07-02 13:34:38 +10:00
Guillermo Venegas
262c68512f Fix #123807: layout panels can't be collapsed on scaled regions
In `ui_popup_block_position` popup blocks are scaled with the owner
button region scale which wasn't being done for layout panel bounds.

This applies the scale applied to the popup block to layout panels
bodies and headers.

Also when calculating layout-panels headers and bodies the offset
`layout_panel_y_offset` is applied in place, this because this value
can also be affected by this scale.

This solves the original issue described in #122411 and reverts the
regression #123807.

Ref !123980
2024-07-02 13:32:18 +10:00
Julian Eisel
e4a77397d5 UI: Don't show tooltips when spawning popups until mouse is moved
Popups are often spawned with a button under the mouse cursor. For some
kinds of popups this would immediately invoke the tooltip timer, so
after a short moment tooltips would show. This can be annoying, since
the tooltip can overlap elements and the user's input was intended to
spawn a popup, not also spawn a tooltip. Even worse, the asset shelf
popup uses quick tooltips, so spawning that popup would almost instantly
also spawn the quick tooltip (see PR for demo video).

Instead, disable tooltips until the user moves the mouse. Menus
triggered from shortcuts (e.g. the Shift+A "Add" menu) would already
behave this way.

Pull Request: https://projects.blender.org/blender/blender/pulls/123363
2024-06-18 16:54:28 +02:00
Harley Acheson
1b6910c61c UI: Remove Tooltip Zoom - Never Resize
The UI Module has decided that popup tooltips should never be scaled
with local 2D region zooming. Instead they should only follow the
global resolution scale. This PR just removes tooltip aspect to do so.

Pull Request: https://projects.blender.org/blender/blender/pulls/122854
2024-06-10 20:58:10 +02:00
Harley Acheson
8937c0bcab UI: IDSearch Image Thumbnail Tooltips
Hover tooltips for the Data-block ID selector showing previews for
images, movies, and fonts and also showing extra details.

Pull Request: https://projects.blender.org/blender/blender/pulls/118945
2024-06-08 22:41:58 +02:00
Julian Eisel
e425faf696 Cleanup: Replace term "radial" with "pie menu" in UI code
Code was often referring to pie menus using the term "radial" which just
obfuscates that it relates to pie menus. Just call it what it is
directly.

Doesn't replace usages of the term for names that are not strictly tied
to pie menus. Also doesn't change instances of the term in the Python
API to keep compatibility, noted in #110461.

Pull Request: https://projects.blender.org/blender/blender/pulls/122825
2024-06-06 14:55:23 +02:00
Harley Acheson
707503bf73 Fix #122403: Show correct Hex values for managed colors
Adjusted calculation of hex values so that what is shown matches what
is displayed for material colors as well as for theme colors.

Pull Request: https://projects.blender.org/blender/blender/pulls/122409
2024-05-29 01:13:50 +02:00
Julian Eisel
717389887b Cleanup: Keep panel functions internal to UI code
These were added/exposed in aa03646a74.

There's no need to expose them in the public UI API, and they don't seem
like functions that should be used outside of the UI internals.
2024-05-24 20:29:37 +02:00
Julian Eisel
46f5079f11 Fix: Various crashes and issues with popups
Fixes #121902, #121865, #121905 and some other reports that were closed
as duplicates.

Reverts a change done as part of 7d80fde033.

Reverting this change breaks the yet-to-be-used asset shelf popup a bit,
in that refreshing it won't work propery anymore. Think that's fair
given that 1) the popup isn't in use yet, 2) its refreshing implementation
causes a bunch of high priority bugs, and 3) #122068 is in review with a
better solution to handle refreshing. Namely, it converts the popup to a
popover, which handles refreshing differently, and thus makes the change
being reverted here unnecessary anyway.
2024-05-23 13:22:39 +02:00
Campbell Barton
096eed9d7f Cleanup: spelling in comments 2024-05-20 10:23:54 +10:00
Julian Eisel
7d80fde033 UI: Popup version of the asset shelf
Developed as part of the brush assets project, see #106303. No user visible
changes at this point.

Makes it possible to display asset shelves as popups. These popup asset shelves
use static storage for their settings, mainly to remember the active catalog
and filter string, while keeping them separate from the permanent asset shelf
region. Further, the popup can be displayed in any editor, making asset
selectors possible to add anywhere in the UI. When an asset is chosen, an
operator passed to the asset shelf as bl_activate_operator is called, with an
asset weak-reference to refer to the activated asset stored in the operator
properties.

Adds UILayout.template_asset_shelf_popover() to insert asset shelf popup
buttons, taking an asset shelf idname and some normal UI parameters.
2024-05-16 00:11:47 +02:00
YimingWu
9b2130be56 Fix #120759: Prevent tooltip translation crash
Previously the `disabled_msg` is freed in a wrong code path, this patch
fixes that.

Pull Request: https://projects.blender.org/blender/blender/pulls/121657
2024-05-15 04:36:34 +02:00
Campbell Barton
a39e78ec29 Cleanup: declare uiPopupBlockHandle on assignment 2024-05-14 14:27:12 +10:00
Campbell Barton
9ed5ed1a2b Fix #121686: Regression: Context Menu has many operations disabled
Resolve own regression in [0] which caused operators poll functions
in context menus to fail because the menus own region was set
causing the button clicked on not to be detected as the active button.

Resolve by passing "can_refresh" as an argument to ui_popup_block_create
which only sets the "region_popup" context item for popups that can
refresh. This is done because previously "region_popup" was only ever
set for temporary regions that refreshed (details in code-comments).

[0]: 38d11482f5
2024-05-14 14:08:28 +10:00
Campbell Barton
01a78bf3e6 Cleanup: avoid matching names for public & static functions
While supported it's confusing to use the same name for a public
function and it's private implementation.
2024-05-14 13:27:18 +10:00
Harley Acheson
41bbbd2359 UI: Color Tooltips
Hovering over a color button shows a tooltip that includes the color
values and a large sample.

Pull Request: https://projects.blender.org/blender/blender/pulls/117815
2024-05-13 23:48:29 +02:00
Campbell Barton
7ae77e61cd Cleanup: assert that popup regions are temporary 2024-05-10 11:31:31 +10:00
Campbell Barton
bc5b77b390 Cleanup: rename Context::wm::menu to popup_region
The term "menu" was misleading as this is used for all temporary popups.
2024-05-10 11:27:03 +10:00
Campbell Barton
38d11482f5 UI: set the context's menu on creation
Set the context menu when first creating the popup,
not only when refreshing it.

Previously `Context::wm::menu` was set when a popups draw function ran
after being tagged RGN_REFRESH_UI, however the first time the draw
function ran this would be null. Ensure this is set in both cases
so logic that requires accessing the popup region can rely on it
being set.

Needed so the splash region is always accessible to implement #120612.
2024-05-09 12:03:21 +10:00
Campbell Barton
e64d067c78 Docs: document why the eventstate is cleared while refreshing a popup
Also correct a comments grammar.
2024-05-08 20:44:36 +10:00
Harley Acheson
44606c5e4d UI: Status Bar While Menus Are Open
While menus are open display a nicer status in the Status Bar, whether
spacebar search or type to search.

Pull Request: https://projects.blender.org/blender/blender/pulls/121502
2024-05-07 00:19:01 +02:00
Campbell Barton
bb172dae61 Cleanup: use const variables & arguments 2024-05-06 09:20:03 +10:00