Subversion Repositories Kolibri OS

Rev

Rev 7911 | Rev 7984 | Go to most recent revision | Blame | Compare with Previous | 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 picked_color;
  14. char picked_color_string[7];
  15. #define FORM_W 167
  16. #define FORM_H 60
  17. #define PICKED_SIZE 42
  18. #define PICKED_PADDING FORM_H - PICKED_SIZE / 2
  19. #define PICKED_X FORM_W - PICKED_SIZE - PICKED_PADDING
  20. #define BUTTON_CLOSE 1
  21. #define BUTTON_COPY  2
  22. #define BUTTON_PICK  3
  23.  
  24. //===================================================//
  25. //                                                   //
  26. //                       CODE                        //
  27. //                                                   //
  28. //===================================================//
  29.  
  30. void main()
  31. {
  32.         bool pick_active = true;
  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_CLOSE) ExitProcess();
  53.                         if (btn == BUTTON_COPY) EventCopyHex();
  54.                         if (btn == BUTTON_PICK) pick_active = true;
  55.                         break;
  56.  
  57.                 case evKey:
  58.                         key_scancode = @GetKeyScancode();
  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(PICKED_X-2, PICKED_PADDING-2, PICKED_SIZE+3, PICKED_SIZE+3, 0xCBC6C5);
  78.         DefineHiddenButton(PICKED_X-1, PICKED_PADDING-1, PICKED_SIZE+1, PICKED_SIZE+1, BUTTON_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,"000000",6);
  90.         buf+=6;
  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.         str2col(#picked_color_string, picked_color);
  104.         rgb.DwordToRgb(picked_color);
  105.        
  106.         WriteTextWithBg(12,12, 0xD0, 0x000111, #picked_color_string, 0xFFFfff);
  107.        
  108.         WriteNumber(12,33, 0xD0, 0xff0000, 3, rgb.r);
  109.         WriteNumber(44,33, 0xD0, 0x008000, 3, rgb.g);
  110.         WriteNumber(75,33, 0xD0, 0x0000ff, 3, rgb.b);
  111.  
  112.         DrawBar(PICKED_X, PICKED_PADDING, PICKED_SIZE, PICKED_SIZE, picked_color);
  113. }
  114.  
  115. void DrawCopyButton(dword _x, _y, _w, _h)
  116. {
  117.         DefineHiddenButton(_x+1, _y+1, _w-2, _h-2, BUTTON_COPY);
  118.         DrawRectangle(_x, _y, _w, _h, 0x777777);
  119.         WriteText(_x+6, _h-8/2 + _y, 0x80, 0x555555, "Copy");
  120. }
  121.  
  122. void EventCopyHex()
  123. {
  124.         Clipboard__CopyText(#picked_color_string);
  125. }