Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/src/space.c')
-rw-r--r--source/blender/src/space.c64
1 files changed, 61 insertions, 3 deletions
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 8a96b94f295..f160c2b06ee 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -65,6 +65,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h" /* used for select grouped hooks */
#include "DNA_object_types.h"
+#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
@@ -90,6 +91,7 @@
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_image.h" /* for IMA_TYPE_COMPOSITE and IMA_TYPE_R_RESULT */
+#include "BKE_particle.h"
#include "BIF_spacetypes.h" /* first, nasty dependency with typedef */
@@ -99,6 +101,7 @@
#include "BIF_drawtext.h"
#include "BIF_drawscript.h"
#include "BIF_editarmature.h"
+#include "BIF_editparticle.h"
#include "BIF_editconstraint.h"
#include "BIF_editdeform.h"
#include "BIF_editfont.h"
@@ -988,6 +991,9 @@ void BIF_undo_push(char *str)
else if (G.obedit->type==OB_ARMATURE)
undo_push_armature(str);
}
+ else if(G.f & G_PARTICLEEDIT) {
+ PE_undo_push(str);
+ }
else {
if(U.uiflag & USER_GLOBALUNDO)
BKE_write_undo(str);
@@ -1005,6 +1011,8 @@ void BIF_undo(void)
imagepaint_undo();
else if(curarea->spacetype==SPACE_IMAGE && (G.sima->flag & SI_DRAWTOOL))
imagepaint_undo();
+ else if(G.f & G_PARTICLEEDIT)
+ PE_undo();
else {
/* now also in faceselect mode */
if(U.uiflag & USER_GLOBALUNDO) {
@@ -1026,6 +1034,8 @@ void BIF_redo(void)
imagepaint_undo();
else if(curarea->spacetype==SPACE_IMAGE && (G.sima->flag & SI_DRAWTOOL))
imagepaint_undo();
+ else if(G.f & G_PARTICLEEDIT)
+ PE_redo();
else {
/* includes faceselect now */
if(U.uiflag & USER_GLOBALUNDO) {
@@ -1044,7 +1054,9 @@ void BIF_undo_menu(void)
allqueue(REDRAWALL, 0);
}
else {
- if(U.uiflag & USER_GLOBALUNDO) {
+ if(G.f & G_PARTICLEEDIT)
+ PE_undo_menu();
+ else if(U.uiflag & USER_GLOBALUNDO) {
char *menu= BKE_undo_menu_string();
if(menu) {
short event= pupmenu_col(menu, 20);
@@ -1193,6 +1205,17 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
allqueue(REDRAWVIEW3D, 0);
}
}
+ else if(!G.obedit && OBACT && G.f&G_PARTICLEEDIT){
+ ParticleSystem *psys=PE_get_current(OBACT);
+ ParticleEditSettings *pset=PE_settings();
+ if(psys && psys->edit){
+ if(pset->brushtype>=0 &&
+ event!=LEFTMOUSE && event!=RIGHTMOUSE && event!=MIDDLEMOUSE &&
+ (event==MOUSEY || event==MOUSEX) && bwin_qtest(sa->win)==0) {
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ }
+ }
/* Handle retopo painting */
if(retopo_mesh_paint_check()) {
@@ -1557,7 +1580,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
* based on user preference USER_LMOUSESELECT
*/
case LEFTMOUSE:
- if ((G.obedit) || !(G.f&(G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT))) {
+ if ((G.obedit) || !(G.f&(G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT|G_PARTICLEEDIT))) {
mouse_cursor();
}
else if (G.f & G_WEIGHTPAINT) {
@@ -1569,6 +1592,12 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if (G.f & G_TEXTUREPAINT) {
imagepaint_paint(L_MOUSE, 1);
}
+ else if (G.f & G_PARTICLEEDIT) {
+ if(G.qual & LR_CTRLKEY)
+ mouse_cursor();
+ else if(!PE_brush_particles())
+ mouse_cursor();
+ }
break;
case MIDDLEMOUSE:
handle_view_middlemouse();
@@ -1596,6 +1625,8 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
face_select();
else if( G.f & (G_VERTEXPAINT|G_TEXTUREPAINT))
sample_vpaint();
+ else if( G.f & G_PARTICLEEDIT)
+ PE_mouse_particles();
else
mouse_select(); /* does poses too */
break;
@@ -1714,6 +1745,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
else {
if(FACESEL_PAINT_TEST) deselectall_tface();
+ else if(G.f & G_PARTICLEEDIT) PE_deselectall();
else {
/* by design, the center of the active object
* (which need not necessarily by selected) will
@@ -1984,6 +2016,14 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
else if(FACESEL_PAINT_TEST)
hide_tface();
+ else if(G.f & G_PARTICLEEDIT) {
+ if(G.qual == LR_ALTKEY)
+ PE_hide(0);
+ else if(G.qual == LR_SHIFTKEY)
+ PE_hide(1);
+ else if(G.qual == 0)
+ PE_hide(2);
+ }
else if(ob && (ob->flag & OB_POSEMODE)) {
if (G.qual==0)
hide_selected_pose_bones();
@@ -2097,6 +2137,9 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if(G.qual==LR_CTRLKEY)
select_linked_tfaces(2);
}
+ else if(G.f & G_PARTICLEEDIT) {
+ PE_select_linked();
+ }
else {
if((G.qual==0))
make_local_menu();
@@ -2172,7 +2215,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case OKEY:
- if (G.obedit) {
+ if (G.obedit || G.f&G_PARTICLEEDIT) {
if (G.qual==LR_SHIFTKEY) {
G.scene->prop_mode = (G.scene->prop_mode+1)%7;
allqueue(REDRAWHEADERS, 0);
@@ -2377,6 +2420,10 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
}
+ else if(G.f & G_PARTICLEEDIT) {
+ initTransform(TFM_BAKE_TIME, CTX_NONE);
+ Transform();
+ }
else if(G.qual==LR_CTRLKEY) {
if(ob && (ob->flag & OB_POSEMODE));
else make_track();
@@ -2405,6 +2452,9 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
uv_autocalc_tface();
}
}
+ else if (G.f & G_PARTICLEEDIT){
+ if(G.qual==0) BIF_undo(); else BIF_redo();
+ }
else if((G.qual==0)) {
if(G.f & G_WEIGHTPAINT)
BIF_undo();
@@ -2583,6 +2633,9 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if ( (G.qual==LR_CTRLKEY)
&& (G.obedit) && (G.obedit->type==OB_SURF) )
select_less_nurb();
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.f & G_PARTICLEEDIT) )
+ PE_select_less();
else {
persptoetsen(event);
doredraw= 1;
@@ -2599,6 +2652,9 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if ( (G.qual==LR_CTRLKEY)
&& (G.obedit) && (G.obedit->type==OB_SURF) )
select_more_nurb();
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.f & G_PARTICLEEDIT) )
+ PE_select_more();
else {
persptoetsen(event);
doredraw= 1;
@@ -4396,6 +4452,8 @@ void extern_set_butspace(int fkey, int do_cycle)
if (sbuts->tab[CONTEXT_OBJECT]==TAB_OBJECT_OBJECT)
sbuts->tab[CONTEXT_OBJECT]=TAB_OBJECT_PHYSICS;
else if (sbuts->tab[CONTEXT_OBJECT]==TAB_OBJECT_PHYSICS)
+ sbuts->tab[CONTEXT_OBJECT]=TAB_OBJECT_PARTICLE;
+ else if (sbuts->tab[CONTEXT_OBJECT]==TAB_OBJECT_PARTICLE)
sbuts->tab[CONTEXT_OBJECT]=TAB_OBJECT_OBJECT;
}
else sbuts->mainb= CONTEXT_OBJECT;