IT/Tizen2015.07.28 00:00

part 블록에서는 자칫 정신을 잃으면, 급류에 휩쓸려 내려가 죽습니다;

워낙에 많은 복병과 암초가 기다리고 있기 때문에,

가급적이면 많은 예외사항을 다뤄보도록 하겠습니다.

만약 누락된 것이 있다면 댓글로 남겨주세요.

힘 닿는 만큼 추가해보도록 하겠습니다.



안녕하세요, Tizen 개발자 윤진입니다.


part는 parts 블록 안에 위치합니다.

parts 블록 안에는 1개 이상의 part를 배치할 수 있습니다.

parts 안에는 part 말고 다른 블록은 없지요.


parts 안에 쌓이는 part의 순서에도 의미가 있습니다.

위에 있는 part 일수록 레이어는 가장 아래에 위치합니다.

하나씩 part를 만들때 가장 상단에 있는 part부터 차곡차곡 쌓는다고 생각하면 됩니다.



개별적인 part는 완결된 화면 구성 단위인 group 내에 위치한 구성 '요소'입니다.

뒤집에 말하면, 각각의 구성요소가 모여서 하나의 의미있는 group이 되지요.


group {
   parts {
      part{} /* 최하단 레이어 */
      part{}
      part{}
      part{}
      part{}
      part{} /* 최상단 레이어 */
   }
}


part는 선이나 사각형이 될 수 있고,

이미지나 텍스트가 될 수도 있습니다.

버튼과 같은 다른 group을 통째로 넣을 수도 있습니다.

각각의 쓰임에 따라 syntax가 조금씩 달라집니다.


group {
   parts {
      ...
      part {
         name: "part_name";
         type: IMAGE;
         mouse_events:  1;
         repeat_events: 0;
         ignore_flags: NONE;
         clip_to: "another_part";
         source:  "group_name";
         pointer_mode: AUTOGRAB;
         description { }
         dragable { }
         items { }
      }
      ...
   }
}


part 내에서 사용하는 기본적인 필드를 우선 살펴보겠습니다.

여기서 언급하는 필드로 파트의 속성을 엿볼 수 있습니다.

필드의 세부적인 속성값이나 여기에 언급하지 않은 필드도 다른 포스팅에서 다룰 예정입니다.

한 번에 모두를 다루기에는 그 양이 너무 많네요.


- name: [part_name];

   파트의 이름을 지정할 수 있습니다.

   파트 이름은 program에서 애니메이션 효과를 줄 때 사용할 수 있습니다.

   c코드에서 파트이름으로 파트에 직접 접근할 수도 있습니다만 일반적인 용례는 아닙니다.


   어쨌든 외부에서 접근할 수 있으니,

   다른 파트 이름과 구별되는 고유의 이름을 지어주어야 합니다.

   파트이름은 큰 따옴표로 감싸주세요.



- type: [TYPE];

   타입은 아래처럼 확정된 값을 따옴표 없이 대문자로 넣을 수 있습니다.

   만약 아무런 값도 지정하지 않았다면 default로 IMAGE가 설정됩니다.

•    TEXT : 싱글라인 텍스트
•    TEXTBLOCK : 멀티라인/스타일이 가능한 텍스트블록
•    RECT : 사각형
•    IMAGE : 이미지
•    SWALLOW : group을 통째로 탑재할 수 있는 SWALLOW 타입(c에서 확정)
•    GROUP : group을 통째로 탑재할 수 있는 GROUP 타입(edc에서 확정)

•    BOX : 박스에 다른 그룹을 차곡차곡 삽입
•    TABLE : 테이블

•    EXTERNAL : 익스터널 오브젝트
•    PROXY : 파트 컨텐트 재사용(속도 최적화)
•    SPACER : 파트 위치+크기 지정(메모리 최적화)



- mouse_events:  [1 or 0];

   이름은 마우스 이벤트이지만 파트영역에서 발생하는 모든 이벤트를 통제할 수 있습니다.

   설정할 수 있는 값은 True를 뜻하는 1과 False를 뜻하는 0입니다.

   True를 설정하면 해당 파트가 '이벤트를 받을 수 있는 상황에서' 이벤트를 받게 됩니다.


   이벤트를 받을 수 있는 상황이란,

   - 파트영역이 화면에 보여야하고,

   - 파트영역을 덮는 다른 파트가 있으면 안됩니다.


   흔히 저지르는 실수 중에 하나가 투명한 파트를 상위 레이어에 만들어 두고,

   그 아래에 있는 파트에서 이벤트를 기다리는 것이지요.

   아무리 기다려도 위에 있는 레이어가 낚아채버리면 이벤트는 오지 않습니다.

   가장 기본적인 원칙이지요.


   만약 0으로 설정하면 어떤 이벤트도 받지 않습니다.

   이벤트를 받을 수 있는 상황인데 이벤트를 받지 않으면,

   그 하위에 있는 레이어에게 기회가 돌아가게 됩니다.

   역으로 자기보다 상단에 레이어가 있지만,

   상단 레이어가 mouse_events를 0으로 설정하면 자기가 이벤트를 받을 수 있습니다.

   default 값은 이벤트를 처리한다는 뜻으로 1로 설정하지요.



- repeat_events: [1 or 0];

   위에서도 언급하였지만 이벤트는 레이어의 높낮이에 영향을 받습니다.

   최상위 레이어부터 최하위 레이어까지 이벤트가 순서대로 전달될 수 있습니다.

   만약 상위 레이어가 이벤트를 처리하였지만, 하위레이어도 이벤트를 받아야하는 경우도 있을 수 있습니다.

   그럴 때 repeat_events를 사용하여 이벤트를 하위 레이어에 전달할 수도 있습니다.

   default는 0이기 때문에 이벤트를 받은 레이어 아래에 이벤트를 전달하지 않습니다.



- scale: [1 or 0];

   scale은 매우 중요한 개념이지만 그 중요도만큼이나 까다로운 필드입니다.

   scale 값을 True인 1로 설정하면, scale factor의 영향을 받는다는 의미이고,

   False인 0으로 설정하면, scale factor의 영향을 받지 않는다는 의미입니다.


   scale factor는 무엇일까요?

   scale factor는 double 형의 상수입니다.

   해상도와 화면사이즈가 제각각인 디스플레이에서,

   육안으로 봤을때 유사한 크기로 교정하기 위해 플랫폼에서 제공하는 계산된 인자입니다.


   예를 들어 동일한 해상도의 1인치/3인치 디스플레이가 있다고 합시다.

   1인치 화면에서 1cm 너비로 보이는 파트영역을,

   3인치 화면에서 3cm가 아닌 여전히 1cm로 너비를 지정하고 싶을 경우,

   1인치에서 1로 scale factor를 지정하였다면,

   3인치에서는 1/3로 scale factor를 지정합니다.

   그러면 1인치에서는 1cm x 1scale factor = 1cm로 설정이 되고,

   3인치에서는 3cm x 1/3scale factor = 1cm로 설정이 되겠지요.


   굉장히 간단하게 설명을 드렸지만, 대강의 의미는 전달되었을거라 생각합니다.

   차후에 scale factor에 대한 이야기를 제대로 할 기회가 있겠지요.


   이러한 scale factor에 영향을 받는 값은,

   min, max 그리고 font size입니다.

   위의 세값을 설정하지 않은 파트는 scale을 1로 지정하여도 scale의 영향을 받지 않습니다.

   반대로 min, max, font size를 지정한 파트에 scale 값을 0으로 줘버리면,

   scale factor의 영향을 받지 않고 지정한 사이즈 그대로 화면에 보여집니다.

  

   default값은 1.0입니다.

   스케일 값을 사용하는 것이 default이지요.



- pointer_mode: [MODE];

   파트영역 내에서 시작하였지만, 파트영역 밖에서 끝난 이벤트를 처리하는 방식을 지정할 수 있습니다.

   mouse down과 mouse up 이벤트로 설명하는 것이 빠르겠네요.

   파트영역 내에서 mouse down을 하였지만,

   mouse를 move하여 파트영역 밖으로 빠져나간 후 mouse up을 할 수 있습니다.

   그렇게 되면 mouse up이벤트를 파트영역이 받아야 할까요?

   그에 대한 선택을 사용자가 pointer_mode로 할 수 있습니다.


   AUTOGRAB 값을 주면,

   mouse up 이벤트가 파트영역 외부에서 이뤄지더라도 mouse down이 발생한 파트가 이벤트를 받습니다.


   NOGRAB 값을 주면,

   mouse up 이벤트가 파트영역 외부에서 이뤄지면 mouse down이 발생한 파트로는 이벤트가 오지 않습니다.


   default는 AUTOGRAB이기 때문에 NOGRAB을 사용하지 않는 이상,

   pointer_mode를 굳이 사용할 필요는 없습니다.



- precise_is_inside: [1 or 0];

   투명한 영역을 가지고 있는 이미지에서 빛을 발하는 '훌륭한' 기능입니다.

   이미지가 이벤트를 받는 경우,

   이미지의 투명한 영역은 이벤트를 받지 않고,

   불투명한 영역에서만 이벤트를 받고 싶을 수도 있습니다.

   바로 그럴 경우, precise_is_inside를 1로 지정하면 됩니다.

   그러면 투명한 영역은 파트영역 내부(inside)로 포함되지 않습니다.


   default 값은 0입니다.

   투명한 영역도 이미지의 영역이므로 이벤트를 모두 처리합니다.


오늘은 여기까지 하겠습니다.

part가 가지는 다른 무수한 기능은 다음 포스팅에서 하나씩 살펴보겠습니다.


그럼 좋은 하루 보내세요~

끝_


Posted by 타이젠 개발자, 윤진