GUI Framework API
oasis::ui 네임스페이스 범주에서 호출됩니다.
헤더 파일
OasisUI.h
초기화와 해제
oasis::ui를 초기화하고 기본 Screen 객체를 생성합니다.
parameters
oasis::ui 초기화에 필요한 key-value map 입니다.
oasis::ui 초기화에 필요한 key-value map은 아래와 같습니다.
system-font-path
Oasis가 사용하는 폰트 파일 경로입니다. TrueType 폰트를 지원합니다. oasis::initialize에서 이 키값을 이미 지정할 경우, 덮어 씁니다.
system-font-size
10
Oasis가 사용하는 폰트 기본 크기입니다. 포인트 단위입니다. oasis::initialize에서 이 키값을 이미 지정할 경우, 덮어 씁니다.
display-rotation
0
Display 장치가 하드웨어적으로 주어진 각도로 rotation되어 동작하는지 지정합니다. 90도나 270도로 rotation되도록 동작할 경우, GUI widget (window)의 너비는 display의 높이 값을, widget(window)의 높이는 display의 너비 값을 사용합니다.
enable-touch
1
Touch 장치를 활성화합니다.
touch-cal-data-path
Touch calibration 데이터 파일 경로입니다. 이 데이터 파일이 유효하지 않으면, touch 기능이 비활성화 됩니다. 데이터 파일의 내용은 공백문자로 구분된 9개 숫자를 한줄로 나열한 문자열입니다. 예로 480x320 디스플레이 장치 경우, "302 3967 244 3829 8583 5850 65536 480 320" 입니다.
fb0-hlayer
GUI의 grahic context에서 사용하는 display HLAYER 문자열입니다. 문자열은 ":"로 구분된 각 레이어 컴포턴트 ID 입니다. 예를들어, "1:1:0"과 같은 형식입니다.
vi0-hlayer
카메라 영상 등 YUV 채널에서 사용하는 display HLAYER 문자열입니다. 문자열은 ":"로 구분된 각 레이어 컴포턴트 ID 입니다. 예를들어, "1:0:0"과 같은 형식입니다.
hide-unmanaged-ui-layer
Oasis GUI에서 관리하지 않는 외부 UI 컴포넌트(Qt 등) 전용으로 쓰이는 HLAYER 문자열입니다. 문자열은 ":"로 구분된 각 레이어 컴포턴트 ID 입니다. 예를들어, "1:2:0"과 같은 형식입니다.
hide-unmanaged-ui-layers
Oasis GUI에서 관리하지 않는 외부 UI 컴포넌트(Qt 등) 전용으로 쓰이는 HLAYER 목록입니다. 각 HLAYER는 콤마(,)로 구분됩니다. 예를들어, "1:2:0,1:3:0" 과 같은 형식입니다.
lcd-dpi-x
96.0
디스플레이의 DPI x 값입니다.
lcd-dpi-y
96.0
디스플레이의 DPI y 값입니다.
lcd-dpi
96.0
디스플레이의 DPI x 값, y 값입니다.
Note
hide-unmanaged-ui-layer 와 hide-unmanaged-ui-layers 키 둘 다 지정될 경우, hide-unmanaged-ui-layers를 사용합니다.
칩셋의 디스플레이 모듈은 용도 별로 여러 개 채널과 각 채널 별로 여러 개 레이어를 지원합니다. 최소 한개 채널과 한개 레이어를 지원합니다.
Oasis는 칩셋별 디스플레이 모듈이 지원하는 레이어 구조에 맞도록 GUI단을 HLAYER로 구분하여 관리합니다.
HLAYER는 32-비트 정수값으로 (channel, hard layer, soft layer)를 요소로 하는 3-tuple 구조를 갖습니다. 칩셋에 따라 (channel, layer) 구조를 갖을 경우, HLAYER 문자열 양식은 "0:1"와 같이 2-tuple로 지정합니다.
Touch calibration 데이터 값은 터치하여 얻은 5개 포인트를 이용하여 아래 함수에서 처럼 계산됩니다.
struct {
int32_t x;
int32_t y;
} touch[5] = { 0, };
int32_t cal[9] = { 0, };
void calibrate()
{
double dx_min, dy_min, dx_max, dy_max;
double dx_ratio, dy_ratio, scale = 65536.0;
int32_t i;
double x_distance = 0.0, y_distance = 0.0;
x_distance += (double)(touch[4].x-touch[0].x);
x_distance += (double)(touch[4].x-touch[3].x);
x_distance += (double)(touch[1].x-touch[4].x);
x_distance += (double)(touch[2].x-touch[4].x);
x_distance /= 4.0;
dx_ratio = (double)(screen[4].x-screen[0].x)/x_distance;
y_distance += (double)(touch[4].y-touch[0].y);
y_distance += (double)(touch[4].y-touch[1].y);
y_distance += (double)(touch[3].y-touch[4].y);
y_distance += (double)(touch[2].y-touch[4].y);
y_distance /= 4.0;
dy_ratio = (double)(screen[4].y-screen[0].y)/y_distance;
dx_min = dx_max = 0.0;
dy_min = dy_max = 0.0;
for(i=0; i<5; i++) {
dx_min += (double)touch[i].x - (double)screen[i].x/dx_ratio;
dx_max += (double)touch[i].x + (double)(width_-screen[i].x)/dx_ratio;
dy_min += (double)touch[i].y - (double)screen[i].y/dy_ratio;
dy_max += (double)touch[i].y + (double)(height_-screen[i].y)/dy_ratio;
}
dx_min /= 5.0;
dy_min /= 5.0;
dx_max /= 5.0;
dy_max /= 5.0;
cal[0] = (int32_t)dx_min;
cal[1] = (int32_t)dx_max;
cal[2] = (int32_t)dy_min;
cal[3] = (int32_t)dy_max;
cal[4] = (int32_t)(dx_ratio*scale);
cal[5] = (int32_t)(dy_ratio*scale);
cal[6] = (int32_t)scale;
cal[7] = 480; //display width
cal[8] = 320; //display height
}
size_t save(const char *path)
{
FILE *f = fopen(path, "w");
if(!f) {
return 0;
}
char cal_buffer[256];
ssize_t len = sprintf(cal_buffer,"%d %d %d %d %d %d %d %d %d",
cal[0], cal[1], cal[2], cal[3], cal[4], cal[5], cal[6], cal[7], cal[8]);
fwrite (cal_buffer, 1, len, f);
fclose(f);
return len;
}
터치 이벤트가 발생하여 얻는 물리적 (x,y) 좌표값은 아래 함수에서 처럼 GUI가 사용하는 Screen 좌표로 변환됩니다.
struct {
int32_t x;
int32_t y;
} ui_touch;
void touchToScreen(int32_t x, int32_t y)
{
ui_touch.x = (x - cal[0])*cal[4]/cal[6];
ui_touch.y = (y - cal[2])*cal[5]/cal[6];
}
아래는 초기화 예제입니다.
oasis::key_value_map_t parameters;
parameters["system-font-size"] = "11";
parameters["system-font-path"] = "/mnt/sd/NanumGothicCoding.ttf";
parameters["display-rotation"] = "0";
parameters["enable-touch"] = "1";
parameters["touch-cal-data-path"] = "/mnt/sd/cal.dat";
parameters["vi0-hlayer"] = "1:0:0";
parameters["fb0-hlayer"] = "1:1:0";
parameters["hide-unmanaged-ui-layer"] = "1:2:0";
ui::setup(parameters);
oasis::ui에서 할당된 자원을 해제하고 종료합니다.
칩셋 드라이버가 display 장치를 /dev/disp 와 같이 device node tree에 노출하였을 경우, 해당 장치 드라이버 핸들을 리턴합니다.
성공할 경우, 장치 핸들 번호를 리턴합니다. 지원하지 않거나 실패할 경우 -1을 리턴합니다.
칩셋 드라이버가 display 장치용 핸들 객체를 사용할 경우, 해당 객체를 얻습니다. 이 객체는 칩셋의 Display 핸들 포인터입니다.
성공할 경우, Display 핸들 객체를 리턴합니다. 지원하지 않거나 실패할 경우 nullptr을 리턴합니다.
HLAYER 문자열 포맷을 hlayer_t 타입의 정수형으로 변환합니다.
str
HLAYER 문자열 포인터입니다. 문자열은 ":"로 구분된 각 레이어 컴포턴트 ID 입니다. 예를들어, "1:2:0"과 같은 형식입니다.
성공하면 hlayer_t로 변환된 값을 리턴합니다. 포맷이 틀릴 경우, -1을 리턴합니다.
Note
stringToHlayer API는 oasis::ui가 아닌 oasis 네임스페이스에 존재합니다.
Screen
기본 Screen 객체를 얻습니다.
ui::setup이 성공할 경우, 기본 Screen 객체를 리턴합니다. 실패했을 경우, nullptr을 리턴합니다.
Screen 객체의 너비를 얻습니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
Screen 객체의 높이를 얻습니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
Screen을 숨깁니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
Screen이 보이도록 합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
Screen 그리기에 걸리는 시간을 마이크로초 단위로 리턴합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
그리기에 걸린 시간입니다. 마이크로초 단위입니다.
Screen 캡춰 데이터를 생성합니다. 데이터는 PNG 포맷입니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
png_data
OUT
캡춰 데이터를 리턴합니다.
flags
플래그 값입니다. "0"을 지정합니다.
성공할 경우 캡춰 데이트 크기를 리턴합니다. 실패하면 -1을 리턴합니다.
Screen에 최상위 Window 객체를 추가합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
window
createWindow로 생성한 Window 객체입니다.
Screen에서 지정한 최상위 Window 객체를 제거합니다. 지정한 Window의 Reference가 없다면 소멸됩니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
window
createWindow로 생성한 Window 객체입니다.
Screen 터치 기능이 활성화되었는지 확인합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
활성화 되었으면 true를 리턴합니다. 비활성화된 경우 false를 리턴합니다.
Screen touch calibration 데이터가 유효한지를 확인합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
유효할 경우 true를 리턴합니다. 유효하지 않으면 false를 리턴합니다.
터치 calibration data 파일 경로를 얻습니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
터치 calibration data를 갱신합니다.
screen
getDefaultScreen으로 얻은 Screen 객체입니다.
cal_data_path
터치 조정 데이터 파일의 절대 경로입니다.
갱신에 성공했을 경우 true를 리턴합니다. 실패했을 경우 false를 리턴합니다.
Qt와 같은 외부 UI 컴포넌트 레이어가 열려있는 지 확인합니다.
hlayer
외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
외부 UI 컴포턴트 레이어가 열려있으면 true를 리턴합니다. 닫혀있으면 false를 리턴합니다.
Qt와 같은 외부 UI 컴포넌트 레이어를 닫습니다. 닫게 되면 디스플레이에 보이지 않습니다.
hlayer
외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
Qt와 같은 외부 UI 컴포넌트 레이어를 엽니다.
hlayer
외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
픽셀값을 디스플레이의 DPI 값에 따라 포인트 값으로 변환합니다.
pixel_size
변환하고자 하는 픽셀 값입니다.
변환된 포인트 값입니다. 디스플레이나 Screen 또는 DPI 값이 올바르지 않을 경우, 0을 리턴합니다.
포인트 값을 디스플레이의 DPI 값에 따라 픽셀 값으로 변환합니다.
point_size
변환하고자 하는 포인트 값입니다.
변환된 픽셀 값입니다. 디스플레이나 Screen 또는 DPI 값이 올바르지 않을 경우, 0을 리턴합니다.
UI 개발을 위한 플래그를 활성화합니다.
flags
활성화 또는 비활성화할 플래그 값입니다.
set
true이면 활성화하고, fasle이면 해당 플그래 값을 해제합니다.
플래그는 아래 값과 같습니다.
enum UIDevelFlags : uint64_t {
kUIDevelFlag_Border = 0x0000000000000001ull,
kUIDevelFlag_PrintCallStackOnLayout = 0x0000000000000002ull
};
kUIDevelFlag_Border는 각 widget의 border를 그립니다. kUIDevelFlag_PrintCallStackOnLayout 값은 사용하지 않습니다.
Widget에 문자열 ID를 지정합니다. Widget의 클래스 이름에도 지정한 ID가 반영됩니다. Widget 생성 시 ID는 빈 문자열입니다.
widget
Button, Image, Label, Container, Window 등의 Widget 객체입니다.
id
설정할 Widget ID 문자열입니다.
윗제의 기본 클래스 이름은 아래와 같습니다.
| Widget 객체 |
클래스 이름 |
| Button |
Button |
| Dialog |
Dialog |
| DrawingArea |
DrawingArea |
| FixedLayout |
Fixed |
| GridLayout |
Grid |
| BoxLayout |
Box |
| SingleLayout |
Single |
| Image |
Image |
| Label |
Label |
| ListBox |
ListBox |
| Window |
Window |
ui::setID로 Widget에 ID 문자열을 설정할 경우, 클래스 이름은 <클래스 이름>::<ID 문자열> 로 변경됩니다.
Widget의 시작 위치 (x, y)를 지정합니다. 각 좌표 값은 Screen으로 부터 상대적인 값입니다.
widget
Widget 객체입니다.
x
Widget의 x 좌표값입니다.
y
Widget의 y 좌표값입니다.
Widget의 고정 크기를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기를 사용합니다.
widget
Widget 객체입니다.
width
Widget의 고정크기 너비입니다.
height
Widget의 고정크기 높이입니다.
Widget의 고정 크기 높이를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기 높이를 사용합니다.
widget
Widget 객체입니다.
height
Widget의 고정크기 높이입니다.
Widget의 고정 크기 너비를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기 너비를 사용합니다.
widget
Widget 객체입니다.
width
Widget의 고정크기 너비입니다.
Widget의 크기 계산 요청 시 Widget이 선호하는 모드를 지정합니다. Container Widget은 이 모드 값을 근거로 Widget의 크기를 계산합니다.
widget
Widget 객체입니다.
size_mode
크기 요청 모드입니다.
SizeRequestMode 값은 아래와 같습니다.
| SizeRequestMode |
값 |
설명 |
| kSizeRequestHeightForWidth |
0 |
Widget은 너비를 알고 있는 상태에서 선호하는 높이를 계산합니다. |
| kSizeRequestWidthForHeight |
1 |
Widget은 높이를 알고 있는 상태에서 선호하는 너비를 계산합니다. perferredWidth를 호출할 경우, Container Widget은 우선 perferredHeight를 호출하여 Widget의 높이를 안 다음, preferredWidthForHeight를 호출합니다. |
| kSizeRequestConstantSize |
2 |
Widget은 Container Widget의 어떠한 크기 계산 요청에 응답할 수 있습니다. 이 경우 Container Widget은 preferredWidth와 perferredHeight를 우선 요청합니다. |
Widget의 그리기 영역을 리턴합니다. Graphic Context는 이 영역에서 그릴 수 있습니다.
widget
Widget 객체입니다.
rect
OUT
그리기 영역을 리턴합니다.
Note
그리기 영역은 Widget에서 margin 과 padding 크기를 제외한 영역입니다.
Widget에 사용자 정의 데이터를 설정합니다.
widget
Widget 객체입니다.
user_data
사용자 정의 데이터 포인터입니다.
Widget의 사용자 정의 데이터를 얻습니다.
사용자 정의 데이터를 리턴합니다. 사용자 정의 데이터가 설정되지 않은 경우, nullptr을 리턴합니다.
Widget에 dataset 값을 설정합니다.
widget
Widget 객체입니다.
attr
설정하려는 dataset의 키 값입니다.
value
dataset의 값입니다.
Widget의 dataset 값을 얻습니다.
widget
Widget 객체입니다.
attr
dataset 키 입니다.
키 값에 해당하는 값이 존재하면 그 값을 리턴하고, 없으면 nullptr을 리턴합니다.
Widget이 dataset 키 값을 가지고 있는 지 확인합니다.
widget
Widget 객체입니다.
attr
dataset 키 입니다.
-
true: 키 값이 있습니다.
-
false: 키 값이 없습니다.
Widget을 보이거나 보이지 않도록 적용합니다.
widget
Widget 객체입니다.
visible
true이면 Widget을 보이도록 하고, false이면 Widget을 숨깁니다.
Widget이 보이는지 확인합니다.
-
true: 보이도록 설정된 상태입니다.
-
false: 보이지 않도록 설정된 상태입니다.
Widget의 배경색을 지정합니다.
widget
Widget 객체입니다.
clr
배경색 값입니다.
repaint
배경색 지정 후 바로 다시 그릴지 지정합니다. true이면 다시 그립니다.
Widget의 테두리 색상을 지정합니다.
widget
Widget 객체입니다.
clr
테두리 색상입니다.
repaint
테두리 색상 지정후 바로 다시 그릴 것인지 지정합니다. true이면 다시 그립니다.
Widget의 테두리 굵기를 지정합니다.
widget
Widget 객체입니다.
size
테두리 굵기입니다. 픽셀 단위입니다.
repaint
테두리 굵기 변경 후 다시 그릴지 지정합니다. true이면 다시 그립니다.
Container Widget에서 Widget의 세로 맞춤을 설정합니다.
widget
Widget 객체입니다.
valign
세로 맞춤 값입니다.
가로/세로 맞춤 값은 아래와 같습니다.
| AlignType |
값 |
설명 |
| kAlignFill |
0 |
Widget을 꽉 채웁니다. 세로 맞춤의 경우, 높이를 확장합니다. 가로 맞춤의 경우, 너비를 확장합니다. |
| kAlignStart |
1 |
Widget을 시작 위치에 맞춥니다. 세로 맞춤의 경우, 상단에 배치합니다. 가로 맞춤의 경우, 왼쪽에 배치합니다. |
| kAlignEnd |
2 |
Widget의 끝 위치에 맞춥니다. 세로 맞춤의 경우, 하단에 배치합니다. 가로 맞춤의 경우, 오른쪽에 배치합니다. |
| kAlignCenter |
3 |
Widget을 중앙 위치에 맞춥니다. |
| kAlignBaseline |
4 |
세로 맞춤에 한하여, Widget의 Container의 baseline에 맞춥니다. |
Container Widget에서 Widget의 가로 맞춤을 설정합니다.
widget
Widget 객체입니다.
halign
가로 맞춤 값입니다.
Widget의 margin 값을 지정합니다.
widget
Widget 객체입니다.
margin
margin 값으로 위,아래,좌,우에 모두 적용됩니다. 픽셀 단위입니다.
Widget의 margin 값을 지정합니다.
widget
Widget 객체입니다.
margin_se
좌우 margin 값입니다. 픽셀 단위입니다.
margin_tb
위,아래 margin 값입니다. 픽셀 단위입니다.
Widget의 margin 값을 지정합니다.
widget
Widget 객체입니다.
margin_start
시작(왼쪽) margin 값입니다.
margin_top
상단 margin 값입니다.
margin_end
끝(오른쪽) margin 값입니다.
margin_bottom
하단 margin 값입니다.
Widget의 시작(왼쪽) margin을 지정합니다.
widget
Widget 객체입니다.
margin_start
왼쪽 margin 값입니다.
Widget의 끝(오른쪽) margin을 지정합니다.
widget
Widget 객체입니다.
margin_end
오른쪽 margin 값입니다.
Widget의 상단 margin을 지정합니다.
widget
Widget 객체입니다.
margin_top
상단 margin 값입니다.
Widget의 하단 margin을 지정합니다.
widget
Widget 객체입니다.
margin_bottom
하단 margin 값입니다.
Widget에 padding 값을 지정합니다.
widget
Widget 객체입니다.
padding
padding 값으로 위,아래,좌,우에 모두 적용됩니다. 픽셀 단위입니다.
Widget에 padding 값을 지정합니다.
widget
Widget 객체입니다.
margin_se
좌우 padding 값입니다. 픽셀 단위입니다.
margin_tb
위,아래 padding 값입니다. 픽셀 단위입니다.
Widget에 padding 값을 지정합니다.
widget
Widget 객체입니다.
margin_start
시작(왼쪽) padding 값입니다.
margin_top
상단 padding 값입니다.
margin_end
끝(오른쪽) padding 값입니다.
margin_bottom
하단 padding 값입니다.
Widget의 시작(왼쪽) padding을 지정합니다.
widget
Widget 객체입니다.
padding_start
시작 padding 값입니다.
Widget의 끝(오른쪽) padding을 지정합니다.
widget
Widget 객체입니다.
padding_end
끝 padding 값입니다.
Widget의 상단 padding을 지정합니다.
widget
Widget 객체입니다.
padding_top
상단 padding 값입니다.
Widget의 하단 padding을 지정합니다.
widget
Widget 객체입니다.
padding_bottom
하단 padding 값입니다.
ID를 Widget을 검색합니다.
widget
부모 Container Widget 객체입니다.
id
찾으려는 Widget의 ID 문자열입니다.
자식 Widget에서 id를 갖는 Widget을 찾으면, 그 Widget 객체를 리턴합니다. 찾지 못하거나, 부모 Widget이 올바르지 않으면 nullptr을 리턴합니다.
Widget의 크기 재조정을 요청합니다. Container Widget은 이 요청을 받아서 레이아웃을 진행합니다.
Widget의 선호 크기를 확인합니다.
widget
Widget 객체입니다.
size
OUT
Widget이 선호하는 크기를 리턴합니다.
일시적으로 Widget의 Geometry 갱신과 그리기를 막습니다.
일시적으로 막았던 Widget의 Geometry 갱신과 그리기를 해제합니다.
Widget에 애니메이션 그리기를 요청(rAF)합니다. 콜백이 호출되면 다시 rAF를 요청할 수 있습니다. 요청하지 않을 경우, 애니메이션 그리기 진행이 멈춥니다.
widget
Widget 객체입니다.
bind
애니메이션 그리기 콜백 함수입니다.
raf_bind_t는 아래와 같이 정의되어 있습니다.
DrawArea Widget에 애니메이션 그리기를 하려면 아래와 같은 방식으로 구현합니다.
// Player라는 객체에서 DrawingArea를 생성하고 여기에 rAF를 요청합니다.
int32_t Player::startDrawPictures()
{
std::function<void(ui::WidgetRef,GraphicContextRef)> canvas_draw_bind = std::bind(&Player::draw, this, std::placeholders::_1, std::placeholders::_2);
ui::DrawingAreaRef canvas = ui::createDrawingArea(canvas_draw_bind);
ui::setID(canvas, "picture_canvas");
ui::boxPackStart(vbox, canvas, true, true, 0);
ui::requestAnimatedFrame(canvas, canvas_draw_bind);
}
void Player::draw(ui::WidgetRef widget, GraphicContextRef gc)
{
Rect rect;
ui::getCanvasRect(widget, rect);
//그리기를 진행합니다.
if(!completed_) {
//필요에 따라 다시 rAF를 진행합니다.
std::function<void(ui::WidgetRef,GraphicContextRef)> canvas_draw_bind = std::bind(&Player::draw, this, std::placeholders::_1, std::placeholders::_2);
ui::requestAnimatedFrame(widget, canvas_draw_bind);
}
}
레이아웃 관련 로그를 활성화합니다.
widget
Widget 객체입니다.
enable
true이면 로그를 활성화하고, false이면 로그를 해제합니다.
apply_to_children
자식 Widget에게도 적용할지 여부를 지정합니다. true이면 자식 Widget에도 적용됩니다. false이면 자식 Widget에게는 적용되지 않습니다.
Widget에 개발자용 플래그를 설정합니다.
widget
Widget 객체입니다.
flags
플래그입니다.
set
true이면 플래그 값이 설정되고, false이면 플래그 값이 해제됩니다. 플래그 값은 setDevelFlags API를 참조합니다.
apply_to_children
자식 Widget에게도 적용할지 여부를 지정합니다. true이면 자식 Widget에도 적용됩니다. false이면 자식 Widget에게는 적용되지 않습니다.
Container Interface
Oasis GUI는 아래 레이아웃 컨테이너를 이용하여 자식 Widget을 레이아웃 합니다:
- 수직 또는 수평 방향으로 배치하는
Box 컨테이너 위젯
- 고정 위치에 배치하는
Fixed 컨테이너 위젯
- 그리드 방식으로 줄과 열을 지정하여 배치하는
Grid 컨테이너 위젯
- 단일 자식 위젯만 가지는
Single 컨테이너 위젯
- 리스트 스타일로 스크롤링이 가능한
ListBox 컨테이너 위젯
이들은 Container Interface에서 유도된 Widget 입니다.
Container Widget은 다른 Container Widget을 포함할 수 있습니다.
createBox, createFixed, createGrid, createWindow, createButton, createListBox 등으로 Container 인터페이스를 생성합니다.
레이아웃 컨테이너 위젯에 Widget을 자식으로 추가합니다.
container
Container 객체입니다.
widget
추가할 Widget 객체입니다.
레이아웃 컨테이너 위젯에서 Widget을 제거합니다.
container
Container 객체입니다.
widget
Widget 객체입니다.
Box Container
Box 컨테이너 위젯은 자식 위젯들을 가로 방향 또는 세로 방향으로 배치합니다.
Box 컨테이너 위젯을 생성합니다.
orientation
레이아웃 방향을 지정합니다. ui::kOrientationVertical 또는 ui::kOrientationHorizontal 값을 입력합니다. ui::kOrientationVertical는 위에서 아래 방향으로 자식 위젯을 배치하고, ui::kOrientationHorizontal는 왼쪽에서 오른쪽으로 자식 위젯을 배치합니다.
homogeneous
true를 설정하면 자식 위젯이 균일한 크기를 갖습니다. ui::kOrientationVertical의 경우, 높이가 균일하고, ui::kOrientationHorizontal의 경우, 너비가 균일합니다.
spacing
각 자식 위젯간 공간을 지정합니다. 픽셀단위입니다.
성공하면 Box 컨테이너 위젯을 리턴합니다. 실패하면 nullptr을 리턴합니다.
Box 컨테이너 위젯의 테두리를 그립니다.
box
createBox로 생성한 Box 컨테이너 위젯입니다.
x0
좌측 상단의 x 좌표입니다.
y0
좌측 상단의 y 좌표입니다.
x1
우측 하단의 x 좌표입니다.
y1
우측 하단의 y 좌표입니다.
clr
테두리 색상입니다.
Box 컨테이너 위젯에 자식 위젯을 Box의 시작 위치 기준으로 추가합니다. boxPackStart 로 추가된 Widget이 있다면 바로 다음 위치에 추가 됩니다.
box
createBox로 생성한 Box 컨테이너 위젯입니다.
widget
추가할 자식 Widget 객체입니다.
expand
Widget를 확장할지 여부를 지정합니다. ui::kOrientationVertical 방향으로 배치할 경우, 높이를 확장합니다.. ui::kOrientationHorizontal 방향으로 배치할 경우, 너비를 확장합니다. 여러 개의 자식 위젯의 expand 특성이 true인 경우, 그러한 자식 위젯들끼리 크기에 비례하여 확장됩니다.
fill
확장된 높이나 너비에 Widget를 채울지 여부를 지정합니다. ui::kOrientationVertical 방향으로 배치할 경우, 높이를 채웁니다. ui::kOrientationHorizontal 방향으로 배치할 경우, 너비를 채웁니다. fill이 false인 경우, Widget의 Align 특성 값에 맞게 배치됩니다. expand가 true 인 경우에만 적용됩니다.
padding
바로 전에 추가된 Widget과 간격입니다. 픽셀단위입니다. Widget과 Widget 간 공간 크기는 Box의 spacing과 이 padding 값을 합한 만큼 입니다. Widget 자체의 padding은 Widget 내에 적용됩니다.
Box 컨테이너 위젯에 자식 위젯을 Box의 끝 위치 기준으로 추가합니다. boxPackEnd 로 추가된 Widget이 있다면 바로 앞 위치에 추가 됩니다.
box
createBox로 생성한 Box 컨테이너 위젯입니다.
widget
추가할 자식 Widget 객체입니다.
expand
Widget를 확장할지 여부를 지정합니다. ui::kOrientationVertical 방향으로 배치할 경우, 높이를 확장합니다.. ui::kOrientationHorizontal 방향으로 배치할 경우, 너비를 확장합니다. 여러 개의 자식 위젯의 expand 특성이 true인 경우, 그러한 자식 위젯들끼리 크기에 비례하여 확장됩니다.
fill
확장된 높이나 너비에 Widget를 채울지 여부를 지정합니다. ui::kOrientationVertical 방향으로 배치할 경우, 높이를 채웁니다. ui::kOrientationHorizontal 방향으로 배치할 경우, 너비를 채웁니다. fill이 false인 경우, Widget의 Align 특성 값에 맞게 배치됩니다. expand가 true 인 경우에만 적용됩니다.
padding
바로 전에 추가된 Widget과 간격입니다. 픽셀단위입니다. Widget과 Widget 간 공간 크기는 Box의 spacing과 이 padding 값을 합한 만큼 입니다. Widget 자체의 padding은 Widget 내에 적용됩니다.
Fixed Container
Fixed 컨테이너 위젯은 자식 위젯들을 고정 위치에 배치합니다.
Fixed 컨테이너 위젯에 자식 위젯을 주어진 (x,y)에 추가합니다.
fixed
createFixed로 생성한 Fixed 컨테이너 위젯입니다.
widget
추가할 자식 Widget 객체입니다.
x
자식 위젯의 x 좌표입니다.
y
자식 위젯의 y 좌표입니다.
fixed
createFixed로 생성한 Fixed 컨테이너 위젯입니다.
widget
제거할 자식 Widget 객체입니다.
Grid Container
Grid 컨테이너 위젯은 행과 열을 기준으로 자식 위젯을 배치합니다.
행의 높이를 같도록 배치합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
homogeneous
Grid의 행을 같은 크기로 하여 자식 위젯을 배치합니다.
열의 너비를 같도록 배치합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
homogeneous
Grid의 열을 같은 크기로 하여 자식 위젯을 배치합니다.
행간 공간을 설정합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
spacing
행간 공간을 지정합니다. 픽셀 단위입니다.
열간 공간을 설정합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
spacing
열간 공간을 지정합니다. 픽셀 단위입니다.
고정폭으로 열 너비를 설정합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
col
열 인덱스입니다. 0 부터 시작합니다.
width
고정폭 너비입니다. 픽셀 단위입니다.
고정폭으로 행 높이를 설정합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
row
행 인덱스입니다. 0 부터 시작합니다.
height
고정폭 높이입니다. 픽셀 단위입니다.
자식 위젯을 Grid 컨테이너 위젯에 추가합니다.
grid
createGrid로 생성한 Grid 컨테이너 위젯입니다.
widget
추가할 자식 Widget 객체입니다.
left
자식 위젯이 위치할 Grid의 시작 열 인덱스입니다.
top
자식 위젯이 위치할 Grid의 시작 행 인덱스입니다.
width
자식 위젯이 차지할 Grid의 열 개수입니다.
height
자식 위젯이 차지할 Grid의 행 개수입니다.
Single Container
createWindow, createDialog, createButton 등으로 생성됩니다.
ListBox Container
ListBox 컨테이너 위젯은 스크롤 가능한 컨테이너로 자식 위젯을 배치합니다.
ListBox 컨테이너 위젯을 생성합니다.
type
ListBox 유형을 지정합니다. ui::kListBoxFixedItemSize 나 ui::kListBoxDynamicItemSize 값 중 하나를 지정합니다.
ListBox 컨테이너 위젯에 자식 위젯을 지정한 위치에 추가합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
widget
추가할 자식 Widget 객체입니다.
position
추가할 자식의 위치를 지정합니다. position 값이 -1 이거나 현재 ListBox 자식 위젯 개수보다 클 경우, 끝에 추가됩니다. position 값이 0 이면 맨앞에 추가됩니다.
ListBox 컨테이너 위젯에서 자식 위젯을 제거합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
widget
제거할 자식 Widget 객체입니다.
ListBox 컨테이너 위젯의 모든 자식 위젯을 제거합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
ListBox 컨테이너 위젯에 비어 있을 때 보이는 자식 위젯을 추가합니다. 이 위젯은 실제 ListBox에 포함되는 자식 위젯은 아닙니다. 하나 이상의 자식 위젯이 있을 경우, 보이지 않습니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
placeholder
비어 있는 ListBox에 보여질 Widget 객체입니다.
위로 스크롤링 합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
아래로 스크롤링 합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
페이지 업 합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
페이지 다운합니다.
listbox
createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
Window
최상위 Window 객체를 생성합니다. Window 객체의 부모 클래스는 SingleLayout 입니다. Window 객체는 보이지 않는 상태로 생성됩니다. showWindow 등을 호출하여 화면에 보이게 합니다.
title
Window의 타이틀 입니다. nullptr를 지정하면 Window 타이틀 바를 생성하지 않습니다.
성공하면 Window 객체를 리턴하고, 실패하면 nullptr을 리턴합니다.
Window 객체를 해제합니다.
window
createWindow로 생성한 Window 객체입니다.
Window에 타이틀 바를 표시할 지 여부를 지정합니다.
window
createWindow로 생성한 Window 객체입니다.
show
true이면 타이틀 바가 보이고, false이면 타이틀 바가 보이지 않습니다.
ID에 해당하는 Window 객체를 찾습니다.
id
Window 객체의 ID 입니다. 타이틀 값과 다릅니다.
Window 객체를 찾으면 Window 객체를 리턴하고, 찾지 못하면 nullptr을 리턴합니다.
최상위 Window로 지정합니다. 최상위 Window는 모든 Window 위에 존재하며 다른 Window에 가려지지 않습니다.
window
createWindow로 생성한 Window 객체입니다.
지정한 Window 객체가 해제될 때까지 기다립니다. 독립적인 RunLoop를 생성하여 다른 UI 이벤트들이 처리됩니다.
window
createWindow로 생성한 Window 객체입니다.
Dialog
Dialog 위젯을 생성합니다.
parent_window
Dialog 객체의 부모 Window 위젯입니다.
title
Dialog 창의 타이틀을 지정합니다. nullptr 일 경우, 타이틀 바가 생성되지 않습니다.
성공할 경우, Dialog 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
Dialog 위젯의 전체 배치를 담당하는 Box 컨테이너 위젯을 리턴합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
Dialog 위젯의 컨텐츠 영역의 배치를 담당하는 Box 컨테이너 위젯을 리턴합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
Dialog 위젯에 텍스트 버튼을 추가합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
button_text
버튼의 텍스입니다.
response_id
클릭이나 터치하였을 때 발생하는 ID 값을 지정합니다.
성공할 경우, 생성한 Button 위젯을 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
Dialog 위젯에 이미지 버튼을 추가합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
response_id
클릭이나 터치하였을 때 발생하는 ID 값을 지정합니다.
성공할 경우, 생성한 Button 위젯을 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
Dialog 위젯에 버튼을 추가합니다. 클릭이나 터치하였을 때 Button의 ID 값이 응답 값으로 사용됩니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
widget
Button Widget 객체입니다.
Dialog 위젯이 자동으로 닫히게 할 경우, 대기 시간을 지정합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
timeout_msecs
밀리초 단위의 대기 시간입니다.
response_id
자동으로 닫힐 경우, 응답 코드 값입니다.
Dialog 위젯의 디폴트 응답 코드 값을 설정합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
response_id
디폴트 응답 코드 값입니다.
Dialog 위젯을 화면에 표시합니다. Dialog가 종료될 때까지 대기합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
Dialog 위젯의 응답코드 값입니다. 실패시 -1을 리턴합니다.
Dialog 위젯의 응답 코드를 리턴하고 종료합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
response_id
응답 코드 값입니다.
Dialog 위젯을 해제합니다.
dialog
createDialog로 생성한 Dialog 객체입니다.
이미지 버튼 위젯을 생성합니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
텍스트 버튼 위젯을 생성합니다.
label
텍스트 입니다.
single_line
true이면 한 줄로 표시됩니다. false이면 여러 줄로 표시됩니다.
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
이미지와 텍스트가 있는 버튼 위젯 객체를 생성합니다.
label
텍스트 입니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
orientation
이미지와 텍스트 배열 방식을 지정합니다. kOrientationVertical 이나 kOrientationHorizontal 중 한 값을 지정합니다. kOrientationVertical 이미 이미지와 텍스트가 세로 방향으로 배치되고, kOrientationHorizontal 이면 이미지와 텍스트는 가로 방향으로 배치됩니다.
single_line
true이면 텍스트가 한 줄로 표시됩니다. false이면 텍스트가 여러 줄로 표시됩니다.
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
버튼 위젯의 Label 위젯 객체를 얻습니다.
버튼 위젯의 Image 위젯 객체를 얻습니다.
Button 위젯의 텍스트를 변경합니다. Label 위젯이 없으면 생성합니다.
button
Button 위젯 객체입니다.
text
텍스트 입니다.
텍스트 색상을 지정합니다.
button
Button 위젯 객체입니다.
clr
텍스트 색상입니다.
버튼의 이미지를 설정합니다. Image 위젯이 없으면 생성합니다.
button
Button 위젯 객체입니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
Image
Image 위젯을 PNG 파일로 부터 생성합니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
특정 이미지 포맷을 적용한 Image 위젯 객체를 생성합니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
format
사용할 특정 이미지 포맷을 지정합니다. -1 값을 지정하면 OASIS_PIXEL_FORMAT_BGRA_8888 포맷이 지정됩니다. 픽셀 포맷에 대해서는 OasisTypes.h 헤더 파일을 참조합니다.
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
PNG 이미지 파일에서 지원되는 픽셀 포맷은 아래와 같습니다.
- OASIS_PIXEL_FORMAT_BGRA_8888
- OASIS_PIXEL_FORMAT_BGRX_8888
- OASIS_PIXEL_FORMAT_ABGR_8888
- OASIS_PIXEL_FORMAT_XBGR_8888
- OASIS_PIXEL_FORMAT_ARGB_8888
- OASIS_PIXEL_FORMAT_XRGB_8888
JPEG 이미지 파일에서 지원되는 픽셀 포맷은 아래와 같습니다.
- OASIS_PIXEL_FORMAT_BGRA_8888
- OASIS_PIXEL_FORMAT_RGBA_8888
- OASIS_PIXEL_FORMAT_ARGB_8888
- OASIS_PIXEL_FORMAT_ABGR_8888
- OASIS_PIXEL_FORMAT_XRGB_8888
- OASIS_PIXEL_FORMAT_XBGR_8888
- OASIS_PIXEL_FORMAT_RGBX_8888
- OASIS_PIXEL_FORMAT_BGRX_8888
- OASIS_PIXEL_FORMAT_RGB_888
- OASIS_PIXEL_FORMAT_BGR_888
패딩을 적용한 Image 위젯 객체를 생성합니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
paddings
상하좌우 패딩을 지정합니다. 픽셀 단위입니다.
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
특정 이미지 포맷과 패딩을 적용한 Image 위젯 객체를 생성합니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
format
사용할 특정 이미지 포맷을 지정합니다. -1 값을 지정하면 OASIS_PIXEL_FORMAT_BGRA_8888 포맷이 지정됩니다. 픽셀 포맷에 대해서는 OasisTypes.h 헤더 파일을 참조합니다.
paddings
상하좌우 패딩을 지정합니다. 픽셀 단위입니다.
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
다른 Image 위젯의 특정 영역을 선택하여 새로운 Image 위젯 객체를 생성합니다.
ref_image
참조 대상의 Image 위젯 객체입니다.
crop_x
CROP 영역의 좌측 상단 x 좌표입니다.
crop_y
CROP 영역의 좌측 상단 y 좌표입니다.
crop_width
CROP 영역의 너비입니다.
crop_height
CROP 영역의 높이입니다.
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
새 이미지로 업데이트합니다.
image
Image 위젯 객체입니다.
image_path
PNG나 JPEG 유형의 이미지 파일 경로입니다.
참조 Image 위젯으로 부터 새 CROP 영역의 이미지를 복사합니다.
image
Image 위젯 객체입니다.
ref_image
참조 Image 위젯 객체입니다.
crop_x
CROP 영역의 좌측 상단 x 좌표입니다.
crop_y
CROP 영역의 좌측 상단 y 좌표입니다.
crop_width
CROP 영역의 너비입니다.
crop_height
CROP 영역의 높이입니다.
Color 키를 설정합니다.
image
Image 위젯 객체입니다.
color_key
Color 키 값입니다. 이 색상에 해당한 부분은 모두 투명처리됩니다.
이미지 크기를 얻습니다.
image
Image 위젯 객체입니다.
size
OUT
이미지 크기를 리턴합니다.
이미지를 지정한 각도로 회전합니다.
image
Image 위젯 객체입니다.
src_rect
회전할 대상 영역입니다.
dst_rect
회전이 적용된 목적지 영역입니다.
angle
회전할 각도입니다.
center
회전축 중심 좌표입니다.
Label
Label 위젯을 생성합니다.
성공하면 Label 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
라벨 텍스트를 변경합니다.
label
Label 위젯 객체입니다.
text
변경할 라벨 텍스트입니다.
라벨 가로 정렬 방식을 지정합니다.
label
Label 위젯 객체입니다.
Justification
Justification 값 중 하나를 입력합니다.
가로 Justification 은 아래와 같습니다.
| Justification |
값 |
설명 |
| kJustificationLeft |
0 |
왼쪽으로 정렬합니다. |
| kJustificationRight |
1 |
오른쪽으로 정렬합니다. |
| kJustificationCenter |
2 |
가운데로 정렬합니다. |
| kJustificationFill |
3 |
균등하게 정렬합니다. |
라벨 세로 정렬 방식을 지정합니다.
label
Label 위젯 객체입니다.
Justification
Justification 값 중 하나를 입력합니다.
세로 Justification 은 아래와 같습니다.
| Justification |
값 |
설명 |
| kJustificationTop |
0 |
위쪽으로 정렬합니다. |
| kJustificationBottom |
1 |
아래쪽으로 정렬합니다. |
| kJustificationVCenter |
2 |
세로 가운데로 정렬합니다. |
| kJustificationFill |
3 |
균등하게 정렬합니다. |
글자 단위로 자동 줄바꿈할 지 여부를 지정합니다.
label
Label 위젯 객체입니다.
enable
true이면 글자 단위로 자동 줄바꿈 합니다.
여러 줄을 지원할 지 여부를 지정합니다.
label
Label 위젯 객체입니다.
disable
true이면 여러 줄이 아닌 한 줄로 렌더링합니다.
라벨 텍스트 색상을 지정합니다.
label
Label 위젯 객체입니다.
clr
라벨 텍스트 색상입니다.
라벨 텍스트 폰트와 포인트 크기를 변경합니다.
label
Label 위젯 객체입니다.
point_size
라벨 폰트 크기입니다. 포인트 단위입니다.
font_path
라벨 폰트 파일 경로입니다.
라벨 폰트 사이즈를 설정합니다.
label
Label 위젯 객체입니다.
point_size
라벨 텍스트의 포인트 크기입니다.
라벨 렌더링 시 Alpha 모드를 적용할지 여부를 지정합니다.
label
Label 위젯 객체입니다.
enable
true이면 Alpha 모드가 적용되어 anti-aliasing으로 렌더링 됩니다.
Graphic Context
Oasis는 GraphicContext 객체를 이용하여 Screen에 그리는 작업을 합니다.
하드웨어 가속이 지원될 경우, 하드웨어 가속을 사용합니다.
DrawingArea 위젯으로 그리기를 할 수 있습니다.
Widget 객체로 부터 GraphicContext 객체를 얻습니다.
성공할 경우, GraphicContext 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
그리기를 시작합니다.
graphic_context
GraphicContext 객체입니다.
그리기를 종료합니다. 그동안 그렸던 내용을 디스플레이에 반영합니다.
graphic_context
GraphicContext 객체입니다.
현재 GraphicContext 특성을 스택에 저장합니다.
graphic_context
GraphicContext 객체입니다.
바로 이전에 저장했던 GraphicContext를 스택에서 복원합니다.
graphic_context
GraphicContext 객체입니다.
선을 그립니다.
graphic_context
GraphicContext 객체입니다.
x0
선의 시작 x 좌표입니다.
y0
선의 시작 y 좌표입니다.
x1
선의 끝 x 좌표입니다.
y1
선의 끝 y 좌표입니다.
clr
선 색상입니다.
수직선을 그립니다.
graphic_context
GraphicContext 객체입니다.
x
수직선의 x 좌표입니다.
top
수직선의 시작 y 좌표입니다.
bottom
수직선의 끝 y 좌표입니다.
clr
선 색상입니다.
수평선을 그립니다.
graphic_context
GraphicContext 객체입니다.
y
수평선의 y 좌표입니다.
left
수평선의 시작 x 좌표입니다.
right
수평선의 끝 x 좌표입니다.
clr
선 색상입니다.
사각형을 그립니다.
graphic_context
GraphicContext 객체입니다.
left
사각형 좌측 상단의 x 좌표입니다.
top
사각형 좌측 상단의 y 좌표입니다.
right
사각형 우측 하단의 x 좌표입니다.
bottom
사각형 우측 하단의 y 좌표입니다.
clr
테두리 색상입니다.
사각형을 채웁니다.
graphic_context
GraphicContext 객체입니다.
left
사각형 좌측 상단의 x 좌표입니다.
top
사각형 좌측 상단의 y 좌표입니다.
right
사각형 우측 하단의 x 좌표입니다.
bottom
사각형 우측 하단의 y 좌표입니다.
clr
채울 색상입니다.
폰트와 폰트 크기를 변경합니다.
graphic_context
GraphicContext 객체입니다.
point_size
폰트 크기입니다. 포인트 단위입니다.
font_path
폰트 파일의 경로입니다.
글자 색상을 지정합니다.
graphic_context
GraphicContext 객체입니다.
argb
글자 색상입니다.
글자 배경색사을 지정합니다.
graphic_context
GraphicContext 객체입니다.
argb
글자 배경색상입니다.
글자 배경색상 처리 방식을 지정합니다.
graphic_context
GraphicContext 객체입니다.
bk_mode
kTextBkModeTransparent를 지정하면 글자 배경은 투명하게 처리됩니다. kTextBkModeOpaque를 지정하면 글자 배경 색상이 적용됩니다.
텍스트를 그립니다.
graphic_context
GraphicContext 객체입니다.
string
32비트 UNICODE 문자열 벡터입니다.
left
문자열이 그려질 영역의 우측 상단의 x 좌표입니다.
top
문자열이 그려질 영역의 우측 상단의 y 좌표입니다.
width
문자열이 그려질 영역의 너비입니다.
height
문자열이 그려질 영역의 높이입니다.
flags
문자열을 그리기 시에 참조할 플래그 값입니다.
caret_index
사용할 커서 모양입니다. 사용하지 않습니다
caret_pos
커서 위치입니다. 사용하지 않습니다
drawText의 flags 값은 아래 값들을 OR'ing 합니다.
| flag |
값 |
의미 |
| DT_TOP |
0x00000000 |
글자의 세로 기준을 위쪽에 맞춥니다. |
| DT_LEFT |
0x00000000 |
글자를 왼쪽으로 정렬합니다. |
| DT_CENTER |
0x00000001 |
글자를 가운데로 맞춥니다. |
| DT_RIGHT |
0x00000002 |
글자를 오른쪽으로 정렬합니다. |
| DT_VCENTER |
0x00000004 |
글자의 세로 기준을 가운데로 맞춥니다. |
| DT_BOTTOM |
0x00000008 |
글자의 세로 기준을 아래로 맞춥니다. |
| DT_WORDBREAK |
0x00000010 |
단어 단위 줄바꿈을 허용합니다. |
| DT_SINGLELINE |
0x00000020 |
단일 줄로 처리합니다. |
| DT_CALCRECT |
0x00000400 |
문자열이 그려질 영역을 계산합니다. 실제 그리지는 않습니다. |
| DT_NOPREFIX |
0x00000800 |
문자열에 prefix 기호(&)를 처리하지 않습니다. "&abc" 인 경우, "abc"로 그려집니다. |
| DT_NOFULLWIDTHCHARBREAK |
0x00080010 |
한 글자가 허용 너비를 초과할 경우, 그 글자를 줄바꿈 없이 처리합니다. |
graphic_context
GraphicContext 객체입니다.
string
문자열입니다.
left
문자열이 그려질 영역의 우측 상단의 x 좌표입니다.
top
문자열이 그려질 영역의 우측 상단의 y 좌표입니다.
width
문자열이 그려질 영역의 너비입니다.
height
문자열이 그려질 영역의 높이입니다.
flags
문자열을 그리기 시에 참조할 플래그 값입니다.
caret_index
사용할 커서 모양입니다. 사용하지 않습니다
caret_pos
커서 위치입니다. 사용하지 않습니다
Widget의 배경색상을 지정합니다. 그릴 때만 적용되며, 원래 Widget의 배경색상을 덮어씁니다.
graphic_context
GraphicContext 객체입니다.
clr
배경색상입니다.
Drawing Area
DrawingArea 위젯을 생성합니다.
성공하면 DrawingArea 위젯을 리턴합니다. 실패하면 nullptr을 리턴합니다.
아래는 DrawingArea를 생성하고 그리는 예입니다.
int32_t App::create()
{
//DrawingArea 객체를 생성합니다.
canvas_ = ui::createDrawingArea(std::bind(&App::draw, this, std::placeholders::_1, std::placeholders::_2));
ui::setID(canvas_, "my_drawingarea");
ui::gridAttach(grid, canvas_, 0, 0, 1, 1);
}
void App::draw(ui::WidgetRef widget, GraphicContextRef gc)
{
//전체를 검정색으로 칠합니다.
Color clr_bk(255, 0, 0, 0);
ui::fillRectangle(gc, 0, 0, width_, height_, clr_bk);
//노란색 박스를 그립니다.
Color clr_line(255, 255, 255, 0);
ui::drawRectangle(gc, 10, 10, 100, 100, clr_line);
//문자열을 그립니다.
std::string text = "안녕하세요!";
ui::setFont(gc, 11);
ui::setTextForeColor(gc, Color(255, COLOR_WHITE)());
ui::drawText(gc, str, 20, 20, 80, 80, DT_CENTER|DT_VCENTER);
}
Keypad
키패드를 생성합니다.
parent_window
부모 Window 객체입니다.
keypad_title
키패드 제목입니다.
init_value
키패드 문자열 초기 값입니다.
cancel_label
취소 버튼의 라벨입니다.
ok_label
확인 버튼의 라벨입니다.
성공하면 Keypad 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
Keypad를 보여주고, 사용자가 확인이나 취소 버튼을 누를 때까지 기다립니다.
수정된 문자열을 리턴합니다. 취소를 누를 경우, 원래 문자열이 수정없이 리턴됩니다.
아래는 키보드를 활용한 예입니다.
void cancel_handler(int sig)
{
ui::quitAllRunContexts();
got_interrupt = true;
}
int main(int argc, char *argv[])
{
int32_t err;
signal(SIGINT, cancel_handler);
oasis::key_value_map_t parameters;
parameters["offs-disable"] = "1";
if(oasis::initialize(parameters) < 0) {
DLOG(DLOG_ERROR, "Oasis init failed\n");
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////////
// display setup
parameters.clear();
parameters["memory-type"] = "ion"; //cma
parameters["screen-width"] = "480";
parameters["screen-height"] = "320";
display::setup(parameters);
//////////////////////////////////////////////////////////////////////////////////////////
// ui setup
parameters.clear();
parameters["system-font-size"] = "11";
parameters["system-font-path"] = "/mnt/sd/NanumGothicCoding.ttf";
parameters["display-rotation"] = "0";
parameters["enable-touch"] = "1";
parameters["touch-cal-data-path"] = "/mnt/sd/cal.dat";
err = ui::setup(parameters);
if (err < 0) {
DLOG(DLOG_ERROR, "Oasis ui::setup failed\n");
return -1;
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
ui::ScreenRef screen = ui::getDefaultScreen();
//ASSERT(screen != nullptr);
int32_t screen_width = ui::screenWidth(screen);
int32_t screen_height = ui::screenHeight(screen);
ui::DialogRef dialog = ui::createDialog(nullptr);
ui::setBgColor(dialog, Color(255, COLOR_BLACK));
ui::setBorderSize(dialog, 0, false);
ui::BoxRef dialog_container = ui::getDialogContainerBox(dialog);
ui::setHAlign(dialog_container, ui::kAlignFill);
ui::setVAlign(dialog_container, ui::kAlignFill);
ui::setMargin(dialog_container, 0);
ui::BoxRef content_area = ui::getDialogContentArea(dialog); //horz box layout
ui::KeypadRef keypad = ui::createKeypad(dialog, "암호 입력", "1122334455", "취소", "확인");
// ui::setVAlign(keypad, ui::kAlignFill);
// ui::setHAlign(keypad, ui::kAlignFill);
ui::screenAdd(screen, dialog);
std::string str = ui::showKeypad(keypad);
err = ui::runDialog(dialog);
ui::destroyDialog(dialog);
err = ui::cleanup();
oasis::finalize();
return 0;
}
응용 예에서 보여지는 키패드 화면입니다.

Timer
타이머를 생성합니다.
timeout_name
타이머 이름입니다.
intervalUs
타이머 이벤트 발생 주기를 지정합니다. 마이크로초 단위 입니다.
slot
타이머 이벤트 핸들러를 등록합니다.
성공하면 타이머 ID를 리턴합니다. 실패하면 -1을 리턴합니다.
source_slot_t는 아래와 같이 정의되어 있습니다.
사용자 정의 타이머 콜백 함수입니다.
-
true: 타이머 동작을 유지합니다.
-
false: 타이머를 자동으로 중지하고 제거합니다.
타이머를 활성화합니다.
timeout_id
타이머 ID 값입니다.
enable
true이면 타이머를 활성화하고, false이면 타이머를 중지합니다.
타이머가 동작 중인지 확인합니다.
-
true: 타이머가 동작 중입니다.
-
false: 타이머가 멈춰 있습니다.
아래는 1초 단위로 타이머를 발생시키는 예입니다.
// 타이머를 생성합니다.
timer_id_ = ui::timeoutAdd("tick_timer", 1000000, sig::mem_fn(*this, &App::tickTimer));
if(timer_id_ > 0) {
//타이머를 시작합니다.
ui::timeoutEnable(timer_id_, true);
}
bool App::tickTimer()
{
// 타이머 작업을 합니다.
// 타이머를 해제하려면 false를 리턴합니다.
//return false;
return true;
}
Signaling
Oasis GUI 이벤트 발생과 처리는 signal-slot 메카니즘을 이용합니다.
이벤트 처리 함수를 대상 객체에 연결합니다.
object
이벤트를 발생하는 객체로 Signal 연결 대상 객체입니다.
signal_name
이벤트 Signal 이름입니다.
slot
이벤트 핸들러 함수입니다.
flags
플래그 값입니다. 0을 설정합니다.
이벤트 처리 함수 연결을 해제합니다. 대상 위젯이 해제될 때 자동으로 Signal 처리 연결이 해제됩니다.
signal_id
해제할 Signal ID 값입니다.
Oasis는 아래와 같은 클릭과 터치 이벤트 처리를 위해 Signaling template을 사용합니다.
- clicked
- touch-up-event
- touch-down-event
- touch-move-event
각 이벤트 처리 함수 타입은 아래와 같습니다.
사용자 정의 클릭 이벤트 콜백 함수입니다.
ui::WidgetRef
클릭 이벤트가 발생한 Widget 객체입니다.
사용자 정의 touch down 이벤트 콜백 함수입니다.
ui::ScreenRef
터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*
터치 이벤트 데이터 입니다.
사용자 정의 touch up 이벤트 콜백 함수입니다.
ui::ScreenRef
터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*
터치 이벤트 데이터 입니다.
사용자 정의 touch move 이벤트 콜백 함수입니다.
ui::ScreenRef
터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*
터치 이벤트 데이터 입니다.
int32_t
z
장치의 z 좌표입니다. 압력 수치를 의미합니다.
int32_t
screen_x
Screen에서 x 좌표입니다.
int32_t
screen_y
Screen에서 y 좌표입니다.
bool
is_down
눌러진 상태이면 true 값을 갖습니다.
int32_t
repeat
반복 횟수를 의미합니다. 더블터치, 트리플터치 구분 용도입니다.
uint64_t
timestamp
발생 시점의 timestamp로 마이크로초 단위입니다.
int32_t
holding_msec
눌러진 상태 유지 기간입니다. 밀리초 단위입니다.
아래는 Signal 연결 예입니다.
// "clicked" signal 핸들러 연결
uint32_t clicked_sigid = ui::connectSignal(apply_button, "clicked", clicked_slot_t(sig::mem_fn(*this, &App::applyButtonClicked)), 0);
// "touch-down-event" signal 핸들러 연결
uint32_t touch_down_event_sigid = ui::connectSignal(drawing_canvas, "touch-down-event", touch_down_event_slot_t(sig::mem_fn(*this, &App::touchedDown)), 0);
// "touch-up-event" signal 핸들러 연결
uint32_t touch_up_event_sigid = ui::connectSignal(drawing_canvas, "touch-up-event", touch_up_event_slot_t(sig::mem_fn(*this, &App::touchedUp)), 0);
// "touch-move-event" signal 핸들러 연결
uint32_t touch_move_event_sigid = ui::connectSignal(drawing_canvas, "touch-move-event", touch_move_event_slot_t(sig::mem_fn(*this, &App::touchedMove)), 0);
Running Context
Oasis는 이벤트 처리를 위해 RunningLoop를 이용합니다. RunningLoop는 RunnContext를 가지고 있습니다.
응용프로그램을 SIGINT 등 신호 처리기에서 강제 종료하고자 할 때 사용합니다.