Subversion Repositories Kolibri OS

Rev

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

  1. #define MEMSIZE 1024*20
  2.  
  3. #include "../lib/gui.h"
  4. #include "../lib/clipboard.h"
  5. #include "../lib/patterns/rgb.h"
  6.  
  7. //===================================================//
  8. //                                                   //
  9. //                       DATA                        //
  10. //                                                   //
  11. //===================================================//
  12.  
  13. dword pick_active = true;
  14. dword picked_color = 0;
  15. char picked_color_string[11];
  16. #define FORM_W 167
  17. #define FORM_H 60
  18. #define COLOR_BLOCK_SIZE 42
  19. #define COLOR_BLOCK_PADDING FORM_H - COLOR_BLOCK_SIZE / 2
  20. #define COLOR_BLOCK_X FORM_W - COLOR_BLOCK_SIZE - COLOR_BLOCK_PADDING
  21. #define BUTTON_ID_CLOSE 1
  22. #define BUTTON_ID_COPY  2
  23. #define BUTTON_ID_PICK  3
  24.  
  25. //===================================================//
  26. //                                                   //
  27. //                       CODE                        //
  28. //                                                   //
  29. //===================================================//
  30.  
  31. void main()
  32. {
  33.         int btn;
  34.         proc_info Form;
  35.         SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE);
  36.         SetWindowLayerBehaviour(-1, ZPOS_ALWAYS_TOP);
  37.         loop() switch(WaitEvent())
  38.         {
  39.                 case evMouse:
  40.                         mouse.get();                   
  41.                         if (mouse.x>0) && (mouse.x<FORM_W) && (mouse.y>0) && (mouse.y<FORM_H) {
  42.                                 EventDragWindow();
  43.                         } else if (pick_active) {
  44.                                 picked_color = GetPixelColorFromScreen(mouse.x + Form.left, mouse.y + Form.top);
  45.                                 EventUpdateWindowContent();
  46.                                 if (mouse.down) && (mouse.key&MOUSE_LEFT) pick_active = false;
  47.                         }
  48.                         break;
  49.  
  50.                 case evButton:
  51.                         btn = GetButtonID();
  52.                         if (btn == BUTTON_ID_CLOSE) ExitProcess();
  53.                         if (btn == BUTTON_ID_COPY) EventCopyHex();
  54.                         if (btn == BUTTON_ID_PICK) pick_active = true;
  55.                         break;
  56.  
  57.                 case evKey:
  58.                         GetKeys();
  59.                         if (key_scancode == SCAN_CODE_ESC) ExitProcess();
  60.                         if (key_scancode == SCAN_CODE_KEY_C) EventCopyHex();
  61.                         break;
  62.                  
  63.                 case evReDraw:
  64.                         DefineUnDragableWindow(215, 100, FORM_W, FORM_H);
  65.                         GetProcessInfo(#Form, SelfInfo);
  66.                         draw_window();
  67.                         break;
  68.         }
  69. }
  70.  
  71. void draw_window()
  72. {
  73.         DrawRectangle3D(0, 0, FORM_W, FORM_H, 0xCCCccc, 0x888888);
  74.         DrawRectangle3D(1, 1, FORM_W-2, FORM_H-2, 0xCCCccc, 0x888888);
  75.         DrawBar(2,2,FORM_W-3,FORM_H-3,0xFFFfff);
  76.  
  77.         DrawRectangle(COLOR_BLOCK_X-2, COLOR_BLOCK_PADDING-2, COLOR_BLOCK_SIZE+3, COLOR_BLOCK_SIZE+3, 0xCBC6C5);
  78.         DefineHiddenButton(COLOR_BLOCK_X-1, COLOR_BLOCK_PADDING-1, COLOR_BLOCK_SIZE+1, COLOR_BLOCK_SIZE+1, BUTTON_ID_PICK);
  79.  
  80.         DrawCopyButton(67, 11, 35, 14);
  81.  
  82.         EventUpdateWindowContent();
  83. }
  84.  
  85. //copy of sprintf() => %A
  86. void str2col(dword buf, number)
  87. {
  88.         byte s;
  89.         strlcpy(buf,"0x00000000",10);
  90.         buf+=10;
  91.         while(number)
  92.         {
  93.                 $dec buf
  94.                 s=number&0xF;
  95.                 if(s>9)DSBYTE[buf]='A'+s-10;
  96.                 else DSBYTE[buf]='0'+s;
  97.                 number>>=4;
  98.         }
  99. }
  100.  
  101. void EventUpdateWindowContent()
  102. {
  103.         //sprintf(#picked_color_string, "%A", picked_color);
  104.         str2col(#picked_color_string, picked_color);
  105.         rgb.DwordToRgb(picked_color);
  106.        
  107.         WriteTextWithBg(12,12, 0xD0, 0x000111, #picked_color_string+4, 0xFFFfff);
  108.        
  109.         WriteNumber(12,33, 0xD0, 0xff0000, 3, rgb.r);
  110.         WriteNumber(44,33, 0xD0, 0x008000, 3, rgb.g);
  111.         WriteNumber(75,33, 0xD0, 0x0000ff, 3, rgb.b);
  112.  
  113.         DrawBar(COLOR_BLOCK_X, COLOR_BLOCK_PADDING, COLOR_BLOCK_SIZE, COLOR_BLOCK_SIZE, picked_color);
  114. }
  115.  
  116. void DrawCopyButton(dword _x, _y, _w, _h)
  117. {
  118.         DefineHiddenButton(_x+1, _y+1, _w-2, _h-2, BUTTON_ID_COPY);
  119.         DrawRectangle(_x, _y, _w, _h, 0x777777);
  120.         WriteText(_x+6, _h-8/2 + _y, 0x80, 0x555555, "Copy");
  121. }
  122.  
  123. void EventCopyHex()
  124. {
  125.         Clipboard__CopyText(#picked_color_string+4);
  126. }