GUI Framework API

oasis::ui 네임스페이스 범주에서 호출됩니다.

헤더 파일

OasisUI.h

초기화와 해제

int32_t setup ( key_value_map_t & parameters )
OasisUI.h
oasis::ui를 초기화하고 기본 Screen 객체를 생성합니다.
매개변수
parameters  oasis::ui 초기화에 필요한 key-value map 입니다.
리턴값
  • 0: 성공
  • -1: 실패

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-layerhide-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);
int32_t cleanup ( )
OasisUI.h
oasis::ui에서 할당된 자원을 해제하고 종료합니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t getDisplayFD ( )
OasisUI.h
칩셋 드라이버가 display 장치를 /dev/disp 와 같이 device node tree에 노출하였을 경우, 해당 장치 드라이버 핸들을 리턴합니다.
리턴값
성공할 경우, 장치 핸들 번호를 리턴합니다. 지원하지 않거나 실패할 경우 -1을 리턴합니다.
void * getDisplayHandle ( )
OasisUI.h
칩셋 드라이버가 display 장치용 핸들 객체를 사용할 경우, 해당 객체를 얻습니다. 이 객체는 칩셋의 Display 핸들 포인터입니다.
리턴값
성공할 경우, Display 핸들 객체를 리턴합니다. 지원하지 않거나 실패할 경우 nullptr을 리턴합니다.
hlayer_t stringToHlayer ( const char * str )
OasisUI.h
HLAYER 문자열 포맷을 hlayer_t 타입의 정수형으로 변환합니다.
매개변수
str  HLAYER 문자열 포인터입니다. 문자열은 ":"로 구분된 각 레이어 컴포턴트 ID 입니다. 예를들어, "1:2:0"과 같은 형식입니다.
리턴값
성공하면 hlayer_t로 변환된 값을 리턴합니다. 포맷이 틀릴 경우, -1을 리턴합니다.

Note

stringToHlayer API는 oasis::ui가 아닌 oasis 네임스페이스에 존재합니다.

Screen

ScreenRef getDefaultScreen ( )
OasisUI.h
기본 Screen 객체를 얻습니다.
리턴값
ui::setup이 성공할 경우, 기본 Screen 객체를 리턴합니다. 실패했을 경우, nullptr을 리턴합니다.
int32_t screenWidth ( const ScreenRef & screen )
OasisUI.h
Screen 객체의 너비를 얻습니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t screenHeight ( const ScreenRef & screen )
OasisUI.h
Screen 객체의 높이를 얻습니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
void screenHide ( const ScreenRef & screen )
OasisUI.h
Screen을 숨깁니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
void screenShow ( const ScreenRef & screen )
OasisUI.h
Screen이 보이도록 합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
int64_t screenLastDrawnElapsedTimeInUsec ( const ScreenRef & screen )
OasisUI.h
Screen 그리기에 걸리는 시간을 마이크로초 단위로 리턴합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
그리기에 걸린 시간입니다. 마이크로초 단위입니다.
ssize_t takeScreenShot ( const ScreenRef & screen , std::vector<uint8_t> & png_data , uint32_t flags = 0 )
OasisUI.h
Screen 캡춰 데이터를 생성합니다. 데이터는 PNG 포맷입니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
png_data  OUT 캡춰 데이터를 리턴합니다.
flags  플래그 값입니다. "0"을 지정합니다.
리턴값
성공할 경우 캡춰 데이트 크기를 리턴합니다. 실패하면 -1을 리턴합니다.
void screenAdd ( const ScreenRef & screen , const WindowRef & window )
OasisUI.h
Screen에 최상위 Window 객체를 추가합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
window  createWindow로 생성한 Window 객체입니다.
void screenRemove ( const ScreenRef & screen , const WindowRef & window )
OasisUI.h
Screen에서 지정한 최상위 Window 객체를 제거합니다. 지정한 Window의 Reference가 없다면 소멸됩니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
window  createWindow로 생성한 Window 객체입니다.
bool screenTouchInputEnabled ( const ScreenRef & screen )
OasisUI.h
Screen 터치 기능이 활성화되었는지 확인합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
활성화 되었으면 true를 리턴합니다. 비활성화된 경우 false를 리턴합니다.
bool screenTouchCalDataPathValid ( const ScreenRef & screen )
OasisUI.h
Screen touch calibration 데이터가 유효한지를 확인합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
유효할 경우 true를 리턴합니다. 유효하지 않으면 false를 리턴합니다.
const char * screenTouchCalDataPath ( const ScreenRef & screen )
OasisUI.h
터치 calibration data 파일 경로를 얻습니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
리턴값
터치 조정 데이터 파일 경로를 리턴합니다.
bool screenUpdateTouchCalData ( const ScreenRef & screen , const char * cal_data_path )
OasisUI.h
터치 calibration data를 갱신합니다.
매개변수
screen  getDefaultScreen으로 얻은 Screen 객체입니다.
cal_data_path  터치 조정 데이터 파일의 절대 경로입니다.
리턴값
갱신에 성공했을 경우 true를 리턴합니다. 실패했을 경우 false를 리턴합니다.
bool isUnmanagedUILayerOpen ( int32_t hlayer )
OasisUI.h
Qt와 같은 외부 UI 컴포넌트 레이어가 열려있는 지 확인합니다.
매개변수
hlayer  외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
리턴값
외부 UI 컴포턴트 레이어가 열려있으면 true를 리턴합니다. 닫혀있으면 false를 리턴합니다.
int32_t closeUnmanagedUILayer ( int32_t hlayer )
OasisUI.h
Qt와 같은 외부 UI 컴포넌트 레이어를 닫습니다. 닫게 되면 디스플레이에 보이지 않습니다.
매개변수
hlayer  외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t openUnmanagedUILayer ( int32_t hlayer )
OasisUI.h
Qt와 같은 외부 UI 컴포넌트 레이어를 엽니다.
매개변수
hlayer  외부 UI 컴포넌트가 사용하는 HLAYER 입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t pixelToPoint ( int32_t pixel_size )
OasisUI.h
픽셀값을 디스플레이의 DPI 값에 따라 포인트 값으로 변환합니다.
매개변수
pixel_size  변환하고자 하는 픽셀 값입니다.
리턴값
변환된 포인트 값입니다. 디스플레이나 Screen 또는 DPI 값이 올바르지 않을 경우, 0을 리턴합니다.
int32_t pointToPixel ( int32_t point_size )
OasisUI.h
포인트 값을 디스플레이의 DPI 값에 따라 픽셀 값으로 변환합니다.
매개변수
point_size  변환하고자 하는 포인트 값입니다.
리턴값
변환된 픽셀 값입니다. 디스플레이나 Screen 또는 DPI 값이 올바르지 않을 경우, 0을 리턴합니다.
void setDevelFlags ( uint64_t flags , bool set = true )
OasisUI.h
UI 개발을 위한 플래그를 활성화합니다.
매개변수
flags  활성화 또는 비활성화할 플래그 값입니다.
set  true이면 활성화하고, fasle이면 해당 플그래 값을 해제합니다.

플래그는 아래 값과 같습니다.

enum UIDevelFlags : uint64_t {
    kUIDevelFlag_Border = 0x0000000000000001ull,
    kUIDevelFlag_PrintCallStackOnLayout = 0x0000000000000002ull
};

kUIDevelFlag_Border는 각 widget의 border를 그립니다. kUIDevelFlag_PrintCallStackOnLayout 값은 사용하지 않습니다.

Widget

void setID ( const WidgetRef & widget , const char * id )
OasisUI.h
Widget에 문자열 ID를 지정합니다. Widget의 클래스 이름에도 지정한 ID가 반영됩니다. Widget 생성 시 ID는 빈 문자열입니다.
매개변수
widget  Button, Image, Label, Container, Window 등의 Widget 객체입니다.
id  설정할 Widget ID 문자열입니다.
const char * getID ( const WidgetRef & widget )
OasisUI.h
Widget의 ID 문자열을 리턴합니다.
매개변수
widget  Widget 객체입니다.
리턴값
Widget의 ID 문자열입니다.
const char * clsName ( const WidgetRef & widget )
OasisUI.h
Widget의 클래스 이름을 얻습니다.
매개변수
widget  Widget 객체입니다.
리턴값
Widget의 클래스 이름입니다.

윗제의 기본 클래스 이름은 아래와 같습니다.

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 문자열> 로 변경됩니다.

void setPos ( const WidgetRef & widget , int32_t x , int32_t y )
OasisUI.h
Widget의 시작 위치 (x, y)를 지정합니다. 각 좌표 값은 Screen으로 부터 상대적인 값입니다.
매개변수
widget  Widget 객체입니다.
x  Widget의 x 좌표값입니다.
y  Widget의 y 좌표값입니다.
void setFixedSize ( const WidgetRef & widget , int32_t width , int32_t height )
OasisUI.h
Widget의 고정 크기를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기를 사용합니다.
매개변수
widget  Widget 객체입니다.
width  Widget의 고정크기 너비입니다.
height  Widget의 고정크기 높이입니다.
void setFixedHeight ( const WidgetRef & widget , int32_t height )
OasisUI.h
Widget의 고정 크기 높이를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기 높이를 사용합니다.
매개변수
widget  Widget 객체입니다.
height  Widget의 고정크기 높이입니다.
void setFixedWidth ( const WidgetRef & widget , int32_t width )
OasisUI.h
Widget의 고정 크기 너비를 지정합니다. 고정 크기가 설정된 Widget은 컨테이너 Widget이 이 Widget의 레이아웃 계산할 때 고정 크기 너비를 사용합니다.
매개변수
widget  Widget 객체입니다.
width  Widget의 고정크기 너비입니다.
void setSizeRequestMode ( const WidgetRef & widget , SizeRequestMode size_mode )
OasisUI.h
Widget의 크기 계산 요청 시 Widget이 선호하는 모드를 지정합니다. Container Widget은 이 모드 값을 근거로 Widget의 크기를 계산합니다.
매개변수
widget  Widget 객체입니다.
size_mode  크기 요청 모드입니다.

SizeRequestMode 값은 아래와 같습니다.

SizeRequestMode 설명
kSize​Request​Height​For​Width 0 Widget은 너비를 알고 있는 상태에서 선호하는 높이를 계산합니다.
kSize​Request​Width​For​Height 1 Widget은 높이를 알고 있는 상태에서 선호하는 너비를 계산합니다. perferredWidth를 호출할 경우, Container Widget은 우선 perferredHeight를 호출하여 Widget의 높이를 안 다음, preferredWidthForHeight를 호출합니다.
kSize​Request​Constant​Size 2 Widget은 Container Widget의 어떠한 크기 계산 요청에 응답할 수 있습니다. 이 경우 Container Widget은 preferredWidthperferredHeight를 우선 요청합니다.
void getCanvasRect ( const WidgetRef & widget , Rect & rect )
OasisUI.h
Widget의 그리기 영역을 리턴합니다. Graphic Context는 이 영역에서 그릴 수 있습니다.
매개변수
widget  Widget 객체입니다.
rect  OUT 그리기 영역을 리턴합니다.

Note

그리기 영역은 Widget에서 margin 과 padding 크기를 제외한 영역입니다.

void * setUserData ( const WidgetRef & widget , void * user_data )
OasisUI.h
Widget에 사용자 정의 데이터를 설정합니다.
매개변수
widget  Widget 객체입니다.
user_data  사용자 정의 데이터 포인터입니다.
리턴값
void * getUserData ( const WidgetRef & widget )
OasisUI.h
Widget의 사용자 정의 데이터를 얻습니다.
매개변수
widget  Widget 객체입니다.
리턴값
사용자 정의 데이터를 리턴합니다. 사용자 정의 데이터가 설정되지 않은 경우, nullptr을 리턴합니다.
void setDataset ( const WidgetRef & widget , const char * attr , const char * value )
OasisUI.h
Widget에 dataset 값을 설정합니다.
매개변수
widget  Widget 객체입니다.
attr  설정하려는 dataset의 키 값입니다.
value  dataset의 값입니다.
const char * getDataset ( const WidgetRef & widget , const char * attr )
OasisUI.h
Widget의 dataset 값을 얻습니다.
매개변수
widget  Widget 객체입니다.
attr  dataset 키 입니다.
리턴값
키 값에 해당하는 값이 존재하면 그 값을 리턴하고, 없으면 nullptr을 리턴합니다.
bool hasDataset ( const WidgetRef & widget , const char * attr )
OasisUI.h
Widget이 dataset 키 값을 가지고 있는 지 확인합니다.
매개변수
widget  Widget 객체입니다.
attr  dataset 키 입니다.
리턴값
  • true: 키 값이 있습니다.
  • false: 키 값이 없습니다.
bool setVisible ( const WidgetRef & widget , bool visible )
OasisUI.h
Widget을 보이거나 보이지 않도록 적용합니다.
매개변수
widget  Widget 객체입니다.
visible  true이면 Widget을 보이도록 하고, false이면 Widget을 숨깁니다.
리턴값
이전 상태를 리턴합니다.
bool isVisible ( const WidgetRef & widget )
OasisUI.h
Widget이 보이는지 확인합니다.
매개변수
widget  Widget 객체입니다.
리턴값
  • true: 보이도록 설정된 상태입니다.
  • false: 보이지 않도록 설정된 상태입니다.
Color setBgColor ( const WidgetRef & widget , Color clr , bool repaint = true )
OasisUI.h
Widget의 배경색을 지정합니다.
매개변수
widget  Widget 객체입니다.
clr  배경색 값입니다.
repaint  배경색 지정 후 바로 다시 그릴지 지정합니다. true이면 다시 그립니다.
리턴값
이전 배경색을 리턴합니다.
Color setBorderColor ( const WidgetRef & widget , Color clr , bool repaint = true )
OasisUI.h
Widget의 테두리 색상을 지정합니다.
매개변수
widget  Widget 객체입니다.
clr  테두리 색상입니다.
repaint  테두리 색상 지정후 바로 다시 그릴 것인지 지정합니다. true이면 다시 그립니다.
리턴값
이전 테두리 색상을 리턴합니다.
void setBorderSize ( const WidgetRef & widget , int32_t size , bool repaint = true )
OasisUI.h
Widget의 테두리 굵기를 지정합니다.
매개변수
widget  Widget 객체입니다.
size  테두리 굵기입니다. 픽셀 단위입니다.
repaint  테두리 굵기 변경 후 다시 그릴지 지정합니다. true이면 다시 그립니다.
void setVAlign ( const WidgetRef & widget , AlignType valign )
OasisUI.h
Container Widget에서 Widget의 세로 맞춤을 설정합니다.
매개변수
widget  Widget 객체입니다.
valign  세로 맞춤 값입니다.

가로/세로 맞춤 값은 아래와 같습니다.

AlignType 설명
kAlignFill 0 Widget을 꽉 채웁니다. 세로 맞춤의 경우, 높이를 확장합니다. 가로 맞춤의 경우, 너비를 확장합니다.
kAlignStart 1 Widget을 시작 위치에 맞춥니다. 세로 맞춤의 경우, 상단에 배치합니다. 가로 맞춤의 경우, 왼쪽에 배치합니다.
kAlignEnd 2 Widget의 끝 위치에 맞춥니다. 세로 맞춤의 경우, 하단에 배치합니다. 가로 맞춤의 경우, 오른쪽에 배치합니다.
kAlignCenter 3 Widget을 중앙 위치에 맞춥니다.
kAlignBaseline 4 세로 맞춤에 한하여, Widget의 Container의 baseline에 맞춥니다.
void setHAlign ( const WidgetRef & widget , AlignType halign )
OasisUI.h
Container Widget에서 Widget의 가로 맞춤을 설정합니다.
매개변수
widget  Widget 객체입니다.
halign  가로 맞춤 값입니다.
void setMargin ( const WidgetRef & widget , int32_t margin )
OasisUI.h
Widget의 margin 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin  margin 값으로 위,아래,좌,우에 모두 적용됩니다. 픽셀 단위입니다.
void setMargin ( const WidgetRef & widget , int32_t margin_se , int32_t margin_tb )
OasisUI.h
Widget의 margin 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_se  좌우 margin 값입니다. 픽셀 단위입니다.
margin_tb  위,아래 margin 값입니다. 픽셀 단위입니다.
void setMargin ( const WidgetRef & widget , int32_t margin_start , int32_t margin_top , int32_t margin_end , int32_t margin_bottom )
OasisUI.h
Widget의 margin 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_start  시작(왼쪽) margin 값입니다.
margin_top  상단 margin 값입니다.
margin_end  끝(오른쪽) margin 값입니다.
margin_bottom  하단 margin 값입니다.
void setMarginStart ( const WidgetRef & widget , int32_t margin_start )
OasisUI.h
Widget의 시작(왼쪽) margin을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_start  왼쪽 margin 값입니다.
void setMarginEnd ( const WidgetRef & widget , int32_t margin_end )
OasisUI.h
Widget의 끝(오른쪽) margin을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_end  오른쪽 margin 값입니다.
void setMarginTop ( const WidgetRef & widget , int32_t margin_top )
OasisUI.h
Widget의 상단 margin을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_top  상단 margin 값입니다.
void setMarginBottom ( const WidgetRef & widget , int32_t margin_bottom )
OasisUI.h
Widget의 하단 margin을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_bottom  하단 margin 값입니다.
void setPadding ( const WidgetRef & widget , int32_t padding )
OasisUI.h
Widget에 padding 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
padding  padding 값으로 위,아래,좌,우에 모두 적용됩니다. 픽셀 단위입니다.
void setPadding ( const WidgetRef & widget , int32_t margin_se , int32_t margin_tb )
OasisUI.h
Widget에 padding 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_se  좌우 padding 값입니다. 픽셀 단위입니다.
margin_tb  위,아래 padding 값입니다. 픽셀 단위입니다.
void setPadding ( const WidgetRef & widget , int32_t margin_start , int32_t margin_top , int32_t margin_end , int32_t margin_bottom )
OasisUI.h
Widget에 padding 값을 지정합니다.
매개변수
widget  Widget 객체입니다.
margin_start  시작(왼쪽) padding 값입니다.
margin_top  상단 padding 값입니다.
margin_end  끝(오른쪽) padding 값입니다.
margin_bottom  하단 padding 값입니다.
void setPaddingStart ( const WidgetRef & widget , int32_t padding_start )
OasisUI.h
Widget의 시작(왼쪽) padding을 지정합니다.
매개변수
widget  Widget 객체입니다.
padding_start  시작 padding 값입니다.
void setPaddingEnd ( const WidgetRef & widget , int32_t padding_end )
OasisUI.h
Widget의 끝(오른쪽) padding을 지정합니다.
매개변수
widget  Widget 객체입니다.
padding_end  끝 padding 값입니다.
void setPaddingTop ( const WidgetRef & widget , int32_t padding_top )
OasisUI.h
Widget의 상단 padding을 지정합니다.
매개변수
widget  Widget 객체입니다.
padding_top  상단 padding 값입니다.
void setPaddingBottom ( const WidgetRef & widget , int32_t padding_bottom )
OasisUI.h
Widget의 하단 padding을 지정합니다.
매개변수
widget  Widget 객체입니다.
padding_bottom  하단 padding 값입니다.
WidgetRef findWidgetById ( const WidgetRef & widget , const char * id )
OasisUI.h
ID를 Widget을 검색합니다.
매개변수
widget  부모 Container Widget 객체입니다.
id  찾으려는 Widget의 ID 문자열입니다.
리턴값
자식 Widget에서 id를 갖는 Widget을 찾으면, 그 Widget 객체를 리턴합니다. 찾지 못하거나, 부모 Widget이 올바르지 않으면 nullptr을 리턴합니다.
void queueResize ( const WidgetRef & widget )
OasisUI.h
Widget의 크기 재조정을 요청합니다. Container Widget은 이 요청을 받아서 레이아웃을 진행합니다.
매개변수
widget  Widget 객체입니다.
void queueRepaint ( const WidgetRef & widget )
OasisUI.h
Widget의 새로 그리기를 요청합니다.
매개변수
widget  Widget 객체입니다.
void preferredSize ( const WidgetRef & widget , Size & size )
OasisUI.h
Widget의 선호 크기를 확인합니다.
매개변수
widget  Widget 객체입니다.
size  OUT Widget이 선호하는 크기를 리턴합니다.
void lockUpdate ( const WidgetRef & widget )
OasisUI.h
일시적으로 Widget의 Geometry 갱신과 그리기를 막습니다.
매개변수
widget  Widget 객체입니다.
void unlockUpdate ( const WidgetRef & widget )
OasisUI.h
일시적으로 막았던 Widget의 Geometry 갱신과 그리기를 해제합니다.
매개변수
widget  Widget 객체입니다.
int32_t requestAnimatedFrame ( const WidgetRef & widget , raf_bind_t bind )
OasisUI.h
Widget에 애니메이션 그리기를 요청(rAF)합니다. 콜백이 호출되면 다시 rAF를 요청할 수 있습니다. 요청하지 않을 경우, 애니메이션 그리기 진행이 멈춥니다.
매개변수
widget  Widget 객체입니다.
bind  애니메이션 그리기 콜백 함수입니다.
리턴값
  • 0: 성공
  • -1: 실패

raf_bind_t는 아래와 같이 정의되어 있습니다.

typedef std::function<void(WidgetRef,GraphicContextRef)> raf_bind_t
OasisUI.h

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);
    }
}
void enableLayoutLog ( const WidgetRef & widget , bool enable = true , bool apply_to_children = true )
OasisUI.h
레이아웃 관련 로그를 활성화합니다.
매개변수
widget  Widget 객체입니다.
enable  true이면 로그를 활성화하고, false이면 로그를 해제합니다.
apply_to_children  자식 Widget에게도 적용할지 여부를 지정합니다. true이면 자식 Widget에도 적용됩니다. false이면 자식 Widget에게는 적용되지 않습니다.
void setWidgetDevelFlags ( const WidgetRef & widget , uint64_t flags , bool set = true , bool apply_to_children = true )
OasisUI.h
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 인터페이스를 생성합니다.

void containerAdd ( const ContainerRef & container , const WidgetRef & widget )
OasisUI.h
레이아웃 컨테이너 위젯에 Widget을 자식으로 추가합니다.
매개변수
container  Container 객체입니다.
widget  추가할 Widget 객체입니다.
void containerRemove ( const ContainerRef & container , const WidgetRef & widget )
OasisUI.h
레이아웃 컨테이너 위젯에서 Widget을 제거합니다.
매개변수
container  Container 객체입니다.
widget  Widget 객체입니다.

Box Container

Box 컨테이너 위젯은 자식 위젯들을 가로 방향 또는 세로 방향으로 배치합니다.

BoxRef createBox ( Orientation orientation , bool homogeneous , int32_t spacing )
OasisUI.h
Box 컨테이너 위젯을 생성합니다.
매개변수
orientation  레이아웃 방향을 지정합니다. ui::kOrientationVertical 또는 ui::kOrientationHorizontal 값을 입력합니다. ui::kOrientationVertical는 위에서 아래 방향으로 자식 위젯을 배치하고, ui::kOrientationHorizontal는 왼쪽에서 오른쪽으로 자식 위젯을 배치합니다.
homogeneous  true를 설정하면 자식 위젯이 균일한 크기를 갖습니다. ui::kOrientationVertical의 경우, 높이가 균일하고, ui::kOrientationHorizontal의 경우, 너비가 균일합니다.
spacing  각 자식 위젯간 공간을 지정합니다. 픽셀단위입니다.
리턴값
성공하면 Box 컨테이너 위젯을 리턴합니다. 실패하면 nullptr을 리턴합니다.
void drawBoxLine ( const BoxRef & box , int32_t x0 , int32_t y0 , int32_t x1 , int32_t y1 , Color clr )
OasisUI.h
Box 컨테이너 위젯의 테두리를 그립니다.
매개변수
box  createBox로 생성한 Box 컨테이너 위젯입니다.
x0  좌측 상단의 x 좌표입니다.
y0  좌측 상단의 y 좌표입니다.
x1  우측 하단의 x 좌표입니다.
y1  우측 하단의 y 좌표입니다.
clr  테두리 색상입니다.
void boxPackStart ( const BoxRef & box , const WidgetRef & widget , bool expand , bool fill , int32_t padding )
OasisUI.h
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 내에 적용됩니다.
void boxPackEnd ( const BoxRef & box , const WidgetRef & widget , bool expand , bool fill , int32_t padding )
OasisUI.h
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 컨테이너 위젯은 자식 위젯들을 고정 위치에 배치합니다.

FixedRef createFixed ( )
OasisUI.h
Fixed 컨테이너 위젯을 생성합니다.
리턴값
Fixed 컨테이너 위젯을 리턴합니다.
void fixedPut ( const FixedRef & fixed , const WidgetRef & widget , int32_t x , int32_t y )
OasisUI.h
Fixed 컨테이너 위젯에 자식 위젯을 주어진 (x,y)에 추가합니다.
매개변수
fixed  createFixed로 생성한 Fixed 컨테이너 위젯입니다.
widget  추가할 자식 Widget 객체입니다.
x  자식 위젯의 x 좌표입니다.
y  자식 위젯의 y 좌표입니다.
void fixedRemove ( const FixedRef & fixed , const WidgetRef & widget )
OasisUI.h
매개변수
fixed  createFixed로 생성한 Fixed 컨테이너 위젯입니다.
widget  제거할 자식 Widget 객체입니다.

Grid Container

Grid 컨테이너 위젯은 행과 열을 기준으로 자식 위젯을 배치합니다.

GridRef createGrid ( )
OasisUI.h
Grid 컨테이너 위젯을 생성합니다.
리턴값
Grid 컨테이너 위젯을 리턴합니다.
void gridSetRowHomogeneous ( const GridRef & grid , bool homogeneous )
OasisUI.h
행의 높이를 같도록 배치합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
homogeneous  Grid의 행을 같은 크기로 하여 자식 위젯을 배치합니다.
void gridSetColumnHomogeneous ( const GridRef & grid , bool homogeneous )
OasisUI.h
열의 너비를 같도록 배치합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
homogeneous  Grid의 열을 같은 크기로 하여 자식 위젯을 배치합니다.
void gridSetRowSpacing ( const GridRef & grid , int32_t spacing )
OasisUI.h
행간 공간을 설정합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
spacing  행간 공간을 지정합니다. 픽셀 단위입니다.
void gridSetColumnSpacing ( const GridRef & grid , int32_t spacing )
OasisUI.h
열간 공간을 설정합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
spacing  열간 공간을 지정합니다. 픽셀 단위입니다.
void gridSetColumnFixedWidth ( const GridRef & grid , int32_t col , int32_t width )
OasisUI.h
고정폭으로 열 너비를 설정합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
col  열 인덱스입니다. 0 부터 시작합니다.
width  고정폭 너비입니다. 픽셀 단위입니다.
void gridSetRowFixedHeight ( const GridRef & grid , int32_t row , int32_t height )
OasisUI.h
고정폭으로 행 높이를 설정합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
row  행 인덱스입니다. 0 부터 시작합니다.
height  고정폭 높이입니다. 픽셀 단위입니다.
void gridAttach ( const GridRef & grid , const WidgetRef & widget , int32_t left , int32_t top , int32_t width , int32_t height )
OasisUI.h
자식 위젯을 Grid 컨테이너 위젯에 추가합니다.
매개변수
grid  createGrid로 생성한 Grid 컨테이너 위젯입니다.
widget  추가할 자식 Widget 객체입니다.
left  자식 위젯이 위치할 Grid의 시작 열 인덱스입니다.
top  자식 위젯이 위치할 Grid의 시작 행 인덱스입니다.
width  자식 위젯이 차지할 Grid의 열 개수입니다.
height  자식 위젯이 차지할 Grid의 행 개수입니다.

Single Container

createWindow, createDialog, createButton 등으로 생성됩니다.

ListBox Container

ListBox 컨테이너 위젯은 스크롤 가능한 컨테이너로 자식 위젯을 배치합니다.

ListBoxRef createListBox ( const ListBoxType type )
OasisUI.h
ListBox 컨테이너 위젯을 생성합니다.
매개변수
type  ListBox 유형을 지정합니다. ui::kListBoxFixedItemSizeui::kListBoxDynamicItemSize 값 중 하나를 지정합니다.
리턴값
ListBox 컨테이너 위젯을 리턴합니다.
void listBoxInsert ( const ListBoxRef & listbox , const WidgetRef & widget , int32_t position )
OasisUI.h
ListBox 컨테이너 위젯에 자식 위젯을 지정한 위치에 추가합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
widget  추가할 자식 Widget 객체입니다.
position  추가할 자식의 위치를 지정합니다. position 값이 -1 이거나 현재 ListBox 자식 위젯 개수보다 클 경우, 끝에 추가됩니다. position 값이 0 이면 맨앞에 추가됩니다.
void listBoxRemove ( const ListBoxRef & listbox , const WidgetRef & widget )
OasisUI.h
ListBox 컨테이너 위젯에서 자식 위젯을 제거합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
widget  제거할 자식 Widget 객체입니다.
void listBoxRemoveAll ( const ListBoxRef & listbox )
OasisUI.h
ListBox 컨테이너 위젯의 모든 자식 위젯을 제거합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
void listBoxSetPlaceHolder ( const ListBoxRef & listbox , const WidgetRef & placeholder )
OasisUI.h
ListBox 컨테이너 위젯에 비어 있을 때 보이는 자식 위젯을 추가합니다. 이 위젯은 실제 ListBox에 포함되는 자식 위젯은 아닙니다. 하나 이상의 자식 위젯이 있을 경우, 보이지 않습니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
placeholder  비어 있는 ListBox에 보여질 Widget 객체입니다.
void listBoxGoUp ( const ListBoxRef & listbox )
OasisUI.h
위로 스크롤링 합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
void listBoxGoDown ( const ListBoxRef & listbox )
OasisUI.h
아래로 스크롤링 합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
void listBoxGoPageUp ( const ListBoxRef & listbox )
OasisUI.h
페이지 업 합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.
void listBoxGoPageDown ( const ListBoxRef & listbox )
OasisUI.h
페이지 다운합니다.
매개변수
listbox  createListBox로 생성된 ListBox 컨테이너 위젯 객체입니다.

Window

WindowRef createWindow ( const char * title )
OasisUI.h
최상위 Window 객체를 생성합니다. Window 객체의 부모 클래스는 SingleLayout 입니다. Window 객체는 보이지 않는 상태로 생성됩니다. showWindow 등을 호출하여 화면에 보이게 합니다.
매개변수
title  Window의 타이틀 입니다. nullptr를 지정하면 Window 타이틀 바를 생성하지 않습니다.
리턴값
성공하면 Window 객체를 리턴하고, 실패하면 nullptr을 리턴합니다.
void destroyWindow ( const WindowRef & window )
OasisUI.h
Window 객체를 해제합니다.
매개변수
window  createWindow로 생성한 Window 객체입니다.
void showWindowTitle ( const WindowRef & window , bool show )
OasisUI.h
Window에 타이틀 바를 표시할 지 여부를 지정합니다.
매개변수
window  createWindow로 생성한 Window 객체입니다.
show  true이면 타이틀 바가 보이고, false이면 타이틀 바가 보이지 않습니다.
WindowRef findWindowById ( const char * id )
OasisUI.h
ID에 해당하는 Window 객체를 찾습니다.
매개변수
id  Window 객체의 ID 입니다. 타이틀 값과 다릅니다.
리턴값
Window 객체를 찾으면 Window 객체를 리턴하고, 찾지 못하면 nullptr을 리턴합니다.
int32_t setTopmostWindow ( const WindowRef & window )
OasisUI.h
최상위 Window로 지정합니다. 최상위 Window는 모든 Window 위에 존재하며 다른 Window에 가려지지 않습니다.
매개변수
window  createWindow로 생성한 Window 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t waitForWindowDestroyed ( const WindowRef & window )
OasisUI.h
지정한 Window 객체가 해제될 때까지 기다립니다. 독립적인 RunLoop를 생성하여 다른 UI 이벤트들이 처리됩니다.
매개변수
window  createWindow로 생성한 Window 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패

Dialog

DialogRef createDialog ( const WindowRef & parent_window , const char * title = nullptr )
OasisUI.h
Dialog 위젯을 생성합니다.
매개변수
parent_window  Dialog 객체의 부모 Window 위젯입니다.
title  Dialog 창의 타이틀을 지정합니다. nullptr 일 경우, 타이틀 바가 생성되지 않습니다.
리턴값
성공할 경우, Dialog 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
BoxRef getDialogContainerBox ( const DialogRef & dialog )
OasisUI.h
Dialog 위젯의 전체 배치를 담당하는 Box 컨테이너 위젯을 리턴합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
리턴값
Box 컨테이너 위젯 객체입니다.
BoxRef getDialogContentArea ( const DialogRef & dialog )
OasisUI.h
Dialog 위젯의 컨텐츠 영역의 배치를 담당하는 Box 컨테이너 위젯을 리턴합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
리턴값
Box 컨테이너 위젯 객체입니다.
ButtonRef addDialogButtonWithText ( const DialogRef & dialog , const char * button_text , int32_t response_id )
OasisUI.h
Dialog 위젯에 텍스트 버튼을 추가합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
button_text  버튼의 텍스입니다.
response_id  클릭이나 터치하였을 때 발생하는 ID 값을 지정합니다.
리턴값
성공할 경우, 생성한 Button 위젯을 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
ButtonRef addDialogButtonWithImage ( const DialogRef & dialog , const char * image_path , int32_t response_id )
OasisUI.h
Dialog 위젯에 이미지 버튼을 추가합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
response_id  클릭이나 터치하였을 때 발생하는 ID 값을 지정합니다.
리턴값
성공할 경우, 생성한 Button 위젯을 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
int32_t addDialogButtonWithWidget ( const DialogRef & dialog , const WidgetRef & widget )
OasisUI.h
Dialog 위젯에 버튼을 추가합니다. 클릭이나 터치하였을 때 Button의 ID 값이 응답 값으로 사용됩니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
widget  Button Widget 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setDialogAutoCloseTimeout ( const DialogRef & dialog , int32_t timeout_msecs , int32_t response_id )
OasisUI.h
Dialog 위젯이 자동으로 닫히게 할 경우, 대기 시간을 지정합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
timeout_msecs  밀리초 단위의 대기 시간입니다.
response_id  자동으로 닫힐 경우, 응답 코드 값입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setDialogDefaultResponseId ( const DialogRef & dialog , int32_t response_id )
OasisUI.h
Dialog 위젯의 디폴트 응답 코드 값을 설정합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
response_id  디폴트 응답 코드 값입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t runDialog ( const DialogRef & dialog )
OasisUI.h
Dialog 위젯을 화면에 표시합니다. Dialog가 종료될 때까지 대기합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
리턴값
Dialog 위젯의 응답코드 값입니다. 실패시 -1을 리턴합니다.
void responseDialog ( const DialogRef & dialog , int32_t response_id )
OasisUI.h
Dialog 위젯의 응답 코드를 리턴하고 종료합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.
response_id  응답 코드 값입니다.
void destroyDialog ( const DialogRef & dialog )
OasisUI.h
Dialog 위젯을 해제합니다.
매개변수
dialog  createDialog로 생성한 Dialog 객체입니다.

Button

ButtonRef createButtonWithImage ( const char * image_path )
OasisUI.h
이미지 버튼 위젯을 생성합니다.
매개변수
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
리턴값
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
ButtonRef createButtonWithLabel ( const char * label , bool single_line = true )
OasisUI.h
텍스트 버튼 위젯을 생성합니다.
매개변수
label  텍스트 입니다.
single_line  true이면 한 줄로 표시됩니다. false이면 여러 줄로 표시됩니다.
리턴값
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
ButtonRef createButtonWithLabelAndImage ( const char * label , const char * image_path , int32_t orientation = kOrientationVertical , bool single_line = true )
OasisUI.h
이미지와 텍스트가 있는 버튼 위젯 객체를 생성합니다.
매개변수
label  텍스트 입니다.
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
orientation  이미지와 텍스트 배열 방식을 지정합니다. kOrientationVertical 이나 kOrientationHorizontal 중 한 값을 지정합니다. kOrientationVertical 이미 이미지와 텍스트가 세로 방향으로 배치되고, kOrientationHorizontal 이면 이미지와 텍스트는 가로 방향으로 배치됩니다.
single_line  true이면 텍스트가 한 줄로 표시됩니다. false이면 텍스트가 여러 줄로 표시됩니다.
리턴값
성공할 경우, Button 위젯 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
LabelRef getButtonLabel ( const ButtonRef & button )
OasisUI.h
버튼 위젯의 Label 위젯 객체를 얻습니다.
매개변수
button  Button 위젯 객체입니다.
리턴값
Label 위젯 객체를 리턴합니다.
ImageRef getButtonImage ( const ButtonRef & button )
OasisUI.h
버튼 위젯의 Image 위젯 객체를 얻습니다.
매개변수
button  Button 위젯 객체입니다.
리턴값
Image 위젯 객체입니다.
int32_t setButtonText ( const ButtonRef & button , const char * text )
OasisUI.h
Button 위젯의 텍스트를 변경합니다. Label 위젯이 없으면 생성합니다.
매개변수
button  Button 위젯 객체입니다.
text  텍스트 입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setButtonTextColor ( const ButtonRef & button , Color clr )
OasisUI.h
텍스트 색상을 지정합니다.
매개변수
button  Button 위젯 객체입니다.
clr  텍스트 색상입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setButtonImage ( const ButtonRef & button , const char * image_path )
OasisUI.h
버튼의 이미지를 설정합니다. Image 위젯이 없으면 생성합니다.
매개변수
button  Button 위젯 객체입니다.
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
리턴값
  • 0: 성공
  • -1: 실패

Image

ImageRef createImageFromPath ( const char * image_path )
OasisUI.h
Image 위젯을 PNG 파일로 부터 생성합니다.
매개변수
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
리턴값
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
ImageRef createImageFromPathWithFormat ( const char * image_path , int32_t format )
OasisUI.h
특정 이미지 포맷을 적용한 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
ImageRef createImageFromPathWithPaddigns ( const char * image_path , int32_t paddings )
OasisUI.h
패딩을 적용한 Image 위젯 객체를 생성합니다.
매개변수
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
paddings  상하좌우 패딩을 지정합니다. 픽셀 단위입니다.
리턴값
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
ImageRef createImageFromPathWithFormatAndPaddings ( const char * image_path , int32_t format , int32_t paddings )
OasisUI.h
특정 이미지 포맷과 패딩을 적용한 Image 위젯 객체를 생성합니다.
매개변수
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
format  사용할 특정 이미지 포맷을 지정합니다. -1 값을 지정하면 OASIS_PIXEL_FORMAT_BGRA_8888 포맷이 지정됩니다. 픽셀 포맷에 대해서는 OasisTypes.h 헤더 파일을 참조합니다.
paddings  상하좌우 패딩을 지정합니다. 픽셀 단위입니다.
리턴값
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
ImageRef createImageFromRefImage ( const ImageRef & ref_image , int32_t crop_x , int32_t crop_y , int32_t crop_width , int32_t crop_height )
OasisUI.h
다른 Image 위젯의 특정 영역을 선택하여 새로운 Image 위젯 객체를 생성합니다.
매개변수
ref_image  참조 대상의 Image 위젯 객체입니다.
crop_x  CROP 영역의 좌측 상단 x 좌표입니다.
crop_y  CROP 영역의 좌측 상단 y 좌표입니다.
crop_width  CROP 영역의 너비입니다.
crop_height  CROP 영역의 높이입니다.
리턴값
성공하면 Image 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
int32_t setImagePath ( const ImageRef & image , const char * image_path )
OasisUI.h
새 이미지로 업데이트합니다.
매개변수
image  Image 위젯 객체입니다.
image_path  PNG나 JPEG 유형의 이미지 파일 경로입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setImageRefImage ( const ImageRef & image , const ImageRef & ref_image , int32_t crop_x , int32_t crop_y , int32_t crop_width , int32_t crop_height )
OasisUI.h
참조 Image 위젯으로 부터 새 CROP 영역의 이미지를 복사합니다.
매개변수
image  Image 위젯 객체입니다.
ref_image  참조 Image 위젯 객체입니다.
crop_x  CROP 영역의 좌측 상단 x 좌표입니다.
crop_y  CROP 영역의 좌측 상단 y 좌표입니다.
crop_width  CROP 영역의 너비입니다.
crop_height  CROP 영역의 높이입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setImageColorKey ( const ImageRef & image , Color color_key )
OasisUI.h
Color 키를 설정합니다.
매개변수
image  Image 위젯 객체입니다.
color_key  Color 키 값입니다. 이 색상에 해당한 부분은 모두 투명처리됩니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t disableImageAlphaChannel ( const ImageRef & image )
OasisUI.h
Alpha 채널을 비활성화합니다.
매개변수
image  Image 위젯 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t imageWidth ( const ImageRef & image )
OasisUI.h
이미지 너비를 얻습니다.
매개변수
image  Image 위젯 객체입니다.
리턴값
이미지 너비를 리턴합니다. 픽셀 단위입니다.
int32_t imageHeight ( const ImageRef & image )
OasisUI.h
이미지 높이를 얻습니다.
매개변수
image  Image 위젯 객체입니다.
리턴값
이미지 높이를 리턴합니다. 픽셀 단위입니다.
int32_t imageSize ( const ImageRef & image , Size & size )
OasisUI.h
이미지 크기를 얻습니다.
매개변수
image  Image 위젯 객체입니다.
size  OUT 이미지 크기를 리턴합니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t rotateImage ( const ImageRef & image , Rect * src_rect , Rect * dst_rect , double angle , Point * center )
OasisUI.h
이미지를 지정한 각도로 회전합니다.
매개변수
image  Image 위젯 객체입니다.
src_rect  회전할 대상 영역입니다.
dst_rect  회전이 적용된 목적지 영역입니다.
angle  회전할 각도입니다.
center  회전축 중심 좌표입니다.
리턴값
  • 0: 성공
  • -1: 실패

Label

LabelRef createLabelWithText ( const char * label )
OasisUI.h
Label 위젯을 생성합니다.
매개변수
label  라벨 텍스트입니다.
리턴값
성공하면 Label 위젯 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
int32_t setLabelText ( const LabelRef & label , const char * text )
OasisUI.h
라벨 텍스트를 변경합니다.
매개변수
label  Label 위젯 객체입니다.
text  변경할 라벨 텍스트입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setLabelHorzJustification ( const LabelRef & label , Justification Justification )
OasisUI.h
라벨 가로 정렬 방식을 지정합니다.
매개변수
label  Label 위젯 객체입니다.
Justification  Justification 값 중 하나를 입력합니다.
리턴값
  • 0: 성공
  • -1: 실패

가로 Justification 은 아래와 같습니다.

Justification 설명
kJustificationLeft 0 왼쪽으로 정렬합니다.
kJustificationRight 1 오른쪽으로 정렬합니다.
kJustificationCenter 2 가운데로 정렬합니다.
kJustificationFill 3 균등하게 정렬합니다.
int32_t setLabelVertJustification ( const LabelRef & label , Justification Justification )
OasisUI.h
라벨 세로 정렬 방식을 지정합니다.
매개변수
label  Label 위젯 객체입니다.
Justification  Justification 값 중 하나를 입력합니다.
리턴값
  • 0: 성공
  • -1: 실패

세로 Justification 은 아래와 같습니다.

Justification 설명
kJustificationTop 0 위쪽으로 정렬합니다.
kJustificationBottom 1 아래쪽으로 정렬합니다.
kJustificationVCenter 2 세로 가운데로 정렬합니다.
kJustificationFill 3 균등하게 정렬합니다.
int32_t enableLabelWordWrap ( const LabelRef & label , bool enable = true )
OasisUI.h
글자 단위로 자동 줄바꿈할 지 여부를 지정합니다.
매개변수
label  Label 위젯 객체입니다.
enable  true이면 글자 단위로 자동 줄바꿈 합니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t disableLabelMultiline ( const LabelRef & label , bool disable = true )
OasisUI.h
여러 줄을 지원할 지 여부를 지정합니다.
매개변수
label  Label 위젯 객체입니다.
disable  true이면 여러 줄이 아닌 한 줄로 렌더링합니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setLabelTextColor ( const LabelRef & label , Color clr )
OasisUI.h
라벨 텍스트 색상을 지정합니다.
매개변수
label  Label 위젯 객체입니다.
clr  라벨 텍스트 색상입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setLabelFont ( const LabelRef & label , int32_t point_size , const char * font_path )
OasisUI.h
라벨 텍스트 폰트와 포인트 크기를 변경합니다.
매개변수
label  Label 위젯 객체입니다.
point_size  라벨 폰트 크기입니다. 포인트 단위입니다.
font_path  라벨 폰트 파일 경로입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t setLabelFontPointSize ( const LabelRef & label , int32_t point_size )
OasisUI.h
라벨 폰트 사이즈를 설정합니다.
매개변수
label  Label 위젯 객체입니다.
point_size  라벨 텍스트의 포인트 크기입니다.
리턴값
  • 0: 성공
  • -1: 실패
void setLabelAlphaMode ( const LabelRef & label , bool enable )
OasisUI.h
라벨 렌더링 시 Alpha 모드를 적용할지 여부를 지정합니다.
매개변수
label  Label 위젯 객체입니다.
enable  true이면 Alpha 모드가 적용되어 anti-aliasing으로 렌더링 됩니다.

Graphic Context

Oasis는 GraphicContext 객체를 이용하여 Screen에 그리는 작업을 합니다.

하드웨어 가속이 지원될 경우, 하드웨어 가속을 사용합니다.

DrawingArea 위젯으로 그리기를 할 수 있습니다.

GraphicContextRef getGraphicContext ( const WidgetRef & widget )
OasisUI.h
Widget 객체로 부터 GraphicContext 객체를 얻습니다.
매개변수
widget  Widget 객체입니다.
리턴값
성공할 경우, GraphicContext 객체를 리턴합니다. 실패할 경우, nullptr을 리턴합니다.
int32_t beginDrawing ( const GraphicContextRef & graphic_context )
OasisUI.h
그리기를 시작합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t endDrawing ( const GraphicContextRef & graphic_context )
OasisUI.h
그리기를 종료합니다. 그동안 그렸던 내용을 디스플레이에 반영합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
void saveGraphicContext ( const GraphicContextRef & graphic_context )
OasisUI.h
현재 GraphicContext 특성을 스택에 저장합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
void restoreGraphicContext ( const GraphicContextRef & graphic_context )
OasisUI.h
바로 이전에 저장했던 GraphicContext를 스택에서 복원합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
void drawLine ( const GraphicContextRef & graphic_context , int32_t x0 , int32_t y0 , int32_t x1 , int32_t y1 , Color clr )
OasisUI.h
선을 그립니다.
매개변수
graphic_context  GraphicContext 객체입니다.
x0  선의 시작 x 좌표입니다.
y0  선의 시작 y 좌표입니다.
x1  선의 끝 x 좌표입니다.
y1  선의 끝 y 좌표입니다.
clr  선 색상입니다.
void drawVline ( const GraphicContextRef & graphic_context , int32_t x , int32_t top , int32_t bottom , Color clr )
OasisUI.h
수직선을 그립니다.
매개변수
graphic_context  GraphicContext 객체입니다.
x  수직선의 x 좌표입니다.
top  수직선의 시작 y 좌표입니다.
bottom  수직선의 끝 y 좌표입니다.
clr  선 색상입니다.
void drawHline ( const GraphicContextRef & graphic_context , int32_t y , int32_t left , int32_t right , Color clr )
OasisUI.h
수평선을 그립니다.
매개변수
graphic_context  GraphicContext 객체입니다.
y  수평선의 y 좌표입니다.
left  수평선의 시작 x 좌표입니다.
right  수평선의 끝 x 좌표입니다.
clr  선 색상입니다.
void drawRectangle ( const GraphicContextRef & graphic_context , int32_t left , int32_t top , int32_t right , int32_t bottom , Color clr )
OasisUI.h
사각형을 그립니다.
매개변수
graphic_context  GraphicContext 객체입니다.
left  사각형 좌측 상단의 x 좌표입니다.
top  사각형 좌측 상단의 y 좌표입니다.
right  사각형 우측 하단의 x 좌표입니다.
bottom  사각형 우측 하단의 y 좌표입니다.
clr  테두리 색상입니다.
void fillRectangle ( const GraphicContextRef & graphic_context , int32_t left , int32_t top , int32_t right , int32_t bottom , Color clr )
OasisUI.h
사각형을 채웁니다.
매개변수
graphic_context  GraphicContext 객체입니다.
left  사각형 좌측 상단의 x 좌표입니다.
top  사각형 좌측 상단의 y 좌표입니다.
right  사각형 우측 하단의 x 좌표입니다.
bottom  사각형 우측 하단의 y 좌표입니다.
clr  채울 색상입니다.
int32_t setFont ( const GraphicContextRef & graphic_context , int32_t point_size , const char * font_path = nullptr )
OasisUI.h
폰트와 폰트 크기를 변경합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
point_size  폰트 크기입니다. 포인트 단위입니다.
font_path  폰트 파일의 경로입니다.
리턴값
  • 0: 성공
  • -1: 실패
void setTextForeColor ( const GraphicContextRef & graphic_context , uint32_t argb )
OasisUI.h
글자 색상을 지정합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
argb  글자 색상입니다.
void setTextBgColor ( const GraphicContextRef & graphic_context , uint32_t argb )
OasisUI.h
글자 배경색사을 지정합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
argb  글자 배경색상입니다.
void setTextBkMode ( const GraphicContextRef & graphic_context , text_bk_mode_t bk_mode )
OasisUI.h
글자 배경색상 처리 방식을 지정합니다.
매개변수
graphic_context  GraphicContext 객체입니다.
bk_mode  kTextBkModeTransparent를 지정하면 글자 배경은 투명하게 처리됩니다. kTextBkModeOpaque를 지정하면 글자 배경 색상이 적용됩니다.
int32_t drawText ( const GraphicContextRef & graphic_context , std::vector<int32_t> & string , int32_t left , int32_t top , int32_t width , int32_t height , uint32_t flags = DT_LEFT|DT_TOP , int32_t caret_index = -1 , Point * caret_pos = nullptr )
OasisUI.h
텍스트를 그립니다.
매개변수
graphic_context  GraphicContext 객체입니다.
string  32비트 UNICODE 문자열 벡터입니다.
left  문자열이 그려질 영역의 우측 상단의 x 좌표입니다.
top  문자열이 그려질 영역의 우측 상단의 y 좌표입니다.
width  문자열이 그려질 영역의 너비입니다.
height  문자열이 그려질 영역의 높이입니다.
flags  문자열을 그리기 시에 참조할 플래그 값입니다.
caret_index  사용할 커서 모양입니다. 사용하지 않습니다
caret_pos  커서 위치입니다. 사용하지 않습니다
리턴값
  • 0: 성공
  • -1: 실패

drawTextflags 값은 아래 값들을 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 한 글자가 허용 너비를 초과할 경우, 그 글자를 줄바꿈 없이 처리합니다.
int32_t drawText ( const GraphicContextRef & graphic_context , std::string & string , int32_t left , int32_t top , int32_t width , int32_t height , uint32_t flags = DT_LEFT|DT_TOP , int32_t caret_index = -1 , Point * caret_pos = nullptr )
OasisUI.h
매개변수
graphic_context  GraphicContext 객체입니다.
string  문자열입니다.
left  문자열이 그려질 영역의 우측 상단의 x 좌표입니다.
top  문자열이 그려질 영역의 우측 상단의 y 좌표입니다.
width  문자열이 그려질 영역의 너비입니다.
height  문자열이 그려질 영역의 높이입니다.
flags  문자열을 그리기 시에 참조할 플래그 값입니다.
caret_index  사용할 커서 모양입니다. 사용하지 않습니다
caret_pos  커서 위치입니다. 사용하지 않습니다
리턴값
  • 0: 성공
  • -1: 실패
void setWidgetBgColor ( const GraphicContextRef & graphic_context , Color clr )
OasisUI.h
Widget의 배경색상을 지정합니다. 그릴 때만 적용되며, 원래 Widget의 배경색상을 덮어씁니다.
매개변수
graphic_context  GraphicContext 객체입니다.
clr  배경색상입니다.

Drawing Area

DrawingAreaRef createDrawingArea ( std::function<void(WidgetRef, GraphicContextRef)> handler )
OasisUI.h
DrawingArea 위젯을 생성합니다.
매개변수
handler  그리기 콜백함수입니다.
리턴값
성공하면 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

KeypadRef createKeypad ( const WidgetRef & parent_window , const char * keypad_title , const char * init_value = "" , const char * cancel_label = "" , const char * ok_label = "" )
OasisUI.h
키패드를 생성합니다.
매개변수
parent_window  부모 Window 객체입니다.
keypad_title  키패드 제목입니다.
init_value  키패드 문자열 초기 값입니다.
cancel_label  취소 버튼의 라벨입니다.
ok_label  확인 버튼의 라벨입니다.
리턴값
성공하면 Keypad 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.
void destroyKeypad ( const KeypadRef & keypad )
OasisUI.h
Keypad 객체를 해제합니다.
매개변수
keypad  Keypad 객체입니다.
const char * showKeypad ( const KeypadRef & keypad )
OasisUI.h
Keypad를 보여주고, 사용자가 확인이나 취소 버튼을 누를 때까지 기다립니다.
매개변수
keypad  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

int32_t timeoutAdd ( const char * timeout_name , int64_t intervalUs , const source_slot_t & slot )
OasisUI.h
타이머를 생성합니다.
매개변수
timeout_name  타이머 이름입니다.
intervalUs  타이머 이벤트 발생 주기를 지정합니다. 마이크로초 단위 입니다.
slot  타이머 이벤트 핸들러를 등록합니다.
리턴값
성공하면 타이머 ID를 리턴합니다. 실패하면 -1을 리턴합니다.

source_slot_t는 아래와 같이 정의되어 있습니다.

typedef sig::slot<bool(void)> source_slot_t
OasisTypes.h
사용자 정의 타이머 콜백 함수입니다.
리턴값
  • true: 타이머 동작을 유지합니다.
  • false: 타이머를 자동으로 중지하고 제거합니다.
int32_t timeoutEnable ( int32_t timeout_id , bool enable )
OasisUI.h
타이머를 활성화합니다.
매개변수
timeout_id  타이머 ID 값입니다.
enable  true이면 타이머를 활성화하고, false이면 타이머를 중지합니다.
리턴값
  • 0: 성공
  • -1: 실패
bool isTimeoutRunning ( int32_t timeout_id )
OasisUI.h
타이머가 동작 중인지 확인합니다.
매개변수
timeout_id  타이머 ID입니다.
리턴값
  • true: 타이머가 동작 중입니다.
  • false: 타이머가 멈춰 있습니다.
int32_t timeoutRemove ( int32_t timeout_id )
OasisUI.h
타이머를 제거합니다.
매개변수
timeout_id  타이머 ID 입니다.
리턴값
  • 0: 성공
  • -1: 실패

아래는 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 메카니즘을 이용합니다.

uint32_t connectSignal ( const ObjectRef & object , const char * signal_name , const sig::slot_base& slot , uint32_t flags )
OasisUI.h
이벤트 처리 함수를 대상 객체에 연결합니다.
매개변수
object  이벤트를 발생하는 객체로 Signal 연결 대상 객체입니다.
signal_name  이벤트 Signal 이름입니다.
slot  이벤트 핸들러 함수입니다.
flags  플래그 값입니다. 0을 설정합니다.
리턴값
Signal ID를 리턴합니다.
int32_t disconnectSignal ( uint32_t signal_id )
OasisUI.h
이벤트 처리 함수 연결을 해제합니다. 대상 위젯이 해제될 때 자동으로 Signal 처리 연결이 해제됩니다.
매개변수
signal_id  해제할 Signal ID 값입니다.
리턴값
  • 0: 성공
  • -1: 실패

Oasis는 아래와 같은 클릭과 터치 이벤트 처리를 위해 Signaling template을 사용합니다.

  • clicked
  • touch-up-event
  • touch-down-event
  • touch-move-event

각 이벤트 처리 함수 타입은 아래와 같습니다.

typedef sig::slot<void(ui::WidgetRef)> clicked_slot_t
OasisTypes.h
사용자 정의 클릭 이벤트 콜백 함수입니다.
매개변수
ui::WidgetRef  클릭 이벤트가 발생한 Widget 객체입니다.
typedef sig::slot<void(ui::ScreenRef, ui::TouchEvent*)> touch_down_event_slot_t
OasisTypes.h
사용자 정의 touch down 이벤트 콜백 함수입니다.
매개변수
ui::ScreenRef  터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*  터치 이벤트 데이터 입니다.
typedef sig::slot<void(ui::ScreenRef, ui::TouchEvent*)> touch_up_event_slot_t
OasisTypes.h
사용자 정의 touch up 이벤트 콜백 함수입니다.
매개변수
ui::ScreenRef  터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*  터치 이벤트 데이터 입니다.
typedef sig::slot<void(ui::ScreenRef, ui::TouchEvent*)> touch_move_event_slot_t
OasisTypes.h
사용자 정의 touch move 이벤트 콜백 함수입니다.
매개변수
ui::ScreenRef  터치 이벤트가 발생한 Screen 객체입니다.
ui::TouchEvent*  터치 이벤트 데이터 입니다.
struct TouchEvent
Oasis.h
타입
이름
설명
int32_t
x
장치의 x 좌표입니다.
int32_t
y
장치의 y 좌표입니다.
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 등 신호 처리기에서 강제 종료하고자 할 때 사용합니다.

void quitAllRunContexts ( )
OasisUI.h
모든 RunContext를 종료합니다.