📄 gtkclock_c.html
字号:
<font color=#884455><b>if</b></font> <font color=#333399>(</font>GTK_WIDGET_DRAWABLE <font color=#333399>(</font>widget<font color=#333399>)</font><font color=#333399>)</font>
<font color=#333399>{</font>
clock <font color=#333399>=</font> GTK_CLOCK <font color=#333399>(</font>widget<font color=#333399>)</font><font color=#333399>;</font>
alloc_width <font color=#333399>=</font> widget<font color=#333399>-</font><font color=#333399>></font>allocation<font color=#333399>.</font>width <font color=#333399>-</font> <font color="#000000"><b>1</b></font><font color=#333399>;</font>
alloc_height <font color=#333399>=</font> widget<font color=#333399>-</font><font color=#333399>></font>allocation<font color=#333399>.</font>height <font color=#333399>-</font> <font color="#000000"><b>1</b></font><font color=#333399>;</font>
gdk_window_clear_area <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>,</font> alloc_width<font color=#333399>,</font> alloc_height<font color=#333399>)</font><font color=#333399>;</font>
gdk_color_parse<font color=#333399>(</font><font color="#0000EE"><b>"Red"</b></font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>0</b></font>]<font color=#333399>)</font><font color=#333399>;</font>
gdk_color_parse<font color=#333399>(</font><font color="#0000EE"><b>"DarkGreen"</b></font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>1</b></font>]<font color=#333399>)</font><font color=#333399>;</font>
gdk_color_parse<font color=#333399>(</font><font color="#0000EE"><b>"RoyalBlue"</b></font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>2</b></font>]<font color=#333399>)</font><font color=#333399>;</font>
gdk_color_parse<font color=#333399>(</font><font color="#0000EE"><b>"Black"</b></font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>3</b></font>]<font color=#333399>)</font><font color=#333399>;</font>
min <font color=#333399>=</font> clock<font color=#333399>-</font><font color=#333399>></font>min<font color=#333399>;</font> hour <font color=#333399>=</font> clock<font color=#333399>-</font><font color=#333399>></font>hour<font color=#333399>;</font> sec <font color=#333399>=</font> clock<font color=#333399>-</font><font color=#333399>></font>sec<font color=#333399>;</font>
max_radius <font color=#333399>=</font> <font color=#333399>(</font>alloc_width <font color=#333399><</font> alloc_height<font color=#333399>)</font><font color=#333399>?</font> <font color=#333399>(</font>alloc_width<font color=#333399>/</font><font color="#000000"><b>2</b></font><font color=#333399>)</font> <font color=#333399>:</font> <font color=#333399>(</font>alloc_height<font color=#333399>/</font><font color="#000000"><b>2</b></font><font color=#333399>)</font><font color=#333399>;</font>
<font color=#884455><b>for</b></font> <font color=#333399>(</font>loop1<font color=#333399>=</font><font color="#000000"><b>0</b></font><font color=#333399>;</font> loop1<font color=#333399><</font><font color="#000000"><b>60</b></font><font color=#333399>;</font> loop1<font color=#333399>+</font><font color=#333399>=</font><font color="#000000"><b>5</b></font><font color=#333399>)</font>
<font color=#333399>{</font>
gtk_clock_obtain_coordinates <font color=#333399>(</font><font color=#333399>&</font>xc<font color=#333399>,</font> <font color=#333399>&</font>yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>,</font> loop1<font color=#333399>,</font> max_radius<font color=#333399>-</font><font color="#000000"><b>10</b></font><font color=#333399>,</font> <font color="#000000"><b>60</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_gc_set_line_attributes <font color=#333399>(</font>clock_gc<font color=#333399>,</font> <font color="#000000"><b>10</b></font><font color=#333399>,</font> GDK_LINE_SOLID<font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_draw_line <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> widget<font color=#333399>-</font><font color=#333399>></font>style<font color=#333399>-</font><font color=#333399>></font>black_gc<font color=#333399>,</font> xc<font color=#333399>,</font> yc<font color=#333399>,</font>xc<font color=#333399>+</font><font color="#000000"><b>1</b></font><font color=#333399>,</font>yc<font color=#333399>+</font><font color="#000000"><b>1</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_draw_line <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> widget<font color=#333399>-</font><font color=#333399>></font>style<font color=#333399>-</font><font color=#333399>></font>black_gc<font color=#333399>,</font> xc<font color=#333399>+</font><font color="#000000"><b>1</b></font><font color=#333399>,</font> yc<font color=#333399>,</font>xc<font color=#333399>,</font>yc<font color=#333399>+</font><font color="#000000"><b>1</b></font><font color=#333399>)</font><font color=#333399>;</font>
<font color=#333399>}</font>
gdk_gc_set_line_attributes <font color=#333399>(</font>clock_gc<font color=#333399>,</font> <font color="#000000"><b>2</b></font><font color=#333399>,</font> GDK_LINE_SOLID<font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>,</font> <font color="#000000"><b>0</b></font><font color=#333399>)</font><font color=#333399>;</font>
<font color="#007766">/* Obtain coordinates for minute and draw a line from center to that point */</font>
gtk_clock_obtain_coordinates <font color=#333399>(</font><font color=#333399>&</font>xc<font color=#333399>,</font> <font color=#333399>&</font>yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>,</font> min<font color=#333399>,</font> max_radius<font color=#333399>,</font> <font color="#000000"><b>60</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_colormap_alloc_color <font color=#333399>(</font>gdk_colormap_get_system<font color=#333399>(</font><font color=#333399>)</font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>0</b></font>]<font color=#333399>,</font> FALSE<font color=#333399>,</font> TRUE<font color=#333399>)</font><font color=#333399>;</font>
gdk_gc_set_foreground <font color=#333399>(</font>clock_gc<font color=#333399>,</font> colors<font color=#333399>+</font><font color="#000000"><b>0</b></font><font color=#333399>)</font><font color=#333399>;</font> <font color="#007766">/* Red */</font>
gdk_draw_line <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> clock_gc<font color=#333399>,</font> xc<font color=#333399>,</font> yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>)</font><font color=#333399>;</font>
<font color="#007766">/* Obtain coordinates for hour and draw a line from center to that point */</font>
gtk_clock_obtain_coordinates <font color=#333399>(</font><font color=#333399>&</font>xc<font color=#333399>,</font> <font color=#333399>&</font>yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>,</font> <font color=#333399>(</font>hour<font color=#333399>!</font><font color=#333399>=</font><font color="#000000"><b>12</b></font><font color=#333399>)</font><font color=#333399>?</font>hour<font color=#333399>*</font><font color="#000000"><b>60</b></font><font color=#333399>+</font>min<font color=#333399>:</font>min<font color=#333399>,</font> max_radius<font color=#333399>*</font><font color="#000000"><b>0.65</b></font><font color=#333399>,</font> <font color="#000000"><b>12</b></font><font color=#333399>*</font><font color="#000000"><b>60</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_colormap_alloc_color <font color=#333399>(</font>gdk_colormap_get_system<font color=#333399>(</font><font color=#333399>)</font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>1</b></font>]<font color=#333399>,</font> FALSE<font color=#333399>,</font> TRUE<font color=#333399>)</font><font color=#333399>;</font>
gdk_gc_set_foreground <font color=#333399>(</font>clock_gc<font color=#333399>,</font> colors<font color=#333399>+</font><font color="#000000"><b>1</b></font><font color=#333399>)</font><font color=#333399>;</font> <font color="#007766">/* Green */</font>
gdk_draw_line <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> clock_gc<font color=#333399>,</font> xc<font color=#333399>,</font> yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>)</font><font color=#333399>;</font>
<font color="#007766">/* Obtain coordinates for seconds and draw a line from center to that point */</font>
gtk_clock_obtain_coordinates <font color=#333399>(</font><font color=#333399>&</font>xc<font color=#333399>,</font> <font color=#333399>&</font>yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>,</font> sec<font color=#333399>,</font> max_radius<font color=#333399>*</font><font color="#000000"><b>.85</b></font><font color=#333399>,</font> <font color="#000000"><b>60</b></font><font color=#333399>)</font><font color=#333399>;</font>
gdk_colormap_alloc_color <font color=#333399>(</font>gdk_colormap_get_system<font color=#333399>(</font><font color=#333399>)</font><font color=#333399>,</font> <font color=#333399>&</font>colors[<font color="#000000"><b>2</b></font>]<font color=#333399>,</font> FALSE<font color=#333399>,</font> TRUE<font color=#333399>)</font><font color=#333399>;</font>
gdk_gc_set_foreground <font color=#333399>(</font>clock_gc<font color=#333399>,</font> colors<font color=#333399>+</font><font color="#000000"><b>2</b></font><font color=#333399>)</font><font color=#333399>;</font> <font color="#007766">/* Blue */</font>
gdk_draw_line <font color=#333399>(</font>widget<font color=#333399>-</font><font color=#333399>></font>window<font color=#333399>,</font> clock_gc<font color=#333399>,</font> xc<font color=#333399>,</font> yc<font color=#333399>,</font> max_radius<font color=#333399>,</font> max_radius<font color=#333399>)</font><font color=#333399>;</font>
<font color=#333399>}</font>
<font color=#333399>}</font>
<font color="#007766">/* ----------------------------------------------------------------------------------*/</font>
<font color="#007766">/* UTILITY FUNCTIONS */</font>
<font color=#333399>/</font><font color=#333399>/</font> TODO<font color=#333399>:</font> replace this function with a better one<font color=#333399>.</font> Due to lack of time<font color=#333399>,</font>
<font color=#333399>/</font><font color=#333399>/</font> this one is still buggy<font color=#333399>.</font>
<font color=#AA0000><b>int</b></font> get_current_time <font color=#333399>(</font><font color=#AA0000><b>int</b></font> <font color=#333399>*</font>hr<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> <font color=#333399>*</font>mn<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> <font color=#333399>*</font>sc<font color=#333399>)</font>
<font color=#333399>{</font>
<font color=#AA0000><b>long</b></font> hour <font color=#333399>=</font> <font color=#333399>*</font>hr<font color=#333399>,</font> min <font color=#333399>=</font> <font color=#333399>*</font>mn<font color=#333399>,</font> sec<font color=#333399>=</font> <font color=#333399>*</font>sc<font color=#333399>;</font>
hour <font color=#333399>=</font> time<font color=#333399>(</font>NULL<font color=#333399>)</font><font color=#333399>;</font>
min<font color=#333399>=</font>hour<font color=#333399>;</font> sec <font color=#333399>=</font> hour<font color=#333399>;</font> sec<font color=#333399>=</font>hour<font color=#333399>%</font><font color="#000000"><b>60</b></font><font color=#333399>;</font>
min<font color=#333399>=</font>min<font color=#333399>-</font>min<font color=#333399>%</font><font color="#000000"><b>60</b></font><font color=#333399>;</font> min<font color=#333399>=</font>min<font color=#333399>/</font><font color="#000000"><b>60</b></font><font color=#333399>;</font> min<font color=#333399>=</font>min<font color=#333399>%</font><font color="#000000"><b>60</b></font><font color=#333399>;</font>
hour<font color=#333399>=</font>hour<font color=#333399>/</font><font color=#333399>(</font><font color="#000000"><b>60</b></font><font color=#333399>*</font><font color="#000000"><b>60</b></font><font color=#333399>)</font><font color=#333399>;</font> hour<font color=#333399>=</font>hour<font color=#333399>%</font><font color="#000000"><b>12</b></font><font color=#333399>;</font> hour <font color=#333399>=</font> <font color=#333399>(</font>hour<font color=#333399>+</font><font color="#000000"><b>6</b></font><font color=#333399>)</font><font color=#333399>%</font><font color="#000000"><b>12</b></font><font color=#333399>;</font>
<font color=#884455><b>if</b></font> <font color=#333399>(</font>min<font color=#333399><</font><font color="#000000"><b>30</b></font><font color=#333399>)</font> min <font color=#333399>=</font> min<font color=#333399>+</font><font color="#000000"><b>30</b></font><font color=#333399>;</font>
<font color=#884455><b>else</b></font> min <font color=#333399>=</font> min<font color=#333399>-</font><font color="#000000"><b>30</b></font><font color=#333399>;</font>
<font color=#884455><b>if</b></font><font color=#333399>(</font><font color=#333399>!</font>hour<font color=#333399>)</font> hour<font color=#333399>=</font><font color="#000000"><b>12</b></font><font color=#333399>;</font> <font color=#884455><b>if</b></font> <font color=#333399>(</font>min<font color=#333399>></font><font color="#000000"><b>30</b></font><font color=#333399>)</font> hour<font color=#333399>-</font><font color=#333399>-</font><font color=#333399>;</font> <font color=#884455><b>if</b></font><font color=#333399>(</font>hour<font color=#333399><</font><font color="#000000"><b>1</b></font><font color=#333399>)</font> hour<font color=#333399>=</font><font color="#000000"><b>12</b></font><font color=#333399>;</font>
<font color=#333399>*</font>sc <font color=#333399>=</font> sec<font color=#333399>;</font> <font color=#333399>*</font>mn <font color=#333399>=</font> min<font color=#333399>;</font> <font color=#333399>*</font>hr <font color=#333399>=</font> hour<font color=#333399>;</font>
<font color=#884455><b>return</b></font> <font color="#000000"><b>1</b></font><font color=#333399>;</font>
<font color=#333399>}</font>
<font color=#AA0000><b>void</b></font> gtk_clock_obtain_coordinates <font color=#333399>(</font><font color=#AA0000><b>int</b></font> <font color=#333399>*</font>xcood<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> <font color=#333399>*</font>ycood<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> h<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> k<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> value<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> max_radius<font color=#333399>,</font> <font color=#AA0000><b>int</b></font> max_val<font color=#333399>)</font>
<font color=#333399>{</font>
<font color=#AA0000><b>int</b></font> yc<font color=#333399>=</font><font color=#333399>*</font>ycood<font color=#333399>,</font> xc<font color=#333399>=</font><font color=#333399>*</font>xcood<font color=#333399>,</font> <font color="#000000"><b>f</b></font><font color=#333399>;</font>
<font color=#AA0000><b>float</b></font> t<font color=#333399>=</font><font color="#000000"><b>0</b></font><font color=#333399>,</font> s<font color=#333399>=</font><font color="#000000"><b>0</b></font><font color=#333399>;</font>
t<font color=#333399>=</font><font color=#333399>(</font><font color=#AA0000><b>float</b></font><font color=#333399>)</font><font color=#333399>(</font>value<font color=#333399>*</font><font color="#000000"><b>360.0</b></font><font color=#333399>/</font><font color=#333399>(</font><font color=#AA0000><b>float</b></font><font color=#333399>)</font>max_val<font color=#333399>)</font> <font color=#333399>*</font> <font color="#000000"><b>3.14159</b></font><font color=#333399>/</font><font color="#000000"><b>180</b></font><font color=#333399>;</font>
s<font color=#333399>=</font>sin<font color=#333399>(</font>t<font color=#333399>/</font><font color="#000000"><b>2</b></font><font color=#333399>)</font><font color=#333399>;</font>
yc<font color=#333399>=</font><font color=#333399>(</font><font color=#AA0000><b>int</b></font><font color=#333399>)</font><font color=#333399>(</font>k<font color=#333399>+</font> <font color="#000000"><b>2</b></font><font color=#333399>*</font>max_radius<font color=#333399>*</font><font color=#333399>(</font>pow<font color=#333399>(</font>s<font color=#333399>,</font><font color="#000000"><b>2</b></font><font color=#333399>)</font><font color=#333399>)</font> <font color=#333399>-</font>max_radius<font color=#333399>)</font><font color=#333399>;</font>
<font color="#000000"><b>f</b></font><font color=#333399>=</font><font color=#333399>-</font>max_radius<font color=#333399>*</font>max_radius<font color=#333399>+</font>h<font color=#333399>*</font>h<font color=#333399>+</font><font color=#333399>(</font>yc<font color=#333399>-</font>k<font color=#333399>)</font><font color=#333399>*</font><font color=#333399>(</font>yc<font color=#333399>-</font>k<font color=#333399>)</font><font color=#333399>;</font>
<font color=#884455><b>if</b></font> <font color=#333399>(</font>value<font color=#333399><</font>max_val<font color=#333399>/</font><font color="#000000"><b>2</b></font><font color=#333399>)</font>
xc<font color=#333399>=</font>h <font color=#333399>+</font> <font color=#333399>(</font><font color=#AA0000><b>float</b></font><font color=#333399>)</font><font color=#333399>(</font>pow<font color=#333399>(</font>h<font color=#333399>*</font>h<font color=#333399>-</font><font color="#000000"><b>f</b></font><font color=#333399>,</font> <font color="#000000"><b>.5</b></font><font color=#333399>)</font><font color=#333399>)</font><font color=#333399>;</font>
<font color=#884455><b>else</b></font>
xc<font color=#333399>=</font>h <font color=#333399>-</font> <font color=#333399>(</font><font color=#AA0000><b>float</b></font><font color=#333399>)</font><font color=#333399>(</font>pow<font color=#333399>(</font>h<font color=#333399>*</font>h<font color=#333399>-</font><font color="#000000"><b>f</b></font><font color=#333399>,</font> <font color="#000000"><b>.5</b></font><font color=#333399>)</font><font color=#333399>)</font><font color=#333399>;</font>
<font color=#333399>*</font>ycood<font color=#333399>=</font>yc<font color=#333399>;</font> <font color=#333399>*</font>xcood<font color=#333399>=</font>xc<font color=#333399>;</font>
<font color=#333399>}</font>
</pre></font><p></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -