On earlier versions there is no proper multi-monitor support, so we leave the
choice still. But for 10.9 this just interacts better with other elements like
spaces and the dock.
With edits by Campbell, thanks!
Looks like in some cases (driver dependent?), `XDeviceMotionEvent` get generated with only part of expected data
(e.g. only x coordinate, only pressure, etc.), data which did not change since last event being NULL.
We know which data to actually handle with `XDeviceMotionEvent.first_axis` and `XDeviceMotionEvent.axes_count` values.
Reviewed by: campbellbarton
Differential Revision: https://developer.blender.org/D208
The console window is hidden by default, but we need to avoid this when
starting from the command prompt, because it would hide the window you just
typed the command in.
Previously it would check if Blender was started from "explorer.exe" to
determine that, but that wasn't working for application launchers like
Appetizer or Colibri. Instead we now check if the process ID is the same as
the process ID of the console window, which appears to work reliably.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D122
This means that if you have WITH_BF_QUICKTIME or WITH_CODEC_QUICKTIME enabled,
it will always use QTKit.
The old backend was only used on 32 bit OS X builds, now 32 and 64 bit builds will
give consistent input/output. On Windows or Linux quicktime isn't being used.
and restore of window setups with multiple monitors, but they are also causing
regressions, in particular issues with Blender overlapping the taskbar and the
user preferences opening wrong. We decided to revert to the old behavior for
the release.
See bug #36707 for the full explanation.
Issue was caused by bug in mesa #54080 which makes
glXQueryDrawable fail with GLXBadDrawable for any
request with direct context.
Worked around by temporary overriding X error handling
when getting old interval value and disablingintervals
extension if this query fails.
Also added check for glXSwapIntervalEXT which is
apparently NULL here with GLX_EXT_swap_control=1.
There is some sort of problem with the SSE2 code path, but I couldn't find
the cause, maybe a compiler bug due to the large amount of inlining? For
now I've disabled SSE2 optimizatons in 32 bit GCC builds.
Reported by holy enigma
The previous commit in this area removed bounding box checks, because
they were done against primary monitor. Now do bound checks against
the entire desktop, or rather, the virtual screen. This is the bounding
rectangle of all the monitors.
This should ensure windows are always created within the confines of this
area.
On Windows the system window will be sized an positioned such that Blender screen area lower left
corner is at the requested location, and with dimension as requested.
Thanks to Alexander N. for reporting and Brecht van Lommel for input.
This should be (and is) done by the caller instead (windowmanager)
to ensure new windows fit properly on the desktop. Saving
stretched layouts and layouts with window over display
boundaries now becomes possible on Windows too.
The reason of this is because PATH_MAX is not guaranteed
to be defined on all platforms and Hurd doesn't define it.
So either we need to support arbitrary long file path or
we need to define own maximum path length.
The rule here would be:
- If it's not big trouble to support arbitrary long paths
(i.e. in ghost by using std::string instead of char*)
then arbitrary long path shall be implemented.
- For other cases to use PATH_MAX please include BLI_fileops.h
which takes care of making sure PATH_MAX is defined.
Additional change: get rid of own changes made yesterday
which were supposed to make storage.c work fine in cases
PATH_MAX is not define, but on the second though it lead
to unneeded complication of the code.
Thanks Campbell for review!
- Removed grid-snapping for area coordinates on scaling windows.
That caused the areas to shrink or expand, and eventually corrupt screen layouts.
- Added simple but efficient life resize for OSX. I need to know why this is so much
code for Windows... I suggest Windows to just copy same method; dispatch the queue,
and just let the event system draw.
* Also do pressure interpolation for brush size and spacing.
* Do smoothing of pressure when smooth stroke and sample average is enabled.
* Revert the OS X specific pressure change to pressure ^ 2.5, for low pressure
values like 0.05 it makes the pressure 100x lower, which is problematic. If
we need to adjust the pressure curve it should be done for all platforms.
Still weak:
* Pressure of first touch on tablet is difficult to control, usually it's low
which makes the stroke start out small or soft, but other times not. Finer
event capturing at ghost level would help, along with pressure changes without
mouse movement, but this may also need different paint stroke logic.
* Brush radius is rounded to integers, this gives noticeable stepping.
* Brush falloff is not antialiased, gives noticeable aliasing for small brush
sizes which was always a problem, but is more common with size pressure control.
Another issue with the recent Ghost changes here. For some reason key up events
are not coming through when the command key is pressed. I can't figure out why,
for now just always handle them, still fixes the original bug.
interact better with system shortcuts.
This is a special shortcut for switching between views and does not get
delivered directly to our view when we pass it through the application key
event handling path. We only have a single OpenGL view, so there's no need to
pass it on to the application, instead just interpret it directly.
insert text in the text editor and do the associated operation like minimizing the
window or switching windows.
The code was always doing both without trying to ensure only one is done. Now we
integrate a bit better with the event handling and pass the event to NSApp, which
then decides to handle the event itself or pass it on to the window, from where
we then send it back to be handled.
fullscreen option. It was possible to enable both at the same time which got
you stuck in a state where it was impossible to exit fullscreen. Now I've made
them mutually exlusive, only one can be enabled at the same time.
Note the reason we need to support both is because the new Lion fullscreen does
not work with multiple monitors, it will just give black screens on the other
monitors. This is a limitation of OS X, you can find many complaints about this
online.
Custom implementation for resizing (GHOST_SizerWin32)
Some things still don't work:
* esc cancel
* max windows size
* aero (sizing) snap on win7
hbrBackground = 0 to disable clear screen.
Thanks to dfelinto for help in finding of root cause.
Mac OS X full screen: the old option to go full screen now didn't hide the
dock/topbar anymore. Also made it use dock auto-hide now, not permanent hide.
Blender now supports the 10.7+ "Full screen" mode, which pushes a window to a permanent
other "screen", with animated zoom and sliding.
Available via the icon in window header (right), Apple+F, or "Window" menu in top.
Works much nicer than Blender's own "full screen" option.
Todo: the zoom effect is still draws a bit ugly, because Blender doesn't have "live resize"
yet.
- without python builds without warnings.
- replace MAXFLOAT -> FLT_MAX in some areas, MAXFLOAT overflows (lager then float range).
- add cmake option WITH_GCC_MUDFLAP to enable libmudflap use.
changing the screen resolution wasn't still allowed for larger virtual desktops.
added an exclusive option to ghost so the fullscreen window is ignored by the window manager and we get all events. (common practice for games on X11).
This is and old patch (June, 2009). The reason it never made into trunk it's that we (me at least) thought that
it should be optional, as a ui or command-line option.
However, it seems that OSX always have the OpenGL context with alpha enabled. So I think it's consistent to
have the other OSs to follow.
The main usage of this is the BGE (or more specifically people using BGE for TV broadcasting) but I think
pydevs can have their share of fun with it in Blender as well.
which makes it impossible to toggle from fullscreen to windowed mode
when startup.blend is saved in fullscreen mode.
Reshuffled checks a bit, which is actually makes sense, will investigate
which change caused regression since 2.65a tomorrow.
Now the active monitor size is used on startup.
Currently the cursor position is checked for intersection with the monitor bounds to find the active screen.
This returns the desktop size, not just the size of the active monitor, useful since this constrains the mouse and we dont have to detect the active monitor (which isn't so straightforward with xlib).
carbon/cocoa are TODO, they still use getMainDisplayDimensions().
This didnt work well with making blender areas into windows.
Real fix: check such minimums based on what's in the window itself... or just
make scaling work flawless.
When you open a Blender window larger than a screen, Macs clip it to match the height,
but they allow the width to be more.
Problem is that this clipping happens after all window opening code. That causes
check for HiDPI mode to fail.
Now it checks it again on event GHOST_kEventWindowUpdate, which is only on startup.
Notices this while using continuous-grab, since this is disabled when the tablet is being used.
Quite often I would use the tablet then drag a button with the mouse but blender would still have the tablet enabled.
This error would cause other parts of blender to behave incorrectly too since wmEvents would have wmTabletData set, operators check for this in some cases.
The problem was blender didn't reliably get ProximityOut events, eg:
moving the cursor outside the window with the tablet, then back over the window with the mouse -
meant blender didn't get a 'ProximityOut' event and would keep the active stylus value set.
For now, when the processing events and the active stylus is set, run a check that the tablet is still in proximity.
Touch input events map nicely to trackpad input now.
However, I noticed the event values are a factor 10 scaled larger compared
to other touch delta's. Makes using touch input on the tablet not so nice.
I found a hack to detect Wacom events, but if it works for more devices?
Anyway - for me the Wacom works perfectly smooth for view manipulations now.
Issue was caused by opening the same device id twice and closing one of
descriptors on closing window. This used to close device used by other
windows.
Now moved all device-specific code to SystemX11, so opening and closing
happens only once.
OK - so you have this nice crisp screen, and still you want to add extra
monitors to the laptop! That means Blender should switch back and forth to HiDPI
modes, when you move a window to another monitor.
This code makes the pixelsize scale factor a window property, and handles
an event when a window moves to another monitor. It then changes the
native pixelsize nicely and refreshes entire UI.
You can also have one Blender window on high, and other on low resolution.
Stretching a Blender window from 1 monitor to the other works too, but that
is Apple magic handling it.
That change made all scrollwheel events be handled as if it was a swipe gesture.
Old style mouse wheel didn't work anymore.
This version should work for everyone, but we need more mac testers :)
scrolling and inertia.
Now Blender uses this - if you have 10.7. Otherwise it just falls back on the
old code.
Try it, makes a huge difference :)
Next todo: how to configure this well, so you can have trackpad (or mighty mouse)
zoom as default in 3d views.
Now:
- code is wrapped for OS X releases (10.6 and 10.7)
- It now detects scrollwheel (old mouse) and gesture strokes (mighty mouse or trackpad).
If you have 10.6, things will work as for release.
Next todo for tomorrow: make trackpad work actually smooth and not with steps.
Will also try to figure out the device type, to handle mighty mouse differently.
Blender didn't detect properly whether event came from a mouse-wheel or
from a trackpad in OS X.
Now you can both, and both are handled independently.
Removed back hack from 2 years ago - which disabled mouse wheel for laptops.
remove it, but still stick around listed in the Window menu.
Fixed by removing the setReleasedWhenClosed:NO hack and using the proper cocoa
window delegate mechanism.
Mac OS X trackpad and 'mighty mouse' fix.
An old commit from Damien in 2010 tried to make mighty mouse touches work as if
this is a scrollwheel. The error in that code was that the "kinetic scrolling"
feature failed. When releasing your fingers, the events passed on to Blender
then switched from "trackpad pan" to "mousewheel zoom".
This commit makes trackpads and mighty mouse behave identical. Only difference
is that trackpad panning needs 2 fingers, mighty mouse only one.
Note that trackpad and mighty mouse 3d zoom works with holding ctrl!
All works nice with this kinetic feature now. Fun :)
(Error in 2.65 release too)
Mac OS X: on closing Blender, it 'flashed', which appeared to be a white window opening
and closing quickly. Caused by code trying to send focus to another opened window, and
accidentally focusing the closed one - causing it to reopen.
Nice formatted version (pictures soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability
Short list of main changes:
- Transparent region option (over main region), added code to blend in/out such panels.
- Min size window now 640 x 480
- Fixed DPI for ui - lots of cleanup and changes everywhere. Icon image need correct size still, layer-in-use icon needs remake.
- Macbook retina support, use command line --no-native-pixels to disable it
- Timeline Marker label was drawing wrong
- Trackpad and magic mouse: supports zoom (hold ctrl)
- Fix for splash position: removed ghost function and made window size update after creation immediate
- Fast undo buffer save now adds UI as well. Could be checked for regular file save even...
Quit.blend and temp file saving use this now.
- Dixed filename in window on reading quit.blend or temp saves, and they now add a warning in window title: "(Recovered)"
- New Userpref option "Keep Session" - this always saves quit.blend, and loads on start.
This allows keeping UI and data without actual saves, until you actually save.
When you load startup.blend and quit, it recognises the quit.blend as a startup (no file name in header)
- Added 3D view copy/paste buffers (selected objects). Shortcuts ctrl-c, ctrl-v (OSX, cmd-c, cmd-v).
Coded partial file saving for it. Could be used for other purposes. Todo: use OS clipboards.
- User preferences (themes, keymaps, user settings) now can be saved as a separate file.
Old option is called "Save Startup File" the new one "Save User Settings".
To visualise this difference, the 'save startup file' button has been removed from user preferences window. That option is available as CTRL+U and in File menu still.
- OSX: fixed bug that stopped giving mouse events outside window.
This also fixes "Continuous Grab" for OSX. (error since 2009)
This doesn't work nice currently and there's no simple workaround for this,
it'll require lots of statistics about cards and some further investigation
on supported combination of draw methods and multisamples supports.
For the release better be more stable and do not deliver dangerous option.
drop onto the application.
It seems something changed in the operating which makes our method of releasing
windows crash. Previously we called [m_window release], but on 10.8 this does
not remove the window from [NSApp orderedWindows] and perhaps other places,
leading to crashes. So instead we set setReleasedWhenClosed back to YES right
before closing, which will then do the cleanup for us.
Windows systems: text editor, text object, doesn't allow to input the standard
set of ALT+key characters (the ones coming from the OS).
- Reverted fix january 2012 - that meant to use text object ALT+keys
- Removed old (90ies) feature for hardcoded special characters in Text object.
(OS delivers this now)
Will wait for confirmation by windows compiler :)
Add an optional ghost argument to set the new mouse location when un-grabbing. - without this the mouse would flicker at the old location before moving to the new location - when using the color picker for eg.
from Shinsuke Irie (irie)
(from the tracker submission)
- allow us to input non-latin languages such as Japanese/Chinese
- recover XIM connection and its input contexts when XIM server restarted
Currently it supports only "root window" style input, while most people (and I) want "over the spot" or "on the spot" style one. Probably the implementation of "over the spot" or "on the spot" style becomes much complicated, because XIM server requires the coordinates of current cursor location relative to the screen in order to show the candidate window in appropriate position.