*/}}
YimingWu 2 months ago
parent
commit
7707bd20a4
2 changed files with 18 additions and 8 deletions
  1. 16 8
      ouroperations.c
  2. 2 0
      ourpaint.c

+ 16 - 8
ouroperations.c

@@ -51,10 +51,10 @@ void our_RecordUndo(OurLayer* ol, real xmin,real xmax, real ymin,real ymax,int A
 
 void our_CanvasAlphaMix(OUR_PIX_COMPACT* target, OUR_PIX_COMPACT* source, real alpha){
     real a_1=(real)(OUR_PIX_MAX-source[3]*alpha)/OUR_PIX_MAX;
-    int a=(int)source[3]*alpha+(int)target[3]*a_1; TNS_CLAMP(a,0,OUR_PIX_MAX);
-    int r=(int)source[0]*alpha+(int)target[0]*a_1; TNS_CLAMP(r,0,OUR_PIX_MAX);
-    int g=(int)source[1]*alpha+(int)target[1]*a_1; TNS_CLAMP(g,0,OUR_PIX_MAX);
-    int b=(int)source[2]*alpha+(int)target[2]*a_1; TNS_CLAMP(b,0,OUR_PIX_MAX);
+    int a=(int)(source[3])*alpha+(int)(target[3])*a_1; TNS_CLAMP(a,0,OUR_PIX_MAX);
+    int r=(int)(source[0])*alpha+(int)(target[0])*a_1; TNS_CLAMP(r,0,OUR_PIX_MAX);
+    int g=(int)(source[1])*alpha+(int)(target[1])*a_1; TNS_CLAMP(g,0,OUR_PIX_MAX);
+    int b=(int)(source[2])*alpha+(int)(target[2])*a_1; TNS_CLAMP(b,0,OUR_PIX_MAX);
     target[3]=a; target[0]=r; target[1]=g; target[2]=b;
 }
 void our_CanvasAdd(OUR_PIX_COMPACT* target, OUR_PIX_COMPACT* source, real alpha){
@@ -1426,8 +1426,12 @@ void our_ImageConvertForExport(int BitDepth, int ColorProfile){
     uint16_t* image_buffer=Our->ImageBuffer;
     for(int row=0;row<Our->ImageH;row++){
         for(int col=0;col<Our->ImageW;col++){ uint16_t* p=&image_buffer[((int64_t)row*Our->ImageW+col)*4];
-            real a=(real)p[3]/65535.0f;
-            if(a>0){ p[0]=(real)p[0]/a; p[1]=(real)p[1]/a; p[2]=(real)p[2]/a; }
+            uint16_t a=(real)p[3]/65535.0f;
+            if(a>0){
+                p[0]=(p[0]<p[3])?p[0]:((real)p[0]/a);
+                p[1]=(p[1]<p[3])?p[1]:((real)p[1]/a);
+                p[2]=(p[2]<p[3])?p[2]:((real)p[2]/a);
+            }
         }
     }
 
@@ -2438,6 +2442,9 @@ int ourinv_CycleSketch(laOperator* a, laEvent* e){
     laMarkMemChanged(Our->CanvasSaverDummyList.pFirst);
 }
 
+void ourset_BrushNumber(void* unused, int a);
+void ourset_BrushSize(void* unused, real v);
+
 int ourinv_AdjustBrush(laOperator* a, laEvent* e){
     OurCanvasDraw *ex = a->This?a->This->EndInstance:0; if(!ex) return LA_FINISHED;
     ex->CanvasDownX = e->x; ex->CanvasDownY=e->y; ex->LastSize=Our->BrushSize; ex->LastNumber=Our->BrushNumber;
@@ -2708,7 +2715,7 @@ int ourinv_ClearEmptyTiles(laOperator* a, laEvent* e){
 
 int ourgetstate_Canvas(void* unused_canvas){
     int level; laMemNodeHyper* m=memGetHead(Our->CanvasSaverDummyList.pFirst,&level); if(!m || level!=2) return -1;
-    if(m->Modified || !m->FromFile) return LA_BT_WARNING;
+    if(m->Modified) return LA_BT_WARNING;
     return -1;
 }
 int ourgetstate_Brush(OurBrush* brush){
@@ -3045,6 +3052,7 @@ int ourget_CanvasVersion(void* unused){
 void ourpost_Canvas(void* unused){
     if(Our->CanvasVersion<20){ Our->BackgroundFactor=0; Our->BackgroundType=0; }
     LA_ACQUIRE_GLES_CONTEXT;
+    laMarkMemClean(Our->CanvasSaverDummyList.pFirst);
 }
 
 #define OUR_ADD_PRESSURE_SWITCH(p) \
@@ -3525,7 +3533,7 @@ void ourRegisterEverything(){
     laAddIntProperty(pc,"background_random","Random","Background random pattern value",0,0,0,0,0,0,0,0,offsetof(OurPaint,BackgroundRandom),0,0,0,0,0,0,0,0,0,0,0);
     laAddFloatProperty(pc,"background_factor","Factor","Background effect factor",0,0,0,1,0,0,0,0,offsetof(OurPaint,BackgroundFactor),0,0,0,0,0,0,0,0,0,0,0);
     laAddFloatProperty(pc,"border_alpha","Border Alpha","Alpha of the border region around the canvas",0,0,0,1,0,0.05,0.5,0,offsetof(OurPaint,BorderAlpha),0,ourset_BorderAlpha,0,0,0,0,0,0,0,0,0);
-    laAddFloatProperty(pc,"border_fade_width","Fade Width","Fading of the border",0,0,0,1,0,0.01,0,0,offsetof(OurPaint,BorderFadeWidth),0,ourset_BorderFadeWidth,0,0,0,0,0,0,0,0,0);
+    laAddFloatProperty(pc,"border_fade_width","Fade Width","Fading of the border",0,0,0,1,0,0.05,0,0,offsetof(OurPaint,BorderFadeWidth),0,ourset_BorderFadeWidth,0,0,0,0,0,0,0,0,0);
     p=laAddEnumProperty(pc,"show_border","Show Border","Whether to show border on the canvas",0,0,0,0,0,offsetof(OurPaint,ShowBorder),0,ourset_ShowBorder,0,0,0,0,0,0,0,0);
     laAddEnumItemAs(p,"FALSE","No","Dont' show border on the canvas",0,0);
     laAddEnumItemAs(p,"TRUE","Yes","Show border on the canvas",1,0);

+ 2 - 0
ourpaint.c

@@ -59,6 +59,8 @@ int main(int argc, char *argv[]){
     }
     if(anyload){ laRecordEverythingAndPush(); }
 
+    laMarkMemClean(Our->CanvasSaverDummyList.pFirst);
+
     //laAddRootDBInst("our.tools");
     if(!MAIN.Windows.pFirst){
         laWindow* w = laDesignWindow(-1,-1,35*LA_RH,25*LA_RH);