static void dma_chunk_view_move_cursor (GtkTextView *text_view, GtkMovementStep step, gint count, gboolean extend_selection) { DmaChunkView *view = DMA_CHUNK_VIEW (text_view); GtkTextMark *mark; GtkTextBuffer *buffer; GtkTextIter cur; gint line; gdouble value, step_increment; switch (step) { case GTK_MOVEMENT_LOGICAL_POSITIONS: case GTK_MOVEMENT_VISUAL_POSITIONS: case GTK_MOVEMENT_WORDS: case GTK_MOVEMENT_DISPLAY_LINE_ENDS: case GTK_MOVEMENT_HORIZONTAL_PAGES: break; case GTK_MOVEMENT_DISPLAY_LINES: case GTK_MOVEMENT_PARAGRAPHS: case GTK_MOVEMENT_PARAGRAPH_ENDS: buffer = gtk_text_view_get_buffer (text_view); mark = gtk_text_buffer_get_insert (buffer); gtk_text_buffer_get_iter_at_mark (buffer, &cur, mark); line = gtk_text_iter_get_line (&cur); step_increment = gtk_adjustment_get_step_increment (view->vadjustment); if ((count < 0) && (line == 0)) { value += count * step_increment; set_adjustment_clamped (view->vadjustment, value); return; } else if ((count > 0) && (line == gtk_text_buffer_get_line_count(buffer) - 1)) { value += count * step_increment; set_adjustment_clamped (view->vadjustment, value); return; } break; case GTK_MOVEMENT_PAGES: value += count * gtk_adjustment_get_page_increment (view->vadjustment); set_adjustment_clamped (view->vadjustment, value); return; case GTK_MOVEMENT_BUFFER_ENDS: set_adjustment_clamped (view->vadjustment, count < 0 ? gtk_adjustment_get_lower (view->vadjustment) : gtk_adjustment_get_upper (view->vadjustment)); return; default: break; } GTK_TEXT_VIEW_CLASS (parent_class)->move_cursor (text_view, step, count, extend_selection); }
static void dma_data_view_create_widget (DmaDataView *view) { GtkAdjustment *adj; GtkWidget* wid; PangoFontDescription *font_desc; wid = GTK_WIDGET (view); gtk_widget_set_has_window (wid, FALSE); gtk_widget_set_can_focus (wid, TRUE); gtk_widget_set_redraw_on_allocate (wid, FALSE); view->char_by_byte = 2; view->bytes_by_line = 16; view->line_by_page = 16; view->hadjustment = NULL; view->vadjustment = NULL; view->shadow_type = GTK_SHADOW_IN; view->goto_window = NULL; view->goto_entry = NULL; font_desc = pango_font_description_from_string ("Monospace 10"); view->buffer_range = GTK_ADJUSTMENT (gtk_adjustment_new (0, dma_data_buffer_get_lower (view->buffer), dma_data_buffer_get_upper (view->buffer) ,1,4,4)); g_signal_connect (view->buffer_range, "value_changed", G_CALLBACK (dma_data_view_value_changed), view); gtk_widget_push_composite_child (); wid = gtk_vscrollbar_new (view->buffer_range); g_object_ref (wid); view->range = wid; gtk_widget_set_parent (wid, GTK_WIDGET (view)); adj = view->view_range; gtk_widget_show (wid); wid = dma_chunk_view_new (); g_object_ref (wid); gtk_widget_modify_font (wid, font_desc); gtk_widget_set_parent (wid, GTK_WIDGET (view)); gtk_widget_set_size_request (wid, -1, 0); gtk_widget_show (wid); gtk_text_view_set_editable (GTK_TEXT_VIEW (wid), FALSE); view->ascii = wid; view->ascii_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (wid)); dma_chunk_view_set_scroll_adjustment (DMA_CHUNK_VIEW (wid), view->buffer_range); g_signal_connect (wid, "populate_popup", G_CALLBACK (dma_data_view_populate_popup), view); wid = dma_chunk_view_new (); g_object_ref (wid); gtk_widget_modify_font (wid, font_desc); gtk_widget_set_parent (wid, GTK_WIDGET (view)); gtk_widget_set_size_request (wid, -1, 0); gtk_widget_show (wid); gtk_text_view_set_editable (GTK_TEXT_VIEW (wid), FALSE); view->data = wid; view->data_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (wid)); dma_chunk_view_set_scroll_adjustment (DMA_CHUNK_VIEW (wid), view->buffer_range); g_signal_connect (wid, "populate_popup", G_CALLBACK (dma_data_view_populate_popup), view); wid = dma_chunk_view_new (); g_object_ref (wid); gtk_widget_modify_font (wid, font_desc); gtk_widget_set_parent (wid, GTK_WIDGET (view)); gtk_widget_set_size_request (wid, -1, 0); gtk_widget_show (wid); gtk_text_view_set_editable (GTK_TEXT_VIEW (wid), FALSE); view->address = wid; view->adr_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (wid)); dma_chunk_view_set_scroll_adjustment (DMA_CHUNK_VIEW (wid), view->buffer_range); g_signal_connect (wid, "populate_popup", G_CALLBACK (dma_data_view_populate_popup), view); gtk_widget_pop_composite_child (); pango_font_description_free (font_desc); }