亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cellwidget.c

?? 添加系統調用。。。在LINUX下添加一個新的系統調用。在文件中添加自己的系統調用的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
                old_cc = cell;                recognize_sample(input, pc->alts, ALTERNATES);                pc->ch = input->ch;                pc->flags &= ~CELL_VERIFIED;                if (pc->ch)                        pad_cell(cell);                /* Copy the alternate ratings and usage stamps before they're                   overwritten by another call to recognize_sample() */                for (i = 0; i < ALTERNATES && pc->alts[i]; i++) {                        pc->alt_ratings[i] = pc->alts[i]->rating;                        pc->alt_used[i] = pc->alts[i]->used;                }                /* Add a row if this is the last cell */                if (cell == cell_rows * cell_cols - 1)                        pack_cells(0, cell_cols);        }        input = NULL;        drawing = FALSE;}static gboolean finish_timeout(void)/* Motion timeout for finishing drawing a cell */{        finish_cell(current_cell);        render_dirty();        timeout_source = 0;        start_timeout();        return FALSE;}static gboolean row_timeout(void)/* Motion timeout for adding a row */{        pack_cells(cell_rows + 1, cell_cols);        cell_widget_render();        timeout_source = 0;        return FALSE;}static int check_clear(void){        int i;        if (is_clear)                return TRUE;        if (training || (input && input->len))                return FALSE;        for (i = 0; i < cell_cols * cell_rows; i++)                if (cells[i].ch)                        return FALSE;        return TRUE;}static gboolean is_clear_timeout(void)/* Motion timeout for checking clear state */{        timeout_source = 0;        if (is_clear || !check_clear())                return FALSE;        /* Show the on-screen keyboard */        show_keys = keyboard_enabled;        is_clear = TRUE;        pack_cells(1, cell_cols);        cell_widget_render();        return FALSE;}static gboolean hold_timeout(void)/* Motion timeout for popping up a hold-click context menu */{        if (potential_hold) {                potential_hold = FALSE;                stop_drawing();                show_context_menu(1, gtk_get_current_event_time());        }        timeout_source = 0;        return FALSE;}static void start_timeout(void)/* If a timeout action is approriate for the current situation, start a   timeout */{        GSourceFunc func = NULL;        if (potential_hold)                return;        stop_timeout();        if (cross_out)                return;        /* Events below are not triggered while drawing */        if (!drawing) {                if (input)                        func = (GSourceFunc)finish_timeout;                else if (!cells[cell_rows * cell_cols - 1].ch &&                         cells[cell_rows * cell_cols - 2].ch && !training)                        func = (GSourceFunc)row_timeout;                else if (!is_clear && check_clear())                        func = (GSourceFunc)is_clear_timeout;        }        if (func)                timeout_source = g_timeout_add(MOTION_TIMEOUT, func, NULL);}static void start_hold(void){        potential_hold = TRUE;        if (timeout_source)                g_source_remove(timeout_source);        timeout_source = g_timeout_add(MOTION_TIMEOUT,                                       (GSourceFunc)hold_timeout, NULL);}void cell_widget_set_cursor(int recreate)/* Set the drawing area cursor to a black box pen cursor or to a blank cursor   depending on which is appropriate */{        static char bits[] = { 0xff, 0xff, 0xff };      /* Square cursor */                           /*{ 0x02, 0xff, 0x02 };*/    /* Cross cursor */        static GdkCursor *square;        GdkPixmap *pixmap;        GdkCursor *cursor;        /* Ink color changed, recreate cursor */        if (recreate) {                if (square)                        gdk_cursor_unref(square);                pixmap = gdk_bitmap_create_from_data(NULL, bits, 3, 3);                square = gdk_cursor_new_from_pixmap(pixmap, pixmap,                                                    &color_ink,                                                    &color_ink, 1, 1);                g_object_unref(pixmap);        }        cursor = square;        /* Eraser cursor */        if (eraser || cross_out) {                GdkDisplay *display;                display = gtk_widget_get_display(drawing_area);                cursor = gdk_cursor_new_for_display(display, GDK_CIRCLE);        }        gdk_window_set_cursor(drawing_area->window,                              invalid || inserting ? NULL : cursor);}static void stop_drawing(void)/* Ends the current stroke and applies various processing functions */{        Stroke *stroke;        if (!drawing) {                if (cross_out) {                        cross_out = FALSE;                        cell_widget_set_cursor(FALSE);                }                return;        }        drawing = FALSE;        if (!input || input->len >= STROKES_MAX)                return;        stroke = input->strokes[input->len - 1];        smooth_stroke(stroke);        simplify_stroke(stroke);        process_stroke(stroke);        render_cell(current_cell);        render_sample(input, current_cell);        start_timeout();}static void erase_cell(int cell){        if (!training) {                clear_cell(cell);                render_dirty();        } else {                untrain_char(cells[cell].ch);                render_cell(cell);        }}static void check_cell(double x, double y, GdkDevice *device)/* Check if we have changed to a different cell */{        int cell_x, cell_y, cell, rem_x, rem_y,            old_inserting, old_invalid, old_eraser, old_cross_out;        /* Stop drawing first */        old_cross_out = cross_out;        if (drawing && !cross_out) {                int dx, dy;                /* Check if we have started the cross-out gesture */                cell_coords(current_cell, &cell_x, &cell_y);                cell_x += cell_width / 2;                cell_y += cell_height / 2;                dx = cell_x - x;                dy = cell_y - y;                if (dx < 0)                        dx = -dx;                if (dy < 0)                        dy = -dy;                if (dx < cell_width && dy < cell_height)                        return;                cross_out = TRUE;                drawing = FALSE;                clear_sample(input);                input = NULL;                erase_cell(current_cell);        }        /* Is this the eraser tip? */        old_eraser = eraser;        eraser = device && device->source == GDK_SOURCE_ERASER;        /* Adjust for border */        x--;        y--;        /* Right-to-left mode inverts the x-axis */        if (right_to_left)                x = cell_cols * cell_width - x - 1;        /* What cell are we hovering over? */        cell_y = y / cell_height + cell_row_view;        cell_x = x / cell_width;        cell = cell_cols * cell_y + cell_x;        /* Out of bounds or invalid cell */        old_invalid = invalid;        invalid = cell_x < 0 || cell_y < 0 || cell_x >= cell_cols ||                  cell_y >= cell_rows || cell_offscreen(cell) ||                  (training && !cells[cell].ch);        /* Are we in the insertion hotspot? */        rem_x = x - cell_x * cell_width;        rem_y = y - (cell_y - cell_row_view) * cell_height;        old_inserting = inserting;        inserting = FALSE;        if (!cross_out && !eraser && !invalid && !training && !input &&            (rem_y <= CELL_BORDER * 2 ||             rem_y > cell_height - CELL_BORDER * 2)) {                if (rem_x <= CELL_BORDER + 1)                        inserting = TRUE;                else if (cell < cell_rows * cell_cols - 1 &&                         rem_x > cell_width - CELL_BORDER) {                        inserting = TRUE;                        cell++;                }        }        /* Current cell has changed */        old_cc = current_cell;        if (current_cell != cell) {                current_cell = cell;                if (!cross_out)                        finish_cell(old_cc);        }        /* We have moved into or out of the insertion hotspot */        if (old_inserting != inserting || old_cc != cell) {                if (old_inserting) {                        dirty_cell(old_cc);                        dirty_cell(old_cc - 1);                }                if (inserting) {                        dirty_cell(current_cell);                        dirty_cell(current_cell - 1);                }        }        /* Update cursor if necessary */        if (old_invalid != invalid || old_inserting != inserting ||            old_eraser != eraser || old_cross_out != cross_out)                cell_widget_set_cursor(FALSE);        render_dirty();}static void unclear(int render)/* Hides the on-screen keyboard and re-renders the cells.   FIXME we only need to render dirty cells */{        is_clear = FALSE;        if (!show_keys)                return;        show_keys = FALSE;        if (render)                cell_widget_render();}static void draw(double x, double y){        Stroke *s;        int cx, cy;        if (current_cell < 0)                return;        /* Hide the on-screen keyboard */        unclear(TRUE);        /* New character */        if (!input || !input->len) {                clear_sample(&cells[current_cell].sample);                cells[current_cell].alts[0] = NULL;                input = &cells[current_cell].sample;                cells[current_cell].sample.ch = cells[current_cell].ch;        }        /* Allocate a new stroke if we aren't already drawing */        s = input->strokes[input->len - 1];        if (!drawing) {                if (input->len >= STROKES_MAX)                        return;                s = input->strokes[input->len++]= stroke_new(0);                drawing = TRUE;                if (input->len == 1)                        render_cell(current_cell);        }        /* Check bounds */        cell_coords(current_cell, &cx, &cy);        /* Normalize the input */        x = (x - cx - cell_width / 2) * SCALE / cell_height;        y = (y - cy - cell_height / 2) * SCALE / cell_height;        draw_stroke(&input->strokes[input->len - 1], x, y);}static void insert_cell(int cell){        int i;        /* Find a blank to consume */        for (i = cell; i < cell_rows * cell_cols; i++)                if (!cells[i].ch)                        break;        /* Insert a row if necessary */        if (i >= cell_rows * cell_cols - 1) {                cells = g_realloc(cells,                                  ++cell_rows * cell_cols * sizeof (Cell));                memset(cells + (cell_rows - 1) * cell_cols, 0,                       cell_cols * sizeof (Cell));                if (cell_rows > cell_rows_pref)                        cell_row_view++;        }        if (i > cell)                memmove(cells + cell + 1, cells + cell,                        (i - cell) * sizeof (Cell));        cells[cell].ch = ' ';        cells[cell].alts[0] = NULL;        cells[cell].sample.len = 0;        cells[cell].sample.ch = 0;        pad_cell(cell);        pack_cells(0, cell_cols);        unclear(FALSE);        cell_widget_render();}static void delete_cell(int cell){        int i, rows;        clear_cell(cell);        memmove(cells + cell, cells + cell + 1,                (cell_rows * cell_cols - cell - 1) * sizeof (Cell));        /* Delete a row if necessary */        for (i = 0; i < cell_cols &&             !cells[(cell_rows - 1) * cell_cols + i].ch; i++);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区免费电影| 日韩综合小视频| 一区二区三区中文字幕精品精品| 亚洲激情综合网| 国产精品资源在线| 欧美人妇做爰xxxⅹ性高电影| 2022国产精品视频| 天天做天天摸天天爽国产一区 | 天天综合日日夜夜精品| 国产成人av资源| 日韩色视频在线观看| 一区二区在线观看视频在线观看| 激情综合网激情| 欧美日韩精品一区二区三区四区| 国产三区在线成人av| 免费高清在线视频一区·| 欧美在线免费观看亚洲| 1024精品合集| 国产不卡免费视频| 精品日韩成人av| 奇米影视在线99精品| 在线91免费看| 亚洲电影一区二区| 91麻豆蜜桃一区二区三区| 国产欧美日韩精品在线| 美女免费视频一区二区| 日韩一区二区不卡| 久久不见久久见中文字幕免费| 6080午夜不卡| 九色综合狠狠综合久久| 91精品欧美综合在线观看最新 | 麻豆成人av在线| 6080yy午夜一二三区久久| 日韩精品一级中文字幕精品视频免费观看| 99久久久精品| 自拍视频在线观看一区二区| av福利精品导航| 综合久久久久久久| 91精品1区2区| 天堂成人免费av电影一区| 欧美性色aⅴ视频一区日韩精品| 一区二区三区四区国产精品| 日本精品视频一区二区| 五月婷婷久久丁香| 欧美久久久久久久久久| 日本美女一区二区三区| 久久久精品一品道一区| 岛国一区二区三区| 一区二区三区.www| 欧美浪妇xxxx高跟鞋交| 久久爱www久久做| 国产亚洲成av人在线观看导航| 丁香激情综合国产| 一区二区免费看| 欧美一区二区三区视频在线观看 | 亚洲欧洲性图库| 欧美亚洲日本国产| 日韩精品电影在线| 久久久精品免费网站| 色视频欧美一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 日韩欧美国产一区二区在线播放| 精品一区二区三区免费播放| 中文av一区二区| 欧美日韩精品免费观看视频 | 久久伊人蜜桃av一区二区| 波多野结衣中文字幕一区| 天天操天天色综合| 国产日韩欧美一区二区三区乱码| 一道本成人在线| 裸体歌舞表演一区二区| 国产精品麻豆久久久| 欧美日本高清视频在线观看| 国产精品一二三| 亚洲电影在线免费观看| 国产日韩欧美不卡在线| 欧美日本国产视频| 91一区一区三区| 日韩电影在线一区二区| 亚洲日本一区二区三区| 日韩一区二区在线观看视频| av不卡一区二区三区| 免费亚洲电影在线| 亚洲精品老司机| 国产午夜精品理论片a级大结局| 欧美图区在线视频| 粉嫩av一区二区三区| 日精品一区二区| 亚洲精品国产a久久久久久| 国产欧美一区二区精品婷婷| 欧美一区二区三区四区高清| 99久久婷婷国产综合精品 | 国产成人精品影院| 午夜精品久久久久久久99水蜜桃| 中文字幕在线不卡一区二区三区| 日韩欧美成人一区| 欧美日韩黄色一区二区| 91丨九色porny丨蝌蚪| 国产aⅴ综合色| 久久99精品国产麻豆婷婷洗澡| 一区二区三区四区在线免费观看| 国产欧美一区二区精品秋霞影院| 日韩欧美国产成人一区二区| 欧美网站大全在线观看| 色94色欧美sute亚洲线路二| 9i看片成人免费高清| 精品午夜一区二区三区在线观看| 午夜精品久久久久久久99樱桃| 一区二区三区中文在线观看| 亚洲男人都懂的| 亚洲少妇30p| 亚洲精品视频在线观看网站| 国产精品久久久久7777按摩| 国产女同性恋一区二区| 日本一区二区三区免费乱视频| 亚洲精品一区二区在线观看| 精品区一区二区| 欧美成人精品福利| 精品国产制服丝袜高跟| 精品黑人一区二区三区久久| 久久久久高清精品| 国产精品免费视频网站| 17c精品麻豆一区二区免费| 亚洲三级免费观看| 亚洲不卡av一区二区三区| 午夜精品久久久久久久久| 日韩影院免费视频| 免费成人结看片| 国产精品一区2区| 国产99久久久精品| 91蜜桃在线观看| 在线看不卡av| 日韩欧美一区中文| 精品88久久久久88久久久| 2023国产一二三区日本精品2022| 国产色91在线| 亚洲精品国产精华液| 日韩福利视频导航| 丁香五精品蜜臀久久久久99网站| 成人黄色在线看| 欧美日韩一区三区| 精品久久久久久无| 国产精品日产欧美久久久久| 一区二区成人在线视频| 麻豆成人久久精品二区三区红| 成人午夜av在线| 欧美日韩在线播放| 久久蜜桃av一区二区天堂| 亚洲欧洲日韩一区二区三区| 亚洲国产va精品久久久不卡综合| 久久se这里有精品| 色欧美日韩亚洲| 精品国产91久久久久久久妲己| 国产精品不卡在线| 久色婷婷小香蕉久久| 99精品偷自拍| 欧美xxxxxxxx| 亚洲免费高清视频在线| 激情小说欧美图片| 色88888久久久久久影院野外| 精品国精品国产| 亚洲国产欧美在线| 成人免费视频视频| 日韩欧美高清在线| 亚洲综合激情另类小说区| 久久国产夜色精品鲁鲁99| 91免费版在线| 国产欧美精品一区二区色综合 | 国产一区二区三区日韩| 色综合久久九月婷婷色综合| 日韩亚洲欧美中文三级| 一区二区三区在线观看动漫| 国产一区二区三区视频在线播放| 欧美日韩在线播放三区| 综合色中文字幕| 狠狠色伊人亚洲综合成人| 欧美日韩一区二区三区在线| 国产精品久久久久久久久免费桃花| 日韩极品在线观看| 色欧美日韩亚洲| 亚洲人成影院在线观看| 狠狠色丁香婷婷综合| 欧美高清视频一二三区| 一区二区免费视频| 99精品视频在线播放观看| 国产午夜精品一区二区| 国内成人自拍视频| 欧美一区二区三区四区五区 | 国产另类ts人妖一区二区| 欧美一级高清片| 视频一区在线视频| 欧美精品欧美精品系列| 一区二区三区蜜桃网| 91网上在线视频| 亚洲久本草在线中文字幕| 成人av影院在线| 亚洲欧洲日韩av| 91视频观看视频| 1024成人网| 色狠狠色噜噜噜综合网|