Subversion Repositories Kolibri OS

Rev

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