void BWCopy(Widget w, Position at_x, Position at_y, int value) { BitmapWidget BW = (BitmapWidget) w; XImage *storage; char *storage_data; Dimension width, height; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) { width = BW->bitmap.mark.to_x - BW->bitmap.mark.from_x + 1; height = BW->bitmap.mark.to_y - BW->bitmap.mark.from_y + 1; storage_data = CreateCleanData(Length(width, height)); storage = CreateBitmapImage(BW, storage_data, width, height); CopyImageData(BW->bitmap.image, storage, BW->bitmap.mark.from_x, BW->bitmap.mark.from_y, BW->bitmap.mark.to_x, BW->bitmap.mark.to_y, 0, 0); DrawImageData(BW, storage, at_x, at_y, value); DestroyBitmapImage(&storage); } }
void BWStore(Widget w) { BitmapWidget BW = (BitmapWidget) w; Dimension width, height; char *storage_data; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) { DestroyBitmapImage(&BW->bitmap.storage); width = BW->bitmap.mark.to_x - BW->bitmap.mark.from_x + 1; height = BW->bitmap.mark.to_y - BW->bitmap.mark.from_y + 1; storage_data = CreateCleanData(Length(width, height)); BW->bitmap.storage = CreateBitmapImage(BW, storage_data, width, height); CopyImageData(BW->bitmap.image, BW->bitmap.storage, BW->bitmap.mark.from_x, BW->bitmap.mark.from_y, BW->bitmap.mark.to_x, BW->bitmap.mark.to_y, 0, 0); } }
void BWSetHotSpot(Widget w, Position x, Position y) { if (QuerySet(x, y)) BWDrawHotSpot(w, x, y, Set); else BWClearHotSpot(w); }
void BWRedrawHotSpot(Widget w) { BitmapWidget BW = (BitmapWidget) w; if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y)) DrawHotSpot(BW, BW->bitmap.hot.x, BW->bitmap.hot.y); }
void BWClearHotSpot(Widget w) { BitmapWidget BW = (BitmapWidget) w; if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y)) { DrawHotSpot(BW, BW->bitmap.hot.x, BW->bitmap.hot.y); BW->bitmap.hot.x = BW->bitmap.hot.y = NotSet; } }
void BWDragMarked(Widget w, Position at_x, Position at_y) { BitmapWidget BW = (BitmapWidget) w; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) BWDrawRectangle(w, at_x, at_y, at_x + BW->bitmap.mark.to_x - BW->bitmap.mark.from_x, at_y + BW->bitmap.mark.to_y - BW->bitmap.mark.from_y, Highlight); }
void BWClearMarked(Widget w) { BitmapWidget BW = (BitmapWidget) w; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) BWDrawFilledRectangle(w, BW->bitmap.mark.from_x, BW->bitmap.mark.from_y, BW->bitmap.mark.to_x, BW->bitmap.mark.to_y, Clear); }
void BWRedrawMark(Widget w) { BitmapWidget BW = (BitmapWidget) w; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) XFillRectangle(XtDisplay(BW), XtWindow(BW), BW->bitmap.highlighting_gc, InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.from_y), InWindowX(BW, BW->bitmap.mark.to_x + 1) - InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.to_y + 1) - InWindowY(BW, BW->bitmap.mark.from_y)); }
template<class T> void ASql::ConnectionPar<T>::queue(T* const& statement, QueryPar& query, int instance) { if(instance == -1) { instance=0; for(unsigned int i=1; i<threads(); ++i) {{ boost::lock_guard<boost::mutex> queriesLock(queries[i]); if(queries[i].size() < queries[instance].size()) instance=i; }} } boost::lock_guard<boost::mutex> queriesLock(queries[instance]); queries[instance].push(QuerySet(query, statement, true)); wakeUp[instance].notify_one(); }
void BWUp(Widget w) { BitmapWidget BW = (BitmapWidget) w; register Position x, y; bit first, up, down=0; Position from_x, from_y, to_x, to_y; if (BWQueryMarked(w)) { from_x = BW->bitmap.mark.from_x; from_y = BW->bitmap.mark.from_y; to_x = BW->bitmap.mark.to_x; to_y = BW->bitmap.mark.to_y; } else { from_x = 0; from_y = 0; to_x = BW->bitmap.width - 1; to_y = BW->bitmap.height - 1; } if ((to_y - from_y) == 0) return; for(x = from_x; x <= to_x; x++) { first = up = GetBit(BW->bitmap.image, x, to_y); for(y = to_y - 1; y >= from_y; y--) { down = GetBit(BW->bitmap.image, x, y); if (up != down) InvertPoint(BW, x, y); up =down; } if(first != down) InvertPoint(BW, x, to_y); } if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y) && !BWQueryMarked(w)) BWSetHotSpot(w, BW->bitmap.hot.x, (BW->bitmap.hot.y - 1 + BW->bitmap.image->height) % BW->bitmap.image->height); }
void BWLeft(Widget w) { BitmapWidget BW = (BitmapWidget) w; register Position x, y; bit first, left, right=0; Position from_x, from_y, to_x, to_y; if (BWQueryMarked(w)) { from_x = BW->bitmap.mark.from_x; from_y = BW->bitmap.mark.from_y; to_x = BW->bitmap.mark.to_x; to_y = BW->bitmap.mark.to_y; } else { from_x = 0; from_y = 0; to_x = BW->bitmap.width - 1; to_y = BW->bitmap.height - 1; } if ((to_x - from_x) == 0) return; for(y = from_y; y <= to_y; y++) { first = left = GetBit(BW->bitmap.image, to_x, y); for(x = to_x - 1; x >= from_x; x--) { right = GetBit(BW->bitmap.image, x, y); if (left != right) InvertPoint(BW, x, y); left = right; } if(first != right) InvertPoint(BW, to_x, y); } if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y) && !BWQueryMarked(w)) BWSetHotSpot(w, (BW->bitmap.hot.x - 1 + BW->bitmap.image->width) % BW->bitmap.image->width, BW->bitmap.hot.y); }
void BWFold(Widget w) { BitmapWidget BW = (BitmapWidget) w; Position x, y, new_x, new_y; Dimension horiz, vert; char *storage_data; XImage *storage; storage_data = CreateCleanData(Length(BW->bitmap.image->width, BW->bitmap.image->height)); storage = CreateBitmapImage(BW, storage_data, (Dimension) BW->bitmap.image->width, (Dimension) BW->bitmap.image->height); TransferImageData(BW->bitmap.image, storage); BW->bitmap.fold ^= True; horiz = (BW->bitmap.image->width + BW->bitmap.fold) / 2; vert = (BW->bitmap.image->height + BW->bitmap.fold) / 2; for (x = 0; x < BW->bitmap.image->width; x++) for (y = 0; y < BW->bitmap.image->height; y++) { new_x = (int)(x + horiz) % (int)BW->bitmap.image->width; new_y = (int)(y + vert) % (int)BW->bitmap.image->height; if(GetBit(BW->bitmap.image, new_x, new_y) != GetBit(storage, x, y)) InvertPoint(BW, new_x, new_y); } DestroyBitmapImage(&storage); if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y)) BWSetHotSpot(w, (Position) ((int)(BW->bitmap.hot.x+horiz) %(int)BW->bitmap.image->width), (Position) ((int)(BW->bitmap.hot.y+vert) %(int)BW->bitmap.image->height) ); }
void BWUnmark(Widget w) { BitmapWidget BW = (BitmapWidget) w; BW->bitmap.buffer_mark = BW->bitmap.mark; if (QuerySet(BW->bitmap.mark.from_x, BW->bitmap.mark.from_y)) { XFillRectangle(XtDisplay(BW), XtWindow(BW), BW->bitmap.highlighting_gc, InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.from_y), InWindowX(BW, BW->bitmap.mark.to_x + 1) - InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.to_y + 1) - InWindowY(BW, BW->bitmap.mark.from_y)); BW->bitmap.mark.from_x = BW->bitmap.mark.from_y = NotSet; BW->bitmap.mark.to_x = BW->bitmap.mark.to_y = NotSet; } }
void BWMark(Widget w, Position from_x, Position from_y, Position to_x, Position to_y) { BitmapWidget BW = (BitmapWidget) w; BWUnmark(w); if (QuerySet(from_x, from_y)) { if ((from_x == to_x) && (from_y == to_y)) { /* BW->bitmap.mark.from_x = 0; BW->bitmap.mark.from_y = 0; BW->bitmap.mark.to_x = BW->bitmap.image->width - 1; BW->bitmap.mark.to_y = BW->bitmap.image->height - 1; */ return; } else { QuerySwap(from_x, to_x); QuerySwap(from_y, to_y); from_x = max(0, from_x); from_y = max(0, from_y); to_x = min(BW->bitmap.image->width - 1, to_x); to_y = min(BW->bitmap.image->height - 1, to_y); BW->bitmap.mark.from_x = from_x; BW->bitmap.mark.from_y = from_y; BW->bitmap.mark.to_x = to_x; BW->bitmap.mark.to_y = to_y; } XFillRectangle(XtDisplay(BW), XtWindow(BW), BW->bitmap.highlighting_gc, InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.from_y), InWindowX(BW, BW->bitmap.mark.to_x + 1) - InWindowX(BW, BW->bitmap.mark.from_x), InWindowY(BW, BW->bitmap.mark.to_y +1) - InWindowY(BW, BW->bitmap.mark.from_y)); } }
template<class T> void ASql::ConnectionPar<T>::queue(Transaction<T>& transaction, int instance) { if(instance == -1) { instance=0; for(unsigned int i=1; i<threads(); ++i) {{ boost::lock_guard<boost::mutex> queriesLock(queries[i]); if(queries[i].size() < queries[instance].size()) instance=i; }} } boost::lock_guard<boost::mutex> queriesLock(queries[instance]); for(typename Transaction<T>::iterator it=transaction.begin(); it!=transaction.end(); ++it) queries[instance].push(QuerySet(it->m_query, it->m_statement, false)); queries[instance].back().m_commit = true; wakeUp[instance].notify_one(); }
void BWFlipVert(Widget w) { BitmapWidget BW = (BitmapWidget) w; register Position x, y; Position from_x, from_y, to_x, to_y; float half; if (BWQueryMarked(w)) { from_x = BW->bitmap.mark.from_x; from_y = BW->bitmap.mark.from_y; to_x = BW->bitmap.mark.to_x; to_y = BW->bitmap.mark.to_y; } else { from_x = 0; from_y = 0; to_x = BW->bitmap.width - 1; to_y = BW->bitmap.height - 1; } half = (float) (to_x - from_x) / 2.0 + 0.5; if (half == 0) return; for (y = from_y; y <= to_y; y++) for (x = 0; x < half; x++) if (GetBit(BW->bitmap.image, from_x + x, y) != GetBit(BW->bitmap.image, to_x - x, y)) { InvertPoint(BW, from_x + x, y); InvertPoint(BW, to_x - x, y); } if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y) && !BWQueryMarked(w)) BWSetHotSpot(w, BW->bitmap.image->width - 1 - BW->bitmap.hot.x, BW->bitmap.hot.y); }
void BWDrawHotSpot(Widget w, Position x, Position y, int value) { BitmapWidget BW = (BitmapWidget) w; if (QueryInBitmap(BW, x, y)) { if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y) && ((BW->bitmap.hot.x == x) && (BW->bitmap.hot.y == y))) { if ((value == Clear) || (value == Invert)) { BWClearHotSpot(w); } } else if ((value == Set) || (value == Invert)) { BWClearHotSpot(w); DrawHotSpot(BW, x, y); BW->bitmap.hot.x = x; BW->bitmap.hot.y = y; } if (value == Highlight) HighlightHotSpot(BW, x, y); } }
void BWRotateRight(Widget w) { BitmapWidget BW = (BitmapWidget) w; Position x, y, delta, shift, tmp; Position half_width, half_height; XPoint hot; bit quad1, quad2, quad3, quad4; Position from_x, from_y, to_x, to_y; if (BWQueryMarked(w)) { from_x = BW->bitmap.mark.from_x; from_y = BW->bitmap.mark.from_y; to_x = BW->bitmap.mark.to_x; to_y = BW->bitmap.mark.to_y; } else { from_x = 0; from_y = 0; to_x = BW->bitmap.width - 1; to_y = BW->bitmap.height - 1; } half_width = floor((to_x - from_x) / 2.0 + 0.5); half_height = floor((to_y - from_y ) / 2.0 + 0.5); shift = min((Position)(to_x - from_x), (Position)(to_y - from_y )) % 2; delta = min((Position) half_width, (Position) half_height) - shift; for (x = 0; x <= delta; x++) { for (y = 1 - shift; y <= delta; y++) { quad1 = GetBit(BW->bitmap.image, from_x + (Position)half_width + x, from_y + (Position)half_height + y); quad2 = GetBit(BW->bitmap.image, from_x + (Position)half_width + y, from_y + (Position)half_height - shift - x); quad3 = GetBit(BW->bitmap.image, from_x + (Position)half_width - shift - x, from_y + (Position)half_height - shift - y); quad4 = GetBit(BW->bitmap.image, from_x + (Position)half_width - shift - y, from_y + (Position)half_height + x); if (quad1 != quad2) InvertPoint(BW, from_x + (Position)half_width + x, from_y + (Position)half_height + y); if (quad2 != quad3) InvertPoint(BW, from_x + (Position)half_width + y, from_y + (Position)half_height - shift - x); if (quad3 != quad4) InvertPoint(BW, from_x + (Position)half_width - shift - x, from_y + (Position)half_height - shift - y); if (quad4 != quad1) InvertPoint(BW, from_x + (Position)half_width - shift - y, from_y + (Position)half_height + x); } } if (QuerySet(BW->bitmap.hot.x, BW->bitmap.hot.y) && !BWQueryMarked(w)) { hot.x = BW->bitmap.hot.x - half_width; hot.y = BW->bitmap.hot.y - half_height; if (hot.x >= 0) hot.x += shift; if (hot.y >= 0) hot.y += shift; tmp = hot.x; hot.x = - hot.y; hot.y = tmp; if (hot.x > 0) hot.x -= shift; if (hot.y > 0) hot.y -= shift; hot.x += half_width; hot.y += half_height; if (QueryInBitmap(BW, hot.x, hot.y)) BWSetHotSpot(w, hot.x, hot.y); } }