вопрос по классу Graphics
От: willi-spb Россия  
Дата: 19.06.14 10:48
Оценка:
привожу полный пример тестового файла — собственно вывод квадратика и текста в нем и под ним на экран с помощью
Graphics

Если используется таймер для перерисовки данного класса, то возникает ситуация с увеличением памяти как в самой среде Sciter, так и в программе (если она использует sciter.dll).
Т.е. память по графике не освобождается.

Как сделать, чтобы память при перерисовке освобождалась — возможно что-то в примере некорректно?


<html>
  <head>
    <title>Sciter2 </title>
    <style>
    
      div.Speedometer { 
        prototype:SpeedTT; 
        width:*;
        height:*;
        border:1px solid black;
      }
    
    </style>
    <script type="text/tiscript">
    
    // 2 вспомогат функции прорисовки
    // квадрат от центра
    function w_drawRectCenter(gfx,ax,ay,aWidth,aHeight,aRx=0,aRy=0)
  {
   var LRx=aRx;
   var LRy=aRx;
   if ((LRx>0) && (aRy>0)) {LRy=aRy}
   //
   if (LRx==0) {gfx.rectangle(ax-aWidth*0.5,ay-aHeight*0.5,aWidth,aHeight);}
   else {gfx.rectangle(ax-aWidth*0.5,ay-aHeight*0.5,aWidth,aHeight,LRx,LRy)}
  }
    //
    // текст в центре
   function w_drawTextCenter(gfx,Ltext,aLength,ax,ay,aSize,aLineWidth)
  {
   var L_deltaBaseLine=aSize/6;  // текст по базовой линии - поэтому сдвигаем его относительно нее вверх
   var L_L =Ltext; 
       L_L.font("Arial",aSize);
       L_L.width(aSize*(aLength+1));
       L_L.height(aSize);
       var (at,at1)=L_L.width();        
       //gfx.rectangle(-at*0.5,-L_L.height()*0.5,at+aLineWidth*2,L_L.height());
        gfx.save();
        gfx.drawText(L_L,ax-at*0.5,ay-L_L.height()*0.5-L_deltaBaseLine,7);    
        gfx.restore();
       return true;
  }
  
    
    // класс Behavior
      class SpeedTT: Behavior        
       {
       function attached() { 
         this.paintContent =this.drawSpeed;
       }
       
       function drawSpeed(gfx)
            { 
             var (x,y,w,h) = this.box(#rectw);
             var scale = w < h? w / 300.0: h / 300.0; 
             //             
             gfx.save();            
             gfx.translate(w*0.5,h*0.5);
             var Lmin = w < h? w: h;
             gfx.lineWidth(1);
             gfx.lineColor(color("red"));
             gfx.fillColor(color("yellow"));
             w_drawRectCenter(gfx,0,0,200,120,5,5);
             var TextStr1="Text+BB+text";
             var TextStr2="gggggggggggggggggggggggggggggggggggggggg";
             var LL1=new Graphics.Text(TextStr1);
             var LL2=new Graphics.Text(TextStr2);             
             gfx.lineColor(color("navy"));
             gfx.fillColor(color("lime"));
             var LtextSize=16;
             w_drawTextCenter(gfx,LL1,TextStr1.length, 0,0,LtextSize+8,1);
             w_drawTextCenter(gfx,LL2,TextStr2.length, 0,150,LtextSize+8,1);
             //             
             gfx.restore();
            }
        }
    
    //////  основное
    function self.ready(){
     
      var body = $(body);
      
      $(#spTT).prototype=SpeedTT;
      $(#spTT).attached();
    
      body.timer(30,function(){$(#spTT).refresh(); return true;});
      
     }

    </script>
  </head>
<body>
  <h2>Sciter2 test_TT</h2>
  <div #spTT class="Speedometer" ></div>

</body>
</html>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.