//! //! @brief To be written //! void gw_kanjipadwindow_draw_candidates (GwKanjipadWindow *window) { //Declarations GwKanjipadWindowPrivate *priv; //gint width; //gint height; int i; cairo_t *cr; //Initializations priv = window->priv; //height = gtk_widget_get_allocated_height (GTK_WIDGET (priv->candidates)); //width = gtk_widget_get_allocated_width (GTK_WIDGET (priv->candidates)); cr = cairo_create (priv->ksurface); cairo_save (cr); cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); cairo_fill (cr); cairo_restore (cr); for (i = 0; i < priv->total_candidates; i++) { if (strcmp (priv->kselected, priv->kanji_candidates[i]) == 0) _kanjipadwindow_draw_candidate_character (window, i, 1); else _kanjipadwindow_draw_candidate_character (window, i, -1); } gtk_widget_queue_draw (GTK_WIDGET (priv->candidates)); cairo_destroy (cr); cr = NULL; }
//! //! @brief To be written //! G_MODULE_EXPORT gboolean gw_kanjipadwindow_candidatearea_button_press_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { //Declarations GwKanjipadWindow *window; GwKanjipadWindowPrivate *priv; GwKanjipadWindowClass *klass; int j; gint char_height; GtkClipboard *clipboard; char *string_utf; //Initializations window = GW_KANJIPADWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_KANJIPADWINDOW)); if (window == NULL) return FALSE; priv = window->priv; klass = GW_KANJIPADWINDOW_CLASS (G_OBJECT_GET_CLASS (window)); clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); static const GtkTargetEntry targets[] = { { "STRING", 0, 0 }, { "TEXT", 0, 0 }, { "COMPOUND_TEXT", 0, 0 }, { "UTF8_STRING", 0, 0 } }; _kanjipadwindow_erase_candidate_selection (window); _kanjipadwindow_get_candidate_character_size (window, NULL, &char_height); j = event->y / (char_height + 6); if (j < priv->total_candidates) { gw_kanjipadwindow_draw_candidates (window); strncpy(priv->kselected, priv->kanji_candidates[j], 2); _kanjipadwindow_draw_candidate_character (window, j, 1); if (!gtk_clipboard_set_with_owner (clipboard, targets, G_N_ELEMENTS (targets), _kanjipadwindow_primary_candidates_get, _kanjipadwindow_primary_candidates_clear, G_OBJECT (widget))) _kanjipadwindow_primary_candidates_clear (clipboard, widget); } else { priv->kselected[0] = 0; priv->kselected[1] = 0; if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (widget)) gtk_clipboard_clear (clipboard); } gtk_widget_queue_draw (widget); string_utf = _kanjipadwindow_utf8_for_char (priv->kselected); g_signal_emit (G_OBJECT (window), klass->signalid[GW_KANJIPADWINDOW_CLASS_SIGNALID_KANJI_SELECTED], 0, string_utf); g_free (string_utf); //Cleanup so the user can draw the next character gw_kanjipadwindow_clear_drawingarea (window); return TRUE; }
//! //! @brief To be written //! void gw_kanjipadwindow_draw_candidates (GwKanjipadWindow *window) { //Declarations GwKanjipadWindowPrivate *priv; //gint width; //gint height; int i; cairo_t *cr; GtkStyleContext *context; GtkStateFlags state; GdkRGBA bgcolor; //Initializations priv = window->priv; //height = gtk_widget_get_allocated_height (GTK_WIDGET (priv->candidates)); //width = gtk_widget_get_allocated_width (GTK_WIDGET (priv->candidates)); cr = cairo_create (priv->ksurface); context = gtk_widget_get_style_context (GTK_WIDGET (priv->candidates)); state = gtk_widget_get_state_flags (GTK_WIDGET (priv->drawingarea)); gtk_style_context_get_background_color (context, state, &bgcolor); cairo_save (cr); gdk_cairo_set_source_rgba (cr, &bgcolor); cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); cairo_fill (cr); cairo_restore (cr); for (i = 0; i < priv->total_candidates; i++) { if (strcmp (priv->kselected, priv->kanji_candidates[i]) == 0) _kanjipadwindow_draw_candidate_character (window, i, 1); else _kanjipadwindow_draw_candidate_character (window, i, -1); } gtk_widget_queue_draw (GTK_WIDGET (priv->candidates)); cairo_destroy (cr); cr = NULL; }
//! //! @brief To be written //! G_MODULE_EXPORT gboolean gw_kanjipadwindow_candidatearea_configure_event_cb (GtkWidget *widget, GdkEventConfigure *event, gpointer data) { GwKanjipadWindow *window; GwKanjipadWindowPrivate *priv; window = GW_KANJIPADWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_KANJIPADWINDOW)); if (window == NULL) return FALSE; priv = window->priv; if (priv->ksurface) cairo_surface_destroy (priv->ksurface); priv->ksurface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, event->width, event->height); gw_kanjipadwindow_draw_candidates (window); if (priv->kanji_candidate_index > -1) _kanjipadwindow_draw_candidate_character (window, priv->kanji_candidate_index, 1); return TRUE; }
//! //! @brief To be written //! G_MODULE_EXPORT gboolean gw_kanjipadwindow_candidatearea_draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data) { GwKanjipadWindow *window; GwKanjipadWindowPrivate *priv; window = GW_KANJIPADWINDOW (gtk_widget_get_ancestor (GTK_WIDGET (data), GW_TYPE_KANJIPADWINDOW)); if (window == NULL) return FALSE; priv = window->priv; //Sanity check if (priv->ksurface == NULL) return FALSE; cairo_set_source_surface (cr, priv->ksurface, 0, 0); gw_kanjipadwindow_draw_candidates (window); if (priv->kanji_candidate_index > -1) _kanjipadwindow_draw_candidate_character (window, priv->kanji_candidate_index, 1); cairo_paint (cr); return TRUE; }
//! //! @brief To be written //! static int _kanjipadwindow_erase_candidate_selection (GwKanjipadWindow *window) { //Declarations GwKanjipadWindowPrivate *priv; int i; //Initializations priv = window->priv; if (priv->kselected[0] || priv->kselected[1]) { for (i = 0; i < priv->total_candidates; i++) { if (strncmp (priv->kselected, priv->kanji_candidates[i], 2)) { _kanjipadwindow_draw_candidate_character (window, i, 0); } } } return TRUE; }