⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ficoneditor.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
📖 第 1 页 / 共 2 页
字号:
      CASE 2        Draw.LineStyle = LINE.Solid        Draw.ForeColor = 1        Draw.FillStyle = Fill.Solid        Draw.FillColor = 2    END SELECT    Draw.Ellipse(0, 0, W, H)    Draw.End    hImage = hTemp.Image    C2 = .OtherColor(C)    FOR XX = 0 TO W - 1      FOR YY = 0 TO H - 1        SELECT CASE hImage[XX, YY]          CASE 1            SetPixel(X + XX, Y + YY, C)          CASE 2            SetPixel(X + XX, Y + YY, C2)        END SELECT      NEXT    NEXT    Modify    RefreshImage(X, Y, W, H)  END WITHENDPRIVATE SUB DrawGhost(OPTIONAL bNoBegin AS Boolean)  DIM iS2 AS Integer  DIM iSH AS Integer  DIM iWH AS Integer  WITH FIconTool    IF .GetTool() = "select" AND NOT $bSelect THEN RETURN    iS2 = $iScale \ 2    iSH = $iScale    iWH = iSH * 2 + 1    IF NOT bNoBegin THEN Draw.Begin(dwgIcon)    SELECT CASE .GetTool()      CASE "line"        Draw.Invert = TRUE        Draw.LineStyle = Line.Solid        Draw.LineWidth = 3        Draw.FillStyle = Fill.None        Draw.ForeColor = Color.White        Draw.Line($X * $iScale + iS2, $Y * $iScale + iS2, $X2 * $iScale + iS2, $Y2 * $iScale + iS2)        Draw.Rect($X * $iScale, $Y * $iScale - 1, $iScale1, $iScale1)        Draw.Rect($X2 * $iScale, $Y2 * $iScale - 1, $iScale1, $iScale1)      CASE "select"        Draw.Invert = TRUE        Draw.LineStyle = Line.Solid        Draw.LineWidth = 3        Draw.FillStyle = Fill.None        Draw.ForeColor = Color.White        Draw.Rect(Min($X, $X2) * $iScale, Min($Y, $Y2) * $iScale, (Abs($X - $X2) + 1) * $iScale + 1, (Abs($Y - $Y2) + 1) * $iScale + 1)      CASE "rect"        Draw.Invert = TRUE        Draw.LineStyle = Line.Solid        Draw.LineWidth = 3        Draw.FillStyle = Fill.None        Draw.ForeColor = Color.White        Draw.Rect(Min($X, $X2) * $iScale, Min($Y, $Y2) * $iScale, (Abs($X - $X2) + 1) * $iScale + 1, (Abs($Y - $Y2) + 1) * $iScale + 1)        IF FIconTool.GetMode("rect") = 0 THEN          IF Abs($X - $X2) > 1 AND Abs($Y - $Y2) > 1 THEN            Draw.Rect((Min($X, $X2) + 1) * $iScale, (Min($Y, $Y2) + 1) * $iScale, (Abs($X - $X2) - 1) * $iScale + 1, (Abs($Y - $Y2) - 1) * $iScale + 1)          ENDIF        ENDIF      CASE "circle"        Draw.Invert = TRUE        Draw.LineStyle = LINE.Solid        Draw.LineWidth = 3        Draw.FillStyle = Fill.None        Draw.ForeColor = Color.White        Draw.Ellipse(Min($X, $X2) * $iScale, Min($Y, $Y2) * $iScale, (Abs($X - $X2) + 1) * $iScale + 1, (Abs($Y - $Y2) + 1) * $iScale + 1)        IF FIconTool.GetMode("circle") = 0 THEN          IF Abs($X - $X2) > 1 AND Abs($Y - $Y2) > 1 THEN            Draw.Ellipse((Min($X, $X2) + 1) * $iScale, (Min($Y, $Y2) + 1) * $iScale, (Abs($X - $X2) - 1) * $iScale + 1, (Abs($Y - $Y2) - 1) * $iScale + 1)          ENDIF        ENDIF    END SELECT    IF NOT bNoBegin THEN      Draw.End      $bGhost = NOT $bGhost    ENDIF  END WITHENDPRIVATE SUB SetUndo()  DIM X AS Integer  DIM Y AS Integer  $hUndo[$iUndo] = $hImage.Copy()  $iUndo = ($iUndo + 1) MOD MAX_UNDOENDPUBLIC SUB Undo()  INC Application.Busy  DEC $iUndo  IF $iUndo < 0 THEN $iUndo = MAX_UNDO - 1  IF $hUndo[$iUndo] THEN    $hImage = $hUndo[$iUndo]    $hUndo[$iUndo] = NULL    'PRINT svwICon.ClientX; svwIcon.ClientY; svwIcon.ClientW, svwIcon.ClientH    'PRINT svwICon.ScrollX; svwIcon.ScrollY    'dwgIcon.Refresh(svwIcon.ScrollX, svwIcon.ScrollY, svwIcon.ClientW, svwIcon.ClientH)    'svwIcon.Refresh    RefreshZoom    IF dwgPaste.Visible THEN dwgPaste.Refresh    Modify  ENDIF  DEC Application.BusyEND' PRIVATE SUB RefreshSelect()''   DIM X AS Integer'   DIM Y AS Integer'   DIM X2 AS Integer'   DIM Y2 AS Integer'   DIM W AS Integer'   DIM H AS Integer''   IF $bSelect THEN''     panSelectN.Visible = FALSE'     panSelectS.Visible = FALSE'     panSelectW.Visible = FALSE'     panSelectE.Visible = FALSE''     X = $XS * $iScale'     Y = $YS * $iScale'     X2 = ($XS + $WS) * $iScale'     Y2 = ($YS + $HS) * $iScale'     W = $WS * $iScale'     H = $HS * $iScale''     panSelectN.Move(X - WIDTH_SEL, Y - WIDTH_SEL, W + WIDTH_SEL * 2, WIDTH_SEL)'     panSelectS.Move(X - WIDTH_SEL, Y2, W + WIDTH_SEL * 2, WIDTH_SEL)''     panSelectW.Move(X - WIDTH_SEL, Y, WIDTH_SEL, H)'     panSelectE.Move(X2, Y, WIDTH_SEL, H)''   ENDIF''   panSelectN.Visible = $bSelect'   panSelectS.Visible = $bSelect'   panSelectW.Visible = $bSelect'   panSelectE.Visible = $bSelect'' ENDPUBLIC FUNCTION HasSelection() AS Boolean  RETURN dwgPaste.VisibleENDPUBLIC SUB HideSelection()  IF NOT dwgPaste.Visible THEN RETURN  IF $bPrivate THEN    DoPaste    $bPrivate = FALSE  ENDIF  $bSelect = FALSE  $XS = 0  $YS = 0  dwgPaste.Visible = FALSEENDPRIVATE SUB ShowSelection()  $bSelect = TRUE  CopySelection  ShowPaste  WAIT  IF $bPrivate THEN DeleteSelectionENDPRIVATE SUB FloodFill(X AS Integer, Y AS Integer, C AS Integer)  DIM aStack AS NEW Integer[]  DIM C2 AS Integer  DIM CS AS Integer  DIM X1 AS Integer  DIM Y1 AS Integer  DIM X2 AS Integer  DIM Y2 AS Integer  WITH FIconTool    IF .GetMode("fill") = 1 THEN      C2 = .OtherColor(C)    ELSE      C2 = C    ENDIF  END WITH  CS = $hImage[X, Y]  IF CS = C OR CS = C2 THEN RETURN  INC Application.Busy  X1 = X  Y1 = Y  X2 = X  Y2 = Y  aStack.Push(X)  aStack.Push(Y)  WHILE aStack.Count    Y = aStack.Pop()    X = aStack.Pop()    X1 = Min(X1, X)    Y1 = Min(Y1, Y)    X2 = Max(X2, X)    Y2 = Max(Y2, Y)    IF (X + Y) AND 1 THEN      SetPixel(X, Y, C)    ELSE      SetPixel(X, Y, C2)    ENDIF    IF X > 0 THEN      IF $hImage[X - 1, Y] = CS THEN        aStack.Push(X - 1)        aStack.Push(Y)      ENDIF    ENDIF    IF Y > 0 THEN      IF $hImage[X, Y - 1] = CS THEN        aStack.Push(X)        aStack.Push(Y - 1)      ENDIF    ENDIF    IF X < ($hImage.Width - 1) THEN      IF $hImage[X + 1, Y] = CS THEN        aStack.Push(X + 1)        aStack.Push(Y)      ENDIF    ENDIF    IF Y < ($hImage.Height - 1) THEN      IF $hImage[X, Y + 1] = CS THEN        aStack.Push(X)        aStack.Push(Y + 1)      ENDIF    ENDIF  WEND  Modify  RefreshImage(X1, Y1, X2 - X1 + 1, Y2 - Y1 + 1)  DEC Application.BusyENDPRIVATE SUB CopySelection()  IF dwgPaste.Visible THEN RETURN  IF $bSelect THEN    Clipboard.Copy($hImage.Copy($XS, $YS, $WS, $HS))  ELSE    Clipboard.Copy($hImage)  ENDIFENDPRIVATE SUB DeleteSelection()  SetUndo  DrawRect($XS, $YS, $WS, $HS, -1, 1)ENDPUBLIC SUB RefreshPaste()  dwgPaste.Move($XS * $iScale, $YS * $iScale, $hPaste.Width * $iScale, $hPaste.Height * $iScale)  IF NOT dwgPaste.Visible THEN    dwgPaste.Show  ELSE    dwgPaste.Refresh  ENDIF  ' IF dwgPaste.Visible THEN dwgPaste.RefreshENDPUBLIC SUB ShowPaste(OPTIONAL bReset AS Boolean)  IF Clipboard.Type <> Clipboard.Image THEN RETURN  $hPaste = Clipboard.Paste()  $WS = $hPaste.Width  $HS = $hPaste.Height  IF bReset THEN    $XS = ($hImage.Width - $WS) \ 2    $YS = ($hImage.Height - $HS) \ 2    svwIcon.Scroll($XS * $iScale, $YS * $iScale)  ENDIF  RefreshPaste  $bSelect = TRUEENDPRIVATE SUB HidePaste()  dwgPaste.HideENDPRIVATE SUB PasteSelection()  DIM X AS Integer  DIM Y AS Integer  DIM C AS Integer  DIM bTrans AS Boolean  bTrans = FIconTool.GetMode("select") = 0  IF bTrans THEN    FOR X = 0 TO $hPaste.Width - 1      FOR Y = 0 TO $hPaste.Height - 1        C = $hPaste[X, Y]        IF C < 0 THEN CONTINUE        $hImage[X + $XS, Y + $YS] = C      NEXT    NEXT  ELSE    FOR X = 0 TO $hPaste.Width - 1      FOR Y = 0 TO $hPaste.Height - 1        $hImage[X + $XS, Y + $YS] = $hPaste[X, Y]      NEXT    NEXT  ENDIF  ModifyENDPUBLIC SUB DoPaste()  DIM bTrans AS Boolean  IF NOT dwgPaste.Visible THEN    ShowPaste(TRUE)    $bPrivate = FALSE    RETURN  ENDIF  INC Application.Busy  SetUndo  PasteSelection  DEC Application.BusyENDPUBLIC SUB dwgPaste_MouseDown()  $X = Mouse.ScreenX - dwgPaste.ScreenX  $Y = Mouse.ScreenY - dwgPaste.ScreenYENDPUBLIC SUB dwgPaste_MouseMove()  DIM XP AS Integer  DIM YP AS Integer  XP = (Mouse.ScreenX - $X - dwgIcon.ScreenX) \ $iScale  YP = (Mouse.ScreenY - $Y - dwgIcon.ScreenY) \ $iScale  IF XP = $XS AND YP = $YS THEN RETURN  $XS = XP  $YS = YP  dwgPaste.Refresh  dwgPaste.Move($XS * $iScale, $YS * $iScale)  'dwgPaste.Show  UpdateScroll(Mouse.X + dwgPaste.X, Mouse.Y + dwgPaste.Y)ENDPRIVATE SUB UpdateScroll(X AS Integer, Y AS Integer)  DIM NX AS Integer  DIM NY AS Integer  IF X >= (svwIcon.ScrollX + svwIcon.ClientW) THEN    NX = X - svwIcon.ClientW + 1  ELSE IF X < svwIcon.ScrollX THEN    NX = Max(0, X)  ELSE    NX = svwIcon.ScrollX  ENDIF  IF Y >= (svwIcon.ScrollY + svwIcon.ClientH) THEN    NY = Y - svwIcon.ClientH + 1  ELSE IF Y < svwIcon.ScrollY THEN    NY = Max(0, Y)  ELSE    NY = svwIcon.ScrollY  ENDIF  svwIcon.Scroll(NX, NY)ENDPUBLIC SUB dwgPaste_MouseUp()  IF Mouse.Right THEN    DoPaste  ENDIFENDPUBLIC SUB DoFlip()  DIM iAngle AS Float  DIM iMode AS Integer  iMode = FIconTool.GetMode("flip")  IF dwgPaste.Visible THEN    SELECT CASE iMode      CASE 0        $hPaste = $hPaste.Flip()      CASE 1        $hPaste = $hPaste.Mirror()      CASE 2        $hPaste = $hPaste.Rotate(90)      CASE 3        $hPaste = $hPaste.Rotate(-90)    END SELECT    RefreshPaste  ELSE    SetUndo    SELECT CASE iMode      CASE 0        $hImage = $hImage.Flip()      CASE 1        $hImage = $hImage.Mirror()      CASE 2        $hImage = $hImage.Rotate(90)        DrawTitle      CASE 3        $hImage = $hImage.Rotate(-90)        DrawTitle    END SELECT    RefreshZoom    Modify  ENDIFENDPUBLIC SUB SelectAll()  HideSelection  $XS = 0  $YS = 0  $WS = $hImage.Width  $HS = $hImage.Height  ShowSelectionENDPUBLIC SUB Form_KeyPress()  IF Key.Control THEN    IF Key.Code = Key["Z"] THEN      Undo    ELSE IF Key.Code = Key["A"] THEN      IF FIconTool.GetTool() = "select" THEN        SelectAll      ENDIF    ELSE IF Key.Code = Key["S"] THEN      Save    ENDIF  ELSE    IF Key.Code = Key["Esc"] THEN      HideSelection    ENDIF  ENDIFENDPUBLIC SUB Clear()  IF Message.Delete(("Do you want to clear the image ?"), ("Clear"), ("Cancel")) <> 1 THEN RETURN  SetUndo  $hImage.Fill(-1)  RefreshAllImage()  ModifyENDPUBLIC SUB dwgIcon_DblClick()  DrawGhostENDPUBLIC FUNCTION Form_Close() AS Boolean  IF $bModify THEN    IF NOT Project.AboutToQuit THEN      SELECT CASE Message.Question(("This image has been modified.\nDo you want to save it ?"), ("Save"), ("Close"), ("Cancel"))        CASE 1          Save        CASE 3          RETURN TRUE      END SELECT    ENDIF  ENDIF  Project.Files[Path] = NULLENDPUBLIC SUB Form_Activate()  Project.Activate(ME)  FIconTool.Activate(ME)ENDPUBLIC SUB ZoomIn()  DIM iPos AS Integer  iPos = $aZoom.Find($iScale)  IF iPos < 0 OR iPos >= ($aZoom.Count - 1) THEN RETURN  $iScale = $aZoom[iPos + 1]  RefreshZoomENDPUBLIC SUB ZoomOut()  DIM iPos AS Integer  iPos = $aZoom.Find($iScale)  IF iPos <= 0 THEN RETURN  $iScale = $aZoom[iPos - 1]  RefreshZoomENDPUBLIC SUB Form_Hide()  Project.Deactivate(ME)ENDPUBLIC SUB Form_Enter()  dwgIcon.Mouse = FIconTool.GetMouse()ENDPUBLIC SUB SwapColor(bInv AS Boolean)  DIM C1 AS Integer  DIM C2 AS Integer  WITH FIconTool    C1 = .GetColor(1)    C2 = .GetColor(2)    IF bInv THEN SWAP C1, C2  END WITH  IF dwgPaste.Visible THEN    $hPaste.Replace(C1, C2)    RefreshPaste  ELSE    SetUndo    $hImage.Replace(C1, C2)    RefreshZoom    Modify  ENDIFEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -