Commit Graph

138 Commits

Author SHA1 Message Date
2a7eb7aadf 2.5
Crash fix on file read: one event-free too many :)
2009-01-31 15:09:33 +00:00
94d31640de 2.5
Fake commit, but for history I have to write the log!

Fixed CTRL+Q quit-blender. It was using ancient code
still, and since I always use APPLE+Q I never noticed :)
2009-01-31 13:33:23 +00:00
86a2a0f694 2.5
Edit Mesh:

- Added back "Edge Shortest Path select"
  It now also does regular selection, more fun! 
  It's mapped to CTRL+click now, and makes or clears selections 
  between current and previously activated edge.
  Seam/Sharp/etc marking is a toolsetting mode still. These
  options cannot become properties easily, because the tool
  uses the properties of selected edge to clear...

- Removed a whole bunch of G.f flags, related to mesh drawing.
  It's all now local in me->drawflags. Here's the list of
  removed old globals:

G_DRAWEDGES
G_DRAWFACES
G_DRAWNORMALS
G_DRAW_VNORMALS

G_ALLEDGES
G_HIDDENEDGES

G_DRAWCREASES
G_DRAWSEAMS
G_DRAWSHARP
G_DRAWBWEIGHTS

G_DRAW_EDGELEN
G_DRAW_FACEAREA
G_DRAW_EDGEANG
2009-01-31 13:30:56 +00:00
480be71514 2.5
- Edit mesh: Add ctrl+click add vertex or extrude.
  I've made it not move the 3d cursor in that case.

Also found out tweak events conflicted with existing
keymap definitions; on tweak failure (= no mousemove) 
it now passes on the mouse event as 'mouse down' for 
the remaining keymaps to check.
These then actually respond to mouse-up instead of down...

The location in the keymaps where tweaks get generated
remains important. Examples:

1 - 'select' mouse-handler, operator return pass-through
2 - tweak handler checks, and makes tweak event
3 - grabber responds to tweak event

1 - ctrl+mouse tweak handler checks, makes tweak event,
    or passes event on
2 - if tweak event, it runs lasso
3 - else when passed on, ctrl+click extrude happens

In the first case, select works on mouse-down, immediate.
In the second case, extrude happens on mouse-release, even
though the keymap defined mouse-press.

This will make designing nice balanced keymaps still not
simple; especially because you can't tell operators to
pass on the key... although we can add the convention that
select-mouse operators always pass on to enable tweaks.

Still a good reason to wait with custom keymaps
when this is fully settled!
2009-01-30 18:18:41 +00:00
8036342ea8 2.5: UI & Menus
* Cleaned up UI_interface.h a bit, and added some comments to
  organize things a bit and indicate what should be used when.

* uiMenu* functions can now be used to create menus for headers
  too, this is done with a uiDefMenuBut, which takes a pointer
  to a uiMenuCreateFunc, that will then call uiMenu* functions.

* Renamed uiMenuBegin/End to uiPupMenuBegin/End, as these are
  specific to making popup menus. Will convert the other
  conformation popup menu functions to use this too so we can
  remove some code.

* Extended uiMenu functions, now there is is also:
  BooleanO, FloatO, BooleanR, EnumR, LevelEnumR, Separator.

* Converted image window headers to use uiMenu functions, simplifies
  menu code further here. Did not remove the uiDefMenu functions as
  they are used in sequencer/view3d in some places now (will fix).

* Also tried to simplify and fix bounds computation a bit better
  for popup menus. It tried to find out in advance what the size
  of the menu was but this is difficult with keymap strings in
  there, now uiPopupBoundsBlock can figure this out afterwards and
  ensure the popup is within the window bounds. Will convert some
  other functions to use this too.
2009-01-30 12:18:08 +00:00
8006134a9c 2.5
Made 'select-tweak-grab' work in 3d window, fcurve and nodes.
For nodes it works with both left/right, the others follow
user preset for select.

Tweak is a WM event, which also follows user preset for 
tablet-style tweaks (release = apply).

You enable tweak events with an operator WM_OT_tweak_gesture.
Keymap entries can assign to left/middle/right button or to
action/select button tweaks.
2009-01-28 15:39:39 +00:00
14ad6ae4dc 2.5
Bugfix: having multiple windows didnt read events anymore for other
windows. Caused by too much security escapes in event handlers.
2009-01-26 15:22:10 +00:00
4531e8e6a7 2.5
File reading of 2.50 files fixed.
- it now exits nicely from queues without using free'd memory
  (checks CTX_wm_window(C) to be NULL)
- code that matched current (ghost) window with new situation
  lacked setting a pointer good.

Overall cleaned some parts too; like context clears now all
wm related pointers when you set a new wm, window or area.
2009-01-23 17:42:36 +00:00
66437a62a7 2.5
Font object + editing back.

Was quite some work due to a myriad of globals all over!
Works nicely 100% local now.

To enable a single textedit operator, I've added a new
keymap entry KM_TEXTEDIT, which gives all keyboard events
to the handler. Also had to add a new keymap-add function
to force a keymap handler in beginning of region handlers.
In future this can be used to prioritize handlers.

Also: split off the arrow keys (frame change) to a separate
region level handler. Can be set with default flag in
regiontype->keymapflag ED_KEYMAP_FRAMES
2009-01-23 14:43:25 +00:00
69310fb107 2.5: WM Compositing
* Triple Buffer is now more complete:
  - Proper handling of window resize, duplicate, etc.
  - It now uses 3x3 textures (or less) if the power of two sizes
    do not match well. That still has a worst case wast of 23.4%,
    but better than 300%.
  - It can also use the ARB/NV/EXT_texture_rectangle extension
    now, which may be supported on hardware that does not support
    ARB_texture_non_power_of_two.
  - Gesture, menu and brushe redraws now require no redraws at all
    from the area regions. So even on a high poly scene just moving
    the paint cursor or opening a menu should be fast.

* Testing can be done by setting the "Window Draw Method" in the
  User Preferences in the outliner. "Overlap" is still default,
  since "Triple Buffer" has not been tested on computers other than
  mine, would like to avoid crashing Blender on startup in case
  there is a common bug, but it's ready for testing now.

  - For reference "Full" draws the full window each time.
  - "Triple Buffer" should work for both swap copy and swap exchange
    systems, the latter still need the -E command line option for
    "Overlap".
  - Resizing and going fullscreen still gives flicker here but no
    more than "Full" drawing.

* Partial Redraw was added. ED_region_tag_redraw_partial takes a
  rect in window coordinates to define a subarea of the region.
  On region draw it will then set glScissor to a smaller area, and
  ar->drawrct will always be set to either the partial or full
  window rect. The latter can then be used for clipping in the 3D
  view or clipping interface drawing. Neither is implemented yet.
2009-01-23 03:52:52 +00:00
9cc59fb0c3 2.5
Added WM Jobs manager
- WM can manage threaded jobs for you; just provide a couple
  of components to get it work:
  - customdata, free callback for it
  - timer step, notifier code
  - start callback, update callback
- Once started, each job runs an own timer, and will for
  every time step check necessary updates, or close the
  job when ready. 
- No drawing happens in jobs, that's for notifiers!
- Every job stores an owner pointer, and based on this owner
  it will prevent multiple jobs to enter the stack. 
  Instead it will re-use a running job, signal it to stop
  and allow caller to re-initialize it even.
- Check new wm_jobs.c for more explanation. Jobs API is still
  under construction. 
  Fun: BLI_addtail(&wm->jobs, steve); :)

Put Node shader previews back using wmJobs
- Preview calculating is now fully threaded (1 thread still)
- Thanks to new event system + notifiers, you can see 
  previews update even while dragging sliders!
- Currently it only starts when you change a node setting.

Warning: the thread render shares Node data, so don't delete
nodes while it renders! This topic is on the todo to make safe.

Also:
- bug in region initialize (do_versions) showed channel list in
  node editor wrong.
- flagged the channel list 'hidden' now, it was really in the
  way! This is for later to work on anyway. 
- recoded Render API callbacks so it gets handlers passed on, 
  no globals to use anymore, remember?
- previewrender code gets now so much nicer! Will remove a lot
  of stuff from code soon.
2009-01-22 14:59:49 +00:00
8d4a9081cc 2.5: WIP commit for WM compositing.
* Drawing code from wm_event_system.c split into separate wm_draw.c file.

Now there's 3 different draw methods implemented, not sure what survives
or will be added but is useful for debugging.

* Draw All: redraws everything each time, for reference.
* Draw Overlap All: what the code did before this commit, only draw
  regions marked for redraw, and anything that overlaps them.
* Triple Buffer: copies/retores all area regions into a texture, and
  blits that before drawing. Menus, brushes, gestures, etc are redrawn
  always on top of that.

Currently "Draw Overlap All" is set hardcoded to be used still. Triple
Buffer code is not complete, it doesn't handle window resize yet. Cards
that don't support non power of two textures can need quite large
textures as well, this could be split into multiple smaller ones.
2009-01-20 21:55:48 +00:00
97692a3bf5 Changes to functions from blender/windowmanager/intern/wm_event_system.c
Python operator api was using WM_operator_name_call() which was confusing things too much.
Added WM_operator_call_py() which ended up being a very small function and split out operator creation into wm_operator_create()

Python operator now runs the poll() function and raises an error if it fails.

Eventually there should be error messages for poll that python can use to give the exact reason for failing (eg - library linked data, no active object...)
2009-01-18 10:46:26 +00:00
711d04a499 Made modal operators print their operator string after executing
(when in debug "-d" mode only)

copy & paste duplicate and transform operations can now be copied from user input and pasted into ./test.py and run with the Pkey (fixed some minor bugs preventing this)

Would be nice if the "mode" setting used a proper RNA Enum rather then an int. 

# example, duplicate and transform
bpyoperator.OBJECT_OT_add_duplicate(mode=1)
bpyoperator.TFM_OT_transform(mode=1, options=0, values=(-1.23989, 0.570745, 0, 0), constraint_orientation=0, constraint_mode=0, constraint_matrix=(0, 0, 0, 0, 0, 0, 0, 0, 0))
2009-01-18 07:35:44 +00:00
a6edbba8ec 2.5
- Added shift+d duplicate for object and editmode mesh.
  Note it uses WM_operator_name_call(), which is fine now,
  but in future might put again 2 undo's and operators on
  the stack. 
  Will have to spend some time on how Macros will work!

- added itterator CTX_selected_editable_objects()
  (named it first "edible" but that was too funny!)
  Also cleaned object_edit.c to use this correctly.

- added CTX_wm_view3d(), especially for hybrid tools
  that *can* use view3d, but don't have to.
  
- moved debug -d print for operators to the real invoke call
2009-01-17 18:35:33 +00:00
87d5d0aa10 2.5
Testing commit; this puts back support for swap-exchange graphics
cards, which I had hoped to have faded out... but it appears it
still does it for intel and some atis.

This only swap-exchanges properly for areas/regions, not for
menus or the 'action zone triange'. Let's see if it works!

You enable it with starting with commandline option -E
2009-01-11 18:35:16 +00:00
c7fa55eebd 2.5
Vertex Paint back!

Added WM level "paint cursor" system, which manages a custom painting
cursor for tools or modes. 

- Activate it with WM_paint_cursor_activate(). That function wants two
  callbacks, a poll(C) to check whether there's a cursor in given context
  and ARegion, and a draw(C, x, y) which gets called when appropriate.
- While paintcursor is active, the WM handles necessary redrawing events
  for all regions, also to nicely clear the cursor on region exit.
- WM_paint_cursor_activate returns a handle, which you have to use to
  end the paint cursor. This handle also means you can register as many
  custom cursors as you want.

At the moment, vertex paint mode registers only a mousemove handler,
all other events are still normally handled. This is stuff for the 
future todo.
2009-01-09 13:55:45 +00:00
b5fcf3daff RNA: don't pass RNA type in RNA_id_pointer_create, can be found automatically. 2009-01-08 15:33:34 +00:00
745d895a85 2.5
Bugfix: the area level Refresh callback was not getting Context set,
it was NULLed still. This fix allows bone selecting and seeing updates 
in the action editor. Not other way around though, will investigate.
2009-01-06 10:30:34 +00:00
df6caaed1e 2.5
Small cleanup in region-based cursor handling. 
- callback was in spacetype, now in regiontype
- made screen listener catch ND_MODE notifier and 
  call the active region cursor callback, if it's there.
2009-01-04 19:17:34 +00:00
3aeb63cad2 2.5
WM: added area-listener, which can be used to tag refreshes for
either the drawing call, or use the new ED_area_tag_refresh() 
function which will automatically call, after all notifiers
were handled, an the spacetype->refresh() you provided.

Added for Joshua, after reviewing Action/Dopesheet requirements.

Joshua: I've made two dummy functions in space_action.c:
- action_listener()
- action_refresh()

Wich now does a printf on activating a new object.
2009-01-04 17:45:54 +00:00
3f58b37683 2.5: fix "repeat last", and display of operator properties
in rna outliner.
2009-01-03 20:03:39 +00:00
52214a5e88 * renamed some of the RNA sound identifiers
* was missing a MEM_freeN in previous commit
2009-01-02 09:35:33 +00:00
5d23eaa8f4 python support for reporting with operators.
* errors in python called operators are raised as errors
* Python defined operators errors are reported as errors (not full traceback yet)
* added BKE_reports_string, same as BKE_reports_print but it returns a string rather then printing it.
* WM_operator_name_call optionally takes an initialized report struct
2009-01-02 07:54:38 +00:00
112385660a RNA
* Object has some more properties wrapped, mostly game related.
* Scene frame changes now send a notifier.
* Added functions to create/free operator properties for calling
  operators. This also simplifies some duplicated code that did
  this. Ideally though this kind of thing should use the properties
  pointer provided by buttons and keymap items. Example code:

PointerRNA ptr;

WM_operator_properties_create(&ptr, "SOME_OT_name");
RNA_int_set(&ptr, "value", 42);
WM_operator_name_call(C, "SOME_OT_name", WM_OP_EXEC_DEFAULT, &ptr);
WM_operator_properties_free(&ptr);
2009-01-01 20:44:40 +00:00
e2e282989e 2.5
- Put back vertex/edge/face select 
- Mode menu allows going in/out editmode

- Tested some tweak event stuff in WM, made tweak event follow
  user preset for 'action' or 'select' mouse.
  (Wanted to try this for transform, but better get advise from
  Martin first :)
2009-01-01 18:05:12 +00:00
a1961436f5 2.5
- Made scrollwheel behave uniform for zooming. It uses the UserDef
  to map what's in our out. Use keymap entries WHEELINMOUSE and
  WHEELOUTMOUSE to trigger this. Also removed the feature to store
  in event->val the direction, it was conflicting with KM_ANY.

- Added more default poll callbacks, use for generic ops things
  like ED_operator_object_active.
2009-01-01 14:57:04 +00:00
e9a3b4f85d 2.5
- Edit mode Mesh undo/redo back
  (undo for editmodes needed recode, todo for curve/lattice/etc)
- Added border select for edit mesh
- Added Akey (de)select all for edit mesh
- Added notifiers for mode changes.

This is also the first trial to dynamically add/remove
keymap handlers, based on modes. For that reason the Object
keymap was split in 2, modal and non-modal. On TABkey, the
view3d listener removes and adds maps.

The view3d keymap still handles generic mouse/border selection.
Internally it will verify modes.

The modes are not  re-implemented still... have to move this
to scene context.
2009-01-01 13:15:35 +00:00
25fac7b001 2.5
Editmesh code cleaned and compiling/linking. A whopping
20k lines back! :)
Not that it does stuff... editmode in/out has to be done,
and loads of operators. Also linking/exporting editmesh
calls has to be reviewed.

Also: added a blender_test_break() mechanism in BKE.
2008-12-30 13:16:14 +00:00
0a8a00cd10 2.5: Error reporting
* Added a report list to operator, to which they can report errors and
  warnings. When the operator ends, it will display them with a popup. For
  python these should become exceptions when calling operators.
* Added a function to make a popup menu from a report list.
* Also added a utility function to prepend a string before the reports to
  indicate what they relates to. Also made the report functions used
  BLI_dynstr to simplify the code.
* Made file reading and writing report errors to the user again using this
  system, also replacing the left over uncommented bad level error() calls.
2008-12-29 13:38:08 +00:00
b97ee36f8d 2.5
Anim playback part 1 (needs more test, will do after commit)

- added the update_for_new_frame() back
- proper evaluation of time change notifier in WM level
- fixed redraw flushes for menus while animation plays.
2008-12-27 17:43:05 +00:00
b7c7057f3e * converting operator props to strings was using a float as in int.
* PyOperators were always calling the python functions with default args.
* Made operator prints only happen when G.f & G_DEBUG is enabled.
2008-12-27 16:35:15 +00:00
f0f451fc16 2.5
Notifier system upgrade, based on Brecht's doc.
Implementation notes:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers#Implementation

In short: let's try to strictly communicate in a notifier what happened.
The listeners then can act themselves. It also means that a frame-changed
notifier doesn't send out redraws, the editors themselves can decide.
2008-12-27 16:09:56 +00:00
da078552d4 2.5
- Added 3d cursor operator (no exec, waiting for vector property!)
- Added default editor callbacks, for the poll() function.

Example:

   ot->poll= ED_operator_view3d_active;

I'll add later more, per module, such as OBJECT_active, which
can be called without WM active
2008-12-26 19:07:31 +00:00
6086c31fd3 2.5
Brought back 'smooth view'. Took some hours to untangle it all,
code was spread all over, instead of localized in 1 call. Tsk!
Still not perfect, but at least more in control. For the hackers;
check void smooth_view() in view3d_view.c, here all 3d view
stuff should be handled, so it can optionally use animating.

For the users: 'smooth view' now plays at a maximum of 30 hz,
and doesn't block anymore. So even slow animated views remain
responsive if you press many numpad keys.
2008-12-26 18:15:46 +00:00
63f84cf26d crash when running operators with no window 2008-12-26 13:50:32 +00:00
d6704568f8 2.5
Operator calls: extended WM_operator_name_call() with options whether to
call the exec() (operate immediate) or invoke() (check user input) entry.

This will allow python to use it more efficiently, but also solves the
dreaded pulldown case that showed another menu for confirmation.

New names to learn: :)
WM_OP_EXEC_DEFAULT
WM_OP_INVOKE_DEFAULT

on todo still: allow hotkey definitions to do same.
2008-12-26 12:21:06 +00:00
c0475a7859 2.5: fix/workaround for crashes with open recent popup, due
to usage of free'd area/region.
2008-12-26 11:32:20 +00:00
0054e6d354 * added RNA_property_as_string to rna_access.c - can print most types except for pointers and collections.
* WM_operator_pystring to print the python func+args for an operator
* call WM_operator_print(op) in wm_operator_invoke(), simple echo mode should be moved later.
2008-12-26 03:56:52 +00:00
3c612bc0e2 2.5
Fix: popup menus were not freeing operators.
Made a new Popup menu call for this case:

uiPupmenuOperator(C, maxrow, op, propname, menustr);

It will set enum "propname" to the menu item and call operator,
register it optionally and free it. Use it in "invoke" calls.

Next: automatic menu generating for enum properties!
2008-12-24 14:52:17 +00:00
9e38e6aeb0 2.5
Better implementation of own window timers, not using ghost.
That makes blender's WM nice in control, and gives callers
of timers the opportunitie to evaluate time passed since
previous step. This system also only generates one timer 
event per main loop (events - handlers - notifiers - draw)

Small fix: allow keymap modifier to give KM_ANY to ignore
modifier keys, this to have TIMER keymap work.
2008-12-22 12:57:53 +00:00
f1e0cf36f8 2.5
Animated screen! (unfinished, now only draws, no animation code yet).
Fun though to see it all work. :)

NOTE: Mac ghost has timer bug, the GHOST_ProcessEvents() doesnt wake
up for timers.

NOTE2: Added while loop in wm_window_process_events() to force Ghost
giving all events to Blender. Timers otherwise don't accumulate...
might be needed to fix in ghost too.

I tend to think to code own timer, this ghost stuff is totally different
per platform.
2008-12-21 19:58:25 +00:00
1550573360 2.5
- View3D: selecting added. Note it nicely respects user preset, by using
  the keymap define SELECTMOUSE.
- Added missing initialize of default vector font, so text draws.
2008-12-20 15:42:48 +00:00
08db8198c4 2.5:
- fix crash opening submenus
- fix disappearing main menu when going into submenu
2008-12-20 14:15:58 +00:00
93cc4629e3 2.5: fix for crashes due to access to free'd memory in joining areas,
ripping areas and duplicating windows.
2008-12-18 19:41:36 +00:00
e8e903cd53 2.5
- WM subwindows now get freed on every ED_region_exit(). Was not
  a leak, but it's cleaner this way (and saves some kilobytes!).
- fixed debug print for operators (on blender -d) to print correct
  subwindow id.
2008-12-18 14:53:39 +00:00
ecc4e55b66 2.5
Context API

This adds the context API as described here. The main practical change
now is that C is not longer directly accessible but has to be accessed
through accessor functions. This basically adds the implementation of
the API and adaption of existing code with some minor changes. The next
task of course is to actually use this design to cleanup of bad level
calls and global access, in blenkernel, blenloader.

http://wiki.blender.org/index.php/BlenderDev/Blender2.5/Context

Error, Warning and Debug Info Reporting

This adds the error reporting API as described here. It should help
clean up error() calls in non-ui code, but eventually can become used
for gathering messages for a console window, and throwing exceptions
in python scripts when an error happens executing something.

http://wiki.blender.org/index.php/BlenderDev/Blender2.5/Reports
2008-12-18 02:56:48 +00:00
d6b677ba42 2.5
Small commit, too much fun to not do separately:

- removed notifier restriction to go only to own window, so multiwindow
  setups redraw correctly. (when other windows show other scenes we have
  to handle still).
- fixed cursor type outside of window (got stuck to area-move cursor).
2008-12-17 15:51:32 +00:00
c1379f6613 UI:
* Added support for defining properties for operator buttons, with
  uiButGetOperatorPtrRNA. Needed to cleanup a hack that was there
  for operator properties in RNA, now a separate OperatorProperties
  type is used for storing operator properties, instead of being part
  of the Operator type itself.
* Allow selecting menu items with mouse release instead of press again.
* Fix some cases with hanging tooltips in the UI.
2008-12-16 20:03:28 +00:00
962870b235 2.5
More notifier and redraw cleanup

- notifiers are not filtered anymore, apart from window/screen notifiers,
  they get to all regions.
- fixed drawing of 'action zones' in areas.
- added support for basic multilayer draw, like for action zones now,
  and future other area decorations (tabs, region handlers)
  check: ED_area_overdraw_flush()
         ED_area_overdraw()
- bugfix in UI redraw tags, it was calling region pointer in free'd
  data
- added notifier for marker-changed
- added keymap for markers to ipo window
2008-12-16 18:42:12 +00:00