Subversion Repositories Kolibri OS

Rev

Rev 7163 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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