void select_line_inside_window(void) { if (g_list_position(lines, selected_line) < g_list_position(lines, first_line)) select_line(first_line); else if (g_list_position(lines, selected_line) > g_list_position(lines, last_line)) select_line(last_line); }
static void scan_start (unsigned int timestamp) { ScanState *state = scan_state(); switch (state->timer_state) { case SCAN_IDLE: state->timer_state = SCAN_LINES; state->scan_column = 0; state->scan_row = 0; g_timeout_add_full (G_PRIORITY_HIGH_IDLE, 600, increment_scan, state, NULL); select_line (state->scan_row); break; case SCAN_LINES_DONE: state->timer_state = SCAN_KEYS; g_timeout_add_full (G_PRIORITY_HIGH_IDLE, 600, increment_scan, state, NULL); deselect_line (state->scan_row); select_key (state->scan_row, state->scan_column); break; case SCAN_KEYS_DONE: gtk_button_clicked (buttons[state->scan_row][state->scan_column]); deselect_key (state->scan_row, state->scan_column); state->timer_state = SCAN_IDLE; break; default: g_print("unexpected state for 'scan start'\n"); } }
static gboolean increment_scan (gpointer data) { ScanState *state = (ScanState *) data; int max_columns; switch (state->timer_state) { case SCAN_IDLE: /* happens if switch-break occurs before the timer fires, after SCAN_KEYS_DONE*/ return FALSE; case SCAN_LINES: deselect_line (state->scan_row); state->scan_row = (++state->scan_row < MAX_ROWS) ? state->scan_row : 0; select_line (state->scan_row); g_print ("line %d\n", state->scan_row); break; case SCAN_KEYS: deselect_key (state->scan_row, state->scan_column); if (state->scan_row == MAX_ROWS-1) max_columns = 2; else max_columns = MAX_COLUMNS; /* last row has only two keys */ state->scan_column = (++state->scan_column < max_columns) ? state->scan_column : 0; select_key (state->scan_row, state->scan_column); g_print ("row %d\n", state->scan_column); break; case SCAN_LINES_DONE: case SCAN_KEYS_DONE: return FALSE; } return TRUE; }
void displayNextLine() { // First things first: latch in the values we clocked in // last time. PORTC |= SH_BIT_OE; // Turn off the LED drivers (inverted) PORTC |= SH_BIT_LE; // latch the shift register PORTC &= ~SH_BIT_LE; // un-latch // Pick our line select_line(); PORTC &= ~SH_BIT_OE; // Turn the LED drivers back on. // Great, that's done, now we can prepare the next line // interlace lines, probably looks better. g_line+=2; if(g_line==LED_LINES) { g_line=1; } // on to the next brightness level. if(g_line>LED_LINES) { g_line=0; g_level++; if (g_level>=BRIGHTNESS_LEVELS) { g_level=0; } // Change the timer frequency to give us a better range of brightness // When it's linear the brightness levels got more same-y toward the top if (g_level < 6) OCR1A = 100; else if (g_level < 11) OCR1A = 200; else OCR1A = 300; } g_circle++; if (g_circle == CIRCLE) { // It appears we've completed a whole frame! Now's the time to decide // if we're going to switch buffers. buffer_status[g_bufCurr] = BUFFER_CLEAN; buffer_status[g_bufNext] = BUFFER_BUSY; g_bufCurr = g_bufNext; } // Send stuff out the shift register. shift_24_bit(); }
void select_previous_line_by_first_letter(char letter) { GList *line_ptr; for (line_ptr = g_list_previous(selected_line); line_ptr != NULL; line_ptr = g_list_previous(line_ptr)) { if (FILE(NODE(line_ptr))->name[0] == letter) { select_line(line_ptr); return; } } }
static void gutter_renderer_activate (GtkSourceGutterRenderer *renderer, GtkTextIter *iter, GdkRectangle *rect, GdkEvent *event) { GtkSourceGutterRendererLines *lines; lines = GTK_SOURCE_GUTTER_RENDERER_LINES (renderer); if (event->type == GDK_BUTTON_PRESS && (event->button.button == 1)) { GtkTextBuffer *buffer; buffer = get_buffer (lines); if ((event->button.state & GDK_CONTROL_MASK) != 0) { /* Single click + Ctrl -> select the line */ select_line (lines, iter); } else if ((event->button.state & GDK_SHIFT_MASK) != 0) { /* Single click + Shift -> extended current selection to include the clicked line */ extend_selection_to_line (lines, iter); } else { gtk_text_buffer_place_cursor (buffer, iter); } } else if (event->type == GDK_2BUTTON_PRESS && (event->button.button == 1)) { select_line (lines, iter); } }
void select_file(GNode *file) { select_line(FILE(file)->line); }