This document contains instructions for setup development enviroment and develop ui application under X86 and ARM platform.
Assume running on X86 Platform and application in ~/sdk-<version>/EmTKApp/bin-x86.
Running EmTK Application using given run script run.sh
Running EmTK Application manually
P.S. Microwindow (Nano-X) require user execute itself MUST be the user who loginX-window. Otherwise the following error will show up. Nano-X version 089Pre8 Xlib: connection to ":0.0" refused by server Xlib: No protocol specified nano-X: Can't connect to X11 server Xlib: connection to ":0.0" refused by server Xlib: No protocol specified Cannot initialise screen



By default, EmTK application load 3 fontsets on startup (FONT1, FONT2, FONT3).
To use fonts with different style (i.e. different from those preload fonts FONT1, FONT2, FONT3).
Simply create file fonts.dir in /etc/emtk
Here is the steps to define different font(s):
If system enviroment variable EMTK_CONFIG_DIR NOT defined
# EmTK button with default borderwidth = 0 class .button borderwidth=0 # EmTK Entry widget treat key 0xF802 as it's left key class .entry nav_left=0xF802 # EmTK Entry widget treat key 0xF803 as it's right key class .entry nav_right=0xF803 # EmTK Text widget treat key 0xF802 as it's left key class .text nav_left=0xF802 # EmTK Text widget treat key 0xF803 as it's right key class .text nav_right=0xF803 # EmTK Window with default background color #FF0000(RED) class .window background_color=#FF0000 # EmTK Window use image /root/flower.jpg as default background image class .window background_image=/root/flower.jpg # EmTK Window with default foreground color #00FF00 class .window foreground_color=#00FF00
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "emtk.h"
#include "window.h"
#include "label.h"
#define WINDOW_X 0
#define WINDOW_Y 0
#define WINDOW_W 160
#define WINDOW_H 100
int main (int argc, char **argv)
{
int window_id;
int label_id;
emtk_init (&s;argc, &s;argv);
emtk_root (WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H);
window_id = emtk_window_new (WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H);
label_id = emtk_label_new (window_id, 20, 20, FONT1, FALSE, "Hello World!!!");
emtk_window_add_object (window_id, label_id);
emtk_window_show (window_id);
emtk_run ();
emtk_close ();
exit (0);
}
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#include "nano-X.h"
#include "gdk/gdk.h"
#include "emtk.h"
#include "window.h"
#include "label.h"
#if (DEBUG == 1)
#define Dprintf printf
#else
#define Dprintf(ignore...)
#endif
#ifndef PI
#define PI 3.14 // 3.14159265358979
#endif
#define WINDOW_X 0
#define WINDOW_Y 0
#define WINDOW_W 240
#define WINDOW_H 160
#define LABEL_X 30
#define LABEL_Y 140
#define CLOCK_CENTER_X 120
#define CLOCK_CENTER_Y 60
#define CLOCK_RADIUS 50
#define CLOCK_H_RADIUS 30
#define CLOCK_M_RADIUS 40
#define CLOCK_S_RADIUS 45
/*******************************************************************************
* gdk_pixmap_new (NULL, width, height, 16);
* gdk_pixmap_unref (pixmap);
* gdk_draw_line (pixmap, gc, ...);
* gdk_draw_rectangle (pixmap, gc, ...);
* gdk_window_copy_area (drawable, gc, destx, desty, pixmap, srcx, srcy, srcw, srcy);
******************************************************************************/
/***********************************************************************
Internal data
***********************************************************************/
static int wid;
static int labelid=0;
static guint tid=0;
/***********************************************************************
Internal functions
***********************************************************************/
static gint gdkwin_draw (gpointer data)
{
GdkWindow *gdkwin = (GdkWindow*)data;
static GdkGC *fg_gc = NULL, *bg_gc = NULL;
GdkColor gdkcolor;
time_t now;
struct tm *now_tm;
const char *now_str;
float dRadians;
g_return_val_if_fail (gdkwin!=NULL, 0);
if (fg_gc == NULL) {
fg_gc = gdk_gc_new (NULL);
gdk_color_black (gdk_colormap_get_system(), &gdkcolor);
gdk_gc_set_foreground (fg_gc, &gdkcolor);
}
if (bg_gc == NULL) {
bg_gc = gdk_gc_new (NULL);
gdk_color_white (gdk_colormap_get_system(), &gdkcolor);
gdk_gc_set_foreground (bg_gc, &gdkcolor);
}
/* get current time */
time(&now);
/* convert time to numbers */
now_tm = localtime(&now);
/* clear clock area */
gdk_draw_rectangle (gdkwin, bg_gc, 1,
CLOCK_CENTER_X - CLOCK_RADIUS,
CLOCK_CENTER_Y - CLOCK_RADIUS,
CLOCK_RADIUS * 2, CLOCK_RADIUS * 2
);
/* draw clock border */
gdk_draw_arc (gdkwin, fg_gc, FALSE, CLOCK_CENTER_X - CLOCK_RADIUS,
CLOCK_CENTER_Y - CLOCK_RADIUS,
2 * CLOCK_RADIUS, 2 * CLOCK_RADIUS,
0, 360 * 64
);
/* draw second */
dRadians = now_tm->tm_sec * PI / 30.0;
gdk_draw_line (gdkwin, fg_gc,
CLOCK_CENTER_X, CLOCK_CENTER_Y,
CLOCK_CENTER_X + (CLOCK_S_RADIUS * sin (dRadians)),
CLOCK_CENTER_Y - (CLOCK_S_RADIUS * cos (dRadians)));
/* draw minute */
dRadians = now_tm->tm_min * PI / 30.0;
gdk_draw_line (gdkwin, fg_gc,
CLOCK_CENTER_X, CLOCK_CENTER_Y,
CLOCK_CENTER_X + (CLOCK_M_RADIUS * sin (dRadians)),
CLOCK_CENTER_Y - (CLOCK_M_RADIUS * cos (dRadians)));
/* draw hour */
dRadians = now_tm->tm_hour * PI / 6.0;
gdk_draw_line (gdkwin, fg_gc,
CLOCK_CENTER_X, CLOCK_CENTER_Y,
CLOCK_CENTER_X + (CLOCK_H_RADIUS * sin (dRadians)),
CLOCK_CENTER_Y - (CLOCK_H_RADIUS * cos (dRadians)));
/* convert time to string */
now_str = ctime(&now);
/* update time on EmTK label */
emtk_label_set_string (labelid, (char*)now_str, strlen(now_str));
return 1;
}
static GdkFilterReturn gdkwin_event_handler (GdkXEvent *xevent,
GdkEvent *event, gpointer data)
{
if (((GR_EVENT *)xevent)->type == GR_EVENT_TYPE_EXPOSURE) {
/* expose event, draw the clock */
gdkwin_draw (data);
}
return GDK_FILTER_CONTINUE;
}
static void build_test()
{
GdkWindow *gdkwin;
// create main window
wid = emtk_window_new(WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H);
gdkwin = emtk_window_get_drawable(wid);
gdk_window_add_filter (gdkwin, gdkwin_event_handler, (gpointer)gdkwin);
emtk_window_set_background_color(wid, "#B6FFEE");
/* create label */
labelid = emtk_label_new (wid, LABEL_X, LABEL_Y, FONT1,
0, "Current Time here");
emtk_window_add_object(wid, labelid);
/* create timer */
tid = g_timeout_add (1000, gdkwin_draw, gdkwin);
emtk_window_show(wid);
}
/***********************************************************************
External functions
***********************************************************************/
int main(int argc, char **argv)
{
emtk_init(&argc, &argv);
emtk_root(WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H);
build_test();
emtk_run();
exit(0);
}
big clist - emtk big clist widget (LAF)![]() |
canvas - emtk canvas widget![]() |
clist - emtk clist widget![]() |
form - emtk form widget![]() |
label - emtk label and button widget![]() |
labellist - emtk labellist widget![]() |
labellist2 - emtk labellist widget![]() |
oclock - emtk oclock widget![]() |
otimer - emtk otimer widget![]() |
popupmenu - emtk menu widget![]() |
simplemenu - emtk clist and button widget![]() |
slider - emtk slider widget![]() |
spinbutton - emtk spinbutton widget![]() |
text - emtk text widget![]() |
vscrollbar - emtk clist and vscrollbar widget![]() |
window - emtk window widget![]() |
window_gdk - emtk window widget mix with GDK APIs![]() |