Browse Source

add more GUI example.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@335 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong 15 years ago
parent
commit
45a9c5f258

+ 4 - 4
examples/gui/demo_fnview.c

@@ -16,10 +16,10 @@ rtgui_view_t* demo_fn_view(rtgui_workbench_t* workbench)
     rtgui_button_t* open_btn;
     rtgui_font_t* font;
 
-    view = demo_view(workbench);
-    rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);
+	font = rtgui_font_refer("asc", 12);
 
-    font = rtgui_font_refer("asc", 12);
+	view = demo_view(workbench, "FileList View");
+	demo_view_get_rect(view, &rect);
 
     rect.x1 += 5; rect.x2 -= 5;
     rect.y1 += 5; rect.y2 = rect.y1 + 20;
@@ -28,7 +28,7 @@ rtgui_view_t* demo_fn_view(rtgui_workbench_t* workbench)
     rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
 	RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font;
 
-    rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);
+	demo_view_get_rect(view, &rect);
     rect.x1 += 5; rect.x2 = rect.x1 + 80;
     rect.y1 += 30; rect.y2 = rect.y1 + 20;
     open_btn = rtgui_button_create("Open File");

+ 6 - 4
examples/gui/demo_view.c

@@ -2,6 +2,7 @@
 #include <rtgui/widgets/view.h>
 #include <rtgui/widgets/button.h>
 #include <rtgui/widgets/workbench.h>
+#include <rtgui/widgets/staticline.h>
 
 static rtgui_view_t* demo_view_list[32];
 static rt_uint32_t demo_view_current = 0;
@@ -29,7 +30,7 @@ static void demo_view_prev(struct rtgui_widget* widget, rtgui_event_t *event)
 	}
 }
 
-rtgui_view_t* demo_view(rtgui_workbench_t* workbench)
+rtgui_view_t* demo_view(rtgui_workbench_t* workbench, const char* title)
 {
     char view_name[32];
     struct rtgui_view* view;
@@ -54,13 +55,13 @@ rtgui_view_t* demo_view(rtgui_workbench_t* workbench)
 		/* get view's rect */
 		rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);
 		rect.x1 += 5; rect.y1 += 5;
-		rect.x2 -= 5; rect.y2 -= 5;
-		rect.y2 = rect.y1 + 20;
+		rect.x2 -= 5; rect.y2 = rect.y1 + 20;
 
 		/* create view label */
-		label = rtgui_label_create("Demo Label");
+		label = rtgui_label_create(title);
 		rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
 		rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
+
 		rect.y1 += 20; rect.y2 += 20;
 		line = rtgui_staticline_create(RTGUI_HORIZONTAL);
 		rtgui_widget_set_rect(RTGUI_WIDGET(line), &rect);
@@ -99,6 +100,7 @@ void demo_view_get_rect(rtgui_view_t* view, rtgui_rect_t *rect)
 
 	rtgui_widget_get_rect(RTGUI_WIDGET(view), rect);
 	/* remove the command button rect */
+	rect->y1 += 45;
 	rect->y2 -= 25;
 }
 

+ 1 - 1
examples/gui/demo_view.h

@@ -9,7 +9,7 @@
 #include <rtgui/widgets/box.h>
 #endif
 
-rtgui_view_t* demo_view(rtgui_workbench_t* workbench);
+rtgui_view_t* demo_view(rtgui_workbench_t* workbench, const char* title);
 void demo_view_get_rect(rtgui_view_t* view, rtgui_rect_t *rect);
 void demo_view_show(void);
 

+ 1 - 1
examples/gui/demo_view_box.c

@@ -7,7 +7,7 @@ rtgui_view_t* demo_view_box(rtgui_workbench_t* workbench)
     rtgui_rect_t  rect;
     rtgui_view_t* view;
 
-    view = demo_view(workbench);
+    view = demo_view(workbench, "Box View");
     demo_view_get_rect(view, &rect);
 
     return view;

+ 1 - 1
examples/gui/demo_view_button.c

@@ -9,7 +9,7 @@ rtgui_view_t* demo_view_button(rtgui_workbench_t* workbench)
 	rtgui_font_t* font;
 
 	/* create a demo view */
-	view = demo_view(workbench);
+	view = demo_view(workbench, "Button View");
 
 	demo_view_get_rect(view, &rect);
 	rect.x1 += 5; rect.x2 = rect.x1 + 100;

+ 1 - 1
examples/gui/demo_view_checkbox.c

@@ -9,7 +9,7 @@ rtgui_view_t* demo_view_checkbox(rtgui_workbench_t* workbench)
 	rtgui_font_t* font;
 
 	/* create a demo view */
-	view = demo_view(workbench);
+	view = demo_view(workbench, "CheckBox View");
 
 	demo_view_get_rect(view, &rect);
 	rect.x1 += 5; rect.x2 = rect.x1 + 100;

+ 62 - 0
examples/gui/demo_view_dc.c

@@ -0,0 +1,62 @@
+#include "demo_view.h"
+#include <rtgui/rtgui_system.h>
+#include <rtgui/widgets/label.h>
+#include <rtgui/widgets/slider.h>
+
+rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event)
+{
+	if (event->type == RTGUI_EVENT_PAINT)
+	{
+		struct rtgui_dc* dc;
+		rtgui_rect_t rect;
+		rt_uint32_t vx[] = {20, 50, 60, 45, 60, 20};
+		rt_uint32_t vy[] = {150, 50, 90, 60, 45, 50};
+
+		/* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让它先绘图 */
+		rtgui_view_event_handler(widget, event);
+
+		/************************************************************************/
+		/* 下面的是DC的处理                                                     */
+		/************************************************************************/
+
+		/* 获得控件所属的DC */
+		dc = rtgui_dc_begin_drawing(widget);
+		if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */
+			return RT_FALSE;
+
+		/* 获得demo view允许绘图的区域 */
+		demo_view_get_rect(RTGUI_VIEW(widget), &rect);
+
+		/* 绘制一个圆形 */
+		rtgui_dc_set_color(dc, red);
+		rtgui_dc_draw_circle(dc, rect.x1 + 10, rect.y1 + 10, 10);
+
+		/* 填充一个圆形 */
+		rtgui_dc_set_color(dc, green);
+		rtgui_dc_fill_circle(dc, rect.x1 + 30, rect.y1 + 10, 10);
+
+		/* 多边形 */
+		rtgui_dc_set_color(dc, blue);
+		rtgui_dc_draw_polygon(dc, vx, vy, 6);
+
+		/* 绘图完成 */
+		rtgui_dc_end_drawing(dc);
+	}
+	else
+	{
+		/* 调用默认的事件处理函数 */
+		return rtgui_view_event_handler(widget, event);
+	}
+
+	return RT_FALSE;
+}
+
+rtgui_view_t *demo_view_dc(rtgui_workbench_t* workbench)
+{
+	rtgui_view_t *view;
+
+	view = demo_view(workbench, "DC Demo");
+	rtgui_widget_set_event_handler(RTGUI_WIDGET(view), dc_event_handler);
+
+	return view;
+}

+ 1 - 1
examples/gui/demo_view_label.c

@@ -9,7 +9,7 @@ rtgui_view_t* demo_view_label(rtgui_workbench_t* workbench)
 	rtgui_font_t* font;
 
 	/* create a demo view */
-	view = demo_view(workbench);
+	view = demo_view(workbench, "Label View");
 
 	demo_view_get_rect(view, &rect);
 	rect.x1 += 5; rect.x2 -= 5;

+ 1 - 1
examples/gui/demo_view_progressbar.c

@@ -25,7 +25,7 @@ rtgui_view_t *demo_view_progressbar(rtgui_workbench_t* workbench)
 	rtgui_label_t *label;
 	
 	/* create a demo view */
-	view = demo_view(workbench);
+	view = demo_view(workbench, "ProgressBar View");
 	
 	/* get demo view rect */
 	demo_view_get_rect(view, &rect);

+ 3 - 3
examples/gui/demo_view_radiobox.c

@@ -21,7 +21,7 @@ rtgui_view_t* demo_view_radiobox(rtgui_workbench_t* workbench)
     rtgui_view_t* view;
     rtgui_radiobox_t* radiobox;
 
-    view = demo_view(workbench);
+    view = demo_view(workbench, "RadioBox View");
     demo_view_get_rect(view, &rect);
 
     rect.x1 += 5; rect.x2 -= 5;
@@ -33,9 +33,9 @@ rtgui_view_t* demo_view_radiobox(rtgui_workbench_t* workbench)
     rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(radiobox));
     rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect);
 
-    demo_view_get_rect(view, &rect);
+	demo_view_get_rect(view, &rect);
     rect.x1 += 5; rect.x2 -= 5;
-    rect.y1 = 5 + 5 * 25; rect.y2 = rect.y1 + 60;
+    rect.y1 += 5 + 5 * 25; rect.y2 = rect.y1 + 60;
 
     radiobox = rtgui_radiobox_create("Radio Box", RTGUI_HORIZONTAL, radio_item_h, 3);
 	rtgui_radiobox_set_selection(radiobox, 0);

+ 1 - 1
examples/gui/demo_view_slider.c

@@ -11,7 +11,7 @@ rtgui_view_t *demo_view_slider(rtgui_workbench_t* workbench)
 	rtgui_slider_t *slider;
 
 	/* create a demo view */
-	view = demo_view(workbench);
+	view = demo_view(workbench, "Slider View");
 
 	/* get demo view rect */
 	demo_view_get_rect(view, &rect);

+ 61 - 0
examples/gui/demo_view_textbox.c

@@ -0,0 +1,61 @@
+#include "demo_view.h"
+#include <rtgui/widgets/label.h>
+#include <rtgui/widgets/textbox.h>
+
+rtgui_view_t* demo_view_textbox(rtgui_workbench_t* workbench)
+{
+	rtgui_rect_t rect, textbox_rect;
+	rtgui_view_t* view;
+	rtgui_label_t* label;
+	rtgui_textbox_t* text;
+
+	/* create a demo view */
+	view = demo_view(workbench, "TextBox View");
+
+	/* add label */
+	demo_view_get_rect(view, &rect);
+	rect.x1 += 5; rect.x2 = rect.x1 + 30;
+	rect.y1 += 5; rect.y2 = rect.y1 + 20;
+	label = rtgui_label_create("Ăű×Ö: ");
+	rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
+
+	textbox_rect = rect;
+	textbox_rect.x1 = textbox_rect.x2 + 5; textbox_rect.x2 = textbox_rect.x1 + 160;
+	text = rtgui_textbox_create("bernard");
+	rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text));
+
+	rect.y1 += 23; rect.y2 = rect.y1 + 20;
+	label = rtgui_label_create("ÓĘźţ: ");
+	rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
+	textbox_rect = rect;
+	textbox_rect.x1 = textbox_rect.x2 + 5; textbox_rect.x2 = textbox_rect.x1 + 160;
+	text = rtgui_textbox_create("bernard.xiong@gmail.com");
+	rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text));
+
+	rect.y1 += 23; rect.y2 = rect.y1 + 20;
+	label = rtgui_label_create("ĂÜÂë: ");
+	rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
+	textbox_rect = rect;
+	textbox_rect.x1 = textbox_rect.x2 + 5; textbox_rect.x2 = textbox_rect.x1 + 160;
+	text = rtgui_textbox_create("rt-thread");
+	text->flag |= RTGUI_TEXTBOX_MASK;
+	rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text));
+
+	rect.y1 += 23; rect.y2 = rect.y1 + 20;
+	label = rtgui_label_create("Ö÷Ňł: ");
+	rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
+	textbox_rect = rect;
+	textbox_rect.x1 = textbox_rect.x2 + 5; textbox_rect.x2 = textbox_rect.x1 + 160;
+	text = rtgui_textbox_create("http://www.rt-thread.org");
+	rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect);
+	rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text));
+
+	return view;
+}

+ 1 - 1
examples/gui/demo_view_window.c

@@ -86,7 +86,7 @@ rtgui_view_t* demo_view_window(rtgui_workbench_t* workbench)
     rtgui_view_t* view;
     rtgui_button_t *button;
 
-    view = demo_view(workbench);
+    view = demo_view(workbench, "Window Demo");
 
 	demo_view_get_rect(view, &rect);
 	rect.x1 += 5; rect.x2 = rect.x1 + 100;

+ 3 - 1
examples/gui/demo_workbench.c

@@ -55,14 +55,16 @@ static void workbench_entry(void* parameter)
 	/* 在工作台上添加一个视图 */
 	rtgui_workbench_add_view(workbench, view);
 
+	demo_view_dc(workbench);
 	demo_view_window(workbench);
 	demo_view_label(workbench);
 	demo_view_button(workbench);
 	demo_view_checkbox(workbench);
 	demo_view_progressbar(workbench);
 	demo_view_radiobox(workbench);
-	demo_fn_view(workbench);
+	demo_view_textbox(workbench);
 	demo_view_slider(workbench);
+	demo_fn_view(workbench);
 
 	/* 显示视图 */
 	demo_view_show();