Subversion Repositories Kolibri OS

Rev

Rev 4492 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. struct array_link {
  2.         dword link, text;
  3.         int x,y,w,h;
  4. };
  5.  
  6. struct LinksArray
  7. {
  8.         array_link links[200];
  9.         char page_links[64000];
  10.         dword buflen;
  11.         int count, active;
  12.  
  13.         void Hover();
  14.         void AddLink();
  15.         void AddText();
  16.         dword GetURL();
  17.         void Clear();
  18. };
  19.  
  20. void LinksArray::AddLink(dword new_link, int link_x, link_y)
  21. {
  22.         links[count].x = link_x;
  23.         links[count].y = link_y;
  24.  
  25.         links[count].link = buflen;
  26.         strcpy(buflen, new_link);
  27.         buflen += strlen(new_link)+1;
  28.         count++;
  29. }
  30.  
  31. void LinksArray::AddText(dword new_text, int link_w, link_h)
  32. {
  33.         if (count<1) return;
  34.         links[count-1].w = link_w;
  35.         links[count-1].h = link_h;
  36.  
  37.         links[count-1].text = buflen;
  38.         strcpy(buflen, new_text);
  39.         buflen += strlen(new_text)+1;
  40. }
  41.  
  42. dword LinksArray::GetURL(int id)
  43. {
  44.         return links[id].link;
  45. }
  46.  
  47. void LinksArray::Clear()
  48. {
  49.         int i;
  50.         for (i=0; i<=count; i++) DeleteButton(i+400);
  51.         buflen = #page_links;
  52.         count = 0;
  53.         active = -1;
  54. }
  55.  
  56. void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col)
  57. {
  58.         int i;
  59.         if (active>=0)
  60.         {
  61.                 //WriteText(links[active].x,links[active].y, 0x80, link_col_in, links[active].text);
  62.                 DrawBar(links[active].x,links[active].y+8,links[active].w,1, link_col_in);
  63.                 active = -1;
  64.         }
  65.         for (i=0; i<count; i++)
  66.         {
  67.                 if (mx>links[i].x) && (my>links[i].y) && (mx<links[i].x+links[i].w) && (my<links[i].y+links[i].h)
  68.                 {
  69.                         //WriteText(links[i].x,links[i].y, 0x80, link_col_a, links[i].text);
  70.                         DrawBar(links[i].x,links[i].y+8,links[i].w,1, bg_col);
  71.                         active = i;
  72.                         return;
  73.                 }
  74.         }
  75. }
  76.  
  77.  
  78. LinksArray PageLinks;
  79.  
  80.  
  81. /*
  82. ------------------ Подфункция 4 - загрузить курсор -------------------
  83. Параметры:
  84.   * eax = 37 - номер функции
  85.   * ebx = 4 - номер подфункции
  86.   * dx = источник данных:
  87.   * dx = LOAD_FROM_FILE = 0 - данные в файле
  88.     * ecx = указатель на полный путь к файлу курсора
  89.     * файл курсора должен быть в формате .cur, стандартном для
  90.       MS Windows, причём размером 32*32 пикселя
  91.   * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
  92.     * ecx = указатель на данные файла курсора
  93.     * формат данных такой же, как и в предыдущем случае
  94.   * dx = LOAD_INDIRECT = 2 - данные в памяти
  95.     * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
  96.     * edx = 0xXXYY0002, где
  97.       * XX = x-координата "горячей точки" курсора
  98.       * YY = y-координата
  99.       * 0 <= XX, YY <= 31
  100. Возвращаемое значение:
  101.   * eax = 0 - неудача
  102.   * иначе eax = хэндл курсора
  103.  
  104. ------------------ Подфункция 5 - установить курсор ------------------
  105. Устанавливает новый курсор для окна текущего потока.
  106. Параметры:
  107.   * eax = 37 - номер функции
  108.   * ebx = 5 - номер подфункции
  109.   * ecx = хэндл курсора
  110. Возвращаемое значение:
  111.   * eax = хэндл предыдущего установленного курсора
  112. Замечания:
  113.   * Если передан некорректный хэндл, то функция восстановит курсор
  114.     по умолчанию (стандартную стрелку). В частности, к восстановлению
  115.     курсора по умолчанию приводит передача ecx=0.
  116.  
  117. ------------------- Подфункция 6 - удалить курсор --------------------
  118. Параметры:
  119.   * eax = 37 - номер функции
  120.   * ebx = 6 - номер подфункции
  121.   * ecx = хэндл курсора
  122. Возвращаемое значение:
  123.   * eax разрушается
  124. Замечания:
  125.   * Курсор должен был быть ранее загружен текущим потоком
  126.     (вызовом подфункции 4). Функция не удаляет системные курсоры и
  127.     курсоры, загруженные другими приложениями.
  128.   * Если удаляется активный (установленный подфункцией 5) курсор, то
  129.     восстанавливается курсор по умолчанию (стандартная стрелка).
  130.    
  131. */