Revision: 16376
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16376
Author:   aligorith
Date:     2008-09-05 09:12:04 +0200 (Fri, 05 Sep 2008)

Log Message:
-----------
Grease Pencil - Available in Image Editor:

Grease Pencil is now available in the image editor. It is important to note 
that the strokes drawn WILL NOT become part of the image visible at the time.

Unfortunately, 'fancy' stroke drawing cannot be enabled for use with the 'Stick 
to View' setting here, as the scaling is wrong.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/include/BIF_space.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/src/drawgpencil.c
    trunk/blender/source/blender/src/drawimage.c
    trunk/blender/source/blender/src/gpencil.c
    trunk/blender/source/blender/src/header_image.c
    trunk/blender/source/blender/src/header_node.c
    trunk/blender/source/blender/src/space.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2008-09-05 
06:05:25 UTC (rev 16375)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2008-09-05 
07:12:04 UTC (rev 16376)
@@ -4173,6 +4173,9 @@
                                sima->cumap= newdataadr(fd, sima->cumap);
                                if(sima->cumap)
                                        direct_link_curvemapping(fd, 
sima->cumap);
+                               sima->gpd= newdataadr(fd, sima->gpd);
+                               if (sima->gpd)
+                                       link_gpencil(fd, sima->gpd);
                                sima->iuser.ok= 1;
                        }
                        else if(sl->spacetype==SPACE_NODE) {

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c  2008-09-05 
06:05:25 UTC (rev 16375)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c  2008-09-05 
07:12:04 UTC (rev 16376)
@@ -1698,7 +1698,9 @@
                                        
                                        writestruct(wd, DATA, "SpaceImage", 1, 
sl);
                                        if(sima->cumap)
-                                               write_curvemapping(wd, 
sima->cumap);                                    
+                                               write_curvemapping(wd, 
sima->cumap);
+                                       if(sima->gpd) 
+                                               write_gpencil(wd, sima->gpd);
                                }
                                else if(sl->spacetype==SPACE_IMASEL) {
                                        writestruct(wd, DATA, "SpaceImaSel", 1, 
sl);

Modified: trunk/blender/source/blender/include/BIF_space.h
===================================================================
--- trunk/blender/source/blender/include/BIF_space.h    2008-09-05 06:05:25 UTC 
(rev 16375)
+++ trunk/blender/source/blender/include/BIF_space.h    2008-09-05 07:12:04 UTC 
(rev 16376)
@@ -65,6 +65,7 @@
 #define IMAGE_HANDLER_PREVIEW          33
 #define IMAGE_HANDLER_GAME_PROPERTIES  34
 #define IMAGE_HANDLER_VIEW_PROPERTIES  35
+#define IMAGE_HANDLER_GREASEPENCIL     36
 /*#define IMAGE_HANDLER_TRANSFORM_PROPERTIES   36*/
 
 /* action handler codes */

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h     2008-09-05 
06:05:25 UTC (rev 16375)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h     2008-09-05 
07:12:04 UTC (rev 16376)
@@ -538,6 +538,7 @@
 #define SI_DRAW_TILE   1<<19 
 #define SI_SMOOTH_UV   1<<20
 #define SI_DRAW_STRETCH        1<<21
+#define SI_DISPGP              1<<22
 
 /* SpaceIpo->flag */
 #define SIPO_LOCK_VIEW                 1<<0

Modified: trunk/blender/source/blender/src/drawgpencil.c
===================================================================
--- trunk/blender/source/blender/src/drawgpencil.c      2008-09-05 06:05:25 UTC 
(rev 16375)
+++ trunk/blender/source/blender/src/drawgpencil.c      2008-09-05 07:12:04 UTC 
(rev 16376)
@@ -394,7 +394,7 @@
 /* ----- Existing Strokes Drawing (3D and Point) ------ */
 
 /* draw a given stroke - just a single dot (only one point) */
-static void gp_draw_stroke_point (bGPDspoint *points, short thickness, short 
sflag, int winx, int winy)
+static void gp_draw_stroke_point (bGPDspoint *points, short thickness, short 
sflag, int offsx, int offsy, int winx, int winy)
 {
        /* draw point */
        if (sflag & GP_STROKE_3DSPACE) {
@@ -410,6 +410,10 @@
                        co[0]= points->x;
                        co[1]= points->y;
                }
+               else if (sflag & GP_STROKE_2DIMAGE) {
+                       co[0]= points->x;
+                       co[1]= points->y;
+               }
                else {
                        co[0]= (points->x / 1000 * winx);
                        co[1]= (points->y / 1000 * winy);
@@ -473,10 +477,11 @@
 /* ----- Fancy 2D-Stroke Drawing ------ */
 
 /* draw a given stroke in 2d */
-static void gp_draw_stroke (bGPDspoint *points, int totpoints, short 
thickness, short dflag, short sflag, short debug, int winx, int winy)
+static void gp_draw_stroke (bGPDspoint *points, int totpoints, short 
thickness, short dflag, short sflag, 
+                                                       short debug, int offsx, 
int offsy, int winx, int winy)
 {      
        /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, 'smooth' opengl 
lines look better */
-       if (thickness < GP_DRAWTHICKNESS_SPECIAL) {
+       if ((thickness < GP_DRAWTHICKNESS_SPECIAL) || (dflag & 
GP_DRAWDATA_ONLYI2D)) {
                bGPDspoint *pt;
                int i;
                
@@ -485,6 +490,12 @@
                        if (sflag & GP_STROKE_2DSPACE) {
                                glVertex2f(pt->x, pt->y);
                        }
+                       else if (sflag & GP_STROKE_2DIMAGE) {
+                               const float x= pt->x;
+                               const float y= pt->y;
+                               
+                               glVertex2f(x, y);
+                       }
                        else {
                                const float x= (pt->x / 1000 * winx);
                                const float y= (pt->y / 1000 * winy);
@@ -514,6 +525,10 @@
                                s0[0]= pt1->x;          s0[1]= pt1->y;
                                s1[0]= pt2->x;          s1[1]= pt2->y;
                        }
+                       else if (sflag & GP_STROKE_2DIMAGE) {
+                               s0[0]= pt1->x;          s0[1]= pt1->y;
+                               s1[0]= pt2->x;          s1[1]= pt2->y;
+                       }
                        else {
                                s0[0]= (pt1->x / 1000 * winx);
                                s0[1]= (pt1->y / 1000 * winy);
@@ -656,6 +671,13 @@
                        if (sflag & GP_STROKE_2DSPACE) {
                                glVertex2f(pt->x, pt->y);
                        }
+                       else if (sflag & GP_STROKE_2DIMAGE) {
+                                       // fixme
+                               const float x= pt->x;
+                               const float y= pt->y;
+                               
+                               glVertex2f(x, y);
+                       }
                        else {
                                const float x= (pt->x / 1000 * winx);
                                const float y= (pt->y / 1000 * winy);
@@ -670,8 +692,8 @@
 /* ----- General Drawing ------ */
 
 /* draw a set of strokes */
-static void gp_draw_strokes (bGPDframe *gpf, int winx, int winy, int dflag, 
short debug, 
-                                                        short lthick, float 
color[4])
+static void gp_draw_strokes (bGPDframe *gpf, int offsx, int offsy, int winx, 
int winy, int dflag,  
+                                                        short debug, short 
lthick, float color[4])
 {
        bGPDstroke *gps;
        
@@ -697,16 +719,16 @@
                
                /* check which stroke-drawer to use */
                if (gps->totpoints == 1)
-                       gp_draw_stroke_point(gps->points, lthick, gps->flag, 
winx, winy);
+                       gp_draw_stroke_point(gps->points, lthick, gps->flag, 
offsx, offsy, winx, winy);
                else if (dflag & GP_DRAWDATA_ONLY3D)
                        gp_draw_stroke_3d(gps->points, gps->totpoints, lthick, 
dflag, gps->flag, debug, winx, winy);
                else if (gps->totpoints > 1)    
-                       gp_draw_stroke(gps->points, gps->totpoints, lthick, 
dflag, gps->flag, debug, winx, winy);
+                       gp_draw_stroke(gps->points, gps->totpoints, lthick, 
dflag, gps->flag, debug, offsx, offsy, winx, winy);
        }
 }
 
 /* draw grease-pencil datablock */
-static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
+static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int 
winy, int dflag)
 {
        bGPDlayer *gpl, *actlay=NULL;
        
@@ -758,7 +780,7 @@
                                        if ((gpf->framenum - gf->framenum) <= 
gpl->gstep) {
                                                /* alpha decreases with 
distance from curframe index */
                                                tcolor[3] = color[3] - 
(i/gpl->gstep);
-                                               gp_draw_strokes(gf, winx, winy, 
dflag, debug, lthick, tcolor);
+                                               gp_draw_strokes(gf, offsx, 
offsy, winx, winy, dflag, debug, lthick, tcolor);
                                        }
                                        else 
                                                break;
@@ -770,7 +792,7 @@
                                        if ((gf->framenum - gpf->framenum) <= 
gpl->gstep) {
                                                /* alpha decreases with 
distance from curframe index */
                                                tcolor[3] = color[3] - 
(i/gpl->gstep);
-                                               gp_draw_strokes(gf, winx, winy, 
dflag, debug, lthick, tcolor);
+                                               gp_draw_strokes(gf, offsx, 
offsy, winx, winy, dflag, debug, lthick, tcolor);
                                        }
                                        else 
                                                break;
@@ -783,12 +805,12 @@
                                /* draw the strokes for the ghost frames (at 
half of the alpha set by user) */
                                if (gpf->prev) {
                                        tcolor[3] = (color[3] / 7);
-                                       gp_draw_strokes(gpf->prev, winx, winy, 
dflag, debug, lthick, tcolor);
+                                       gp_draw_strokes(gpf->prev, offsx, 
offsy, winx, winy, dflag, debug, lthick, tcolor);
                                }
                                
                                if (gpf->next) {
                                        tcolor[3] = (color[3] / 4);
-                                       gp_draw_strokes(gpf->next, winx, winy, 
dflag, debug, lthick, tcolor);
+                                       gp_draw_strokes(gpf->next, offsx, 
offsy, winx, winy, dflag, debug, lthick, tcolor);
                                }
                                
                                /* restore alpha */
@@ -798,7 +820,7 @@
                
                /* draw the strokes already in active frame */
                tcolor[3]= color[3];
-               gp_draw_strokes(gpf, winx, winy, dflag, debug, lthick, tcolor);
+               gp_draw_strokes(gpf, offsx, offsy, winx, winy, dflag, debug, 
lthick, tcolor);
                
                /* Check if may need to draw the active stroke cache, only if 
this layer is the active layer
                 * that is being edited. (Stroke buffer is currently stored in 
gp-data)
@@ -866,6 +888,7 @@
 void draw_gpencil_2dimage (ScrArea *sa, ImBuf *ibuf)
 {
        bGPdata *gpd;
+       int offsx, offsy, sizex, sizey;
        int dflag = 0;
        
        /* check that we have grease-pencil stuff to draw */
@@ -873,9 +896,34 @@
        gpd= gpencil_data_getactive(sa);
        if (gpd == NULL) return;
        
+       /* calculate rect */
+       switch (sa->spacetype) {
+               case SPACE_IMAGE: /* image */
+               {
+                       SpaceImage *sima= (SpaceImage *)sa->spacedata.first;
+                       
+                       // fixme... are these settings still needed?
+                       offsx= 0;
+                       offsy= 0;
+                       sizex= sa->winx;
+                       sizey= sa->winy;
+                       
+                       myortho2(sima->v2d.cur.xmin, sima->v2d.cur.xmax, 
sima->v2d.cur.ymin, sima->v2d.cur.ymax);
+               }
+                       break;
+                       
+               default: /* for spacetype not yet handled */
+                       offsx= 0;
+                       offsy= 0;
+                       sizex= sa->winx;
+                       sizey= sa->winy;
+                       break;
+       }
+       
+       
        /* draw it! */
        dflag = (GP_DRAWDATA_ONLYI2D|GP_DRAWDATA_NOSTATUS);
-       gp_draw_data(gpd, sa->winx, sa->winy, dflag);
+       gp_draw_data(gpd, offsx, offsy, sizex, sizey, dflag);
 }
 
 /* draw grease-pencil sketches to specified 2d-view assuming that matrices are 
already set correctly 
@@ -893,7 +941,7 @@
        
        /* draw it! */
        if (onlyv2d) dflag |= (GP_DRAWDATA_ONLYV2D|GP_DRAWDATA_NOSTATUS);
-       gp_draw_data(gpd, sa->winx, sa->winy, dflag);
+       gp_draw_data(gpd, 0, 0, sa->winx, sa->winy, dflag);
 }
 
 /* draw grease-pencil sketches to specified 3d-view assuming that matrices are 
already set correctly 
@@ -910,7 +958,7 @@
        
        /* draw it! */
        if (only3d) dflag |= (GP_DRAWDATA_ONLY3D|GP_DRAWDATA_NOSTATUS);
-       gp_draw_data(gpd, sa->winx, sa->winy, dflag);
+       gp_draw_data(gpd, 0, 0, sa->winx, sa->winy, dflag);
 }
 
 /* draw grease-pencil sketches to opengl render window assuming that matrices 
are already set correctly */
@@ -924,7 +972,7 @@
        if (gpd == NULL) return;
        
        /* pass 1: draw 3d-strokes ------------ > */
-       gp_draw_data(gpd, winx, winy, 
(GP_DRAWDATA_NOSTATUS|GP_DRAWDATA_ONLY3D));
+       gp_draw_data(gpd, 0, 0, winx, winy, 
(GP_DRAWDATA_NOSTATUS|GP_DRAWDATA_ONLY3D));
        
        /* pass 2: draw 2d-strokes ------------ > */
                /* adjust view matrices */
@@ -932,7 +980,7 @@
        glLoadIdentity();
        
                /* draw it! */
-       gp_draw_data(gpd, winx, winy, GP_DRAWDATA_NOSTATUS);
+       gp_draw_data(gpd, 0, 0, winx, winy, GP_DRAWDATA_NOSTATUS);
 }
 
 /* ************************************************** */

Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to