Drag-n-drop support
От: c-smile Канада http://terrainformatica.com
Дата: 06.02.08 21:03
Оценка: 52 (3)
В следующем билде htmlayout/sciter я добавляю поддержку drag-n-drop "с человеческим лицом".

Базовая идея изложена здесь: http://terrainformatica.com/forums/topic.php?id=331&page
Re: ура :) [-]
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 06.02.08 21:17
Оценка:
Хорошо там, где мы есть! :)
А под WimMobile работать будет? (-)
От: Left2 Украина  
Дата: 07.02.08 08:34
Оценка:
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re: А под WimMobile работать будет? (-)
От: c-smile Канада http://terrainformatica.com
Дата: 07.02.08 17:36
Оценка:
Должно.
Re: Almost done
От: c-smile Канада http://terrainformatica.com
Дата: 13.02.08 01:22
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Базовая идея изложена здесь: http://terrainformatica.com/forums/topic.php?id=331&amp;page


Вот один из примеров:
Re: Drag-n-drop support
От: c-smile Канада http://terrainformatica.com
Дата: 16.02.08 21:08
Оценка: 74 (4)
Здравствуйте, c-smile, Вы писали:

Build #3.2.2.7

Подробности здесь
Примеры в /html_samples/drag-n-drop/
Re[2]: Drag-n-drop support
От: eudo Мухосранск  
Дата: 18.02.08 21:39
Оценка:
Ага, круто. Ждал эту технику для того что бы ее применить ее немного не по назначению, а именно для перетаскивания самодельных окон внутри документа оно мне кажется более оптимально будет чем style#left, style#top & parent.update(). Сходу сделать сие не получилось:

1. Когда начинаем перетаскивать draggable object создается ее визуальная копия, видим два объекта. Попробуем первый скрыть так как он становится :active рисуем соответствующий стиль с visible:hidden и видим что так dragging не работает. Ок, можем сделать opacity: 0; — работает, но если нажать на draggable и не шевелить мышей — не видим ничего
2. В Sciter\HLAYOUT дополнительных евентов не замечено

Если сие стоит реализовать в движке, то похоже это будет на:
<html>

<head>
  #dialog {
    draggable: relocation;
    position: absolute;
  }

  #dialog:move {
    opacity: 0.5;
  }

  #caption {
    pointer: move; 
  }

</head>

<body #main>

  <widget#dialog>
    <widget #caption>Hello</widget>
    <widget #body>Body</widget>
  </widget>

</body>
</html>


Суть в том что style#left, style#top & parent.update происходит только один раз — при drop.
Только одна проблема — перетаскивание работает на любой части диалога, а не только на #caption.

Кто что думает? Помню темки всплывали когда-то...

ПС: Андрей, к слову, HTMLayoutSDK\html_samples\drag-n-drop\tree-view.htm я сие дело "повесил", доперетаскивался до тех пор пока оно не ушло в нирвану.
Съешь еще этих мягких французских булок...
Re[3]: Drag-n-drop support
От: c-smile Канада http://terrainformatica.com
Дата: 19.02.08 00:53
Оценка:
Здравствуйте, eudo, Вы писали:

E>Ага, круто. Ждал эту технику для того что бы ее применить ее немного не по назначению, а именно для перетаскивания самодельных окон внутри документа оно мне кажется более оптимально будет чем style#left, style#top & parent.update(). Сходу сделать сие не получилось:


Drag-n-drop как бы не для этого.

"более оптимально будет чем style#left" — если и будет то не на много.

Вот пример такого sub window (в Sciter)

child-windows.htm

<html>
<head>
  <style>
    form.window
    {
      prototype: Wnd;
      position:absolute;
      background:threedface;
      border:1px solid threedshadow;
      height:100px;  
      width:100px;
    }
    form.window > caption
    {
      width:*;
      line-height:1.4em;
      padding:4px;
      background-color:threedhighlight threedhighlight threedshadow threedshadow;
      cursor:move;
    }
    form.window > body
    {
      width:*;
      height:*;
      margin:0 4px 4px 4px;
      background-color:window;
    }
  </style>  
  <script type="text/tiscript" src="child-windows.tis" />
<head>
<body>
  <form.window>
    <caption>Caption</caption>
    <body>
      Window!
    </body>
  </form>
</body>
</html>


И соотв. behavior в child-windows.tis

type Wnd: Behavior
{
  function this()
  {
    this.xoff = 0;
    this.yoff = 0;
    this.dragging = false;
  }

  function onMouse(evt)
  {
    var cap = this.select("caption");
    switch(evt.type) 
    {
      case Event.MOUSE_DOWN:
        if( evt.target === cap)
        {
          this.xoff = evt.x; 
          this.yoff = evt.y;
          this.dragging = true;
          cap.capture(true);
          return true;
        }
        break;
      case Event.MOUSE_UP:
        if(this.dragging)
        {
          this.dragging = false;
          cap.capture(false); 
          return true;
        }
        break;
      case Event.MOUSE_MOVE:
        if( this.dragging )
        {
          this.refresh();
          this.style#left = (evt.xRoot - this.xoff).toString(); 
          this.style#top = (evt.yRoot - this.yoff).toString(); 
          this.update(true);
          return true;
        }
        break;
    }
  }
}


Надо бы мне добавить поддержку sprite для оптимальной отрисовки. Это да, может помочь в этом случае.
Re[4]: Drag-n-drop support
От: eudo Мухосранск  
Дата: 19.02.08 01:11
Оценка:
CS>Вот пример такого sub window (в Sciter)
Да, такое использую.

CS>Надо бы мне добавить поддержку sprite для оптимальной отрисовки. Это да, может помочь в этом случае.

Понял, спасибо. Я думал оно на sprites основано
Съешь еще этих мягких французских булок...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.