/src/demos/demo_draw.c

http://ftk.googlecode.com/ · C · 119 lines · 95 code · 24 blank · 0 comment · 3 complexity · 82850eaa73c6189e19d2e558c9ae8927 MD5 · raw file

  1. #include <math.h>
  2. #include "ftk.h"
  3. #define IDC_PAINT 100
  4. static int g_width = 10;
  5. static Ret on_paint(void* ctx, void* obj)
  6. {
  7. FtkGc gc;
  8. int i = 0;
  9. int w = 0;
  10. int h = 0;
  11. FtkPoint p = {0};
  12. FtkWidget* thiz = obj;
  13. FTK_BEGIN_PAINT(x, y, width, height, canvas);
  14. ftk_logd("%s:%d\n", __func__, __LINE__);
  15. gc.fg.a = 0xff;
  16. gc.fg.r = 0xff;
  17. gc.fg.g = 0;
  18. gc.fg.b = 0;
  19. gc.mask = FTK_GC_FG;
  20. w = g_width % width;
  21. ftk_canvas_set_gc(canvas, &gc);
  22. ftk_canvas_draw_line(canvas, x, y + height/2, x + w, y + height/2);
  23. for(i = 0; i < height; i+=10)
  24. {
  25. ftk_canvas_draw_line(canvas, x, y, x + width, y + i);
  26. }
  27. for(i = width; i >= 0; i-=10)
  28. {
  29. ftk_canvas_draw_line(canvas, x, y, x + i, y + height);
  30. }
  31. gc.fg.r = 0;
  32. gc.fg.g = 0xff;
  33. ftk_canvas_set_gc(canvas, &gc);
  34. for(i = 0; i < w; i++)
  35. {
  36. double r = 2 * 3.14 * i / width;
  37. h = height/3 * sin(r);
  38. p.x = x + i;
  39. p.y = y + height/2 + h;
  40. ftk_canvas_draw_pixels(canvas, &p, 1);
  41. }
  42. ftk_canvas_reset_gc(canvas, ftk_widget_get_gc(thiz));
  43. ftk_canvas_draw_string(canvas, x + 100, y + height/2, "Hello World!", strlen("Hello World!"), 1);
  44. ftk_logd("%s:%d\n", __func__, __LINE__);
  45. FTK_END_PAINT();
  46. return RET_OK;
  47. }
  48. static Ret button_step_clicked(void* ctx, void* obj)
  49. {
  50. g_width += 30;
  51. ftk_widget_invalidate(ftk_widget_lookup(ctx, IDC_PAINT));
  52. return RET_OK;
  53. }
  54. static Ret button_quit_clicked(void* ctx, void* obj)
  55. {
  56. ftk_widget_unref(ctx);
  57. return RET_OK;
  58. }
  59. #ifdef FTK_AS_PLUGIN
  60. #include "ftk_app_demo.h"
  61. FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
  62. FtkApp* ftk_app_demo_draw_create()
  63. {
  64. return ftk_app_demo_create(_("draw"), ftk_main);
  65. }
  66. #else
  67. #define FTK_HIDE extern
  68. #endif /*FTK_AS_PLUGIN*/
  69. FTK_HIDE int FTK_MAIN(int argc, char* argv[])
  70. {
  71. int width = 0;
  72. int height = 0;
  73. FtkWidget* win = NULL;
  74. FtkWidget* button = NULL;
  75. FtkWidget* painter = NULL;
  76. FTK_INIT(argc, argv);
  77. win = ftk_app_window_create();
  78. ftk_window_set_animation_hint(win, "app_main_window");
  79. width = ftk_widget_width(win);
  80. height = ftk_widget_height(win);
  81. button = ftk_button_create(win, 0, 10, width/3, 60);
  82. ftk_widget_set_text(button, "step");
  83. ftk_button_set_clicked_listener(button, button_step_clicked, win);
  84. button = ftk_button_create(win, width*2/3, 10, width/3, 60);
  85. ftk_widget_set_text(button, "quit");
  86. ftk_button_set_clicked_listener(button, button_quit_clicked, win);
  87. painter = ftk_painter_create(win, 0, 70, width, height-70);
  88. ftk_widget_set_id(painter, IDC_PAINT);
  89. ftk_painter_set_paint_listener(painter, on_paint, NULL);
  90. ftk_widget_set_text(win, "drawking kit demo");
  91. ftk_widget_show_all(win, 1);
  92. FTK_QUIT_WHEN_WIDGET_CLOSE(win);
  93. FTK_RUN();
  94. return 0;
  95. }