Subversion Repositories Kolibri OS

Rev

Rev 3376 | Blame | Last modification | View Log | Download | RSS feed

  1. //notify 0.7
  2. //SoUrcerer 2010, Leency 2012-2013, GNU GPLv2
  3.  
  4. #define MEMSIZE 0x2F00
  5. #include "..\lib\kolibri.h"
  6. #include "..\lib\strings.h"
  7. #include "..\lib\mem.h"
  8. #include "..\lib\figures.h"
  9.  
  10. ?define PADDING 12;
  11.  
  12. int SCREEN_SIZE_X,
  13.     SCREEN_SIZE_Y;
  14.  
  15. int WIN_X,
  16.         WIN_Y,
  17.     WIN_SIZE_X=256,
  18.     WIN_SIZE_Y=28;
  19.  
  20. int delay = 400;
  21.  
  22. #include "lang.h--"
  23. #ifdef LANG_RUS
  24.         ?define DEFAULT_TEXT "â  ¯à®£à ¬¬  ¯®ª §ë¢ ¥â 㢥¤®¬«¥­¨ï.";
  25. #else
  26.         ?define DEFAULT_TEXT "This program shows notices. Open it with params.";
  27. #endif
  28.  
  29. void PutText(dword x, y) {
  30.         WriteText(x,y, 0x80, 0, #param);
  31. }
  32.  
  33. inline fastcall int GetClientTop()
  34. {
  35.         $mov eax, 48
  36.         $mov ebx, 5
  37.         $int 0x40
  38.     $mov eax, ebx
  39.     $shr eax, 16
  40. }
  41.  
  42. dword shadow_buf, lighter_pixel1, lighter_pixel2;
  43. void GetBackground()
  44. {
  45.         CopyScreen(shadow_buf, WIN_X, WIN_Y, WIN_SIZE_X, WIN_SIZE_Y);
  46.         CopyScreen(lighter_pixel1, WIN_X, WIN_Y, 1, 1);
  47.         CopyScreen(lighter_pixel2, WIN_X, WIN_Y+WIN_SIZE_Y, 1, 1);
  48.         ShadowImage(shadow_buf, WIN_SIZE_X, WIN_SIZE_Y, 6);
  49.         ShadowImage(lighter_pixel1, 1, 1, 2);
  50.         ShadowImage(lighter_pixel2, 1, 1, 2);
  51. }
  52.  
  53.  
  54. void main()
  55. {  
  56.         int TEXT_X=4,
  57.             TEXT_Y=12;
  58.         char drawn;
  59.        
  60.         if (!param)     strcpy(#param, DEFAULT_TEXT);
  61.         if (strlen(#param)*6>WIN_SIZE_X)
  62.         {
  63.                 WIN_SIZE_X=strlen(#param)*6+PADDING;
  64.                 delay = strlen(#param)*10;
  65.         }
  66.  
  67.         SCREEN_SIZE_X=GetScreenWidth()+1;      
  68.         WIN_X = SCREEN_SIZE_X-WIN_SIZE_X-1;
  69.         WIN_Y = GetClientTop();
  70.         TEXT_X = -6*strlen(#param)+WIN_SIZE_X/2;
  71.         TEXT_Y = WIN_SIZE_Y/2-3;
  72.        
  73.         //emulate multithread :)
  74.         while (GetPixelColor(SCREEN_SIZE_X-1, SCREEN_SIZE_X, WIN_Y)==0x333333) WIN_Y+=WIN_SIZE_Y+17;
  75.  
  76.         mem_Init();
  77.         shadow_buf = malloc(WIN_SIZE_X*WIN_SIZE_Y*3);
  78.         lighter_pixel1 = malloc(3);
  79.         lighter_pixel2 = malloc(3);
  80.         GetBackground();
  81.  
  82.         loop()
  83.         {
  84.                 WaitEventTimeout(delay);
  85.                 switch(EAX & 0xFF)
  86.                 {
  87.                 case evButton:
  88.                         ExitProcess();
  89.                         break;
  90.          
  91.                 case evReDraw:
  92.                         DefineAndDrawWindow(WIN_X+1,WIN_Y,WIN_SIZE_X, WIN_SIZE_Y-1, 0x01, 0, 0, 0x01fffFFF);
  93.                         if (drawn==1)
  94.                         {
  95.                                 drawn=2;
  96.                                 MoveSize(0,0,-1,-1);
  97.                                 pause(3);
  98.                                 GetBackground();
  99.                                 MoveSize(WIN_X,WIN_Y,-1,-1);
  100.                                 drawn=1;
  101.                         }
  102.                         DefineButton(0,0, WIN_SIZE_X, WIN_SIZE_Y, 1+BT_HIDE+BT_NOFRAME, 0);
  103.  
  104.                         _PutImage(0,0,WIN_SIZE_X,WIN_SIZE_Y,shadow_buf);
  105.                         PutPixel(0,0,ESDWORD[lighter_pixel1]);
  106.                         PutPixel(0,WIN_SIZE_Y-1,ESDWORD[lighter_pixel2]);
  107.                         DrawBar(WIN_SIZE_X,0, 1, WIN_SIZE_Y, 0x333333);
  108.  
  109.                         PutText(TEXT_X-1,TEXT_Y+1);
  110.                         PutText(TEXT_X-1,TEXT_Y-1);
  111.                         PutText(TEXT_X-1,TEXT_Y  );
  112.                         PutText(TEXT_X+1,TEXT_Y-1);
  113.                         PutText(TEXT_X+1,TEXT_Y  );
  114.                         PutText(TEXT_X+1,TEXT_Y+1);
  115.                         PutText(TEXT_X,  TEXT_Y+1);
  116.                         PutText(TEXT_X,  TEXT_Y-1);
  117.                         WriteText(TEXT_X,  TEXT_Y,   0x80, 0xFFFfff, #param);
  118.                         if (drawn==0) drawn=1;
  119.                         break;
  120.                 default:
  121.                         ExitProcess();
  122.       }
  123.    }
  124. }
  125.  
  126.  
  127. stop:
  128.