Subversion Repositories Kolibri OS

Rev

Rev 7981 | Rev 9693 | 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.         proc_info Form;
  34.         @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE);
  35.         @SetWindowLayerBehaviour(-1, ZPOS_ALWAYS_TOP);
  36.         loop() switch(@WaitEvent())
  37.         {
  38.                 case evMouse:
  39.                         mouse.get();                   
  40.                         if (mouse.x>0) && (mouse.x<FORM_W) && (mouse.y>0) && (mouse.y<FORM_H) {
  41.                                 EventDragWindow();
  42.                         } else if (pick_active) {
  43.                                 picked_color = GetPixelColorFromScreen(mouse.x + Form.left, mouse.y + Form.top);
  44.                                 EventUpdateWindowContent();
  45.                                 if (mouse.down) && (mouse.key&MOUSE_LEFT) pick_active = false;
  46.                         }
  47.                         break;
  48.  
  49.                 case evButton:
  50.                         @GetButtonID();
  51.                         if (EAX == BUTTON_CLOSE) ExitProcess();
  52.                         if (EAX == BUTTON_COPY) EventCopyHex();
  53.                         if (EAX == BUTTON_PICK) pick_active = true;
  54.                         break;
  55.  
  56.                 case evKey:
  57.                         @GetKeyScancode();
  58.                         if (AL == SCAN_CODE_ESC) @ExitProcess();
  59.                         if (AL == SCAN_CODE_KEY_C) EventCopyHex();
  60.                         break;
  61.                  
  62.                 case evReDraw:
  63.                         DefineUnDragableWindow(215, 100, FORM_W, FORM_H);
  64.                         GetProcessInfo(#Form, SelfInfo);
  65.                         draw_window();
  66.         }
  67. }
  68.  
  69. void draw_window()
  70. {
  71.         DrawRectangle3D(0, 0, FORM_W, FORM_H, 0xCCCccc, 0x888888);
  72.         DrawRectangle3D(1, 1, FORM_W-2, FORM_H-2, 0xCCCccc, 0x888888);
  73.         DrawBar(2,2,FORM_W-3,FORM_H-3,0xFFFfff);
  74.  
  75.         DrawRectangle(PICKED_X-2, PICKED_PADDING-2, PICKED_SIZE+3, PICKED_SIZE+3, 0xCBC6C5);
  76.         DefineHiddenButton(PICKED_X-1, PICKED_PADDING-1, PICKED_SIZE+1, PICKED_SIZE+1, BUTTON_PICK);
  77.  
  78.         DrawCopyButton(67, 11, 35, 14);
  79.  
  80.         EventUpdateWindowContent();
  81. }
  82.  
  83. //copy of sprintf() => %A
  84. void str2col(dword buf, number)
  85. {
  86.         byte s;
  87.         strlcpy(buf,"000000",6);
  88.         buf+=6;
  89.         while(number)
  90.         {
  91.                 $dec buf
  92.                 s=number&0xF;
  93.                 if(s>9)DSBYTE[buf]='A'+s-10;
  94.                 else DSBYTE[buf]='0'+s;
  95.                 number>>=4;
  96.         }
  97. }
  98.  
  99. void EventUpdateWindowContent()
  100. {
  101.         str2col(#picked_color_string, picked_color);
  102.         rgb.DwordToRgb(picked_color);
  103.        
  104.         WriteTextWithBg(12,12, 0xD0, 0x000111, #picked_color_string, 0xFFFfff);
  105.        
  106.         WriteNumber(12,33, 0xD0, 0xff0000, 3, rgb.r);
  107.         WriteNumber(44,33, 0xD0, 0x008000, 3, rgb.g);
  108.         WriteNumber(75,33, 0xD0, 0x0000ff, 3, rgb.b);
  109.  
  110.         DrawBar(PICKED_X, PICKED_PADDING, PICKED_SIZE, PICKED_SIZE, picked_color);
  111. }
  112.  
  113. void DrawCopyButton(dword _x, _y, _w, _h)
  114. {
  115.         DefineHiddenButton(_x+1, _y+1, _w-2, _h-2, BUTTON_COPY);
  116.         DrawRectangle(_x, _y, _w, _h, 0x777777);
  117.         WriteText(_x+6, _h-8/2 + _y, 0x80, 0x555555, "Copy");
  118. }
  119.  
  120. void EventCopyHex()
  121. {
  122.         Clipboard__CopyText(#picked_color_string);
  123. }