Example #1
0
 public TSpaceHint Select(TReflectionWindowStruc RW, double VisibleFactor, float pX, float pY) {
   double RW_SqrScale = Math.pow(RW.Scale(), 2);
   TSpaceHint Item = Items;
   while (Item != null) {
     if (RW.Container_IsNodeVisible(Item.BindingPointX, Item.BindingPointY)) {
       if ((Item.BaseSquare * RW_SqrScale) >= VisibleFactor) {
         TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
         if (((RW.Xmn <= P.X) && (P.X <= RW.Xmx)) && ((RW.Ymn <= P.Y) && (P.Y <= RW.Ymx))) {
           float W = 0;
           float H = 0;
           // .
           synchronized (ItemsImageDataFiles) {
             TSpaceHintImageDataFile ImageDataFile =
                 ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID);
             if ((ImageDataFile != null) && (ImageDataFile.Data != null)) {
               RectF ImageRect = ImageDataFile.Data_GetDestinationRect(ItemImageMinSize);
               W = ImageRect.width() + 1.0F;
               H = ImageRect.height();
             }
           }
           // .
           Rect TR = new Rect();
           Item.paint.getTextBounds(Item.InfoString, 0, Item.InfoString.length(), TR);
           W += (TR.right - TR.left);
           if (Item.InfoStringFontSize > H) H = (TR.bottom - TR.top);
           // .
           if ((((P.X - ItemSpacing) <= pX) && (pX <= (P.X + W + ItemSpacing)))
               && ((((P.Y - H - ItemSpacing) <= pY) && (pY <= (P.Y + ItemSpacing))))) {
             Item.flSelected = true;
             return Item.Clone(); // . ->
           }
         }
       }
     }
     Item.flSelected = false;
     // .
     Item = Item.Next;
   }
   return null;
 }
Example #2
0
 public synchronized void DrawOnCanvas(
     TReflectionWindowStruc RW, double VisibleFactor, Canvas canvas) {
   double RW_SqrScale = Math.pow(RW.Scale(), 2);
   // . calculate max item number depends on image square
   int SquareOrderHintList_Size = 5 * 4;
   // . prepare square ordered item list
   TSpaceHintItem SquareOrderHintList = null;
   TSpaceHint Item = Items;
   while (Item != null) {
     if (RW.Container_IsNodeVisible(Item.BindingPointX, Item.BindingPointY)) {
       if ((Item.BaseSquare * RW_SqrScale) >= VisibleFactor) {
         TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
         if (((RW.Xmn <= P.X) && (P.X <= RW.Xmx)) && ((RW.Ymn <= P.Y) && (P.Y <= RW.Ymx))) {
           int Size = SquareOrderHintList_Size;
           TSpaceHintItem LastHintItem = null;
           TSpaceHintItem HintItem = SquareOrderHintList;
           while (HintItem != null) {
             if (HintItem.Item.BaseSquare < Item.BaseSquare) break; // . >
             // .
             Size--;
             if (Size <= 0) break; // . >
             // .
             LastHintItem = HintItem;
             HintItem = HintItem.Next;
           }
           if (Size > 0)
             if (LastHintItem != null)
               LastHintItem.Next = new TSpaceHintItem(Item, LastHintItem.Next);
             else SquareOrderHintList = new TSpaceHintItem(Item, SquareOrderHintList);
         }
       }
     }
     // .
     Item = Item.Next;
   }
   // . re-order item list and prepare a draw list
   TSpaceHint[] DrawItemList = new TSpaceHint[SquareOrderHintList_Size];
   TSpaceHintItem HintItem = SquareOrderHintList;
   for (int I = SquareOrderHintList_Size - 1; I >= 0; I--)
     if (HintItem != null) {
       DrawItemList[I] = HintItem.Item;
       HintItem = HintItem.Next;
     } else break; // . >
   // . draw list
   for (int I = 0; I < DrawItemList.length; I++) {
     Item = DrawItemList[I];
     if (Item != null) {
       TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
       // . draw image
       float Left = (float) P.X;
       boolean flImage = false;
       synchronized (ItemsImageDataFiles) {
         TSpaceHintImageDataFile ImageDataFile =
             ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID);
         if ((ImageDataFile != null) && (ImageDataFile.Data != null)) {
           RectF ImageRect = ImageDataFile.Data_GetDestinationRect(ItemImageMinSize);
           ImageRect.offset(Left, (float) (P.Y - ImageRect.height()));
           // .
           canvas.drawBitmap(
               ImageDataFile.Data,
               ImageDataFile.Data_GetOriginalRect(),
               ImageRect,
               DrawPointItemImagePaint);
           // .
           Left += ImageRect.width() + 1.0F;
           flImage = true;
         }
       }
       // . draw selection if it exists
       if (Item.flSelected) {
         Rect TR = new Rect();
         Item.paint.getTextBounds(Item.InfoString, 0, Item.InfoString.length(), TR);
         float X0, Y0, X1, Y1;
         X0 = Left - ItemSpacing;
         Y0 = (float) P.Y - (TR.bottom - TR.top) - ItemSpacing;
         X1 = Left + (TR.right - TR.left) + ItemSpacing;
         Y1 = (float) P.Y + ItemSpacing;
         // .
         SelectedPaint.setColor(Color.argb(127, 255, 0, 0));
         canvas.drawRect(X0, Y0, X1, Y1, SelectedPaint);
         float[] Points = {X0, Y0, X1, Y0, X1, Y0, X1, Y1, X1, Y1, X0, Y1, X0, Y1, X0, Y0};
         SelectedPaint.setColor(Color.argb(255, 255, 0, 0));
         canvas.drawLines(Points, SelectedPaint);
       }
       // . draw image
       if (!flImage) canvas.drawCircle((float) P.X, (float) P.Y, 3.0F, DrawPointPaint);
       // . draw text
       Paint ShadowPaint = new Paint(Item.paint);
       ShadowPaint.setColor(Color.BLACK);
       canvas.drawText(Item.InfoString, Left + 1, (float) P.Y + 1, ShadowPaint);
       canvas.drawText(Item.InfoString, Left, (float) P.Y, Item.paint);
     }
   }
 }