static void _GuiGtkList_selectionChangedCallback (GtkTreeSelection *sel, gpointer void_me) { iam (GuiList); if (my selectionChangedCallback != NULL && ! my blockSelectionChangedCallback) { //Melder_casual ("Selection changed."); struct structGuiListEvent event = { GTK_WIDGET (gtk_tree_selection_get_tree_view (sel)) }; my selectionChangedCallback (my selectionChangedBoss, & event); } }
static void gui_drawingarea_cb_click (Picture me, GuiDrawingArea_ClickEvent event) { int xstart = event -> x; int ystart = event -> y; double xWC, yWC; int ixstart, iystart, ix, iy, oldix = 0, oldiy = 0; Graphics_DCtoWC (my selectionGraphics.get(), xstart, ystart, & xWC, & yWC); ix = ixstart = 1 + floor (xWC * SQUARES / SIDE); iy = iystart = SQUARES - floor (yWC * SQUARES / SIDE); if (ixstart < 1 || ixstart > SQUARES || iystart < 1 || iystart > SQUARES) return; if (event -> shiftKeyPressed) { int ix1 = 1 + floor (my selx1 * SQUARES / SIDE); int ix2 = floor (my selx2 * SQUARES / SIDE); int iy1 = SQUARES + 1 - floor (my sely2 * SQUARES / SIDE); int iy2 = SQUARES - floor (my sely1 * SQUARES / SIDE); ixstart = ix < (ix1 + ix2) / 2 ? ix2 : ix1; iystart = iy < (iy1 + iy2) / 2 ? iy2 : iy1; } //while (Graphics_mouseStillDown (my selectionGraphics)) { do { Graphics_getMouseLocation (my selectionGraphics.get(), & xWC, & yWC); ix = 1 + floor (xWC * SQUARES / SIDE); iy = SQUARES - floor (yWC * SQUARES / SIDE); if (ix >= 1 && ix <= SQUARES && iy >= 1 && iy <= SQUARES && (ix != oldix || iy != oldiy)) { int ix1, ix2, iy1, iy2; if (ix < ixstart) { ix1 = ix; ix2 = ixstart; } else { ix1 = ixstart; ix2 = ix; } if (iy < iystart) { iy1 = iy; iy2 = iystart; } else { iy1 = iystart; iy2 = iy; } if (my mouseSelectsInnerViewport) { int fontSize = Graphics_inqFontSize (my graphics.get()); double xmargin = fontSize * 4.2 / 72.0, ymargin = fontSize * 2.8 / 72.0; if (xmargin > ix2 - ix1 + 1) xmargin = ix2 - ix1 + 1; if (ymargin > iy2 - iy1 + 1) ymargin = iy2 - iy1 + 1; Picture_setSelection (me, 0.5 * (ix1 - 1) - xmargin, 0.5 * ix2 + xmargin, 0.5 * (SQUARES - iy2) - ymargin, 0.5 * (SQUARES + 1 - iy1) + ymargin, false); } else { Picture_setSelection (me, 0.5 * (ix1 - 1), 0.5 * ix2, 0.5 * (SQUARES - iy2), 0.5 * (SQUARES + 1 - iy1), false); } oldix = ix; oldiy = iy; } } while (Graphics_mouseStillDown (my selectionGraphics.get())); // } #if cocoa Graphics_updateWs (my selectionGraphics.get()); // to change the dark red back into black #endif if (my selectionChangedCallback) { //Melder_casual (U"selectionChangedCallback from gui_drawingarea_cb_click"); my selectionChangedCallback (me, my selectionChangedClosure, my selx1, my selx2, my sely1, my sely2); } }
void Picture_setSelection (Picture me, double x1NDC, double x2NDC, double y1NDC, double y2NDC, bool notify) { if (my drawingArea) { Melder_assert (my drawingArea -> d_widget); drawSelection (me, 0); // unselect } my selx1 = x1NDC; my selx2 = x2NDC; my sely1 = y1NDC; my sely2 = y2NDC; if (my drawingArea) { drawSelection (me, 1); // select } if (notify && my selectionChangedCallback) { //Melder_casual (U"selectionChangedCallback from Picture_setSelection"); my selectionChangedCallback (me, my selectionChangedClosure, my selx1, my selx2, my sely1, my sely2); } }